我有一个Word2Vec模型,它是在一个巨大的语料库上训练的。在将这个模型用于神经网络应用时,我遇到了很多“超出词汇量”#34;话。现在我需要为这些" Out of Vocabulary"找到单词嵌入。话。所以我做了一些谷歌搜索,发现Facebook最近为此发布了一个FastText库。现在我的问题是如何将现有的word2vec模型或Keyedvectors转换为FastText模型?
答案 0 :(得分:2)
FastText能够通过在初始训练中将这些片段包含在原始语料库中来创建子字段片段的向量。然后,当遇到词汇表外('OOV')单词时,它会使用它识别的片段为这些单词构建一个向量。对于具有重复的词根/前缀/后缀模式的语言,这导致向量优于OOV词的随机猜测。
但是,FastText进程不从最终的全字向量中提取这些子字向量。因此,没有简单的方法可以将全字向量转换为包含子字向量的FastText模型。
可能有可行的方法来近似相同的效果,例如通过将所有已知单词与相同的子字段片段一起使用,并提取要分配给子字的一些公共平均值/向量分量。或者将OOV单词建模为与OOV单词的短编辑距离的词汇表单词的平均值。但是这些技术并不是FastText,只是模糊地类似于它,它们的工作效果如何,或者可以用于调整,这将是一个实验性的问题。所以,这不是抓住一个现成的图书馆的问题。
在this blog post by Sebastien Ruder中提到了一些其他OOV引导思想的研究论文。
如果你需要FastText OOV功能,最好的基础是在同一语料库中从头开始训练FastText向量,就像传统的全字向量一样。
答案 1 :(得分: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无法解释二进制字嵌入。