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:将监督模型转换为无监督模型的主要内容,如果未能解决你的问题,请参考以下文章

如何将以“\ 0”开头的char *转换为无符号整数? [关闭]

将字符串转换为无符号字符 []

将特征矩阵转换为无符号字符 *

将 VARIANT 转换为无符号字符数组

在 scikit-learn 中拟合数据与转换数据

医学图像配准综述之无监督转换模型2019-09-23