Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Косинусная близость: Полное объяснение
Косинусная близость (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("кот", "собака") # низкое значение
Особенности и ограничения
Не учитывает абсолютные значения: косинусная близость зависит только от угла, не от магнитуды. Для некоторых приложений это может быть ограничением.
Требует нормализации: для корректной интерпретации должны быть вычислены нормы векторов.
Чувствительна к изменению масштаба только в смысле размерности: если все компоненты вектора умножить на константу, результат не изменится.
Косинусная близость остаётся одной из самых полезных и широко используемых метрик в науке о данных.