使用 Gensim 的 Word2vec 模型在线训练是如何工作的

How did online training work in the Word2vec model using Genism

使用 Genism 库,我们可以加载模型并在添加新句子时更新词汇表。这意味着如果您保存模型,您可以稍后继续训练它。我检查了示例数据,假设我的词汇表中有一个以前训练过的词(即“女性”)。在那之后,假设我有新句子并使用 model.build_vocab(new_sentence, update=True) 和 model.train(new_sentence),模型被更新。现在,在我的 new_sentence 中,我有一些在之前的词汇表中已经存在的词(“women”)和一些在之前的词汇表中不存在的新词(“girl”)。更新词汇表后,我的语料库中既有旧词也有新词。我使用 model.wv[‘women’] 检查了向量,该向量在更新和训练新句子后更新。此外,获取新词的词嵌入向量,即 model.wv[‘girl’]。之前训练过但不在 new_sentence 中的所有其他词,这些词向量没有改变。

model = Word2Vec(old_sentences, vector_size=100,window=5, min_count=1) 
model.save("word2vec.model")
model = Word2Vec.load("word2vec.model") //load previously save model 
model.build_vocab(new_sentences,update=True,total_examples=model.corpus_count, epochs=model.epochs)   
model.train(new_sentences)

但是,就是不明白在线培训是如何工作的内部深度解释。如果有人知道详细请告诉我。我得到了代码,但想了解在线培训在理论上是如何运作的。是否从头开始在新旧训练数据上重新训练模型?

这是我关注的link:Online training

当您执行对 .train() 的新调用时,它只会对新数据进行训练。所以只能更新新数据中的单词。

并且在某种程度上新数据可能更小,并且在其单词用法上更特殊,新数据中的任何单词都将被训练为仅与新数据中训练的其他单词一致。 (根据新数据的大小,以及选择的训练参数,如 alphaepochs,它们可能会通过新示例任意远离它们的旧位置 - 因此开始失去可比性较早训练的单词。)

(另请注意,当提供与原始语料库不同的语料库时,您不应使用 total_examples=model.corpus_count 之类的参数,重复使用 model.corpus_count 模型中从早期数据中提取的值。相反,参数应该描述当前批次的数据。)

坦率地说,我不是这个功能的粉丝。它可能对高级用户有用。但是大多数被它吸引的人可能会误用它,期望任何数量的微小增量更新来不断扩展和改进模型——当没有很好的支持时,天真使用就会可靠地发生的想法。

事实上,有理由怀疑这样的更新通常是个好主意。对于神经网络的增量更新破坏其先前性能的风险,甚至还有一个既定术语:catastrophic forgetting.

为新的扩展数据更新词向量的最直接且最有根据的方法是从头开始重新训练,因此所有词都处于平等地位,并经过相同的交错训练,进行相同的统一优化(新加坡元)时间表。 (在这样一个过程结束时新的新向量将不在兼容坐标 space 中,但应该是等效的,或者如果数据现在更大更好更好。)