Gensim:KeyError:“单词不在词汇表中”
gensim
nlp
python
word2vec
7
0

我有一个使用Python的Gensim库训练有素的Word2vec模型。我有一个标记化的列表,如下所示。 vocab的大小是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:“单词'buy'不在词汇表中”

你们能建议我我在做错什么吗?有什么方法可以检查该模型,该模型可以进一步用于训练PCA或t-sne,以可视化构成主题的相似单词?谢谢。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

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

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

现在,它认为列表b中的每个单词都是一个句子,因此它为每个单词中的每个字符 (而不是b中的每个单词)执行Word2Vec 。现在,您可以执行以下操作:

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, ... ]
收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号