【问题标题】:Gensim FastText - KeyError: "word not in vocabulary"Gensim FastText - KeyError:“单词不在词汇表中”
【发布时间】:2018-04-18 05:02:29
【问题描述】:

我在 FastText 模型中调用“most_similar”时遇到了问题,据我了解,Fasttext 应该能够获得不在词汇表中的单词的结果,但我得到的是“不在词汇表中”错误,即使在保存和加载之前,调用也很好。

这是来自 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)

然后我从刚刚加载的模型中执行最相似的调用:

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

但现在的结果是:

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

知道我做错了什么吗?

【问题讨论】:

    标签: gensim fasttext


    【解决方案1】:

    您的问题可能出在load_word2vec_format 方法的limit 参数中。您在这里所做的只是为 50000 个最常用的单词加载模型。如果iPhone 6 出现的次数不够多,则说明您没有加载它。

    试试

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

    【讨论】:

    • 嘿艾蒂安,这是有道理的。我只是尝试确保这是问题,但我仍然收到“不在词汇表中”错误。有点奇怪,是不是向量被泛化了,而你不再真正加载 Fasttext 模型了?
    • 我不熟悉 Fasttext,但您应该尝试使用 save method 保存您的模型,并按照文档中的建议使用 load_fasttext_format method 加载它
    【解决方案2】:

    我和你有同样的问题,我想我开始明白发生了什么。

    基本上,当您将模型保存为.txt.vec 时,您只保存了词向量; 不是 n-grams(保存在模型的二进制版本中),它允许您概括/近似词汇外的单词。

    我建议你保存你的模型:

    your_fasttext_model.save(file_path)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      相关资源
      最近更新 更多