'similar_by_word' 没有改进迭代

'similar_by_word' did not improve over iterations

我正在使用 Gensim 训练 skip-gram 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)

在classA_CallBack中,我有这样的东西:

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

wordscore 在每个 epoch 都被打印出来,但值从未改变。

我原以为它们的值会随着迭代更新,这应该有意义吗?

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

各种 gensim 相似度函数通过单位长度赋范向量的预计算进行优化,并且预计算以不需要进一步训练的方式缓存。

因此,当您在训练中首次检查相似性时,就像您对回调代码所做的那样,缓存中会填满模型的早期状态——并且在以后的训练后不会刷新。 pending bug(自 2019 年 11 月 gensim-3.8.1 起)可以修复此行为,同时,您可以:

  • 在训练完成之前不要检查相似性操作,或者
  • 在完成更多训练后手动清除一些缓存。对于一个普通的 Word2Vec 模型,它应该足够做:model.wv.vectors_norm = None。 (其他一些模型需要额外的步骤,有关更多详细信息,请参阅错误讨论。)