Что такое cosine vs dot product vs euclidean — как влияет нормализация?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Cosine similarity измеряет только направление векторов, а dot product — и направление, и длину. Евклидово расстояние измеряет геометрическую близость в обычном смысле и сильно зависит от масштаба. Нормализация выравнивает длины векторов и часто делает cosine и dot product эквивалентными для ранжирования.
Определение:
Cosine similarity — это скалярное сходство, равное косинусу угла между двумя векторами: чем ближе к 1, тем больше направление совпадает.
Dot product — это сумма попарных произведений координат; он растёт, если векторы сонаправлены и/или имеют большую норму.
Euclidean distance — это длина отрезка между двумя точками в пространстве; чем меньше значение, тем ближе векторы.
Нормализация обычно означает приведение вектора к единичной длине. После L2-нормализации dot product между двумя векторами становится равен cosine similarity, потому что длины обеих нормированы к 1. Евклидово расстояние при нормированных векторах тоже связано с cosine: чем выше cosine, тем меньше расстояние.
Пример использования:
В векторном поиске эмбеддинги документов часто нормализуют, если хотят искать по смысловому направлению, не давая длине вектора влиять на результат. Если же длина вектора несёт полезный сигнал, например уверенность модели или интенсивность признака, тогда dot product может быть предпочтительнее.
import numpy as np
a = np.array([1.0, 2.0, 3.0])
b = np.array([2.0, 4.0, 6.0])
dot = np.dot(a, b)
cos = dot / (np.linalg.norm(a) * np.linalg.norm(b))
a_n = a / np.linalg.norm(a)
b_n = b / np.linalg.norm(b)
dot_norm = np.dot(a_n, b_n)
euclid = np.linalg.norm(a - b)
print("dot:", dot)
print("cosine:", cos)
print("dot after normalization:", dot_norm)
print("euclidean:", euclid)
Пояснение кода:
В примере векторы a и b сонаправлены, но b в два раза длиннее a.
dot будет большим, потому что он зависит от длины векторов.
cosine будет равен 1, потому что угол между векторами нулевой.
После нормализации dot_norm станет равен cosine, то есть тоже 1.
euclid при этом останется ненулевым, потому что исходные векторы находятся в разных точках пространства.
Ключевые моменты:
- Cosine отвечает на вопрос: «насколько совпадает направление векторов?»
- Dot product отвечает на вопрос: «насколько вектора одновременно сонаправлены и велики?»
- Euclidean distance отвечает на вопрос: «насколько далеко вектора находятся друг от друга?»
- L2-нормализация убирает влияние длины и делает dot product эквивалентным cosine similarity.
- В vector search обычно используют cosine/dot для семантики, а Euclidean — когда важна именно геометрическая дистанция.
- Без нормализации результаты ранжирования могут сильно меняться из-за масштаба векторов, а не из-за смысла.