Поезд Gensim word2ve c и Fasttext - PullRequest
       13

Поезд Gensim word2ve c и Fasttext

0 голосов
/ 06 апреля 2020

Мне нужно тренировать свою собственную модель с word2ve c и fasttext. Читая разные источники, я нашел другую информацию. Итак, я сделал модель и обучил ее так:

model = FastText(all_words, size=300, min_count= 3,sg=1)
model = Word2Vec(all_words, min_count=3, sg = 1, size = 300 )

Итак, я прочитал, что этого должно быть достаточно для создания и обучения модели. Но потом я увидел, что некоторые люди делают это по отдельности:

model = FastText(size=4, window=3, min_count=1)  # instantiate
model.train(sentences=common_texts, total_examples=len(common_texts), epochs=10)  # train

Теперь я растерялся и не знаю, правильно ли то, что я сделал. Может ли кто-нибудь помочь мне объяснить? Спасибо

1 Ответ

2 голосов
/ 06 апреля 2020

Вполне допустимо предоставить учебный корпус - all_words - когда вы создаете экземпляр объекта модели. В этом случае модель автоматически выполнит все шаги, необходимые для обучения модели, используя эти данные. Таким образом, вы можете сделать это:

model = Word2Vec(all_words, ...)  # where '...' is your non-default params

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

Таким образом, если вы не предоставите корпус при создании экземпляра, вы должны сделать два дополнительных вызова метода:

model = Word2Vec(...)  # where '...' is your non-default params
model.build_vocab(all_words)  # discover vocabulary & allocate model
# now train, with #-of-passes & #-of-texts set by earlier steps
model.train(all_words, epochs=model.iter, total_examples=model.corpus_count)

Эти два кодовых блока I ' показанные являются эквивалентными. Верх делает обычные шаги для вас; дно разбивает ступени в ваш явный контроль.

(Код, который вы извлекли в своем вопросе, показывая только a .train() вызов, будет ошибкой по ряду причин. .build_vocab() является необходимым шагом для получения полностью выделенная модель, и вызов .train() должен явно указать желаемое epochs и точное количество total_examples количества элементов в корпусе. Но вы можете и обычно должны повторно использовать значения, которые были уже кэшированы в model двумя предыдущими шагами.)

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

...