← Назад к вопросам

Что такое косинусная близость?

1.7 Middle🔥 191 комментариев
#Машинное обучение

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Косинусная близость: Полное объяснение

Косинусная близость (Cosine Similarity) — это метрика, которая измеряет угол между двумя векторами в многомерном пространстве. Она широко используется в машинном обучении, обработке текста и рекомендательных системах для оценки схожести объектов.

Математическое определение

Для двух векторов A и B косинусная близость вычисляется как:

cos(A, B) = (A · B) / (||A|| * ||B||)

Где:

  • A · B — скалярное произведение векторов
  • ||A|| и ||B|| — евклидовы нормы (длины) векторов

Результат находится в диапазоне от -1 до 1:

  • 1: вектора совпадают (полная схожесть)
  • 0: вектора перпендикулярны (полная несвязанность)
  • -1: вектора указывают в противоположные стороны

Для текстовых данных и неотрицательных векторов результат обычно находится в диапазоне [0, 1].

Преимущества перед другими метриками

Против Евклидова расстояния

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

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

Применимость к разреженным данным

Косинусная близость очень эффективна для разреженных векторов (как в текстовых данных после TF-IDF), поскольку ненулевые элементы в основном не совпадают.

Другие метрики расстояния могут быть чувствительны к множеству нулей в разреженных векторах.

Применение в разных областях

Обработка текста (NLP)

Самое популярное применение — сравнение текстовых документов. После преобразования текста в векторы (TF-IDF, Word2Vec, BERT embeddings), косинусная близость показывает тематическую схожесть.

Примеры:

  • Поиск похожих документов
  • Дедупликация текстов
  • Поиск релевантных статей

Рекомендательные системы

В системах контентной фильтрации косинусная близость помогает:

  • Найти похожие товары/фильмы
  • Найти похожих пользователей
  • Рекомендовать контент на основе профилей

Кластеризация и поиск ближайших соседей

В алгоритмах как K-NN, DBSCAN, агломеративная кластеризация косинусная близость может использоваться как мера расстояния (distance = 1 - similarity).

Компьютерное зрение

Для сравнения признаков изображений, особенно при работе с embeddings из нейронных сетей.

Практический пример на Python

from sklearn.metrics.pairwise import cosine_similarity
from sklearn.feature_extraction.text import TfidfVectorizer
import numpy as np

docs = [
    "машинное обучение и искусственный интеллект",
    "машинное обучение алгоритмы",
    "погода и климат"
]

vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(docs)

similarity_matrix = cosine_similarity(tfidf_matrix)
print("Матрица косинусной близости:")
print(similarity_matrix)

print(f"\nБлизость между doc0 и doc1: {similarity_matrix[0, 1]:.3f}")
print(f"Близость между doc0 и doc2: {similarity_matrix[0, 2]:.3f}")

from numpy import dot
from numpy.linalg import norm

a = np.array([1, 2, 3])
b = np.array([1, 2, 3])

cos_sim_manual = dot(a, b) / (norm(a) * norm(b))
print(f"\nРучной расчёт косинусной близости: {cos_sim_manual:.3f}")

Word2Vec embeddings

Косинусная близость особенно полезна при работе с embeddings из Word2Vec:

from gensim.models import Word2Vec

sentences = [["кот", "сидит"], ["кот", "спит"], ["собака", "гуляет"]]
model = Word2Vec(sentences, vector_size=100, window=2, min_count=1)

similarity_kitten_cat = model.wv.similarity("кот", "кот")  # 1.0
similarity_kitten_dog = model.wv.similarity("кот", "собака")  # низкое значение

Особенности и ограничения

Не учитывает абсолютные значения: косинусная близость зависит только от угла, не от магнитуды. Для некоторых приложений это может быть ограничением.

Требует нормализации: для корректной интерпретации должны быть вычислены нормы векторов.

Чувствительна к изменению масштаба только в смысле размерности: если все компоненты вектора умножить на константу, результат не изменится.

Косинусная близость остаётся одной из самых полезных и широко используемых метрик в науке о данных.