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

数据挖掘 word2vec 迁移学习 gensim 预训练
2022-03-06 11:43:29

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

1个回答

您可以尝试以下步骤,使用 Gensim 4.0 对特定领域的语料库进行微调:

  1. 创建一个与预训练模型具有相同向量大小的 Word2Vec 模型

    w2vModel = Word2Vec(vector_size=..., min_count=..., ...)

  2. 为新语料库构建词汇表

    w2vModel.build_vocab(my_corpus)

  3. 创建一个向量,确定预训练向量的可变性。在以前的 Gensim 版本中,这曾经是 intersect_word2vec_format 函数的单个 lockf 参数。使用一个向量可确保在微调期间更新词汇表中的所有单词

    w2vModel.wv.vectors_lockf = np.ones(len(w2vModel.wv))

  4. 使用 intersect_word2vec_format 函数执行词汇交集,以使用预训练词汇表中单词的预训练嵌入来初始化新嵌入。我引用 Gensim 官方文档如下 intersect_word2vec_format 1

合并从原始 C word2vec-tool 格式加载的输入隐藏权重矩阵,它与当前词汇表相交。

没有词被添加到现有词汇表中,但相交的词采用文件的权重,不相交的词被单独留下。

w2vModel.wv.intersect_word2vec_format('pretrained.bin', binary=True)
  1. 现在,您可以在新语料库上训练模型

    w2vModel.train(my_corpus,total_examples=len(my_corpus),epochs=...)