【问题标题】:Load fasttext quantized model (.ftz), and look up words加载 fasttext 量化模型 (.ftz),并查找单词
【发布时间】:2020-09-25 15:39:22
【问题描述】:

我有一个经过量化的预训练嵌入文件,采用 .ftz 格式。我需要它来查找单词,找到最近的邻居。但我找不到任何可以做到这一点的工具包。 FastText 可以加载嵌入文件,但无法查找最近的邻居,Gensim 可以查找最近的邻居,但无法加载模型...

还是我没有找到合适的功能?

谢谢!

【问题讨论】:

  • 如果我理解正确,Facebook 的 FastText 仅为其supervised-mode 模型提供“量化”优化,Gensim 目前不支持使用此类模型。所以:至少就 Gensim 而言,你只是遇到了一个已知的限制。 (Gensim 可能比支持监督训练更容易地支持 加载来自supervised-mode 模型的词向量......所以如果你报告你遇到的错误,它可能会建议一种解决方法或方法以 Gensim 可以读取的格式(例如纯文本格式)导出词向量。)
  • @gojomo:这应该是一个答案,

标签: python gensim word-embedding fasttext


【解决方案1】:

FastText 模型有两种类型:

  • 无监督模型生成词嵌入并可以找到相似的词。原生 Facebook 包不支持对它们进行量化。
  • 监督模型,用于文本分类,可以进行原生量化,但通常不会产生有意义的词嵌入。

为了压缩无监督模型,我创建了一个包 compress-fasttext,它是 Gensim 的一个包装器,可以通过修剪和量化来减小无监督模型的大小。 This post 更详细地描述了它。

有了这个包,你可以在小模型中查找相似词如下:

import compress_fasttext
small_model = compress_fasttext.models.CompressedFastTextKeyedVectors.load(
    'https://github.com/avidale/compress-fasttext/releases/download/v0.0.4/cc.en.300.compressed.bin'
)
print(small_model.most_similar('Python'))
# [('PHP', 0.5253), ('.NET', 0.5027), ('Java', 0.4897),  ... ]

当然,它只有在使用相同包压缩模型的情况下才有效。你可以用这种方式压缩你自己的无监督模型:

import compress_fasttext
from gensim.models.fasttext import load_facebook_model
big_model = load_facebook_model('path-to-original-model').wv
small_model = compress_fasttext.prune_ft_freq(big_model, pq=True)
small_model.save('path-to-new-model')

【讨论】:

    猜你喜欢
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2020-08-27
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多