相似度指標
在 Milvus 中,類似度量用來衡量向量之間的相似性。選擇一個好的距離度量有助於顯著改善分類和聚類性能。
下表顯示這些廣泛使用的類似度量如何配合各種輸入資料形式和 Milvus 索引。目前,Milvus 支援各種類型的資料,包括浮點內嵌 (通常稱為浮點向量或密集向量)、二進位內嵌 (也稱為二進位向量),以及稀疏內嵌 (也稱為稀疏向量)。
| 度量類型 | 索引類型 |
|---|---|
|
|
| 公制類型 | 索引類型 |
|---|---|
|
|
| 公制類型 | 索引類型 |
|---|---|
| IP |
|
歐氏距離 (L2)
基本上,歐氏距離量度的是連接 2 個點的線段長度。
歐氏距離的公式如下:
歐氏距離
其中a= (a0,a1,...,an-1) 和b= (b0,b0,...,bn-1) 是 n 維歐氏空間中的兩個點。
這是最常用的距離度量,在資料連續時非常有用。
內積 (IP)
兩個向量嵌入之間的 IP 距離定義如下:
IP
如果您需要比較非規範化的資料,或是關心大小和角度,IP 會比較有用。
如果將 IP 距離公制套用到規範化的嵌入式,結果就等於計算嵌入式之間的余弦相似度。
假設 X' 是由嵌入 X 規範化而成:
歸一化
兩個嵌入式之間的相關性如下:
歸一化
余弦相似性
余弦相似度使用兩組向量之間角度的余弦來衡量它們的相似程度。您可以將兩組向量視為從相同原點 ([0,0,...]),但指向不同方向的兩條線段。
若要計算兩組向量A = (a0,a1,...,an-1)和B = (b0,b1,...,bn-1) 的余弦相似度,請使用下列公式:
余弦相似度
余弦相似度總是在區間[-1, 1]。舉例來說,兩個成正比的向量的余弦相似度為1,兩個正交的向量的相似度為0,兩個相反的向量的相似度為-1。余弦越大,兩個向量之間的角度越小,表示這兩個向量之間的相似度越高。
將它們的余弦相似度從 1 減去,就可以得到兩個向量之間的余弦距離。
Jaccard 距離
Jaccard 相似度系數量度兩個樣本集的相似度,定義為定義集的交集的 cardinality 除以它們的結合的 cardinality。它只適用於有限樣本集。
Jaccard 相似度係數
Jaccard 距離量度資料集間的不相似性,將 Jaccard 相似度係數從 1 減去即可得到。對於二元變數,Jaccard 距離等同於 Tanimoto 系數。
Jaccard 距離
漢明距離
Hamming 距離測量二進位資料串。長度相等的兩個字串之間的距離是位元不同的位元位置數目。
例如,假設有兩個字串,1101 1001 和 1001 1101。
11011001 ⊕ 10011101 = 01000100.由於這包含兩個 1,所以 Hamming 距離 d (11011001, 10011101) = 2。
結構相似性
當一種化學結構作為更大化學結構的一部分出現時,前者稱為次結構,後者稱為上結構。例如,乙醇是乙酸的子結構,而乙酸是乙醇的上層結構。
結構相似性用來判斷兩個化學式是否相似,即其中一個是另一個的上層結構或下層結構。
若要判斷 A 是否是 B 的上層結構,請使用以下公式:
上層結構
其中:
- A 是要檢索的化學式的二進位表示形式
- B 是資料庫中化學式的二進位表示形式
一旦返回0 ,A就不是B 的上層結構。否則,結果會相反。
要確定 A 是否是 B 的子結構,請使用以下公式:
子結構
其中:
- A 是要檢索的化學式的二進位表示形式
- B 是資料庫中化學式的二進位表示形式
一旦返回0 ,則A不是B 的子結構。否則,結果會相反。
常見問題
度量類型是內乘,為什麼向量搜尋的 top1 結果不是搜尋向量本身?
如果使用內乘作為距離度量時,您沒有將向量規範化,就會出現這種情況。什麼是歸一化?為什麼需要歸一化?
歸一化是指轉換內嵌 (向量) 使其規範等於 1 的過程。如果您使用內積來計算內嵌相似度,您必須將您的內嵌歸一化。歸一化之後,內積等於余弦相似度。
更多資訊請參閱維基百科。
為什麼使用 Euclidean distance (L2) 和 Inner Product (IP) 作為距離
公制會得到不同的結果?
檢查向量是否已歸一化。如果沒有,您需要先將向量歸一化。理論上來說,如果向量沒有歸一化,以 L2 計算出來的相似度和以 IP 計算出來的相似度是不同的。下一步
- 進一步了解 Milvus 支援的索引類型。