Генсим и Раздражать за поиск похожих предложений - PullRequest
0 голосов
/ 19 февраля 2020

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

Похоже, я смогу сделать это с annoy и gensim , но все примеры, которые я вижу, используют word2ve c, который, как я считаю, хорош для поиска отдельных похожих слов, но не для предложений. Тем не менее, я отмечаю, что AnnoyIndexer () может принимать модель word2ve c ИЛИ модель doc2ve c.

Верно ли я, что процесс такой же, но замена модели word2ve c на doc2ve c модель и использование вектора doc2ve c поискового предложения?

Нужно ли каким-либо образом использовать предварительно обученные вложения слов или я буквально обучаю модель doc2ve c с набором предложений, которые у меня есть в моей базе данных?

Спасибо!

1 Ответ

1 голос
/ 20 февраля 2020

Doc2Vec не требует каких-либо предварительно обученных переносчиков слов: вы просто тренируете его в своем корпусе, и он узнает, что ему нужно.

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

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

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

...