如何使用已训练的模型创建新模型?

我使用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中正在进行一些工作以添加学习翻译的功能,但它尚未完全测试/记录或成为任何正式版本的一部分。

但实际上:安全且直接的做法是,在一个共同的语料库上训练一个新模型。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注