使用模块Word2Vec
的{{1}}实现,以便为我在纯文本文件中拥有的句子构建单词嵌入。尽管词汇表中定义了单词gensim
,但仍然出现错误happy
。试图将给定的答案应用于a similar question,但无效。因此,发表了我自己的问题。
代码如下:
KeyError: "word 'happy' not in vocabulary"
答案 0 :(得分:0)
当您从Word2Vec
收到这样的“词汇不正确”错误时,您可以相信它:'happy'
确实不在模型中。
即使您的视觉检查在文件中显示了'happy'
,它在模型中仍未显示的一些原因包括:
它至少没有发生min_count=5
次
data
的格式不适用于Word2Vec
,因此看不到您希望看到的单词。
看看您的代码如何准备data
,它看起来像文件中所有单词的庞大列表。 Word2Vec
而是期望一个序列,该序列具有与每个项目相同的单词列表。因此:不是单词列表,而是每个项目都是单词列表的列表。
如果您提供了...
[
'happy',
'birthday',
]
...而不是预期的...
[
['happy', 'birthday',],
]
...这些单个单词字符串将被视为一个字符列表,因此Word2Vec
会认为您想学习一堆单字符单词的单词向量。您可以通过查看词汇量是否较小(len(model.wv)
)或学习单词样本只是单字符单词('model.wv.index2entity [:10]`)来检查这是否影响了模型。 )。
如果您以正确的格式提供了至少min_count
次的单词,作为训练数据的一部分,它将在模型中显示为向量。
(另外:size=10000
是通常100-400范围之外的一种选择方式。我从未见过使用这样高维的词向量的项目,并且从理论上讲,如果您具有庞大的词汇和训练集。带有较小词汇/数据的过大矢量可能会产生无用的过拟合结果。)