我想加载预训练的嵌入来初始化我自己的无监督 FastText 模型并使用我的数据集重新训练。
我训练好的嵌入文件可以很好地加载
gensim.models.KeyedVectors.load_word2vec_format('model.txt')
。但是当我尝试时:
FastText.load_fasttext_format('model.txt')
我得到:NotImplementedError: Supervised fastText models are not supported
。
有没有办法将有监督的 KeyedVector 转换为无监督的 FastText?如果可能的话,这是一个坏主意吗?
我知道监督模型和无监督模型之间有很大的区别。但我真的想尝试使用/转换它并重新训练它。我没有找到一个训练有素的无监督模型来加载我的案例(这是一个葡萄牙数据集),而我找到的最好的模型是
model.txt
文件可以通过
KeyedVectors.load_word2vec_format('model.txt')
正常加载,那么这只是一组简单的词向量。 (也就是说,不是“监督”模型。)但是,Gensim 的
FastText
不支持预加载一组简单的向量以进行进一步训练 - 为了继续训练,它需要一个完整的
FastText
模型,无论是来自 Facebook 的二进制格式,还是之前的 Gensim
FastText
模型
.save()
.(尝试加载普通向量文件会生成该错误,表明
load_fasttext_format()
方法暂时将其错误解释为它不支持的其他类型的二进制 FastText 模型。)
以下评论后更新:
当然,您可以随心所欲地改变模型,包括 Gensim 未正式支持的方式。这是否有帮助是另一回事。 您可以创建一个具有兼容/重叠词汇的 FT 模型,分别加载旧的词向量,然后复制每个先前的向量以替换新模型中相应的(随机初始化的)向量。 (请注意,影响进一步训练的属性实际上是
ftModel.wv.vectors_vocab
经过训练的全词向量,
不是由全词和 ngram 组合而成的
.vectors
,)但是这种临时策略的权衡有很多。 ngram 仍然会随机开始。采用某些先前模型的仅单词向量与 FastText 模型的稍后与 ngram 混合的完整单词不太一样。
您希望确保新模型对词频的感知是有意义的,因为这些会影响进一步的训练 - 但该数据
不通常可用于纯文本先验词向量集。 (通过假设 Zipf 分布,您可以合理地合成一组足够好的频率。) 您的进一步训练可能会从此类初始化中获得“运行开始” - 但这并不一定意味着最终向量与起始向量保持可比性。 (所有位置可能会因新训练量而任意改变,逐渐稀释大部分先前的影响。)
因此:您将处于临时/实验设置中,与通常的 FastText 实践有些距离,因此您需要重新验证大量假设,并严格评估这些额外的步骤/近似值是否确实在改进。