我正在使用gensim word2vec训练一个skipgram模型。为了避免模型过拟合,我想在达到通过基于特定精度测试的参数传递给参数的历元数之前退出训练。
gensim中是否有办法从回调函数中中断word2vec的训练?
答案 0 :(得分:0)
如果实际上,更多的培训使您的Word2Vec
模型在某些外部评估上更糟,则可能是您的设置存在其他问题。 (例如,许多在线代码示例在一个循环中多次调用train()
,对学习速率alpha
的管理不当,从而使它实际上变为负值,这意味着每个训练示例都会产生反纠正通过反向传播进入模型。)
如果相反的主要问题是真正的过度拟合,那么比有条件的早期停止更好的解决方案可能是调整其他参数,例如模型大小,以便无论进行多少次训练都不会超出有用的概括。
但是,如果您真的想尝试较早停止的较差方法,则可能会在回调中引发可捕获的异常,并将其捕获到train()
之外,以允许您的其他代码继续执行的结果中止的训练。例如...
自定义例外...
class OverfitException(Exception):
pass
...然后在您的回调中...
raise OverfitException()
...以及周围的培训...
try:
model.train(...)
except OverfitException:
print("training cut short")
# ... & your code with partially-trained model continues
但是,这再次不是,是应对过度拟合或其他情况下进行更多培训似乎会损害评估分数的情况的最佳方法。