使用 Gensim 4.0 微调预训练的 Word2Vec 模型

Fine-tuning pre-trained Word2Vec model with Gensim 4.0

在 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 上训练的模型)进行微调?

我认为该代码在 4.0 之前的 Gensim 版本中无法正常工作。一个简单的词向量列表,比如 GoogleNews-vectors-negative300.bin,没有(也从来没有)足够的信息来继续训练。

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

查看过去的源代码,截至 1.0.0 版(2017 年 2 月),该代码已经给出 deprecation-error with a pointer to the method for loading a plain set-of-word-vectors - to address people with the mistaken notion that could work – and raised other errors on any attempts to train() such a model. (Pre-1.0.0, docs also warned that this would not work,并且会失败并出现一个不太有用的错误。)

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

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

如果您知道任何在 Gensim-4.0.0 之前有效的方法,它应该是可以适应的 - 4.0 对 Word2Vec 相关 类 的更改主要是重构、优化和新的选项(几乎没有 none 删除功能)。但是要可靠地描述什么曾经有效,或者正在追求哪种特定的微调策略以获得什么具体的好处,才能提出更具体的建议。