Косинусное сходство
Косинусное сходство — это мера сходства между двумя ненулевыми векторами в многомерном пространстве, определяемая как косинус угла между ними. Значение косинусного сходства лежит в диапазоне от -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 →