Вполне допустимо предоставить учебный корпус - 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 отдельных шага» только в том случае, если они хотят сделать другой вывод / запись между шагами или что-то продвинутое между шагами, которое может повлиять на состояние модели.