3

我有一个 Word2Vec 模型,它是在一个巨大的语料库上训练的。在将这个模型用于神经网络应用程序时,我遇到了很多“词汇之外”的词。现在我需要为这些“Out of Vocabulary”词找到词嵌入。所以我做了一些谷歌搜索,发现 Facebook 最近为此发布了一个 FastText 库。现在我的问题是如何将现有的 word2vec 模型或 Keyedvectors 转换为 FastText 模型?

4

2 回答 2

3

FastText 能够通过在初始训练中包含来自原始语料库的子词片段来创建子词片段的向量。然后,当遇到词汇表外('OOV')单词时,它会使用它识别的片段为这些单词构造一个向量。对于具有重复词根/前缀/后缀模式的语言,这导致向量比 OOV 词的随机猜测更好。

但是,FastText 过程不会最终的全词向量中提取这些子词向量。因此,没有简单的方法可以将全词向量转换为还包括子词向量的 FastText 模型。

可能有可行的方法来近似相同的效果,例如,通过使用具有相同子词片段的所有已知词,并提取一些共同的平均/向量分量以分配给子词。或者将 OOV 词建模为与 OOV 词的编辑距离较短的词汇表中词的平均值。但这些技术并不完全是 FastText,只是模糊地类似于它,它们的工作效果如何,或者可以通过调整来工作,将是一个实验性问题。所以,这不是抢一个现成的图书馆的问题。

Sebastien Ruder在这篇博文中提到了一些具有其他 OOV 引导思想的研究论文。

如果您需要 FastText OOV 功能,最好的方法是在与传统全词向量相同的语料库上从头开始训练 FastText 向量。

于 2017-12-29T22:33:31.730 回答
0

这是代码片段:

txt_model = KeyedVectors.load(model_name)
model.wv.save_word2vec_format('{}.txt'.format(model_name), binary=False)

其中模型名称是 Word2Vec 训练模型的名称。

但是,gensim(自 3.2.0 起)具有以下特性:

from gensim.models import FastText
model = FastText(sentences, workers=num_workers)
model.wv.save_word2vec_format('{}.txt'.format(model_name), binary=False)

但是您仍然需要将其保存为文本文件,因为 FastText 无法解释二进制词嵌入。

于 2018-05-16T09:12:08.017 回答