我什么时候应该考虑使用预训练模型 word2vec 模型权重?

问题描述

假设我的语料库相当大 - 有数万个独特的词。我可以使用它直接构建 word2vec 模型(下面代码中的方法 #1),也可以使用预先训练的模型权重初始化新的 word2vec 模型,并使用我自己的语料库对其进行微调(方法 #2)。方法#2 值得考虑吗?如果是这样,是否有关于何时考虑使用预训练模型的经验法则?

# Approach #1
from gensim.models import Word2Vec
model = Word2Vec(my_corpus,vector_size=300,min_count=1)

# Approach #2
model = Word2Vec(vector_size=300,min_count=1)
model.build_vocab(my_corpus)
model.intersect_word2vec_format("GoogleNews-vectors-negative300.bin",binary=True,lockf=1.0)
model.train(my_corpus,total_examples=len(my_corpus))

解决方法

这类问题的一般答案是:您应该同时尝试这两种方法,看看哪种更适合您的目的。

没有您的确切数据和项目目标,没有人可以确定哪种在您的情况下会更好,并且您需要完全相同的能力来评估替代选择,以进行各种非常基本的必要调整你的工作。

单独:

  • “微调”word2vec-vectors 可能意味着很多事情,并且可以引入许多专家级棘手的权衡决策 - 只有当您有一种强大的方法来测试不同的情况时才能导航这些权衡相互选择。
  • 您的代码显示的特定简单调整方法 - 依赖于可能在最新的 Gensim 中不起作用的实验方法 (intersect_word2vec_format()) - 非常有限,因为它丢弃了外部向量中的所有单词还没有在你自己的语料库中,也抛弃了人们经常想要混合旧向量的主要原因之一 - 覆盖更多不在训练数据中的单词。 (我怀疑这种方法在许多情况下是否有用,但如上所述,为了确保您想针对您的数据/目标进行尝试。
  • 在 word2vec 和类似算法中使用 min_count=1 几乎总是一个坏主意。如果这些稀有单词真的很重要,请找到更多训练示例,以便为它们训练好的向量。但是如果没有足够的训练示例,通常最好忽略它们 - 保留它们甚至会使周围单词的向量变得更糟。