slp-ntua / slp-labs

Lab code and instructions for the Speech and language Processing course in the National Technical University of Athens
MIT License
7 stars 6 forks source link

Lab1 - word2vec train loss #104

Open angeloskanatas opened 1 year ago

angeloskanatas commented 1 year ago

Καλησπέρα, όταν εκπαιδεύουμε το word2vec, το loss σε κάθε epoch είναι 0 (χρησιμοποιούμε το δοθέν W2VLossLogger()). Αυτό γιατί μπορεί να συμβαίνει;

efthymisgeo commented 1 year ago

Στείλε μου τι εντολή ετρεξες

angeloskanatas commented 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
efthymisgeo commented 1 year ago

Που ορίζεις το μοντέλο;

angeloskanatas commented 1 year ago

Έχω συμπληρώσει την συνάρτηση 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 (δεν έστειλα όλο τον κώδικα για να μην σποϊλάρω πιθανώς).

Con-Hal commented 1 year ago

Εχω και εγώ το ίδιο πρόβλημα με τον συνάδελφο. Κάνω 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,

)

Αν χρειάζεται να στείλω κάτι άλλο σε κώδικα, μπορείτε να μου πείτε

angeloskanatas commented 1 year ago

Για όσους δεν έχουν βρει την λύση σε αυτό απλά κάντε: model.train(sentences, total_examples=len(sentences), epochs=epochs, compute_loss=True, callbacks=[W2VLossLogger()]) (δεν χρειάζεται να προσθέσετε τις παραμέτρους compute_loss και callbacks στην αρχικοποίηση του μοντέλου).

Con-Hal commented 1 year ago

Το να προσθέσω πράγματι compute_loss=True στην model.train το έλυσε για εμένα.