2

我有两个预训练的词嵌入:Glove.840b.300.txtcustom_glove.300.txt

一个是斯坦福预训练的,另一个是我训练的。两者都有不同的词汇集。为了减少 oov,我想将未出现在 file1 但确实出现在 file2 中的单词添加到 file1。我如何轻松做到这一点?

这就是我在 gensim 3.4.0 中加载和保存文件的方式。

from gensim.models.keyedvectors import KeyedVectors

model = KeyedVectors.load_word2vec_format('path/to/thefile')
model.save_word2vec_format('path/to/GoogleNews-vectors-negative300.txt', binary=False)
4

1 回答 1

3

我不知道一个简单的方法。

特别是,没有一起共同训练的词向量将不具有兼容/可比较的坐标空间。(一个词没有一个合适的位置——与同一模型中的其他词相比,它只是一个相对较好的位置。)

因此,您不能只是从另一个模型中附加缺少的单词:您需要将它们转换为兼容的位置。幸运的是,使用两个词向量集中都存在的一组共享锚词来学习转换似乎是有效的——然后应用你想要移动的词。

gensim 中有一个类、[TranslationMatrix][1]演示笔记本,显示了语言翻译的这个过程(原始 word2vec 论文中提到的一个应用程序)。您可以使用它,结合将额外向量附加到 gensimKeyedVectors实例的能力,在您的任一源模型中创建一组具有单词超集的新向量。

于 2018-07-30T22:53:27.260 回答