在更新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)

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

您的代码不会使用新示例显示旧模型的任何增量更新。

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

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

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

在一些神经网络模型中,这种新数据训练可能导致"灾难性干扰",使网络在曾经知道的事情上变得更糟。

如果词汇有很好的重叠,或者选择了适当的再训练水平和学习率的平衡,它可能仍然可以正常工作......但是没有硬性规则来选择确保这种"调整"工作的参数/过程。您必须监控质量并自己优化。

当重要的新数据到达时,最安全、最稳健的过程是使用所有可用数据从头开始重新训练模型——丢弃旧模型(因为新模型中的坐标不一定与旧坐标相当(。使用旧模型中的向量/权重启动此新模型可能比从头开始可以帮助它更快地达到质量/稳定性 - 但仍然不能保证坐标兼容性,或者必须安全地省略任何旧数据。

最新更新