Нужно ли смешивать старый корпус и новый корпус при обновлении модели word2vec? - PullRequest
0 голосов
/ 24 августа 2018

Я обнаружил, что это не явно в использовании

from gensim.models import Word2Vec
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]

model = Word2Vec(min_count=1)
model.build_vocab(sentences)  # prepare the model vocabulary
model.train(sentences, total_examples=model.corpus_count, epochs=model.iter)  # train word vectors
(1, 30)

предложения должны ли содержать старый корпус?

1 Ответ

0 голосов
/ 25 августа 2018

Ваш код не показывает какого-либо постепенного обновления старой модели новыми примерами.

Однако никогда не гарантируется, что инкрементное обновление (как в случае build_vocab(new_sentences, update=True), а затем train(new_sentences, ...)) обязательно улучшит модель в целом.

Базовый алгоритм получает свою силу из большого набора данных, из тонко измененных примеров использования, которые чередуются вместе. Контрастирующие примеры «притягивают» модель различными способами, иногда усиливая друг друга, а иногда устраняя, что приводит к окончательному расположению слов-векторов, которое полезно для других целей.

Допустим, вы затем делаете инкрементное обновление с текстами, которые не совпадают с исходными данными обучения. (И, в конце концов, они должны существенно отличаться, иначе вы бы не стали больше тренироваться.) Во время этого нового обучения меняются только слова, затронутые новым (возможно, меньшим) набором данных. И они меняются, чтобы быть лучше в новых текстовых примерах. Любые слова (или смыслы слов), которые появились только в более ранних данных, не обновляются ... и поэтому новая тренировка неизбежно выводит текущие слова из сбалансированных отношений со старыми словами, которые существовали после совместного обучения.

В некоторых моделях нейронных сетей такая тренировка новых данных может привести к " катастрофическим помехам ", что значительно ухудшит работу сети в вещах, которые она когда-то знала.

Это может сработать нормально, если есть хорошее совпадение словарного запаса или выбран правильный уровень переподготовки и баланс скоростей обучения ... но нет жестких правил для выбора параметры / процессы, которые гарантируют, что такая «настройка» работает. Вы должны следить за качеством и оптимизировать его самостоятельно.

Самый безопасный и надежный способ получения значительных новых данных - это переобучать модель с нуля, используя все доступные данные - отбрасывая старую модель (поскольку координаты в новой модели не обязательно могут быть сопоставимы со старыми координатами) , Может случиться так, что запуск этой новой модели с векторами / весами из старой модели может помочь ей быстрее достичь качества / стабильности, чем начинать с нуля, но все равно не будет гарантировать совместимость координат или обязательно сделает безопасным исключение любых старые данные.

...