我使用gensim word2vec创建了两个模型。现在我想合并这两个模型,我得到了这两个模型的联合。
例如:
{"Hi", "Hello", "World"}
{"Hi", "King", "Hello", "Human"}
现在我想使用这两个模型并创建一个具有以下词汇
的新模型{"Hi", "Hello", "World", "King", "Human"}
答案 0 :(得分:2)
常见的word2vec库,如gensim,不提供合并模型的工具。本质上,模型中单词的坐标只能在距离和方向上与同一模型中的其他单词相比 - 只有通过逐步训练才能将它们推到有意义的相对位置。
正如@ mujiga的回答所暗示的那样,最简单的方法是将包含所有所需单词的两个训练语料库组合起来,并在组合文本上训练新模型。 (理想情况下,你将两个语料库混合在一起,而不是简单地将它们连接起来,这样就不会只在整个文本集的开头或结尾出现单词。)
当存在大量重叠词时,可能会采用更复杂的方法。你可以选择两个“空格”中的一个作为你想要保留的坐标系 - 可能是一个有更多单词的,已经接受了更多文本的训练。称之为“参考”模型。
您将获取两个模型之间共享的大量单词(可能全部),并学习“翻译”操作,将较小模型中的这些单词的坐标投影到这些相同单词的大致正确位置在参考模型中。 (这本身通常是一个数学优化问题。)最后,您将对非共享单词使用该翻译操作,将较小模型的坐标转换为参考模型坐标空间 - 然后构造一个新的数据结构,包括所有原始参考向量,加上翻译的向量。
这是one of the original word2vec papers用于机器翻译的技术。在section 2.2 of the skip-thoughts paper中也提到了当它们没有出现在本地语料库中时利用来自其他来源的单词的方法。目前(2017年8月)some work-in-progress to add a facility for learning-the-translation在gensim中,但尚未经过全面测试/记录或正式发布。
但实际上:安全和直接的事情是在一个共同的语料库上训练一个新的模型。
答案 1 :(得分:1)
word2vec模型将为您提供单词的矢量表示(在其词汇表中)。向量表示使得向量之间的距离对于相似的单词(语义上)是最小的。
你有两个模型在两个不同的语料库上训练(所以你有两个不同的词汇)。没有办法将两个模型组合成一个而不失去代表能力(即类似的单词在矢量形式中彼此更接近)。
唯一的方法是获得两个语料库,附加它们并训练一个新的word2vec模型。
答案 2 :(得分:1)
创建合并模型的一种方法是使用Online Word2vec扩展其中一个训练模型。让我们说你训练有素的word2vec模型的词汇中有以下单词:
{"Hi", "Hello", "World"}
现在在模型中包含新单词
model.build_vocab(new_sentences, update=True)
model.train(new_sentences)
使用model.save(model_name)
保存模型以保存并加载以进一步训练模型。