Open angeloskanatas opened 1 year ago
Στείλε μου τι εντολή ετρεξες
Κάνω train το μοντέλο με: model.train(sentences, total_examples=len(sentences), epochs=epochs, callbacks=[W2VLossLogger()])
, όπου η κλάση W2VLossLogger
log-άρει το loss μετά από κάθε epoch με αυτόν τον τρόπο:
class W2VLossLogger(CallbackAny2Vec):
"""
Callback to print loss after each epoch.
Use by passing model.train(..., callbacks=[W2VLossLogger()])
"""
def __init__(self):
self.epoch = 0
def on_epoch_end(self, model):
loss = model.get_latest_training_loss()
if self.epoch == 0:
print("Loss after epoch {}: {}".format(self.epoch, loss))
else:
print(
"Loss after epoch {}: {}".format(
self.epoch, loss - self.loss_previous_step
)
)
self.epoch += 1
self.loss_previous_step = loss
Που ορίζεις το μοντέλο;
Έχω συμπληρώσει την συνάρτηση train_w2v_model
που έχει δοθεί. Αρχικοποιώ με: model = Word2Vec(sentences, vector_size=embedding_dim, window=window, min_count=min_word_count, workers=workers-1, sg=1, compute_loss=True) # skip-gram model
(δεν έστειλα όλο τον κώδικα για να μην σποϊλάρω πιθανώς).
Εχω και εγώ το ίδιο πρόβλημα με τον συνάδελφο. Κάνω train ως εξής model.train( sentences=sentences, total_examples=len(sentences), corpus_iterable=sentences, epochs=epochs, callbacks=[W2VLossLogger()],
)
Αρχικοποιώ το μοντέλο ως εξής;
model = Word2Vec( sentences=sentences, window=window, workers=workers, min_count=min_word_count,
)
Αν χρειάζεται να στείλω κάτι άλλο σε κώδικα, μπορείτε να μου πείτε
Για όσους δεν έχουν βρει την λύση σε αυτό απλά κάντε: model.train(sentences, total_examples=len(sentences), epochs=epochs, compute_loss=True, callbacks=[W2VLossLogger()])
(δεν χρειάζεται να προσθέσετε τις παραμέτρους compute_loss
και callbacks
στην αρχικοποίηση του μοντέλου).
Το να προσθέσω πράγματι compute_loss=True στην model.train το έλυσε για εμένα.
Καλησπέρα, όταν εκπαιδεύουμε το word2vec, το loss σε κάθε epoch είναι 0 (χρησιμοποιούμε το δοθέν W2VLossLogger()). Αυτό γιατί μπορεί να συμβαίνει;