2017-07-31 68 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, ... ]