«Similar_by_word» не улучшилось в течение итераций - PullRequest
0 голосов
/ 07 ноября 2019

Я использую Gensim для обучения модели skip -gram word2vec. Набор данных содержит 1 миллион предложений, но словарь имеет размер 200. Я хотел бы видеть точность модели по итерациям, поэтому я использовал model.wv.similar_by_word в функции обратного вызова, чтобы увидеть оценки. Но возвращенные значения не обновлялись в течение итераций.

iter было установлено равным 100. Я попытался изменить значения window и size, но это не имеет никакого эффекта.

Модель была инициализирована с обратными вызовами:

Word2Vec(self.train_corpus, workers=multiprocessing.cpu_count(), compute_loss=True, callbacks=[A_CallBack], **word2vec_params)

В классе A_CallBack,У меня есть что-то вроде этого:

def on_epoch_end(self, model):
    word, score = model.wv.similar_by_word(word='target_word', topn=1)[0]
    print(word, score)

word и score были распечатаны для каждой эпохи, но значения никогда не менялись.

Я ожидал значения ихобновляться через итерации, что должно иметь смысл?

Я новичок в машинном обучении и word2vec. Большое спасибо за помощь.

1 Ответ

0 голосов
/ 08 ноября 2019

Различные gensim функции подобия оптимизируются с помощью предварительного вычисления нормированных векторов единичной длины, и этот предварительный расчет кэшируется таким образом, чтобы не ожидать дальнейшего обучения.

В результате, когда вы впервые проверяете сходства в середине обучения, как вы сделали с вашим кодом обратного вызова, кэш заполняется ранним состоянием модели - и не обновляется после последующего обучения. Существует ожидающая ошибка (по состоянию на gensim-3.8.1 в ноябре 2019 года), чтобы исправить это поведение. Тем временем вы можете:

  • воздерживаться от проверки операций подобия до тех пор, покаобучение завершено, или
  • вручную очистите некоторые кеши после того, как вы проделали больше тренировок. Для простой модели Word2Vec этого должно быть достаточно: model.wv.vectors_norm = None. (Некоторые другие модели требуют дополнительных шагов, подробности см. В обсуждении ошибки.)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...