Q11: я неоднократно тренировал свою модель Word2Vec
/ Doc2Vec
/ etc, используя один и тот же текстовый корпус, но векторы каждый раз были разными. Есть ли ошибка или я ошибся? (* 2век обучения недетерминизма)
Ответ: Модели * 2vec (word2vec, fasttext, doc2vec…) начинаются со случайной инициализации, затем в большинстве режимов используется дополнительная рандомизация
во время тренировки. (Например, окна обучения случайным образом
усеченный как эффективный способ взвешивания более близких слов выше.
Отрицательные примеры в режиме отрицательной выборки по умолчанию выбираются
случайным образом. И сокращение частых слов, как контролируется
параметром sample
, определяется случайным выбором. Эти
поведения были определены в алгоритме оригинальной статьи Word2Vec
описание.)
Даже когда вся эта случайность исходит от
генератор псевдослучайных чисел, который был посеян, чтобы дать
воспроизводимый поток случайных чисел (что по умолчанию делает gensim),
обычный случай многопоточного обучения может еще больше изменить
порядок подготовки текстовых примеров и, следовательно, окончательное состояние модели.
(Кроме того, в Python 3.x хэширование строк рандомизируется каждый
перезапуск интерпретатора Python - изменение порядка итераций
словарный запас от бега к бегу, и, таким образом, делая даже то же самое
Строка случайных чисел выбирает разные слова в разных
запускает.)
Таким образом, следует ожидать, что модели варьируются от запуска к запуску, даже
обучены на тех же данных. Там нет единого "правильного места" для любого
слово-вектор или документ-вектор, чтобы свернуть: только позиции, которые в
постепенно полезные расстояния и направления от других векторов
обученный внутри той же модели. (В общем, только векторы, которые были
обучены вместе в чередующемся сеансе контрастного использования становятся
сопоставимы по своим координатам.)
Подходящие параметры обучения должны давать модели, которые примерно
полезны, от запуска к бегу, как друг друга. Тестирование и оценка
процессы должны быть терпимы к любым сдвигам в положениях вектора и
небольшой «джиттер» в общей полезности моделей, возникающий из
свойственный алгоритм случайности. (Если наблюдаемое качество от
ход за ходом сильно различается, могут быть и другие проблемы: слишком мало данных,
плохо настроенные параметры или ошибки / слабости в оценке
Метод.)
Вы можете попытаться форсировать детерминизм, используя workers=1
для ограничения
обучение в одном потоке - и, если в Python 3.x, с использованием
PYTHONHASHSEED
переменная окружения для отключения обычного строкового хэша
рандомизации. Но тренировки будут намного медленнее, чем с
потоки. И вы будете скрывать врожденное
случайность / приближенность лежащих в основе алгоритмов, таким образом, что
может сделать результаты более хрупкими и зависит от удачи
конкретная настройка. Лучше терпеть немного джиттера и использовать
чрезмерное дрожание как индикатор проблем в других местах данных или
Настройка модели - вместо навязывания поверхностного детерминизма.