Хотя вы можете продолжать тренировать модель Word2Vec
с новыми примерами, если только старые примеры также не представлены повторно с чередованием, эти новые примеры могут не сделать Модель лучше - независимо от того, насколько хорошо вы настроите alpha
.
Это потому, что во время обучения новым примерам модель только подталкивается к тому, чтобы лучше предсказывать их слова в этих новых контекстах. Если в новых текстах отсутствуют слова, их векторы-слова остаются нескорректированными, так как остальная часть модели смещается. Даже если повторяются одни и те же слова, их новые контексты, вероятно, будут отличаться в некоторых важных аспектах - или зачем продолжать тренироваться с новыми данными? - которые постепенно ослабляют или ослабляют все влияние старшей тренировки.
Существует даже слово для тенденции (но далеко от определенности) нейронных сетей ухудшаться при представлении новых данных: катастрофическое забвение .
Таким образом, наиболее приемлемой политикой является переподготовка со всеми соответствующими данными, смешанными вместе, чтобы убедиться, что все они имеют одинаковое влияние. Если вы импровизируете какие-то другие ярлыки, вы находитесь на экспериментальной территории, и мало надежной документации или опубликованных работ, которые могут дать убедительные предположения об относительном балансе скоростей обучения / количества эпох / etc. Любые возможные ответы также будут очень сильно зависеть от относительных размеров корпусов и словарей как вначале, так и затем от любых последующих обновлений, а также от того, насколько важны для вашего конкретного проекта такие факторы, как стабильность вектора с течением времени или относительные качество их различных векторов. Так что не было бы единого ответа - только то, что имеет тенденцию работать в вашей конкретной ситуации.
(В gensim
Word2Vec
есть экспериментальная функция - некоторые внутренние свойства модели, заканчивающиеся _lockf
. Это означает «коэффициент блокировки». Они соответствуют 1-к-1 со словами-векторами, а для В любом слоте, где этот коэффициент блокировки установлен на 0,0, слово-вектор игнорирует обновления обучения. Таким образом, вы можете по существу «заморозить» некоторые слова - например, те, в которых вы уверены, что они не будут улучшены в результате дополнительного обучения - пока позволяя другим обновляться. может помочь с дрейфом / забыванием проблем с обновлениями, но проблемы относительного качества и правильности alpha
/ epochs
все еще неясны и требуют экспериментов по проектам.)
Специально для ваших пронумерованных вопросов:
(1) Каждый вызов train()
будет выполнять указанное число epochs
проходов по данным и плавно управлять скоростью обучения от настроенной модели, начиная с alpha
до min_alpha
(если вы не переопределите эти с дополнительными параметрами train()
.
(2) Как указано выше, не существует установленного эмпирического правила, потому что проблема сложная, дополнительное обучение в этом стиле не обязательно поможет, и даже там, где оно может помочь, оно будет сильно зависеть от не обобщаемых Специфика проекта.
(3) Если второй вызов train()
не вызывает изменений в векторах, возможно, что-то не так с вашим корпусным итератором. Включите ведение журнала как минимум до уровня INFO и убедитесь, что train()
отнимает время и показывает прогресс, который указывает на реальные обновления модели.