Gensim: KeyError: "word not in vocabulary"
Gensim: KeyError: "word not in vocabulary"
我有一个使用 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
中的每个单词都是一个句子,因此它正在对每个单词中的每个 个字符 执行 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, ... ]
从文档中你需要传递可迭代的句子,所以无论你传递给函数什么,它都将输入视为可迭代的,所以在这里你只传递单词,所以它计算整个语料库中每个字符的 word2vec 向量。
所以为了避免这个问题,将单词列表传递到列表中。
word2vec_model = gensim.models.Word2Vec([b],min_count=1,size=32)
我有一个使用 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
中的每个单词都是一个句子,因此它正在对每个单词中的每个 个字符 执行 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, ... ]
从文档中你需要传递可迭代的句子,所以无论你传递给函数什么,它都将输入视为可迭代的,所以在这里你只传递单词,所以它计算整个语料库中每个字符的 word2vec 向量。
所以为了避免这个问题,将单词列表传递到列表中。
word2vec_model = gensim.models.Word2Vec([b],min_count=1,size=32)