Открыть сервис

Косинусное сходство

Косинусное сходство — это мера сходства между двумя ненулевыми векторами в многомерном пространстве, определяемая как косинус угла между ними. Значение косинусного сходства лежит в диапазоне от -1 до 1, где 1 означает полное совпадение направлений (нулевой угол), 0 — ортогональность (угол 90°), а -1 — противоположные направления (угол 180°). Косинусное сходство широко применяется в анализе данных, машинном обучении, обработке естественного языка и информационном поиске для сравнения объектов, представленных векторами (документы, изображения, признаки). В отличие от евклидова расстояния, косинусное сходство учитывает только направление векторов, а не их длину, что делает его особенно полезным для разреженных данных.

Математическое определение

Для двух векторов A и B одинаковой размерности n косинусное сходство cos(θ) вычисляется как скалярное произведение, делённое на произведение их длин (норм):

$$\text{similarity}(A,B) = \cos(\theta) = \frac{A \cdot B}{\|A\| \|B\|} = \frac{\sum_{i=1}^{n} A_i B_i}{\sqrt{\sum_{i=1}^{n} A_i^2} \sqrt{\sum_{i=1}^{n} B_i^2}}$$

Если один из векторов равен нулю, косинусное сходство не определено (деление на ноль); на практике такие случаи обрабатываются отдельно, и сходство может приниматься за ноль или игнорироваться.

Свойства

  • Инвариантность к масштабу: умножение любого вектора на положительный скаляр не меняет косинусного сходства, так как меняется только длина, а направление остаётся неизменным.
  • Учёт знака: отрицательное значение указывает на противоположные направления, что может быть значимо в некоторых приложениях.
  • Не является метрикой: косинусное сходство не удовлетворяет неравенству треугольника и не является расстоянием в строгом смысле, но может быть преобразовано в косинусное расстояние: \(1 - \cos(\theta)\), которое лежит в диапазоне [0, 2].

Связь с другими мерами

Косинусное сходство тесно связано с корреляцией Пирсона: если вычесть средние значения из компонент векторов перед вычислением, косинусное сходство между центрированными векторами равно коэффициенту корреляции Пирсона. В контексте разреженных двоичных данных (например, присутствие/отсутствие слов в документе) косинусное сходство совпадает с коэффициентом Охаи (Ochiai coefficient). Также оно является частным случаем меры Танимото (для непрерывных векторов).

Применение

Обработка естественного языка (NLP)

Косинусное сходство — основной инструмент для сравнения документов, представленных в виде векторов TF-IDF или эмбеддингов слов (Word2Vec, GloVe, BERT). Оно лежит в основе:

  • Поиска похожих документов: определение релевантности запроса к коллекции.
  • Кластеризации и классификации текстов: например, в алгоритме k-ближайших соседей.
  • Выделения семантической близости: сопоставление слов или фраз на основе векторных представлений.

Информационный поиск

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

Машинное обучение

  • В задачах коллаборативной фильтрации (рекомендательные системы) косинусное сходство между пользовательскими векторами помогает находить похожих пользователей или элементы.
  • При обучении линейных моделях (например, SVM с линейным ядром) косинусное сходство связано с нормализацией признаков.
  • В нейронных сетях функцию косинусного сходства иногда используют как слой для сравнения векторов (например, в сетях с сиамской архитектурой).

Компьютерное зрение

Для сравнения изображений, представленных векторами признаков (например, гистограммы цветов, дескрипторы SIFT или глубокие эмбеддинги), косинусное сходство позволяет оценивать визуальное сходство независимо от яркости и контраста.

Биоинформатика

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

Пример вычисления

Пусть есть два вектора:

  • A = (1, 2, 0)
  • B = (2, 1, 3)

Скалярное произведение: 1·2 + 2·1 + 0·3 = 2 + 2 + 0 = 4. Норма A: √(1²+2²+0²) = √5 ≈ 2,236. Норма B: √(2²+1²+3²) = √14 ≈ 3,742. Косинусное сходство = 4 / (2,236·3,742) ≈ 4 / 8,367 ≈ 0,478.

Значение 0,478 указывает на умеренное положительное сходство.

Реализация в программном обеспечении

Косинусное сходство встроено во многие библиотеки:

  • scikit-learn (Python): sklearn.metrics.pairwise.cosine_similarity
  • NumPy: можно вычислить вручную через numpy.dot и numpy.linalg.norm
  • R: функция cosine() в пакетах lsa или proxy
  • Apache Spark: pyspark.mllib.linalg.distributed.CosineSimilarity
  • PyTorch, TensorFlow: F.cosine_similarity() или встроенные слои.

Ограничения

  • Чувствительность к знаку: при работе с нормализованными данными (все компоненты неотрицательны, как в TF-IDF) значения лежат только в [0,1]; при отрицательных значениях интерпретация сложнее.
  • Не учитывает масштаб: нулевой вектор вызывает неопределённость, а векторы, отличающиеся длиной в несколько порядков, могут иметь одинаковое направление и, следовательно, косинусное сходство 1, даже если один из них — шум.
  • Отсутствие сходства с корпусом: в TF-IDF разреженные векторы часто дают нулевое сходство, если у них нет общих ненулевых признаков.

Источники

  • Manning C.D., Raghavan P., Schütze H. Introduction to Information Retrieval. Cambridge University Press, 2008. Глава 6 (Vector Space Model).
  • Leskovec J., Rajaraman A., Ullman J.D. Mining of Massive Datasets. Cambridge University Press, 2014. Глава 7 (Similarity measures).
  • Документация библиотеки scikit-learn: «sklearn.metrics.pairwise.cosine_similarity».
  • Wikipedia: «Cosine similarity» (на русском и английском языках).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →