( Обновление: Я пропустил токенизацию .split()
, выполняемую в коде вопроса после .cleanText()
, так что это не реальная проблема. Но держать ответ для справки и потому, что реальная проблемабыл обнаружен в комментариях.)
Очень часто пользователи получают таинственно слабые результаты от Doc2Vec
, когда они предоставляют простую строку для infer_vector()
.Doc2Vec
infer_vector()
требует список слов, не строка.
Если предоставить строку, функция будет видеть ее как слова со списком из одного символа - в соответствии с моделированием строк в Python как со списком символов, а также с типом-сочетанием символов и односимвольных символов.строки.Большинство этих односимвольных слов, вероятно, не известны модели, а те, которые могут быть - 'i'
, 'a'
и т. Д. - не очень значимы.Таким образом, предполагаемый вектор документов будет слабым и бессмысленным.(И это не удивительно, что такой вектор, поданный к вашей линейной регрессии, всегда дает среднее прогнозируемое значение.)
Если вы разбите текст на ожидаемый список слов, ваши результаты должны улучшиться,
Но в более общем смысле слова, предоставленные для infer_vector()
, должны быть предварительно обработаны и токенизированы точно , однако учебные документы были.
(Справедливый тест на вменяемость того,Чтобы правильно сделать вывод, нужно вывести векторы для некоторых из ваших обучающих документов, а затем запросить модель Doc2Vec
для тегов doc, ближайших к этим повторно выведенным векторам. В общем случае тег / идентификатор того же самого документа должен бытьлучший результат или, по крайней мере, один из лучших. Если это не так, могут быть другие проблемы с данными, параметрами модели или выводом.)