How to break the Word2vec training from a callback function?

老子叫甜甜 提交于 2020-03-03 09:07:24

问题


I am training a skipgram model using gensim word2vec. I would like to exit the training before reaching the number of epochs passed in the parameters based on a specific accuracy test in a different set of data in order to avoid the overfitting of the model.

Is there a way in gensim to interrupt the train of word2vec from a callback function?


回答1:


If in fact more training makes your Word2Vec model worse on some external evaluation, there is likely something else wrong with your setup. (For example, many many online code examples that call train() multiple times in a loop mismanage the learning-rate alpha such that it actually goes negative, which would mean each training-example results in anti-corrections to the model via backpropagation.)

If instead the main problem is truly overfitting, a better solution than conditional early-stopping would probably be adjusting other parameters, such as the model size, so that it can't overshoot useful generalization no matter how many training passes are made.

But if you really want to try the less-good approach of early stopping, you could potentially raise a catchable exception in your callback, and catch it outside train() to allow your other code to continue with the results of the aborted training. For example...

A custom exception...

class OverfitException(Exception):
    pass

...then in your callback...

    raise OverfitException()

...and around training...

try:
    model.train(...)
except OverfitException:
    print("training cut short")
# ... & your code with partially-trained model continues

But again, this is not the best way to deal with overfitting or other cases where more training is seeming to hurt evaluation-scores.



来源:https://stackoverflow.com/questions/58134062/how-to-break-the-word2vec-training-from-a-callback-function

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!