← Назад

Метрики сходства векторов: коэффициент сходства по косинусу ( L2), косинус и внутреннее произведение

Перетащите точку запроса и переключите метрики, чтобы увидеть, как меняются ближайшие соседи.

5 ближайших соседей(чем ниже, тем ближе)

#1P1842.1
#2P1074.0
#3P17111.6
#4P14122.8
#5P13126.9
Мера сходства
L2
Отображаемое значение
Евклидово расст

L2 (Евклидово расстояние)

Измеряет прямолинейное расстояние между двумя точками. Концентрические окружности показывают равноудаленные зоны — все точки на одной окружности находятся на одинаковом «расстоянии» от запроса.

Что такое метрика?

Метрика — это просто функция, которая принимает два вектора и возвращает одно число, указывающее, насколько они похожи (или отличаются). Векторный поиск, по сути, заключается в том, чтобы «найти K векторов с наилучшим показателем метрики по отношению к моему запросу». Всё остальное — индексы, кластеры, графы — это всего лишь вспомогательные средства, позволяющие избежать вычисления этого показателя для каждого вектора в базе данных.

Выбранная вами метрика определяет, что означает «похожий» для ваших данных. Два вложения могут быть «близкими» по одной метрике и «далекими» по другой — одни и те же данные, разный ответ. Именно поэтому этот выбор происходит ещё до того, как вы начнёте строить индекс.

Три термина, с которыми вы столкнётесь на практике

  • L2 (Евклидово): расстояние по прямой. Чем меньше значение, тем лучше. Используется, когда важны как направление, так и величина — вложения изображений, географические координаты, исходные показания датчиков. Значение по умолчанию для большинства моделей машинного обучения.
  • Косинус: угол между векторами, без учёта длины. Чем выше, тем лучше. Используйте, когда важно только направление — вложения текста (BERT, OpenAI и т. д.), системы рекомендаций, где «популярность» вектора не должна доминировать.
  • Внутреннее произведение (IP): скалярное произведение, учитывает как совпадение, так и величину. Чем выше значение, тем лучше. Используйте с моделями, которые явно нормализуют по коэффициенту вызова-повтора ( IP ) (DPR, многие модели поиска). Математически идентично косинусу, когда векторы имеют единичную длину.

Два практических правила

  • Соотносите метрику с моделью. Модели встраивания обучаются с учётом конкретной метрики. Использование другой метрики во время поиска незаметно ухудшит ваш показатель recall. Перед выбором проверьте карточку модели.
  • Соблюдайте последовательность. Все векторы в коллекции должны использовать одну и ту же метрику. Нельзя смешивать их в рамках одного индекса, а также невозможно проводить значимое сравнение оценок по разным метрикам.

Попробуйте следующее: перетащите точку запроса ближе к началу координат и переключайтесь между режимами «Cosine» и « L2 ». Понаблюдайте, как режим «Cosine» учитывает только «направление», в котором указывает запрос — точки, расположенные на противоположной стороне от начала координат, могут быть «близкими» в режиме « L2 », но «далекими» в режиме «Cosine». Эта визуализация и есть суть всей концепции.

Установка типа метрики в Milvus

В « Milvus » метрика задаётся для каждого индекса с помощью « metric_type » — L2, IP, или COSINE для плотных векторов — при создании индекса. Каждый поиск по этой коллекции затем использует ту же функцию, с которой вы только что работали выше. Единственное и самое надёжное правило: используйте метрику, с которой была обучена ваша модель вложения, которая указана практически на каждой карточке модели.

Два полезных советов. Большинство современных API для встраивания текста (OpenAI, Cohere, Voyage и большинство «sentence-transformers») генерируют векторы, предназначенные для косинусного сходства. И если ваши векторы нормированы до единичной длины, косинус и скалярное произведение возвращают одинаковые ранжирования — поэтому IP использование нормализованных векторов является распространённой и немного более экономичной альтернативой COSINE.

Часто задаваемые вопросы

Какую метрику сходства следует использовать для « OpenAI » или других методов вложения текста?

Используйте косинусное сходство (metric_type COSINE в Milvus). Практически все современные модели вложения текста — включая семейство text-embedding-3 из OpenAI — обучаются на косинусном сходстве. Поскольку вложения OpenAI нормированы до единичной длины, скалярное произведение (IP) дает идентичные ранжирования и является хорошей альтернативой.

В чём разница между косинусной схожестью и внутренним произведением?

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

Можно ли изменить тип метрики после построения индекса в « Milvus »?

Нет. Метрика встраивается в индекс на этапе построения. Чтобы сменить метрику, необходимо удалить индекс и пересоздать его с новым metric_type. Оценки, полученные с использованием разных метрик, также несопоставимы друг с другом, поэтому не следует смешивать их при постобработке результатов.

Влияет ли выбор метрики на коэффициент восстановления или скорость поиска?

Скорость по сути одинакова — « L2 », « IP » и «cosine» требуют одного прохода по вектору. Важна именно точность извлечения: поиск с использованием метрики, отличной от той, на которой была обучена ваша модель вложения, незаметно ухудшает качество результатов, зачастую драматически.

Узнайте больше: ознакомьтесь с документацией по метрикам сходства, чтобы увидеть полный список метрик, поддерживаемых Milvus, включая метрики Хэмминга и Жаккара для бинарных векторов и BM25 для полнотекстового поиска.

Продолжайте изучать