'similar_by_word' 没有改进迭代
'similar_by_word' did not improve over iterations
我正在使用 Gensim 训练 skip-gram word2vec 模型。数据集有 100 万个句子,但词汇量为 200。我想查看模型在迭代过程中的准确性,所以我在回调函数中使用 model.wv.similar_by_word
来查看分数。但是返回值没有在迭代中更新。
iter
被设置为 100
。
我尝试更改 window
和 size
的值,但没有效果。
模型已使用回调进行初始化:
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)
word
和 score
在每个 epoch 都被打印出来,但值从未改变。
我原以为它们的值会随着迭代更新,这应该有意义吗?
我是机器学习和 word2vec 的新手。非常感谢您的帮助。
各种 gensim
相似度函数通过单位长度赋范向量的预计算进行优化,并且预计算以不需要进一步训练的方式缓存。
因此,当您在训练中首次检查相似性时,就像您对回调代码所做的那样,缓存中会填满模型的早期状态——并且在以后的训练后不会刷新。 pending bug(自 2019 年 11 月 gensim-3.8.1
起)可以修复此行为,同时,您可以:
- 在训练完成之前不要检查相似性操作,或者
- 在完成更多训练后手动清除一些缓存。对于一个普通的
Word2Vec
模型,它应该足够做:model.wv.vectors_norm = None
。 (其他一些模型需要额外的步骤,有关更多详细信息,请参阅错误讨论。)
我正在使用 Gensim 训练 skip-gram word2vec 模型。数据集有 100 万个句子,但词汇量为 200。我想查看模型在迭代过程中的准确性,所以我在回调函数中使用 model.wv.similar_by_word
来查看分数。但是返回值没有在迭代中更新。
iter
被设置为 100
。
我尝试更改 window
和 size
的值,但没有效果。
模型已使用回调进行初始化:
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)
word
和 score
在每个 epoch 都被打印出来,但值从未改变。
我原以为它们的值会随着迭代更新,这应该有意义吗?
我是机器学习和 word2vec 的新手。非常感谢您的帮助。
各种 gensim
相似度函数通过单位长度赋范向量的预计算进行优化,并且预计算以不需要进一步训练的方式缓存。
因此,当您在训练中首次检查相似性时,就像您对回调代码所做的那样,缓存中会填满模型的早期状态——并且在以后的训练后不会刷新。 pending bug(自 2019 年 11 月 gensim-3.8.1
起)可以修复此行为,同时,您可以:
- 在训练完成之前不要检查相似性操作,或者
- 在完成更多训练后手动清除一些缓存。对于一个普通的
Word2Vec
模型,它应该足够做:model.wv.vectors_norm = None
。 (其他一些模型需要额外的步骤,有关更多详细信息,请参阅错误讨论。)