У меня есть два предложения, S1 и S2, оба из которых имеют количество слов (обычно) ниже 15.
Каковы наиболее практичные и успешные (машинное обучение) алгоритмы, которые, возможно, легко реализовать (нейронная сеть в порядке, если архитектура не такая сложная, как Google Inception и т. Д.).
Я ищу алгоритм, который будет работать нормально, не затрачивая на это много времени. Есть ли алгоритмы, которые вы нашли успешными и простыми в использовании?
Это может, но не обязательно попадать в категорию кластеризации. Мой опыт связан с машинным обучением, поэтому любые предложения приветствуются :)
nlp
clustering
word2vec
similarity
DaveTheAl
источник
источник
Ответы:
Косинус подобие для пространства векторов может быть вы ответите: 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
источник
Один из подходов, который вы можете попробовать, - это усреднение векторов слов, генерируемых алгоритмами встраивания слов (word2vec, glove и т. Д.). Эти алгоритмы создают вектор для каждого слова, и косинусное сходство между ними представляет семантическое сходство между словами. В случае средних векторов среди предложений. Хорошей отправной точкой для того, чтобы узнать больше об этих методах, является статья « Насколько хорошо вложение предложений захватывает смысл» . Здесь обсуждаются некоторые методы вложения предложений. Я также предлагаю вам изучить неконтролируемое изучение вложений предложений с использованием Compositional n-Gram Features, авторы утверждают, что их подход превосходит современные методы. Также они предоставляют код и некоторые инструкции по использованию в этом репозитории github .
источник
«Берт-как-сервис» ( https://github.com/hanxiao/bert-as-service#building-a-qa-semantic-search-engine-in-3-minutes ) предлагает именно это решение.
Чтобы ответить на ваш вопрос, реализовать его самостоятельно с нуля было бы довольно сложно, поскольку BERT не является тривиальным NN, но с этим решением вы можете просто подключить его к своему алгоритму, использующему сходство предложений.
источник
Вы должны проверить https://github.com/seatgeek/fuzzywuzzy#usage . fuzzywuzzy - это потрясающая библиотека для сопоставления строк и текста, которая дает число от 0 до 100 в зависимости от того, насколько похожи два предложения. Он использует Расстояние Левенштейна для вычисления различий между последовательностями в простом в использовании пакете. Кроме того, проверьте этот пост в блоге для подробного объяснения того, как fuzzywuzzy делает работу. Этот блог также написан нечетким автором
источник
У этого блога есть решение для короткого сходства текста. В основном они используют модель нейронной сети BERT, чтобы найти сходства между предложениями. https://medium.com/@vimald8959/sentence-categorisation-short-text-similarity-61bb88fae15e
источник