Косинусное сходство для поиска
Косинусное сходство измеряет угол между двумя векторами — это стандартная метрика расстояния для семантического поиска.
«Косинусное сходство для поиска» — бесплатный урок AI Agents на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Измерение сходства
Насколько близки два вектора? Три распространённые метрики расстояния:
- Косинусное сходство — угол между векторами
- Скалярное произведение — проекция
- Евклидово расстояние (L2) — расстояние по прямой
Для текстовых эмбеддингов по умолчанию используется косинусное сходство.
Формула косинусного сходства
Для векторов A и B:
cos(A, B) = (A . B) / (|A| * |B|)
Результат находится между -1 и 1:
- 1 = одинаковое направление
- 0 = ортогональные (несвязанные)
- -1 = противоположные направления
В Python с NumPy
Прямая реализация:
import numpy as np
def cosine_similarity(a, b):
a = np.array(a)
b = np.array(b)
return np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b))
print(cosine_similarity(vec_apple, vec_orange)) # high
print(cosine_similarity(vec_apple, vec_car)) # lowПредварительно нормализованные векторы
Если ваши эмбеддинги уже нормализованы (как у OpenAI), косинусное сходство равно скалярному произведению, поэтому деление можно пропустить:
def cosine_normalized(a, b):
return np.dot(a, b) # fasterИзвлечение K лучших результатов
Чтобы найти K наиболее похожих документов на запрос, вычислите сходство с каждым документом и выполните сортировку:
def topk(query_vec, doc_vecs, k=5):
scores = [(np.dot(query_vec, v), i) for i, v in enumerate(doc_vecs)]
scores.sort(reverse=True)
return scores[:k]Масштабирование
Наивное извлечение K лучших результатов требует O(N) операций на запрос — это подходит для 10k документов, но медленно при 10M. Для больших корпусов используйте индексы приближённых ближайших соседей (ANN): HNSW, IVF, FAISS.
Почему не евклидово расстояние
Расстояние L2 считает длину вектора (LENGTH) значимой. Для эмбеддингов направление важнее величины — поэтому обычно выбирают косинусное сходство.
(Для нормализованных векторов L2 и косинусное сходство дают одинаковое ранжирование, поэтому разницы нет.)
Скалярное произведение и косинусное сходство
Если векторы уже нормализованы, скалярное произведение = косинусному сходству и вычисляется быстрее (без деления). В большинстве промышленных систем используют скалярное произведение для нормализованных векторов.
A Tiny End-to-End Retrieval
docs = ['Python is a programming language', 'Pizza is Italian food', 'The Eiffel Tower is in Paris']
doc_vecs = [embed(d) for d in docs]
query_vec = embed('What is Python?')
scores = [(cosine_similarity(query_vec, v), d) for v, d in zip(doc_vecs, docs)]
scores.sort(reverse=True)
for s, d in scores:
print(f'{s:.3f} {d}')
# 0.83 Python is a programming language
# 0.45 Pizza is Italian food
# 0.41 The Eiffel Tower is in ParisГибридное извлечение
Объедините косинусное сходство с поиском по ключевым словам (BM25), чтобы получить преимущества обоих подходов — семантический поиск и точное совпадение. Сегодня большинство промышленных систем используют гибридное извлечение.
Фильтрация по порогу
Отбрасывайте результаты ниже заданного порога сходства, чтобы не передавать LLM нерелевантный контекст:
results = [r for r in retrieved if r.score > 0.7]Диапазон косинусного сходства
Каков диапазон значений косинусного сходства?
Итоги
Косинусное сходство — стандартная метрика для извлечения эмбеддингов. Для промышленных систем его следует сочетать с гибридным поиском и ANN.
Изучай AI Agents с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 60
- Уроки
- 239
Часто задаваемые вопросы
Урок «Косинусное сходство для поиска» бесплатный?
Да — полный текст урока «Косинусное сходство для поиска» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.
Чему я научусь в уроке «Косинусное сходство для поиска»?
Косинусное сходство измеряет угол между двумя векторами — это стандартная метрика расстояния для семантического поиска. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать AI Agents?
Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Косинусное сходство для поиска»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке AI Agents?
Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Что такое эмбеддинги (векторные представления)
- Создание эмбеддингов с text-embedding-3
- Косинусное сходство для поиска
- Сравнение моделей эмбеддингов (OpenAI, Cohere и OSS)