Если вы предоставите необязательный аргумент epochs
для infer_vector()
, который больше значения по умолчанию, результирующие векторы, от запуска к запуску для одного текста, должны стать более похожими.(Это, вероятно, будет особенно полезно для небольших текстов.)
То есть, между прогонами должен быть только небольшой "джиттер", и это не должно иметь большого значения в ваших последующих сравнениях.(Ваши последующие сравнения должны быть терпимы к небольшим изменениям.) С таким алгоритмом, который использует рандомизацию, нет абсолютно «правильного» результата, только полезные результаты.
Если разница между прогонами остается большой - например, при значительном изменении результатов most_similar()
от прогона к прогону, могут возникнуть другие проблемы с вашей моделью или настройкой:
Doc2Vec плохо работает с учебными комплектами игрушечного размера - в опубликованных работах используются наборы документов от десятков тысяч до миллионов документов, каждый из которых состоит из десятков тысяч слов.Если вы используете всего несколько коротких предложений, вы не получите хороших результатов.
infer_vector()
необходимо получить список строк-токенов, не строка.И эти токены должны были быть предварительно обработаны так же, как и данные обучения.Любые неизвестные слова, введенные в infer_vector()
, будут игнорироваться, что делает ввод короче (или нулевой длиной), делая результаты более (или полностью) случайными.
Отдельно от Doc2Vec
Генсимаесть нативные .save()
и .load()
методы, которые следует использовать вместо сырых pickle
- особенно на больших моделях, они будут работать более эффективно или без ошибок.(Хотя обратите внимание: они могут создавать несколько файлов сохранения, которые следует хранить вместе, чтобы при загрузке основного файла можно было найти вспомогательные файлы.)