Лучший практический алгоритм для сходства предложений

18

У меня есть два предложения, S1 и S2, оба из которых имеют количество слов (обычно) ниже 15.

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

Я ищу алгоритм, который будет работать нормально, не затрачивая на это много времени. Есть ли алгоритмы, которые вы нашли успешными и простыми в использовании?

Это может, но не обязательно попадать в категорию кластеризации. Мой опыт связан с машинным обучением, поэтому любые предложения приветствуются :)

DaveTheAl
источник
Что вы реализовали? Я также сталкиваюсь с тем же, должен придумать решение для 'k' связанных статей в корпусе, который постоянно обновляется.
Dileepa

Ответы:

16

Косинус подобие для пространства векторов может быть вы ответите: http://blog.christianperone.com/2013/09/machine-learning-cosine-similarity-for-vector-space-models-part-iii/

Или вы можете рассчитать собственный вектор каждого предложения. Но проблема в том, что такое сходство?

«Это дерево», «Это не дерево»

Если вы хотите проверить семантическое значение предложения, вам понадобится набор данных wordvector. С набором данных wordvector вы сможете проверить связь между словами. Пример: (король - мужчина + женщина = королева)

У Сираджа Равала есть хороший блокнот на python для создания наборов данных wordvector: https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE

Кристиан Фрей
источник
8

Один из подходов, который вы можете попробовать, - это усреднение векторов слов, генерируемых алгоритмами встраивания слов (word2vec, glove и т. Д.). Эти алгоритмы создают вектор для каждого слова, и косинусное сходство между ними представляет семантическое сходство между словами. В случае средних векторов среди предложений. Хорошей отправной точкой для того, чтобы узнать больше об этих методах, является статья « Насколько хорошо вложение предложений захватывает смысл» . Здесь обсуждаются некоторые методы вложения предложений. Я также предлагаю вам изучить неконтролируемое изучение вложений предложений с использованием Compositional n-Gram Features, авторы утверждают, что их подход превосходит современные методы. Также они предоставляют код и некоторые инструкции по использованию в этом репозитории github .

feynman410
источник
3

«Берт-как-сервис» ( https://github.com/hanxiao/bert-as-service#building-a-qa-semantic-search-engine-in-3-minutes ) предлагает именно это решение.

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

Андрес Суарес
источник
2

Вы должны проверить https://github.com/seatgeek/fuzzywuzzy#usage . fuzzywuzzy - это потрясающая библиотека для сопоставления строк и текста, которая дает число от 0 до 100 в зависимости от того, насколько похожи два предложения. Он использует Расстояние Левенштейна для вычисления различий между последовательностями в простом в использовании пакете. Кроме того, проверьте этот пост в блоге для подробного объяснения того, как fuzzywuzzy делает работу. Этот блог также написан нечетким автором

Картикеян мг
источник
1

У этого блога есть решение для короткого сходства текста. В основном они используют модель нейронной сети BERT, чтобы найти сходства между предложениями. https://medium.com/@vimald8959/sentence-categorisation-short-text-similarity-61bb88fae15e

Вимал Дхармалингам
источник
Привет, добро пожаловать в Data Science Stack Exchange! При ссылке на решение с внешнего сайта, пожалуйста, подумайте о том, чтобы написать резюме в своем ответе. Более того, это будет легче читать, и ваш ответ не устареет, если целевая страница изменится или сломается ссылка.
Romain Reboulleau
Хорошо, это действительно хороший материал. Так они в основном используют BERT? @RomainReboulleau определенно прав, хотя!
DaveTheAl