Во-первых, прежде чем мы начнем, я рекомендую вам обратиться к аналогичным вопросам в сети, таким как /datascience/25053/best-practical-algorithm-for-sentence-simility и https: // stackoverflow. ком / вопросы / 62328 / есть,-ан-алгоритм-что-говорит-на-семантическое-сходство-из-двух фраз
Чтобы определить сходство предложений, нам нужно рассмотреть, какие данные у нас есть. Например, если у вас был помеченный набор данных, то есть похожие предложения и разные предложения, то прямой подход мог бы заключаться в использовании контролируемого алгоритма для классификации предложений.
Подход, который мог бы определить структурное сходство предложений, заключался бы в усреднении векторов слов, генерируемых алгоритмами встраивания слов, т.е. word2vec. Эти алгоритмы создают вектор для каждого слова, а косинусное сходство между ними представляет семантическое сходство между словами. (Даниэль Л 2017)
Используя векторы слов, мы можем использовать следующие метрики, чтобы определить сходство слов.
- Косинусное расстояние между вложениями слов
- Евклидово расстояние между вложениями слов
Косинусное сходство является мерой сходства между двумя ненулевыми векторами внутреннего пространства произведений, которое измеряет косинус угла между ними. Угол косинуса - это мера совпадения предложений с точки зрения их содержания.
Евклидово расстояние между двумя векторами слов обеспечивает эффективный метод измерения лингвистического или семантического сходства соответствующих слов. (Фрэнк Д 2015)
В качестве альтернативы вы можете рассчитать собственный вектор предложений, чтобы определить сходство предложений.
Собственные векторы представляют собой особый набор векторов, связанных с линейной системой уравнений (т.е. матричным уравнением). Здесь матрица подобия предложения генерируется для каждого кластера и вычисляется собственный вектор для матрицы. Подробнее о подходе к ранжированию предложений на основе собственных векторов можно прочитать в этой статье https://pdfs.semanticscholar.org/ca73/bbc99be157074d8aad17ca8535e2cd956815.pdf
Для исходного кода Siraj Rawal имеет блокнот Python для создания набора векторов слов. Векторы слов затем могут быть использованы, чтобы найти сходство между словами. Исходный код доступен здесь https://github.com/llSourcell/word_vectors_game_of_thrones-LIVE.
Другой вариант - это учебник от Oreily, в котором для определения сходства документов используется библиотека Python gensin. Этот учебник использует NLTK для токенизации, а затем создает из корпуса модель tf-idf (термин частота-обратная частота документа). TF-IDF затем используется для определения сходства документов. Учебное пособие доступно здесь https://www.oreilly.com/learning/how-do-i-compare-document-sdentifity-using-python