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

Как мы уже обсуждали, евклидово расстояние плохо подходит для сравнения текстов разной длины. Косинусное сходство, напротив, учитывает только направление векторов, то есть относительное распределение слов и смыслов. Поэтому оно широко используется в задачах поиска по документам и семантического сравнения.
Алгоритм при этом очень простой:
Преобразовать текст в вектор.
Посчитать косинусное сходство с другими.
Отсортировать по убыванию сходства.
Вариант 1. Чистый PHP (TF-IDF + cosine similarity)
Простейшая векторизация (TF)
Для примера – без лемматизации и стоп-слов.
Приведение векторов к общему пространству
(один и тот же набор слов → одинаковый порядок координат)
Косинусное сходство (логика)
Пример поиска по документам
Результат:
Что делает алгоритм
Преобразуем текст в вектор
Считаем cosine similarity
Сортируем документы по убыванию сходства
Небольшой дебаг для большего понимания процесса:
Вариант 2. Реализация с использованием Rubix ML
Пример: поиск похожих документов
Результат:
Что здесь происходит
Преобразование текста в векторы С помощью
TfIdfTransformerкаждый текст переводится в числовое представление.Сравнение с запросом Для каждого документа считается косинусное сходство с вектором запроса.
Сортировка результатов Документы упорядочиваются по убыванию сходства – наиболее релевантные оказываются первыми.
Вывод
Даже если документы имеют разную длину, косинусное сходство позволяет корректно сравнивать их по смыслу. Именно поэтому такой подход лежит в основе большинства систем полнотекстового и семантического поиска.
Last updated