更新word2vec模型是否需要混合使用旧语料和新语料?

Is it necessary to mix old corpus and new corpus in updating word2vec model?

我发现它在用法上并不明确

from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]

model = Word2Vec(min_count=1)
model.build_vocab(sentences)  # prepare the model vocabulary
model.train(sentences, total_examples=model.corpus_count, epochs=model.iter)  # train word vectors
(1, 30)

句子是否应该包含旧语料库?

您的代码未显示使用新示例对旧模型进行的任何增量更新。

但是,永远不能保证增量更新(先是 build_vocab(new_sentences, update=True),然后是 train(new_sentences, ...))一定会改进模型的整体。

底层算法的优势来自于一个大型数据集,这些数据集包含细微变化的使用示例,以交错的方式一起训练。对比示例 "pull" 模型以各种方式,有时相互加强,有时相互抵消,导致最终的词向量排列可用于其他目的。

假设您随后使用与原始训练数据不同的文本进行增量更新。 (毕竟,它们必须有意义地不同,否则你不会费心进行更多训练。)在新训练期间,只有受新(可能更小)数据集影响的词发生变化。他们正在改变只是为了更好地处理新的文本示例。任何只出现在早期数据中的词(或词义)都不会被更新……因此新训练不可避免地将当前词从与联合训练后存在的旧词的平衡关系中拉出来。

在某些神经网络模型的极端情况下,这种新数据训练可能导致“catastrophic interference”,使网络在它曾经知道的事情上变得更糟。

如果词汇有很好的重叠,或者选择了正确的再训练水平和学习率的平衡,它可能仍然可以解决问题……但是没有硬性规定选择 parameters/processes 以确保 'tuning' 有效。您必须监控质量并自行优化。

最安全、最稳健的方法是,当重要的新数据到达时,使用所有可用数据从头开始重新训练模型——丢弃旧模型(因为新模型中的坐标可能不一定与旧模型具有可比性坐标)。可能的情况是,从旧模型开始使用 vectors/weights 的新模型可能会比从头开始更快地达到 quality/stability——但仍然不能保证坐标兼容性,或必然使其安全遗漏任何旧数据。