Кейс 3: Сравнение текстов

Использование косинусного сходства

Предположим, мы представили тексты в виде векторов – через bag-of-words, TF-IDF или эмбеддинги языковой модели. Каждый текст теперь – точка в пространстве.

Тексты как точки в векторном пространстве

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

Алгоритм при этом очень простой:

  1. Преобразовать текст в вектор.

  2. Посчитать косинусное сходство с другими.

  3. Отсортировать по убыванию сходства.

Вариант 1. Чистый PHP (TF-IDF + cosine similarity)

Простейшая векторизация (TF)

Для примера – без лемматизации и стоп-слов.

Приведение векторов к общему пространству

(один и тот же набор слов → одинаковый порядок координат)

Косинусное сходство (логика)

Пример поиска по документам

Результат:

Что делает алгоритм

  1. Преобразуем текст в вектор

  2. Считаем cosine similarity

  3. Сортируем документы по убыванию сходства

circle-info

В данном примере тексты про машинное обучение второго документа оказываются ближе к запросу, независимо от их длины, потому что именно они имеют значимые компоненты в тех же координатах TF-IDF-пространства, а косинусное сходство не учитывает длину документа.

Небольшой дебаг для большего понимания процесса:

Вариант 2. Реализация с использованием Rubix ML

Пример: поиск похожих документов

Результат:

Что здесь происходит

  1. Преобразование текста в векторы С помощью TfIdfTransformer каждый текст переводится в числовое представление.

  2. Сравнение с запросом Для каждого документа считается косинусное сходство с вектором запроса.

  3. Сортировка результатов Документы упорядочиваются по убыванию сходства – наиболее релевантные оказываются первыми.

Вывод

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

Last updated