这个问题虽然不是主要问题,但我认为修复它以避免混淆是很重要的。
即使没有新的词汇,model.trainables.update_weights
也需要一段时间才能执行(对模型没有影响),因为它没有检查gained_vocab
是否大于零。
https://github.com/RaRe-Technologies/gensim/blob/06f5f5c4fa9fb54a169e53034a3bf3fa035cbc3c/gensim/models/word2vec.py#L1467
应该被替换为:
gained_vocab = len(wv.vocab) - len(wv.vectors)
if gained_vocab <= 0:
raise RuntimeError(
"There is no new vocabulary added. "
"If you want to update the weights with a new vocabulary, please first update model.vocab"
)
4条答案
按热度按时间hec6srdp1#
看起来对我来说不错,谢谢@ahmedahmedov,wdyt@gojomo?
ncecgwcz2#
update_weights()
是否在其他时候被触发?如果它只在需要时运行,并且在不需要调用它时(因为没有词汇变化)只是简单的无操作(慢速),那么怎么办?异常似乎太多了——最多记录一个警告。jexiocij3#
在下一行中,实际上确实将wv.vectors_norm设置为None。
https://github.com/RaRe-Technologies/gensim/blob/06f5f5c4fa9fb54a169e53034a3bf3fa035cbc3c/gensim/models/word2vec.py#L1488
再次强调,这显然不是什么大问题。然而,在我看来,每当执行任何改变模型对象状态的方法时,用户应该尽可能详细地被告知。否则,可能会导致难以追踪的难以捉摸的错误。
pb3s4cty4#
我想解决这个问题,当没有添加新词汇时,应该添加日志还是异常?