I was using gensim to train a Word2Vec model with 'text8' as the corpus. But I just found that the loss became 0 after a few epochs and I didn't know what to do. Could you please help me and find what was wrong?
The hidden part of my code is : callbacks=[Callback()]
And here is the result:
vector_size=100, learning_rate=0.01
Loss after epoch 0:-60790632.0
Loss after epoch 1:15678536.0
Loss after epoch 2:15936896.0
Loss after epoch 3:15933712.0
Loss after epoch 4:13241488.0
Loss after epoch 5:0.0
Loss after epoch 6:0.0
...
Loss after epoch 28:0.0
Loss after epoch 29:0.0
Running time: 1412.9658317565918 seconds
Here is my code:
from gensim.models.keyedvectors import KeyedVectors
from gensim.models import word2vec
import logging
logging.basicConfig(format='%(asctime)s : %(levelname)s : %(message)s', level=logging.INFO)
sentences = word2vec.Text8Corpus("text8") # loading the corpus
from gensim.models.callbacks import CallbackAny2Vec
loss_list = []
loss_list.append(0)
class Callback(CallbackAny2Vec):
def __init__(self):
self.epoch = 0
def on_epoch_end(self, model):
loss = model.get_latest_training_loss()
now_loss = loss - loss_list[-1]
loss_list.append(loss)
print('Loss after epoch {}:{}'.format(self.epoch, now_loss))
self.epoch = self.epoch + 1
from gensim.models import KeyedVectors,word2vec,Word2Vec
import time
start_time = time.time()
model = word2vec.Word2Vec(sentences,hs=1,sg=1, compute_loss=True, epochs=30, callbacks=[Callback()])
end_time = time.time()
print('Running time: %s seconds' % (end_time - start_time))