【问题标题】:How to create a model using trained models?如何使用经过训练的模型创建模型?
【发布时间】:2018-01-30 08:17:53
【问题描述】:

我使用 gensim word2vec 创建了两个模型。现在我想合并这两个模型,以得到这两个模型的联合。

例如:

    1.模型一有以下词汇
{"Hi", "Hello", "World"}
    2.模型二有以下词汇
{"Hi", "King", "Hello", "Human"}

现在我想使用这两个模型并创建一个具有以下词汇表的新模型

{"Hi", "Hello", "World", "King", "Human"}

【问题讨论】:

    标签: machine-learning nlp deep-learning gensim word2vec


    【解决方案1】:

    创建合并模型的一种方法是使用 Online Word2vec 扩展其中一个经过训练的模型。假设您训练的 word2vec 模型在其词汇表中有以下单词: {"Hi", "Hello", "World"}

    现在在模型中包含新词 model.build_vocab(new_sentences, update=True) model.train(new_sentences)

    使用model.save(model_name) 保存模型以保存并加载以进一步训练它。

    【讨论】:

      【解决方案2】:

      常见的 word2vec 库,如 gensim,不提供这样的工具来合并模型。从本质上讲,模型内单词的坐标仅在距离和方向方面具有可比性,换句话说,在同一模型中——只有通过将增量训练放在一起,它们才能被推到有意义的相对位置。

      正如@mujiga 的回答所暗示的,最直接的方法是结合两个包含所有所需单词的训练语料库,并在组合文本上训练一个新模型。 (理想情况下,您应该将两个语料库混在一起,而不是简单地将它们连接起来,这样就不会出现任何单词只出现在整个文本集的开头或结尾。)

      当有很多重叠的单词时,可以使用更复杂的方法。您可以选择两个“空间”中的一个作为您想要保留的坐标系——可能是具有更多单词、已接受过更多文本训练的那个。称之为“参考”模型。

      您将获取两个模型之间共享的大量单词(可能是全部),并学习“翻译”操作,将较小模型中这些单词的坐标投影到这些相同单词的大致正确位置在参考模型中。 (这本身通常是一个数学优化问题。)最后,您将对非共享词使用该翻译操作,将较小模型的坐标转换为参考模型坐标空间 - 然后构建一个新的数据结构包括所有原始参考向量,以及翻译后的向量。

      这是one of the original word2vec papers 用于机器翻译的技术。 section 2.2 of the skip-thoughts paper 中也提到了它作为一种在其他来源的词没有出现在本地语料库中时利用它们的方法。目前(2017 年 8 月)在 gensim 中有 some work-in-progress to add a facility for learning-the-translation,但它尚未经过全面测试/记录或任何正式版本的一部分。

      但实际上:安全且直接的方法是在通用语料库上训练新模型。

      【讨论】:

        【解决方案3】:

        word2vec 模型将为您提供单词的向量表示(在其词汇表中)。向量表示使得向量之间的距离对于相似词(语义上)最小。

        您有两个模型在两个不同的语料库上训练(因此您有两个不同的词汇表)。没有办法在不失去表示能力的情况下将这两个模型组合成一个模型(即相似的词在向量形式中彼此更接近)。

        唯一的方法是获取两个语料库,附加它们并训练一个新的 word2vec 模型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-03-16
          • 1970-01-01
          • 2023-03-19
          • 2017-08-19
          • 2018-04-21
          • 2018-08-13
          • 2018-03-24
          • 2020-05-18
          相关资源
          最近更新 更多