FastText: AttributeError: type object 'FastText' has no attribute 'reduce_model'

FastText: AttributeError: type object 'FastText' has no attribute 'reduce_model'

我使用 FastText 生成词嵌入。我从 https://fasttext.cc/docs/en/crawl-vectors.html 下载预训练模型 该模型有 300 个维度,但我想要 100 个维度,所以我使用 reduce model 命令,但出现错误

import gensim
model = gensim.models.fasttext.FastText.load_fasttext_format('cc.th.300.bin')
gensim.models.fasttext.utils.reduce_model(model, 100)
我有 AttributeError: module 'gensim.utils' has no attribute 'reduce_model'

这是 FastText 文档中的代码

import fasttext
import fasttext.util
ft = fasttext.load_model('cc.en.300.bin')
fasttext.util.reduce_model(ft, 100)

如何修复此错误,我找不到新命令的任何文档。

谢谢

模块 gensim.fasttext.utils 没有函数 reduce_model(),如错误消息所述。

这不是 common/standard 操作 - 这只是 Facebook 包装器决定实施的操作。 (根据 source code here,它看起来像是在向量的一小部分子样本上使用标准 PCA。)

为什么要降维?

请注意,您将失去一些模型的表现力,如果您能够加载模型来进行缩减,那么它对您的 RAM 来说并不算太大。如果您的主要目标是节省模型大小,可能有更好的方法,例如丢弃更多不常见的单词,具体取决于您的原因。

如果您绝对需要执行此类缩减,一些选项可能是:

  • 使用 Facebook 包装器执行此操作,然后将结果保存在 Gensim 可以加载的表单中。
  • 为 Gensim 模型重新实现相同的操作,也许使用 FB 代码作为指导。 (你必须确保 Gensim 模型以它考虑原始维度的所有方式进行更新,这可能很棘手——启用事后模型收缩从来都不是 Gensim 的目标或功能。)