word-embendding:将监督模型转换为无监督模型
Posted
技术标签:
【中文标题】word-embendding:将监督模型转换为无监督模型【英文标题】:word-embendding: Convert supervised model into unsupervised model 【发布时间】:2021-09-28 23:42:21 【问题描述】:我想加载一个预训练的嵌入来初始化我自己的无监督 FastText 模型并使用我的数据集重新训练。
我用gensim.models.KeyedVectors.load_word2vec_format('model.txt')
加载的训练好的嵌入文件很好。但是当我尝试时:
FastText.load_fasttext_format('model.txt')
我得到:NotImplementedError: Supervised fastText models are not supported
。
有没有办法将受监督的 KeyedVectors 转换为无监督的 FastText?如果可能的话,这是一个坏主意吗?
我知道有监督模型和无监督模型之间存在很大差异。但我真的很想尝试使用/转换它并重新训练它。我没有找到一个训练有素的无监督模型来加载我的案例(它是一个葡萄牙语数据集),我找到了最好的模型 is that
【问题讨论】:
【参考方案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
,)
但这种临时策略的权衡取舍很多。 ngrams 仍然会随机开始。采用某些先前模型的 just-word 向量与 FastText 模型的 full-words-to-be-later-mixed-with-ngrams 并不完全相同。
您需要确保新模型的词频意义有意义,因为这会影响进一步的训练 - 但该数据不通常可用于纯文本先验词 -向量集。 (通过假设 Zipf 分布,您可以合理地合成一组足够好的频率。)
您的进一步培训可能会从此类初始化中获得“运行开始” - 但这并不一定意味着结束向量与起始向量保持可比性。 (所有位置都可以根据新训练的数量任意改变,逐渐淡化大部分之前的影响。)
因此:您将处于即兴/实验设置中,与通常的 FastText 做法有些距离,因此您需要重新验证许多假设,并严格评估这些额外的步骤/近似值是否真的在改进事情.
【讨论】:
我明白了。但是,如果我创建一个新的 FastText 模型,我可以用那些经过训练的值覆盖向量值吗?我试图用ftModel.wv.__seitem__(word, updatedVector)
做这样的事情,但它没有按预期工作。
确实 - 考虑更新答案。以上是关于word-embendding:将监督模型转换为无监督模型的主要内容,如果未能解决你的问题,请参考以下文章