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

问题描述 投票:0回答:1

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

我训练好的嵌入文件可以很好地加载

gensim.models.KeyedVectors.load_word2vec_format('model.txt')
。但是当我尝试时:
FastText.load_fasttext_format('model.txt')
我得到:
NotImplementedError: Supervised fastText models are not supported

有没有办法将有监督的 KeyedVector 转换为无监督的 FastText?如果可能的话,这是一个坏主意吗?

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

python nlp gensim unsupervised-learning fasttext
1个回答
1
投票
如果您的

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 实践有些距离,因此您需要重新验证大量假设,并严格评估这些额外的步骤/近似值是否确实在改进。

© www.soinside.com 2019 - 2024. All rights reserved.