词嵌入:将监督模型转换为无监督模型

word-embendding: Convert supervised model into unsupervised model

我想加载一个预训练的嵌入来初始化我自己的非监督 FastText 模型并用我的数据集重新训练。

我拥有的经过训练的嵌入文件可以很好地加载 gensim.models.KeyedVectors.load_word2vec_format('model.txt')。但是当我尝试时: FastText.load_fasttext_format('model.txt') 我得到:NotImplementedError: Supervised fastText models are not supported.

有什么方法可以将受监督的 KeyedVectors 转换为不受监督的 FastText 吗?如果可能的话,这是个坏主意吗?

我知道监督模型和非监督模型之间有很大的区别。但我真的很想尝试 use/convert 并重新训练它。我没有找到训练有素的无监督模型来加载我的案例(这是一个葡萄牙语数据集),而我找到的最好的模型 is that

如果您的 model.txt 文件加载 KeyedVectors.load_word2vec_format('model.txt') 正常,那么这只是一组简单的词向量。 (也就是说,不是 'supervised' 模型。)

但是,Gensim 的 FastText 不支持为进一步训练预加载一组简单的向量 - 为了继续训练,它需要一个完整的 FastText 模型,来自 Facebook 的二进制格式,或者先验 Gensim FastText 模型 .save().

(尝试加载纯矢量文件会产生该错误表明 load_fasttext_format() 方法暂时将其错误解释为它不支持的其他类型的二进制 FastText 模型。)

在下方评论后更新:

当然,您可以随心所欲地改变模型,包括 Gensim 官方不支持的方式。这是否有帮助是另一回事。

您可以使用 compatible/overlapping 词汇表创建 FT 模型,分别加载旧的词向量,然后复制每个先前的向量以替换新模型中相应的(随机初始化的)向量。 (请注意,影响进一步训练的 属性 实际上是 ftModel.wv.vectors_vocab 训练好的全词向量, 而不是 .vectors 它是由完整的词向量合成的-words & ngrams,)

但是这种临时策略的权衡有很多。 ngrams 仍然会随机开始。采用某些先验模型的纯词向量与 FastText 模型的全词与 ngram 混合并不完全相同。

您希望确保您的新模型对词频的感知是有意义的,因为这些会影响进一步的训练 - 但数据 通常无法通过普通格式获得-文本先验词向量集。 (您可以通过假设 Zipf 分布合理地合成一组足够好的频率。)

您的进一步训练可能会从这种初始化中获得“运行 开始”——但这并不一定意味着结束向量与开始向量保持可比性。 (所有位置可能会因新训练量而任意改变,逐渐稀释大部分先前的影响。)

因此:您将处于 improvised/experimental 设置中,与通常的 FastText 实践有些不同,因此您需要重新验证许多假设,并严格评估那些额外的 steps/approximations 实际上正在改进。