Что означают эпохи в Doc2Vec и обучают, когда мне приходится запускать итерацию вручную?

Я пытаюсь понять параметр epochs в функции Doc2Vec и параметр epochs в функции train.

В следующем фрагменте кода я вручную настроил цикл из 4000 итераций. Требуется или достаточно передать 4000 в качестве параметра эпох в Doc2Vec? Кроме того, чем epochs в Doc2Vec отличается от эпох в train?

documents = Documents(train_set)

model = Doc2Vec(vector_size=100, dbow_words=1, dm=0, epochs=4000,  window=5,
                seed=1337, min_count=5, workers=4, alpha=0.001, min_alpha=0.025)

model.build_vocab(documents)

for epoch in range(model.epochs):
    print("epoch "+str(epoch))
    model.train(documents, total_examples=total_length, epochs=1)
    ckpnt = model_name+"_epoch_"+str(epoch)
    model.save(ckpnt)
    print("Saving {}".format(ckpnt))

Кроме того, как и когда обновляются веса?


person Suhail Gupta    schedule 09.07.2018    source источник
comment
@Downvoter Так неприятно иметь отрицательный голос без комментариев о том, как улучшить вопрос.   -  person Suhail Gupta    schedule 09.07.2018


Ответы (1)


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

Вызовите train() один раз, указав желаемое количество проходов в качестве параметра epochs.

Кроме того, не используйте низкую начальную скорость обучения alpha (0.001), которая затем повышается до значения min_alpha в 25 раз больше (0.025) — это не так, как это должно работать, и большинству пользователей не нужно настраивать значения по умолчанию, связанные с alpha. (Опять же, если вы берете это где-то из онлайн-примера — это плохой пример. Дайте им понять, что они дают плохой совет.)

Кроме того, 4000 тренировочных эпох — это абсурдно много. Значение 10-20 обычно используется в опубликованных работах, когда речь идет о десятках тысяч или миллионах документов. Если ваш набор данных меньше, он может плохо работать с Doc2Vec, но иногда большее количество эпох (или меньшее vector_size) все еще может извлечь что-то обобщаемое из крошечных данных, но все же ожидать использования ближе к десяткам эпох (не тысячам).

Хорошим введением (хотя и с крошечным набором данных, который едва работает с Doc2Vec) является блокнот doc2vec-lee.ipynb Jupyter, который связан с gensim, а также доступен для просмотра в Интернете по адресу:

https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb

Удачи!

person gojomo    schedule 10.07.2018
comment
Хорошо. Когда нужно вызывать train более одного раза? - person Suhail Gupta; 11.07.2018
comment
Продвинутый пользователь, которому необходимо выполнить регистрацию, анализ или корректировку в середине обучения, может разделить обучение на несколько вызовов train() и очень сознательно управлять эффективными параметрами alpha для каждого вызова. Чрезвычайно продвинутый пользователь, экспериментирующий с дальнейшим обучением на уже обученной модели, также может попробовать это, зная обо всех темных проблемах качества/баланса, которые могут возникнуть. Но по сути, если вы еще не знаете конкретно, почему вам нужно это сделать, а также преимущества и риски, это плохая идея. - person gojomo; 11.07.2018
comment
Не могли бы вы также объяснить параметр vector_size? Как определить значение этого атрибута? - person Suhail Gupta; 17.07.2018
comment
Это размер создаваемых слов-векторов/док-векторов, и типичные значения варьируются от 100 (по умолчанию в gensim для скорости и компактности памяти) до 1000. Значения 300-400 кажутся особенно распространенными для слов-векторов. векторы. Единственный способ узнать, что лучше всего подходит для ваших данных/цели, — это выполнить поиск по различным значениям, используя строгую повторяющуюся оценку для оценки каждого варианта. Большие значения имеют смысл только в том случае, если у вас много данных, оперативной памяти и времени на обучение. (Если вы работаете с примерами игрушечного размера из нескольких сотен или нескольких тысяч текстов, даже 100 измерений может быть слишком много.) - person gojomo; 17.07.2018