python - Gensim: KeyError: "word not in vocabulary"

标签 python nlp gensim word2vec topic-modeling

我有一个使用 Python 的 Gensim 库训练的 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' not in vocabulary"

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

最佳答案

传递给 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 中的每个单词都是一个句子,因此它正在为每个列表中的每个 character 执行 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, ... ]

关于python - Gensim: KeyError: "word not in vocabulary",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45420466/

相关文章:

python - 如何在 matplotlib 图中将 xtick 标签年缩写为 2 位数字

python - Django未使用导入语句: virtualenv issue

python - Pandas 如何按间隔按列拆分数据帧

python - 为什么 `gensim` 中的 tf-idf 模型在我转换语料库后丢弃了术语和计数?

python - gensim 文件未找到错误

python - 来自gensim的单词共现矩阵

python - 如何让setup.py安装多个顶级包?

nlp - 提取三元组主、谓、宾句

python - NLTK : combining stanford tagger and personal tagger

python - 在语义上对文档中的单词进行无监督聚类