Косинусное сходство (Cosine Similarity)

Косинусное сходство — математическая мера того, насколько похожи два вектора, вычисляемая как косинус угла между ними в пространстве высокой размерности. Значение варьируется от -1 (полностью противоположные) до 1 (совпадающее направление), при этом 0 означает, что векторы ортогональны (не связаны). Это, с большим отрывом, самая распространённая метрика расстояния для сравнения эмбеддингов в AI-приложениях — большинство векторных баз данных используют её по умолчанию, а большинство моделей эмбеддингов (от OpenAI, Cohere, open-source Sentence-Transformers) обучаются с косинусным сходством как явной или неявной целью, то есть эмбеддинги специально оптимизированы так, чтобы косинусные сравнения были осмысленными. Почему это важно для разработчиков AI/SaaS: когда продукт делает «найти похожие документы», «семантический поиск», «рекомендовать похожие товары» или «обнаружить дублирующиеся обращения в поддержку», под капотом почти наверняка работает именно косинусное сходство, и понимание этого демистифицирует иначе непрозрачные оценки релевантности в ответах векторной базы данных (результат запроса Pinecone со `score: 0.89` — это значение косинусного сходства, а не вероятность или процент). Как это работает: для двух векторов A и B косинусное сходство = (A · B) / (‖A‖ × ‖B‖) — скалярное произведение векторов, делённое на произведение их норм (длин). Важно, что эта формула нормализует длину/величину вектора и измеряет только направление — два эмбеддинга могут иметь очень разные величины (например, один представляет короткое предложение, другой — длинный абзац), но всё равно получить высокое косинусное сходство, если они указывают в семантически одном направлении. Именно поэтому косинусное сходство обычно превосходит обычное евклидово расстояние для текстовых эмбеддингов, где величина часто коррелирует с не относящимися к делу факторами вроде длины текста, а не со смыслом. Многие векторные базы данных заранее нормализуют векторы до единичной длины при вставке, что делает косинусное сходство математически эквивалентным скалярному произведению (которое быстрее вычисляется) — поэтому вы видите и `cosine`, и `dotproduct` как варианты метрики индекса с почти идентичным поведением после нормализации векторов. Практический пример: e-commerce SaaS встраивает описания товаров для рекомендаций «покупатели также смотрели». «Беспроводные наушники с шумоподавлением» и «Bluetooth-наушники накладного типа с ANC» дают эмбеддинги с косинусным сходством ~0.91 — очень близко, корректно сигнализируя о почти дублирующем намерении при полном отсутствии общих точных ключевых слов, — тогда как «беспроводные наушники с шумоподавлением» и «бутылка для воды из нержавеющей стали» получают ~0.12, корректно сигнализируя о несвязанных товарах. Рекомендательный движок показывает товары выше порога 0.75 как «похожие». Выбор этого порога — сам по себе продуктовое решение, а не фиксированное правило: команды обычно настраивают его эмпирически на размеченном наборе «действительно похожих» пар, поскольку «правильный» порог косинусного сходства варьируется в зависимости от модели эмбеддингов и предметной области (порог, настроенный для описаний товаров, не обязательно подойдёт для схожести обращений в поддержку).

Похожие термины

Ещё термины: Данные и инфраструктура