我使用gensim的word2vec创建了两个模型。现在我想将这两个模型合并,得到这两个模型词汇的并集。
例如:
-
1. 第一个模型的词汇如下
{"Hi", "Hello", "World"}
-
2. 第二个模型的词汇如下
{"Hi", "King", "Hello", "Human"}
现在我想使用这两个模型创建一个新模型,其词汇如下
{"Hi", "Hello", "World", "King", "Human"}
回答:
常见的word2vec库,如gensim,并不提供合并模型的功能。从本质上讲,模型内单词的坐标只能与同模型内的其他单词在距离和方向上进行比较——只有通过一起进行增量训练,它们才能被推动到有意义的相对位置。
最直接的方法是,如@隐藏人名所建议的,将包含所有所需词汇的两个训练语料库合并,并在合并后的文本上训练一个新模型。(理想情况下,你应该将两个语料库混合在一起,而不是简单地连接它们,这样可以避免某些词汇只出现在完整文本集的开始或结束部分。)
当有大量重叠的词汇时,可以采用更复杂的方法。你可以选择其中一个“空间”作为你希望保留的坐标系统——可能是那个包含更多词汇、基于更多文本训练的模型。称之为“参考”模型。
你可以选择大量(可能是所有)在两个模型中共享的词汇,并学习一个“翻译”操作,将这些词汇在较小模型中的坐标投影到参考模型中这些词汇的相应位置。(这本身通常是一个数学优化问题。)最后,你可以将该翻译操作应用于非共享词汇,将较小模型的坐标转换到参考模型的坐标空间中——然后构建一个新的数据结构,包括所有原始的参考向量以及翻译后的向量。
这是最初的word2vec论文之一用于机器翻译的技术。它也在skip-thoughts论文的第2.2节中提到,作为在本地语料中没有出现时利用来自其他来源的词汇的方法。目前(2017年8月)gensim中正在进行一些工作以添加学习翻译的功能,但它尚未完全测试/记录或成为任何正式版本的一部分。
但实际上:安全且直接的做法是,在一个共同的语料库上训练一个新模型。