我有一个使用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']来获得相似性分数,我会得到
keyror:“单词'buy'不在词汇表中”
你们能告诉我我做错了什么吗?还有什么方法可以检查模型,可以进一步用来训练PCA或T-SNE,以便将形成一个主题的相似词形象化?谢谢您。

最佳答案

传递给gensim.models.Word2Vec的第一个参数是一个不可重复的句子。句子本身就是一系列单词。从文档中:
从可初始化的sentences初始化模型。每个句子都是
将用于培训的单词(Unicode字符串)列表。
现在,它认为列表中的每个单词都是一个句子,因此它对每个单词中的每个字符执行b操作,而不是对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:“词汇不在词汇中”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45420466/

10-12 19:51