相似度指標

在 Milvus 中,類似度量用來衡量向量之間的相似性。選擇一個好的距離度量有助於顯著改善分類和聚類性能。

下表顯示這些廣泛使用的類似度量如何配合各種輸入資料形式和 Milvus 索引。目前,Milvus 支援各種類型的資料,包括浮點內嵌 (通常稱為浮點向量或密集向量)、二進位內嵌 (也稱為二進位向量),以及稀疏內嵌 (也稱為稀疏向量)。

度量類型 索引類型
  • 歐氏距離 (L2)
  • 內積 (IP)
  • 余弦相似度 (COSINE)
  • 平面
  • IVF_FLAT
  • IVF_SQ8
  • IVF_PQ
  • GPU_IVF_FLAT
  • GPU_IVF_PQ
  • HNSW
  • DISKANN
公制類型 索引類型
  • 傑卡
  • 漢明
  • BIN_FLAT
  • BIN_IVF_FLAT
公制類型 索引類型
IP
  • Sparse_inverted_index
  • SPARSE_WAND

歐氏距離 (L2)

基本上,歐氏距離量度的是連接 2 個點的線段長度。

歐氏距離的公式如下:

euclidean 歐氏距離

其中a= (a0,a1,...,an-1) 和b= (b0,b0,...,bn-1) 是 n 維歐氏空間中的兩個點。

這是最常用的距離度量,在資料連續時非常有用。

當選擇歐氏距離為距離公制時,Milvus 只會在應用平方根前計算數值。

內積 (IP)

兩個向量嵌入之間的 IP 距離定義如下:

ip IP

如果您需要比較非規範化的資料,或是關心大小和角度,IP 會比較有用。

如果將 IP 距離公制套用到規範化的嵌入式,結果就等於計算嵌入式之間的余弦相似度。

假設 X' 是由嵌入 X 規範化而成:

normalize 歸一化

兩個嵌入式之間的相關性如下:

normalization 歸一化

余弦相似性

余弦相似度使用兩組向量之間角度的余弦來衡量它們的相似程度。您可以將兩組向量視為從相同原點 ([0,0,...]),但指向不同方向的兩條線段。

若要計算兩組向量A = (a0,a1,...,an-1)B = (b0,b1,...,bn-1) 的余弦相似度,請使用下列公式:

cosine_similarity 余弦相似度

余弦相似度總是在區間[-1, 1]。舉例來說,兩個成正比的向量的余弦相似度為1,兩個正交的向量的相似度為0,兩個相反的向量的相似度為-1。余弦越大,兩個向量之間的角度越小,表示這兩個向量之間的相似度越高。

將它們的余弦相似度從 1 減去,就可以得到兩個向量之間的余弦距離。

Jaccard 距離

Jaccard 相似度系數量度兩個樣本集的相似度,定義為定義集的交集的 cardinality 除以它們的結合的 cardinality。它只適用於有限樣本集。

Jaccard similarity coefficient Jaccard 相似度係數

Jaccard 距離量度資料集間的不相似性,將 Jaccard 相似度係數從 1 減去即可得到。對於二元變數,Jaccard 距離等同於 Tanimoto 系數。

Jaccard distance Jaccard 距離

漢明距離

Hamming 距離測量二進位資料串。長度相等的兩個字串之間的距離是位元不同的位元位置數目。

例如,假設有兩個字串,1101 1001 和 1001 1101。

11011001 ⊕ 10011101 = 01000100.由於這包含兩個 1,所以 Hamming 距離 d (11011001, 10011101) = 2。

結構相似性

當一種化學結構作為更大化學結構的一部分出現時,前者稱為次結構,後者稱為上結構。例如,乙醇是乙酸的子結構,而乙酸是乙醇的上層結構。

結構相似性用來判斷兩個化學式是否相似,即其中一個是另一個的上層結構或下層結構。

若要判斷 A 是否是 B 的上層結構,請使用以下公式:

superstructure 上層結構

其中:

  • A 是要檢索的化學式的二進位表示形式
  • B 是資料庫中化學式的二進位表示形式

一旦返回0A就不是B 的上層結構。否則,結果會相反。

要確定 A 是否是 B 的子結構,請使用以下公式:

substructure 子結構

其中:

  • A 是要檢索的化學式的二進位表示形式
  • B 是資料庫中化學式的二進位表示形式

一旦返回0 ,則A不是B 的子結構。否則,結果會相反。

常見問題

如果度量類型是內乘,為什麼向量搜尋的 top1 結果不是搜尋向量本身?如果使用內乘作為距離度量時,您沒有將向量規範化,就會出現這種情況。
什麼是歸一化?為什麼需要歸一化?

歸一化是指轉換內嵌 (向量) 使其規範等於 1 的過程。如果您使用內積來計算內嵌相似度,您必須將您的內嵌歸一化。歸一化之後,內積等於余弦相似度。

更多資訊請參閱維基百科

為什麼使用 Euclidean distance (L2) 和 Inner Product (IP) 作為距離公制會得到不同的結果?檢查向量是否已歸一化。如果沒有,您需要先將向量歸一化。理論上來說,如果向量沒有歸一化,以 L2 計算出來的相似度和以 IP 計算出來的相似度是不同的。

下一步

翻譯者DeepL

免費嘗試托管的 Milvus

Zilliz Cloud 無縫接入,由 Milvus 提供動力,速度提升 10 倍。

開始使用
反饋

這個頁面有幫助嗎?