Некоторые мысли:
Если ваше начальное обучение выполняло какую-либо дополнительную предварительную обработку текстовых примеров — например, выравнивание регистра — вы также должны сделать это с токенами, переданными в infer_vector()
.
Значения gensim по умолчанию для необязательных параметров infer_vector()
, включая steps=5
и alpha=0.1
, являются дикими догадками, которых может быть недостаточно для многих моделей/режимов обучения. Многие сообщают о лучших результатах с гораздо более высоким steps
(до сотни) или более низким начальным alpha
(больше похоже на тренировочный показатель по умолчанию 0.025
).
Когда сама модель возвращает most_similar()
результатов, она выполняет все свои вычисления косинусного сходства с нормализованными doc-векторами единичной длины. – то есть те, которые находятся в сгенерированном по мере необходимости массиве model.docvecs.doctag_syn0norm
. Однако вектор, возвращаемый infer_vector()
, будет просто необработанным, ненормализованным предполагаемым вектором — аналогично необработанным векторам в массиве model.docvecs.doctag_syn0
. При вычислении собственных косинусных подобий обязательно учитывайте это. (Я думаю, что spatial.distance.cosine()
объясняет это.)
В общем, повторный вывод вектора для того же текста, который был обучен вектору документа во время массового обучения, должен привести к очень похожему (но не идентичному) вектору. Так что, если на самом деле m.docvecs[18638]
был для того же самого текста, который вы здесь повторно выводите, расстояние должно быть довольно маленьким. (Это может быть хорошей «проверкой работоспособности» того, имеет ли процесс обучения, а затем последующие выводы, желаемый эффект.) Если это ожидаемое сходство не достигается, вы должны повторно проверить, была ли правильная предварительная обработка во время обучения, что параметры модели вызывают реальное обучение, что вы ссылаетесь на правильный обученный вектор (18638) без каких-либо ошибок, связанных с ошибками, и т.д., и так далее.
person
gojomo
schedule
15.05.2017