我正在使用 gensim word2vec 训练一个 skipgram 模型。我想在达到基于不同数据集的特定准确性测试的参数中传递的时期数之前退出训练,以避免模型的过度拟合。
gensim 中有没有办法从回调函数中中断 word2vec 的序列?
我正在使用 gensim word2vec 训练一个 skipgram 模型。我想在达到基于不同数据集的特定准确性测试的参数中传递的时期数之前退出训练,以避免模型的过度拟合。
gensim 中有没有办法从回调函数中中断 word2vec 的序列?
如果事实上更多的训练使您的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
但同样,这不是处理过度拟合或其他更多训练似乎会损害评估分数的情况的最佳方法。