You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Gensim FastText调用most_similar报KeyError:词汇不在词表中问题

解决Gensim FastText加载后无法处理词表外词汇的问题

这个问题我之前也碰到过!核心原因是你大概率只保存了FastText的词向量(wv)部分,而没有保存完整的模型——FastText处理词表外词汇(OOV)的关键子词n-gram信息,是存储在完整模型结构里的,单独的词向量文件并不包含这些数据。训练时模型是完整状态,所以能正常分解OOV词汇为子词并计算向量,但加载不完整的模型后,就丢失了子词处理能力,自然会报“词汇不在词表中”的错误。

正确的保存与加载方式

要保留OOV处理能力,必须保存并加载完整的FastText模型,而不是仅保存词向量:

  1. 训练后保存完整模型

    import gensim
    # 假设my_sentences是你的训练语料
    model = gensim.models.FastText(my_sentences, size=100, window=5, min_count=3, workers=4, sg=1)
    # 保存完整模型(会生成多个相关文件,不要删除)
    model.save("my_fasttext_model")
    
  2. 加载完整模型并使用

    import gensim
    # 加载完整的FastText模型
    loaded_model = gensim.models.FastText.load("my_fasttext_model")
    # 现在可以正常处理词表外词汇了
    loaded_model.wv.most_similar(positive=['iPhone 6'])
    

避坑提示

  • 不要使用model.wv.save()model.wv.save_word2vec_format()保存词向量,这两种方式都会丢弃子词信息,导致加载后无法处理OOV。
  • 如果之前已经只保存了词向量文件,那没有办法恢复子词数据,只能重新训练并保存完整模型。

内容的提问来源于stack exchange,提问作者Peter T

火山引擎 最新活动