Существует несколько возможных подходов, и лучший из них, вероятно, будет зависеть от типа / качества ваших тренировочных данных и конечных целей.
С любой моделью Doc2Vec
вы можете вывести вектор для нового текста, который содержит известные слова - даже текст из одного слова - с помощью метода infer_vector()
. Однако, как и Doc2Vec
в целом, это обычно лучше работает с документами, состоящими не менее чем из десятков, а лучше всего сотен слов. (Крошечные документы из 1-3 слов, кажется, особенно склонны к несколько странным / экстремальным предполагаемым векторам, особенно если модель / обучающие данные были недостаточно мощными с самого начала.)
Помните, что неизвестные слова игнорируются infer_vector()
, поэтому, если вы скармливаете ему документы из 3 слов, для которых два слова неизвестны, это действительно просто вывод на основе одного известного слова. И если вы скармливаете ему только неизвестные слова, он вернет случайный, умеренный вектор инициализации, который не подвергался настройке логического вывода. (Все выводы / обучение всегда начинаются с такого случайного вектора, и если нет известных слов, вы просто получаете их обратно.)
Тем не менее, это, возможно, стоит попробовать, и вы можете напрямую сравнить с помощью косинусоидальности полученные векторы как из крошечных, так и из гигантских документов.
Многие Doc2Vec
режимы обучают как doc-векторы, так и совместимые векторы-слова. Режим PV-DM по умолчанию (dm=1
) делает это, или PV-DBOW (dm=0
), если вы добавляете дополнительное обучение чередующемуся вектору слов (dbow_words=1
). (Если вы используете dm=0, dbow_words=0
, вы получите быстрое обучение и часто довольно хорошие doc-векторы, но слова-векторы вообще не были обучены - так что вы не захотите искать слово такой модели - векторы напрямую для любых целей.)
С такой Doc2Vec
моделью, которая включает действительные векторы слов, вы также можете анализировать свои короткие документы из 1-3 слов с помощью векторов их отдельных слов. Вы можете проверить каждое слово индивидуально по отношению к вектору полного документа или использовать среднее значение слов короткого документа по отношению к вектору полного документа.
Опять же, что лучше, вероятно, будет зависеть от других деталей вашей потребности. Например, если краткий документ является запросом, и вы перечисляете несколько результатов, это может быть случай, когда результаты запроса разнообразны - путем отображения некоторых совпадений, которые действительно близки к отдельным словам в запросе, даже если они не близки к полный запрос - так же ценен для пользователей, как и документы, близкие к полному запросу.
Еще один показатель, на который стоит обратить внимание, - это «расстояние перемещения слов», которое работает только со словосочетаниями-векторами для слов текста, как если бы они были «кучами смысла» для более длинных текстов. Это немного похоже на подход «слово против каждого слова», который вы применяли, - но вы пытаетесь сопоставить слова с их ближайшими аналогами в тексте для сравнения. Это может быть довольно дорого для вычисления (особенно для более длинных текстов), но иногда может дать впечатляющие результаты при сопоставлении альтернативных текстов, в которых используются разные слова, с аналогичным эффектом.
person
gojomo
schedule
13.04.2019