word2vec gensim更新学习率

时间:2018-07-02 09:40:22

标签: python machine-learning word2vec gensim

我在一个大型语料库上训练了一个w2v模型,我想用一个新的句子(和新词)用一个较小的模型进行更新。

在第一次大型训练中,我采用了默认参数alpha(0.025,线性衰减为0.0001) 现在,我想使用model.train进行更新。但是根据文档,我不知道在此次培训更新中将使用哪种(初始和最终)学习率。

从一侧看,如果您还对Lin使用0.025。衰减到0.0001,对于在第一个大语料库中出现很多并且已经大大改变的现有单词来说,它太强了,但是对于新单词则从另一侧开始(添加了model.build_vocab(sentences,update = True) )0.0001的学习率太低。

所以我的问题是:

  1. 关于学习率的新句子,API中model.train的默认行为是什么?
  2. 我应该如何选择学习率,以便考虑到这个新旧单词的问题?

  3. [旁的问题]为什么当我对同一句子使用2次model.train时,第二次却不更新向量?

1 个答案:

答案 0 :(得分:1)

尽管您可以继续用较新的示例训练Word2Vec模型,除非示例也以交错方式重新呈现,这些新示例不管您如何调整alpha,都可能无法使模型变得更好。

这是因为在培训新示例时,只是在微不足道的情况下才尝试使模型更好地预测单词。如果新文本中缺少单词,则随着模型其余部分的漂移,它们的单词向量将保持不变。即使重复相同的单词,它们的新上下文在某些重要方面也可能会有所不同–否则为什么还要继续训练新数据呢? –逐渐淡化或淘汰了旧培训的所有影响。

甚至还有一个说法是,当提供新数据时,神经网络趋向于恶化(但远非确定):catastrophic forgetting

因此,最可支持的策略是将所有相关数据混合在一起进行重新训练,以确保它们具有同等影响力。如果您临时使用其他捷径,那您就处于实验领域,几乎没有可靠的文档或已发表的著作可以对学习率/历元数/等的相对平衡提出有力的建议。首先,任何可能的答案都将在很大程度上取决于语料库和词汇的相对大小,然后取决于后续的任何更新,还取决于您的特定项目有多重要,例如向量稳定度随时间推移或相对-不同向量的质量。因此,没有任何答案-只是在您的特定设置中可能起作用的。

gensim Word2Vec中有一个实验性功能–一些内部模型属性以_lockf结尾。代表“锁定因子”。它们将1-for-1与单词向量,并且对于任何将此锁定因子设置为0.0的插槽,单词向量都会忽略训练更新,这样,您就可以“冻结”某些单词-例如您确信不会出现的单词通过更多的培训得到了改进–可以让其他人继续更新。力量可以帮助您解决漂移/忘记更新的问题,但是相对质量和正确的alpha / epochs问题仍然不明确,需要逐个项目进行实验。)

特别是关于您编号的问题:

(1)每次对train()的调用都会对数据进行指定次数的epochs传递,并从模型的配置起始alpha到{{ 1}}(除非您用min_alpha的额外参数覆盖它们。

(2)如上所述,由于问题很复杂,因此没有确定的经验法则,不能保证以这种方式进行增量培训,即使在可能会有所帮助的情况下,也高度依赖于不可概括项目细节。

(3)如果第二次调用train()导致矢量没有变化,则您的语料库迭代器可能出了点问题。启用至少记录到INFO级别的日志,并确保train()花费时间并显示增量进度,这表明实际模型正在更新。