雖然 Milvus 開源向量搜索引擎(GitHub)能夠爲用戶隔離下面這些頭疼的細節,不過多學一點向量數據的知識老是沒壞處的。git
n 維原始向量空間:(爲實數,爲非零天然數)github
原始向量:算法
向量 X 的 L2 範數(模長):app
歸一化後的向量:搜索引擎
其中每一維的 L2 正則化算法:3d
歸一化後,向量模長等於1:rest
近似最近鄰搜索(approximate nearest neighbor searching, ANNS)是目前針對向量搜索的主流思路。其核心理念是隻在原始向量空間的子集中進行計算和搜索,從而加快總體搜索速度。blog
假設搜索空間(即原始向量空間的子集):索引
向量 A,B 的內積:get
向量 A,B 的餘弦類似度:
經過餘弦判斷類似度:數值越大,類似度越高。即
假設向量 A,B 歸一化後的向量分別是 A',B' ,則
所以,歸一化後,兩個向量之間的餘弦類似度不變。特別的,
所以,歸一化後,內積與餘弦類似度計算公式等價。
向量 A,B 的歐式距離:
經過歐氏距離判斷類似度:歐式距離越小,類似度越高。即
假設向量 A,B 通過歸一化,那麼進一步展開上面的公式:
所以,歐氏距離的平方與內積負相關。而歐式距離是非負實數,兩個非負實數之間的大小關係與他們自身平方之間的大小關係相同。
因此,向量歸一化後,針對同一個向量,在同等搜索空間的條件下,歐氏距離返回的前K個距離最近的向量結果集與內積返回的前K個類似度最大的向量結果集是等價的。