Python word2vec gensim更新学习率

Python word2vec gensim更新学习率,python,machine-learning,word2vec,gensim,Python,Machine Learning,Word2vec,Gensim,我在一个大语料库上训练了一个w2v模型,我想用一个小的模型更新它,用新的句子(和新词) 在第一次大型培训中,我采用了alpha的默认参数(0.025,lin衰减为0.0001) 现在,我想使用model.train来更新它。但是从文档中,我不知道在这次培训更新期间将使用哪个(初始和最终)学习率 从一方面来说,如果你也将0.025与lin一起使用。衰减到0.0001,对于第一个大型语料库中大量出现且将发生重大变化的现有单词来说,它将太强,但从另一方面来说,对于新词(添加了model.build_v

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

在第一次大型培训中,我采用了alpha的默认参数(0.025,lin衰减为0.0001) 现在,我想使用
model.train
来更新它。但是从文档中,我不知道在这次培训更新期间将使用哪个(初始和最终)学习率

从一方面来说,如果你也将0.025与lin一起使用。衰减到0.0001,对于第一个大型语料库中大量出现且将发生重大变化的现有单词来说,它将太强,但从另一方面来说,对于新词(添加了model.build_vocab(句子,update=True))来说,0.0001的低学习率太小

因此,我的问题是:

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

  • [旁白]为什么当我在同一个句子上使用2次model.train时,第二次它不会更新向量

  • 虽然您可以使用较新的示例继续训练
    Word2Vec
    模型,但除非旧示例也以交错方式重新呈现,否则这些新示例可能不会使模型变得更好–无论您如何调整
    alpha

    这是因为在训练新的例子时,模型只是为了更好地预测新的语境中的单词。如果新文本中缺少单词,那么随着模型其余部分的漂移,它们的单词向量将保持不变。即使相同的单词重复,它们的新上下文也可能在某些重要方面有所不同——或者为什么要继续使用新数据进行训练逐渐稀释或淘汰旧训练的所有影响

    当出现新数据时,甚至有一个词可以形容神经网络恶化的趋势(但远不能确定):

    因此,最受支持的政策是将所有相关数据混合在一起进行重新培训,以确保所有相关数据具有同等的影响。如果你在即兴创作其他捷径,你就在实验领域,而且,几乎没有可靠的文献或已发表的工作能够对学习率/历元数/等的相对平衡提出强有力的建议。任何可能的答案也将在很大程度上取决于语料库和词汇表的相对大小,首先,然后是任何后续的更新,此外,还取决于特定项目的重要性,如向量随时间的稳定性,或不同向量的相对质量。因此,没有一个答案——只有在您的特定设置中起作用的答案

    (gensim中有一个实验性的特性,即一些内部模型属性,以lockf结尾,表示“锁定因子”。它们将1对1与单词向量相匹配,对于锁定因子设置为0.0的任何插槽,单词向量忽略训练更新。通过这种方式,基本上可以“fr”在让其他人更新的同时,保留一些单词——比如那些你确信不会通过更多培训得到改进的单词。这可能有助于解决更新中的漂移/遗忘问题,但相对质量和正确的
    alpha
    /
    时代的问题仍然很模糊,需要逐个项目的实验。)

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

    (1) 对
    train()
    的每次调用都将对数据执行指定的
    epoch
    次数的传递,并平滑地管理从模型配置的起始
    alpha
    min\u alpha
    的学习速率(除非您使用额外参数覆盖那些
    train()

    (2) 如上所述,没有既定的经验法则,因为问题是复杂的,这种风格的增量培训不能保证有帮助,即使在可能有帮助的地方,也高度依赖于不可概括的项目细节

    (3) 如果对
    train()
    的第二次调用没有导致对向量的更改,则您的语料库迭代器可能有问题。请至少启用信息级别的日志记录,并确保
    train()
    正在花费时间,并显示增量进度,这表明正在进行真实的模型更新