word2vec-KeyError:“单词X不在词汇表中”

时间:2019-11-01 22:45:31

标签: gensim word2vec word-embedding

使用模块Word2Vec的{​​{1}}实现,以便为我在纯文本文件中拥有的句子构建单词嵌入。尽管词汇表中定义了单词gensim,但仍然出现错误happy。试图将给定的答案应用于a similar question,但无效。因此,发表了我自己的问题。

代码如下:

KeyError: "word 'happy' not in vocabulary"

1 个答案:

答案 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范围之外的一种选择方式。我从未见过使用这样高维的词向量的项目,并且从理论上讲,如果您具有庞大的词汇和训练集。带有较小词汇/数据的过大矢量可能会产生无用的过拟合结果。)