gensim - Doc2Vec: разница между эпохами и эпохами - PullRequest
0 голосов
/ 17 мая 2018

Читая документацию по gensim Doc2Vec, я немного запутался в некоторых опциях. Например, конструктор Doc2Vec имеет параметр iter :

iter (int) - Количество итераций (эпох) по всему корпусу.

Почему метод поезда также имеет аналогичный параметр, называемый epochs ?

epochs (int) - Количество итераций (эпох) по всему корпусу.

В чем разница между обоими? В документах есть еще один абзац:

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

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

EDIT :

Я только что увидел, что есть возможность указать корпус непосредственно в конструкторе, а не вызывать train () отдельно. Поэтому я думаю, что в этом случае iter будет использоваться, а в противном случае эпох . Это правильно?

Если так, в чем разница между указанием корпуса в конструкторе и вызовом train () вручную? Почему один выбирает тот или другой?

РЕДАКТИРОВАТЬ 2 :

Хотя это и не упоминается в документации, iter теперь считается устаревшим параметром Doc2Vec. Он был переименован в эпох , чтобы соответствовать параметру train () . Обучение, кажется, работает с этим, хотя я борюсь с MemoryErrors .

1 Ответ

0 голосов
/ 17 мая 2018

Параметр в конструкторе изначально назывался iter, и при выполнении всего с помощью одного вызова конструктора - предоставления корпуса в конструкторе - это значение будет просто использоваться в качестве числа проходов обучения.

Когда параметры до train() были расширены и стали обязательными, чтобы избежать распространенных ошибок, термин epochs был выбран в качестве более информативного и отличного от значения iter.

Когда вы указываете корпус в конструкторе, для вас автоматически будут вызываться build_vocab() и train(), как часть конструкции. Для большинства простых целей это нормально.

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

...