AI Agents · Урок

Косинусное сходство для поиска

Косинусное сходство измеряет угол между двумя векторами — это стандартная метрика расстояния для семантического поиска.

Урок 3 из 413 шагов

«Косинусное сходство для поиска» — бесплатный урок 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 — локальная установка не требуется.

Все уроки этого курса

  1. Что такое эмбеддинги (векторные представления)
  2. Создание эмбеддингов с text-embedding-3
  3. Косинусное сходство для поиска
  4. Сравнение моделей эмбеддингов (OpenAI, Cohere и OSS)
← Назад к AI Agents