Как рассчитать сходство слова или пары слов по сравнению с документом с использованием модели doc2vec? - PullRequest
0 голосов
/ 13 апреля 2019

В gensim у меня есть обученная модель doc2vec, если у меня есть документ и одно слово или два-три слова, какой будет лучший способ вычислить сходство слов с документом?

Разве я делаю стандартное косинусное сходство между ними, как если бы они были 2 документами? Или есть лучший подход для сравнения небольших строк с документами?

При первой же мысли я смог получить косинусное сходство от каждого слова в строке 1-3 слов и от каждого слова в документе, получающего средние значения, но я не знаю, насколько это эффективно.

1 Ответ

3 голосов
/ 14 апреля 2019

Существует несколько возможных подходов, и то, что лучше, вероятно, будет зависеть от вида / качества ваших тренировочных данных и конечных целей.

С любой моделью Doc2Vec вы можете вывести вектор для нового текста, который содержит известные слова - даже текст из одного слова - с помощью метода infer_vector(). Однако, как и Doc2Vec в целом, это имеет тенденцию работать лучше с документами, по меньшей мере, с десятками, а предпочтительно с сотнями слов. (Крошечные документы из 1-3 слов, кажется, особенно вероятно, получат несколько своеобразные / экстремальные предполагаемые векторы, особенно если модель / данные обучения были недостаточно сильны для начала.)

Остерегайтесь того, что неизвестные слова игнорируются infer_vector(), поэтому, если вы подаете в него документы из 3 слов, для которых два слова неизвестны, это действительно просто вывод, основанный на одном известном слове. И если вы передадите ему только неизвестные слова, он вернет случайный, мягкий вектор инициализации, который не подвергался настройке логического вывода. (Весь вывод / обучение всегда начинается с такого случайного вектора, и, если нет известных слов, вы просто получите это обратно.)

Тем не менее, это, возможно, стоит попробовать, и вы можете напрямую сравнить по косинусному подобию предполагаемые векторы из крошечных и гигантских документов.

Многие режимы Doc2Vec обучают как документы, так и совместимые слова. Режим PV-DM по умолчанию (dm=1) делает это, или PV-DBOW (dm=0), если вы добавляете дополнительное чередование векторов слов (dbow_words=1). (Если вы используете dm=0, dbow_words=0, вы получите быстрое обучение и часто довольно хорошие векторы документов, но векторы слов не будут обучены вообще - так что вы не захотите искать такую ​​модель словосочетания непосредственно для любых целей.)

С такой Doc2Vec моделью, которая включает в себя допустимые векторы слов, вы также можете анализировать свои короткие документы из 1-3 слов через векторы их отдельных слов. Вы можете проверить каждое слово индивидуально по полному вектору документа или использовать среднее значение слов короткого документа по полному вектору документа.

Опять же, что лучше всего, вероятно, будет зависеть от других ваших потребностей. Например, если краткий документ представляет собой запрос, и вы перечисляете несколько результатов, это может быть причиной того, что результат запроса будет разным - путем отображения некоторых совпадений, которые действительно близки к отдельным словам в запросе, даже если они не близки к Полный запрос - так же ценен для пользователей, как и документы, близкие к полному запросу.

Еще одна мера, на которую стоит обратить внимание, это «Расстояние для Word Mover», которое работает только с векторами слов для слов текста, как если бы они были «кучами значения» для более длинных текстов. Это немного похоже на подход «слово против каждого слова», который вы развлекали, но работает, чтобы сопоставить слова с их ближайшими аналогами в тексте сравнения. Это может быть довольно дорого для вычисления (особенно для длинных текстов), но иногда может дать впечатляющие результаты в сопоставлении альтернативных текстов, которые используют различные слова для аналогичного эффекта.

...