'similar_by_word'在迭代中没有改善

我正在使用Gensim来训练一个跳过语法的word2vec模型。数据集有100万个句子,但词汇量为200个。我想了解迭代过程中模型的准确性,因此我在回调函数中使用了model.wv.similar_by_word来查看得分。但是返回的值并未在迭代中进行更新。

iter被设置为100。 我试图更改windowsize的值,但是没有效果。

该模型已通过回调初始化:

Word2Vec(self.train_corpus,workers=multiprocessing.cpu_count(),compute_loss=True,callbacks=[A_CallBack],**word2vec_params)

A_CallBack班上,我有这样的事情:

def on_epoch_end(self,model):
    word,score = model.wv.similar_by_word(word='target_word',topn=1)[0]
    print(word,score)

每个时期都打印出wordscore,但是值从未改变。

我期望它们的值可以在迭代过程中更新,这应该有意义吗?

我是机器学习和word2vec的新手。非常感谢您的帮助。

l6z745zil 回答:'similar_by_word'在迭代中没有改善

各种gensim相似度函数是通过预先计算单位长度范数矢量来优化的,并且预先计算的高速缓存不会期望进一步的训练发生。

因此,当您初次在训练中检查相似性时(如您对回调代码所做的那样),缓存中填充了模型的早期状态-而在以后的训练后不会刷新。有pending bug(自gensim-3.8.1起,于2019年11月)可以解决此问题,与此同时,您可以:

  • 不要在训练结束后检查相似性操作,或者
  • 经过更多培训后,
  • 手动清除某些缓存。对于普通的Word2Vec模型,它应该足以完成:model.wv.vectors_norm = None。 (某些其他模型需要额外的步骤,有关更多详细信息,请参见错误讨论。)
本文链接:https://www.f2er.com/3142606.html

大家都在问