Что такое косинусное сходство (Cosine Similarity)?

«Что такое косинусное сходство (Cosine Similarity)?» — вопрос из категории Метрики и функции потерь, который задают на 26% собеседований Data Scientist / ML Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Формула: Для векторов ( A ) и ( B ): [ text{cosine_similarity}(A, B) = frac{A cdot B}{|A| cdot |B|} = frac{sum_{i=1}^{n} A_i Bi}{sqrt{sum{i=1}^{n} Ai^2} cdot sqrt{sum{i=1}^{n} B_i^2}} ]

Пример вычисления и применения в Python:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity

# Пример из NLP: сравнение документов
documents = [
    "Машинное обучение — это интересно",
    "Глубокое обучение — часть машинного обучения",
    "Я люблю программировать на Python"
]

# Векторизуем текст (TF-IDF)
vectorizer = TfidfVectorizer()
tfidf_matrix = vectorizer.fit_transform(documents)

# Вычисляем попарное косинусное сходство
similarity_matrix = cosine_similarity(tfidf_matrix, tfidf_matrix)

print("Матрица сходства:")
print(similarity_matrix)
# Первые два документа будут иметь высокое сходство, третий — низкое.

Основные сферы применения:

  • Поисковые системы и NLP: Для сравнения текстовых документов, векторизованных через Bag of Words или TF-IDF.
  • Рекомендательные системы: Для нахождения похожих товаров или пользователей на основе их векторных представлений (embeddings).
  • Компьютерное зрение: Для сравнения векторных представлений изображений.

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