Gensim:KeyError:"单词不在词汇表中#34;

时间:2017-07-31 15:59:08

标签: python nlp gensim word2vec topic-modeling

我使用Python的Gensim Library训练有素的Word2vec模型。我有一个标记化列表如下。词汇大小是34,但我只是给出了34个中的一些:

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'不是词汇"

你们可以告诉我我做错了什么以及检查模型的方法有哪些可以进一步用于训练PCA或t-sne以便可视化形成主题的类似单词?谢谢。

2 个答案:

答案 0 :(得分:21)

传递给gensim.models.Word2Vec的第一个参数是可迭代的句子。句子本身就是一个单词列表。来自文档:

  

sentences的迭代中初始化模型。每个句子都是一个   将用于训练的单词列表(unicode字符串)。

现在,它认为列表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, ... ]

答案 1 :(得分:1)

在文档中,您需要传递可迭代的句子,因此无论传递给函数什么,它将输入都视为可迭代的,因此在这里您仅传递单词,因此它将整个语料库中每个字符的word2vec向量都计算在内。

因此,为了避免该问题,请在列表内传递单词列表。

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