首页 > 解决方案 > 使用 Gensim 4.0 微调预训练的 Word2Vec 模型

问题描述

在 Gensim < 4.0 的情况下,我们可以使用以下代码重新训练 word2vec 模型:

model = Word2Vec.load_word2vec_format("GoogleNews-vectors-negative300.bin", binary=True)
model.train(my_corpus, total_examples=len(my_corpus), epochs=model.epochs)

但是,据我了解,Gensim 4.0 不再支持Word2Vec.load_word2vec_format. 相反,我只能加载 keyedVectors。

如何使用 Gensim 4.0 使用我的特定领域语料库微调预训练的 word2vec 模型(例如在 GoogleNews 上训练的模型)?

标签: gensimword2vectransfer-learningpre-trained-model

解决方案


我认为该代码永远不会在 4.0 之前的 Gensim 版本中运行。一个简单的词向量列表,比如GoogleNews-vectors-negative300.bin,没有(并且从来没有)有足够的信息来继续训练。

它缺少对训练必不可少的隐藏到输出层权重和词频信息。

查看过去的源代码,截至 1.0.0 版(2017 年 2 月),该代码已经给出了一个弃用错误,并带有一个指向加载普通字向量集的方法的指针- 以解决人们这个错误的想法可能会奏效——并且在任何尝试train()这种模型时都会引发其他错误。(在 1.0.0 之前,文档还警告说这将不起作用,并且会因一个不太有用的错误而失败。)

作为提到的错误之一,有时有实验支持加载一些先前的词向量集来破坏现有模型已经初始化的词汇表中的任何词,通过.intersect_word2vec_format(). 但默认情况下,(1)都锁定导入的向量以防止进一步更改;(2) 不引入新词。这与人们最常希望从“微调”中获得的不同,因此它不是实现该目标的现成帮助。

我相信有些人拼凑了自定义代码以在他们的项目中实现各种微调——但我不知道有谁发布了可靠的配方或强大的结果。(而且我怀疑一些认为他们做得很好的人只是没有严格评估他们正在采取的步骤。)

如果你有任何你知道在 Gensim-4.0.0 之前工作的配方,它应该是可适应的 - 4.0 对Word2Vec相关类的更改主要是重构、优化和新选项(几乎没有删除功能)。但是,对过去的工作内容进行可靠的描述,或者针对哪些特定的好处正在追求哪种特定的微调策略,以提出更具体的建议。


推荐阅读