一種基於兩個向量之間夾角的相似度度量,忽略它們的大小。餘弦相似度為 1 表示兩個向量指向同一方向(意義相同),0 表示垂直(不相關),-1 表示方向相反。它是在語意搜尋、RAG 和推薦系統中比較文本嵌入的標準相似度指標。
每次你進行語意搜尋、使用 RAG 或比較嵌入時,餘弦相似度(很可能)就是決定什麼是「相似」的指標。理解它有助於你除錯檢索品質、在餘弦和替代方案(點積、歐幾里得距離)之間做選擇,以及理解為什麼某些搜尋會遺漏明顯的匹配。
公式:cos(θ) = (A · B) / (||A|| × ||B||),其中 A · B 是點積,||A||、||B|| 是向量的模(長度)。透過除以模,餘弦相似度只衡量方向 — 向量 [1, 2, 3] 的餘弦相似度與 [2, 4, 6] 相同,因為它們指向同一方向。這種歸一化是餘弦相似度適用於嵌入的原因:方向編碼了意義,而大小可能因文本長度或模型特性而異。
如果嵌入已經歸一化為單位長度(模為 1),餘弦相似度就等於點積 — 而點積計算更快(不需要除法)。大多數嵌入模型正是出於這個原因輸出歸一化的向量。使用向量資料庫時,請檢查你的嵌入是否已歸一化:如果是,使用點積(更快);如果不是,使用餘弦相似度(無論是否歸一化都正確)。
餘弦相似度平等地對待所有維度,但某些嵌入維度可能比其他維度更重要。它也只衡量整體方向的相似性,可能會遺漏細微的差異。兩個關於「Python 程式設計」和「Python 蛇」的句子可能具有中等偏高的餘弦相似度,因為它們共享了「Python」的概念。更精密的相似度度量(學習度量、交叉編碼器重排序)可以以更高的計算成本捕捉更細緻的區別。