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

时间:2018-08-24 18:11:55

标签: gensim word2vec

我发现它的用法不明确

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)

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

1 个答案:

答案 0 :(得分:1)

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

但是,从不保证增量更新(例如使用build_vocab(new_sentences, update=True),然后使用train(new_sentences, ...))可以整体上改善模型。

底层算法从大型数据集中获得了优势,这些数据以微妙的变化使用示例为基础,以交错方式一起训练。对比示例以各种方式“拉”模型,有时相互增强,有时相互抵消,从而导致最终的词向量排列对其他目的有用。

假设您然后使用与原始培训数据不同的文本进行增量更新。 (毕竟,它们必须有意义地有所不同,否则您将不必再接受更多的培训。)在新的培训中,只有受新的(可能较小的)数据集影响的单词才会发生变化。他们正在进行更改,只是为了更好地使用新的文字示例。仅出现在较早数据中的任何单词(或单词感觉)都不会被更新...因此,新的训练不可避免地将当前单词与联合训练后存在的较旧单词从平衡关系中拉出。

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

如果词汇有很好的重叠,或者选择了正确的再培训水平和学习率的平衡,它仍然可能行得通……但是没有严格的规则来选择确保此类“调整”有效的参数/过程。您必须监控质量并自己对其进行优化。

当获得大量新数据时,最安全,最可靠的方法是使用所有可用数据从头开始重新训练模型–丢弃旧模型(因为新模型的坐标不一定与旧坐标可比) 。可能的情况是,从旧模型开始使用新的矢量/权重启动新模型可能比从头开始更快地帮助其达到质量/稳定性,但仍然不能保证坐标兼容,或者一定可以安全地保留任何兼容性较旧的数据。