拖曳查詢點並切換度量單位,以觀察最近鄰向量如何變化。
測量兩點之間的直線距離。同心圓顯示等距區域——同一圓上的所有點與查詢向量的「距離」皆相等。
度量(metric)僅是一個函數,它接受兩個向量並返回一個數值,用以表示它們有多相似(或多不同)。向量搜尋的核心在於「找出針對我的查詢,度量分數最高的 K 個向量」。 其餘的一切——索引、叢集、圖——都只是為了避免針對資料庫中的每個向量計算此分數而進行的輔助管理。
您選擇的度量標準決定了「相似」對您的資料而言代表什麼。兩個嵌入向量在某個度量標準下可能「接近」,但在另一個度量標準下卻可能「遙遠」——相同的資料,卻得出不同的結果。這就是為什麼必須在建立索引之前就做出這個選擇。
試試看:將查詢點拖曳至原點附近,在餘弦相似度和 L2 之間切換。觀察餘弦相似度如何只關注查詢向量的方向——位於原點另一側的點,在 L2 下可能很近,在餘弦相似度下卻可能很遠。這就是這個概念的直觀呈現。
在《Milvus 》中,度量值是透過 `metric_type ` 針對每個索引進行設定—— L2, IP,或 COSINE (針對密集向量)——於建立索引時設定。此後針對該集合的每次搜尋,皆會使用您剛才在上方操作過的相同函式。最可靠的單一規則是:使用您嵌入式模型所訓練的度量標準,該標準幾乎列於每張模型卡上。
兩個實用的捷徑。大多數現代文字嵌入 API(OpenAI 、Cohere 、Voyage 以及大多數句子轉換器)所產生的向量皆適用於餘弦相似度。若您的向量已歸一化為單位長度,則餘弦相似度與內積所返回的排名結果將完全相同——因此 IP 對歸一化向量進行計算,是 COSINE的常見替代方案,且運算成本略低。
請使用餘弦相似度(度量類型:COSINE ,詳見Milvus )。幾乎所有現代文本嵌入模型——包括OpenAI 的 text-embedding-3 系列——皆是針對餘弦相似度進行訓練的。由於OpenAI 中的嵌入向量已歸一化為單位長度,內積(IP )可產生相同的排序結果,因此是合適的替代方案。
餘弦相似度僅測量兩個向量之間的夾角,忽略其長度。內積(點積)同時考量方向對齊與大小,因此指向相同方向且較長的向量得分較高。對於單位歸一化的向量,這兩者在數學上等價。
不。該度量標準是在建立索引時預先嵌入其中的。若要切換度量標準,請先刪除索引,再使用新的 metric_type 重新建立。不同度量標準的評分彼此之間亦無法相互比較,因此在後處理結果時請勿將它們混用。
運算速度基本上完全相同——L2 、IP 以及 cosine 皆只需對向量進行一次遍歷。關鍵在於召回率:若使用與嵌入模型訓練時不同的度量標準進行搜尋,會悄無聲息地降低結果品質,且往往降幅劇烈。
深入了解:請閱讀《相似度指標》文件,以查看Milvus 支援的完整指標清單,包括二進位向量的漢明(Hamming)與雅卡德(Jaccard)指標,以及全文檢索的 BM25 指標。