Gensim FastText - KeyError:"单词不在词汇表中#34;

时间:2018-04-18 05:02:29

标签: gensim fasttext

我遇到了" most_similar"从我的理解中调用FastText模型,Fasttext应该能够获得词汇中不包含的单词的结果,但是我得到了一个" Not in Vocabulary"错误,即使在保存和加载之前,电话也完全正常。

这是来自juypter的代码。

import gensim as gensim

model = gensim.models.FastText(my_sentences, size=100, window=5, min_count=3, workers=4, sg=1)
model.wv.most_similar(positive=['iPhone 6'])

返回

[('iPhone7', 0.942690372467041),
('iPhone7.', 0.9395840764045715),
('iPhone5s', 0.9379133582115173),
('iPhone6s', 0.9338586330413818),
('iPhone5S', 0.9335439801216125),
('iPhone5.', 0.9318809509277344),
('iPhone®', 0.9314558506011963),
('iPhone6', 0.9268479347229004),
('iPhone4s', 0.9223971366882324),
('iPhone5', 0.9212019443511963)]

到目前为止一切顺利,现在我保存了模型。

model.wv.save_word2vec_format("example_fasttext.txt", binary=False)

然后重新加载它:

from gensim.models import KeyedVectors
new_model = KeyedVectors.load_word2vec_format('example_fasttext.txt', binary=False, limit=50000)

然后我从刚刚加载的模型中执行完全的most_similar调用:

new_model.most_similar(positive=['iPhone 6'])

但结果现在是:

KeyError: "word 'iPhone 6' not in vocabulary"

知道我做错了吗?

2 个答案:

答案 0 :(得分:0)

您的问题可能在limit方法的load_word2vec_format参数中。你在这里做的是只为50000个最频繁的单词加载模型。如果iPhone 6没有出现足够的次数,则表示您没有加载它。

尝试

new_model = KeyedVectors.load_word2vec_format('example_fasttext.txt', binary=False)

答案 1 :(得分:0)

我和您有同样的问题,我想我开始了解发生了什么事。

基本上,当您将模型另存为.txt.vec时,仅保存单词向量; not n-gram(保存在模型的二进制版本中),可用于概括/近似词汇外的单词。

我建议您使用以下方式保存模型:

your_fasttext_model.save(file_path)