Вопрос проверяет понимание различий между косинусным сходством и скалярным произведением при измерении близости векторов, что важно для задач поиска и рекомендаций.
Косинусное сходство (cosine similarity) и скалярное произведение (dot product) — это две метрики для сравнения векторов в многомерном пространстве. Cosine similarity вычисляет косинус угла между векторами, нормализуя их длины, поэтому результат всегда находится в диапазоне от -1 до 1. Dot product — это сумма произведений соответствующих координат, которая зависит как от угла, так и от длины векторов.
Cosine similarity идеально подходит для задач, где важна ориентация вектора, а не его длина — например, при сравнении текстовых эмбеддингов или профилей пользователей. Dot product чаще применяется в системах рекомендаций, где длина вектора может отражать популярность или интенсивность признака.
import numpy as np
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
dot = np.dot(v1, v2) # 32
cosine = dot / (np.linalg.norm(v1) * np.linalg.norm(v2)) # 0.974
# Если увеличить v1 в 10 раз:
v1_scaled = v1 * 10
dot_scaled = np.dot(v1_scaled, v2) # 320
cosine_scaled = dot_scaled / (np.linalg.norm(v1_scaled) * np.linalg.norm(v2)) # 0.974В примере видно, что dot product изменился в 10 раз, а cosine similarity остался тем же, так как направление вектора не изменилось.
Cosine similarity лучше использовать, когда нужно сравнивать объекты по их относительному положению (например, семантическая близость текстов), а dot product — когда важна абсолютная величина (например, в коллаборативной фильтрации с учётом рейтингов).