gensim - Doc2Vec: разница между эпохами и другими

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

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

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

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

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

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

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

ИЗМЕНИТЬ:

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

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

ИЗМЕНИТЬ 2:

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


person Simon Hessner    schedule 17.05.2018    source источник
comment
Кажется, связано: stackoverflow.com/questions/46807010 /   -  person Simon Hessner    schedule 17.05.2018
comment
Возможный дубликат: stackoverflow.com/q/47025885/712995   -  person Maxim    schedule 17.05.2018


Ответы (1)


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

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

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

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

person gojomo    schedule 17.05.2018