Gensim: 关键错误: "词语不在词汇表中"

2024-04-26 23:50:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用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"

你们能告诉我我做错了什么吗?有什么方法可以检查这个模型,它可以进一步用于训练主成分分析或t-sne,以便将类似的单词可视化,形成一个主题?谢谢您。


Tags: 标记模型列表sizemodelbuyword2vec单词
2条回答

传递给gensim.models.Word2Vec的第一个参数是一个iterable语句。句子本身就是一个单词表。从文档中:

Initialize the model from an iterable of sentences. Each sentence is a list of words (unicode strings) that will be used for training.

现在,它认为列表中的每个单词都是一个句子,因此它对每个单词中的每个字符都执行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, ... ]

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

所以为了避免这个问题,在列表中传递单词列表。

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

相关问题 更多 >