2017-07-31 293 views
1

我有一個訓練有素的Word2vec模型,使用Python的Gensim庫。我有一個標記化列表如下。該翻譯大小是34,但我在這裏只給數出34:Gensim:KeyError:「單詞不在詞彙表中」

b = ['let', 
'know', 
'buy', 
'someth', 
'featur', 
'mashabl', 
'might', 
'earn', 
'affili', 
'commiss', 
'fifti', 
'year', 
'ago', 
'graduat', 
'21yearold', 
'dustin', 
'hoffman', 
'pull', 
'asid', 
'given', 
'one', 
'piec', 
'unsolicit', 
'advic', 
'percent', 
'buy'] 

型號

model = gensim.models.Word2Vec(b,min_count=1,size=32) 
print(model) 
### prints: Word2Vec(vocab=34, size=32, alpha=0.025) #### 

如果我嘗試在列表中做一個model['buy']的話得到相似度得分,我得到的

KeyError: "word 'buy' not in vocabulary"

你們可以建議我我做錯了什麼,以及有什麼方法來檢查模型,可以進一步使用訓練PCA或t-sne,以形象化形成話題的類似單詞?謝謝。

回答

7

傳遞給gensim.models.Word2Vec的第一個參數是可迭代的句子。句子本身就是一個單詞列表。從文檔:

Initialize the model from an iterable of sentences . Each sentence is a list of words (unicode strings) that will be used for training.

現在,它認爲,在列表中b每個字是一個句子,所以它是做Word2Vec在每個字每個字符,如您b不是每個字。現在你可以這樣做:

model = gensim.models.Word2Vec(b,min_count=1,size=32) 

print(model['a']) 
array([ 7.42487283e-03, -5.65282721e-03, 1.28707094e-02, ... ] 

得到它的工作的話,只需在另一個列表包裝b,使其正確地解釋:

model = gensim.models.Word2Vec([b],min_count=1,size=32) 

print(model['buy']) 
array([-0.01331611, 0.00496594, -0.00165093, -0.01444992, 0.01393849, ... ]