К сожалению, ваш код представляет собой бессмысленную смесь ошибочных практик. так что не следуйте любому онлайн-примеру, которому вы следуете!
Рассмотрим проблемы по порядку, сверху вниз:
Не делайте min_alpha
тем же, что и alpha
. Процесс оптимизации стохастического градиентного спуска требует постепенного снижения скорости обучения от большей к меньшей alpha
в течение просмотра множества разнообразных примеров и обычно должен заканчиваться ничтожно малым значением, близким к нулю. (Существуют и другие проблемы с попыткой кода явно уменьшить alpha
таким образом, о котором мы поговорим ниже.) Только опытные пользователи, которые уже имеют рабочую настройку, хорошо понимают алгоритм и выполняют экспериментальные настройки, должны изменять _5 _ / _ 6_ по умолчанию.
Не устанавливать min_count=1
. Редкие слова, которые встречаются только один или несколько раз, обычно бесполезны для обучения Word2Vec / Doc2Vec. Их небольшое количество вхождений означает, что их собственные соответствующие веса модели не получают особого обучения, и несколько вхождений с большей вероятностью будут нерепрезентативными по сравнению с истинным значением соответствующих слов (что может быть отражено в тестовых данных или более поздних производственных данных). Таким образом, представление модели этих отдельных редких слов вряд ли станет очень хорошим. Но в целом все эти редкие слова сильно конкурируют с другими словами, которые действительно имеют шанс стать значимыми, поэтому «грубые» редкие слова в основном представляют собой случайные помехи по сравнению с другими словами. Или, возможно, эти слова означают дополнительные параметры словаря модели, которые помогают модели стать лучше на поверхности в обучающих данных из-за запоминания не обобщаемых идиосинкразий, но хуже на будущих тестовых / производственных данных. Итак, min_count
- это еще одно значение по умолчанию (5), которое следует изменять только после того, как у вас будет рабочая базовая линия - и если вы будете тщательно метаоптимизировать этот параметр позже, на наборе данных хорошего размера (например, в ваших документах 600K), вы, скорее всего, чтобы обнаружить, что выше min_count
, а не ниже улучшает конечные результаты.
Зачем делать token_count
? Нет более позднего места, где необходимо общее количество токенов. Параметр total_examples
позже ожидает количество примеров текста, то есть количество отдельных документов / предложений, а не не всего слов. Предоставляя (намного большее) количество слов, train()
не сможет правильно управлять alpha
или оценивать прогресс в зарегистрированном выводе.
Не вызывайте train()
несколько раз в цикле с вашим собственным alpha
управлением, если вы не уверены, что знаете, что делаете. Большинство людей ошибаются. Предоставляя здесь в качестве параметра значение по умолчанию model.iter
(которое имеет значение 5), вы фактически выполняете 500 полных проходов по вашему корпусу, что вряд ли вам нужно. Уменьшая начальное значение 0,025 alpha
на 0,0001 за 100 циклов, вы получите конечное значение alpha
0,015 - менее половины начального значения. Вместо этого вызовите train()
ровно один раз с правильным total_examples
и хорошо подобранным значением epochs
(часто в опубликованной работе Doc2Vec используется от 10 до 20). Затем он будет выполнять точное количество явных итераций, разумно alpha
управлять и печатать точную оценку прогресса в журналах.
Наконец, следующая вещь не обязательно является проблемой в вашем коде, потому что вы не показываете, как построен ваш корпус res
, но есть общая ошибка, которую следует остерегаться: убедитесь, что ваш корпус можно повторять несколько раз (как если бы это был список в памяти или перезапускаемый объект итерируемый поверх чего-то, исходящего от ввода-вывода). Часто люди предоставляют одноразовый итератор, который после одного прохода (как в build_vocab()
) больше ничего не возвращает, что приводит к мгновенному обучению и бесполезной, все еще случайной и необученной модели. (Если вы включили ведение журнала и обратите внимание на вывод журнала и время каждого шага, будет очевидно, является ли это проблемой.)
person
gojomo
schedule
19.12.2017