Калькулятор косинусного сходства
Вставьте два вектора одинаковой длины — эмбеддинги, частоты слов, оценки — и получите их косинусное сходство, косинусное расстояние 1 − cos θ, угол между векторами и числа, из которых всё это получается.
Работает в браузере: всё, что вы вводите, никуда не отправляется.
Как пользоваться
- Вставьте векторы A и B, например
1; 2; 3 и 4; 5; 6.
- Сходство — вверху; расстояние, угол, скалярное произведение и длины — ниже.
Как это работает
- Скалярное произведение: A·B = Σ aᵢbᵢ.
- Длины: ‖A‖ = √(Σ aᵢ²), ‖B‖ = √(Σ bᵢ²).
- Сходство: cos θ = A·B / (‖A‖ ‖B‖); расстояние = 1 − cos θ.
- Угол вычисляется через единичные векторы в форме, которая остаётся точной около 0° и 180°.
Пример
A = (1; 2; 3), B = (4; 5; 6). A·B = 4 + 10 + 18 = 32, ‖A‖ = √14 = 3,74166, ‖B‖ = √77 = 8,77496. Сходство — 32 / √1078 = 0,974632, косинусное расстояние — 0,0253682, угол — 12,9332° (0,225726 рад). Векторы направлены почти одинаково, хотя B длиннее A более чем вдвое.
Советы и частые ошибки
- Компоненты в обоих векторах должны идти в одном порядке: сходство сравнивает их по позициям.
- Если сначала центрировать данные (вычесть из каждого вектора его среднее), косинусное сходство превращается в коэффициент корреляции Пирсона.
- В разреженных векторах нули ничего не дают: в скалярное произведение входят только позиции, где оба значения ненулевые.
Частые вопросы
Какая формула косинусного сходства?
cos θ = A·B / (‖A‖ ‖B‖): скалярное произведение, делённое на произведение длин. Значение от −1 (противоположные направления) через 0 (перпендикулярные) до 1 (одно направление).
Чем косинусное сходство лучше евклидова расстояния?
Оно сравнивает направления и не зависит от длины: текст и тот же текст, повторённый дважды, полностью сходны (сходство 1), хотя евклидово расстояние между их векторами большое. Поэтому его часто используют для текстов и эмбеддингов.
Косинусное расстояние — настоящая метрика?
1 − cos θ широко используется, но не удовлетворяет неравенству треугольника. Сам угол θ удовлетворяет, так что, если нужна метрика, берите угол.
Может ли сходство быть отрицательным?
Да, когда векторы направлены примерно в противоположные стороны. Для неотрицательных данных, например частот слов, оно остаётся от 0 до 1.