Cosine Similarity
What?
Cosine Similarity 是一種常用於計算兩個向量之間相似度的技術。它透過衡量兩個向量的「角度」來判斷它們的相似程度,而非直接比較數值大小。公式為:
$$ \text{Cosine Similarity} = \frac{\vec{A} \cdot \vec{B}}{|\vec{A}| |\vec{B}|} $$
簡單來說,當 Cosine Similarity 的結果接近 1 時,代表兩個向量非常相似;接近 0 則表示不太相似;若為負值,則可能代表方向完全相反。
範例情境
假設你在做文件搜尋系統,使用 Cosine Similarity 可以幫助你比較使用者提供的一段文字(Query)與資料庫中的文件向量是否相似。例如,當用戶輸入「人工智慧」,系統會找出與該主題相關的文章。
Who?
Cosine Similarity 的主要使用者包括:
- 資料科學家:分析文本或其他結構化資料的相似性。
- 推薦系統工程師:用於推薦商品、內容等。
- 自然語言處理(NLP)專家:在語言模型中進行文本匹配或分類。
- 機器學習研究員:用於聚類分析或特徵工程。
誰受影響?
受影響的對象通常是需要進行比較、分類或篩選的大量資料,例如電子商務平台上的商品、搜尋引擎中的文件,以及音樂與影片推薦系統等。
When?
Cosine Similarity 通常會在以下場景中被使用:
- 文本分析:
- 比如檢索文檔集內最相關的內容。
- 推薦系統:
- 比如根據使用者過去行為預測可能喜歡的物品。
- 聚類(Clustering):
- 用於分群算法中衡量樣本之間關聯性。
- 特徵選擇:
- 在多維空間中比對特徵的重要性。
Where?
Cosine Similarity 多應用於架構中的以下部分:
- 資料預處理階段:
- 模型執行階段:
- 在模型內部進行相似度計算,用以完成分類、聚類等任務。
- 查詢處理階段:
- 當接受到即時查詢時,用 Cosine Similarity 計算該查詢與目標集合中每一項資料的相關性。
Why?
Cosine Similarity 的主要目的是解決如何高效且準確地衡量兩個向量之間的類似程度。以下是其核心價值:
- 忽略大小差異:只專注於向量方向,而不考慮其絕對大小。例如,「快樂」和「非常快樂」可能具有不同頻率,但方向高度一致。
- 適合高維空間操作:在 NLP 或推薦系統中常見多維度特徵(例如Bag-of-Words 模型),Cosine Similarity 能有效處理這些情況。
- 運算效率高:相比其他距離公式(如歐幾里得距離),計算角度更簡單且快速。
How?
🛠️ 建立階段
-
資料預處理:
- 將原始數據轉換成可操作形式,例如將文本轉換成 TF-IDF 或嵌入式向量(如 Word2Vec)。
-
正規化向量:
- 確保所有向量經過正規化處理,使其長度為 1,以避免大小差異影響結果。
-
計算內積與模長:
- 使用公式 $$\vec{A} \cdot \vec{B}$$ 計算內積,再分別求 $$|\vec{A}|$$ 和 $$|\vec{B}|$$ 作為分母。
-
得出 Cosine 相似度值:
- 最終結果由公式 $$\frac{\vec{A} \cdot \vec{B}}{|\vec{A}| |\vec{B}|}$$ 求出,範圍介於 [-1, 1]。
🔍 查詢階段
-
接收 Query 向量:
- 根據使用者輸入內容生成一個查詢向量,比如基於 TF-IDF 和 Sentence Embedding Transformers技術生成。
-
比較 Query 與目標集合每個項目:
- 遍歷目標集合中的所有項目,用 Cosine Similarity 計算每一對 Query 與項目的相似性值。
-
排序並返回結果:
- 將計算出的相似性值排序(由大到小),返回最相關的一組結果給使用者。
補充說明
🔧 關鍵技術工具
| 工具名稱 | 功能描述 | 適合場景 |
|---|---|---|
| Scikit-learn | 提供 cosine_similarity API | Python 資料科學工作流程 |
| TensorFlow / PyTorch | 可自訂計算張量之間 Cosine 相似度 | 深度學習模型 |
| gensim | 支援 Word2Vec 向量與文本分析 | NLP 領域 |
📌 範例比較
以下是不同技術在測試某 Query 與文檔集時得到的結果比較:
| 技術名稱 | 文檔 A 相似度 | 文檔 B 相似度 | 文檔 C 相似度 |
|---|---|---|---|
| TF-IDF + Cosine | 0.85 | 0.72 | 0.10 |
| Word2Vec + Cosine | 0.91 | 0.78 | 0.24 |
從表格可看出,在不同嵌入技術下,Cosine 相似性的表現有所差異,可根據需求選擇適合方式。
🧠 延伸/常見誤解
容易混淆概念
-
歐幾里得距離 vs Cosine Similarity
- 歐幾里得距離著重於「空間距離」,因此大小也會影響結果;而 Cosine Similarity 著重於「方向」,忽略了大小問題。因此,當需要純粹比較方向一致性時,Cosine 更適合。
-
TF-IDF 是必須?
- 不一定!雖然 TF-IDF 是常見方法,但也可以直接使用深度學習生成的嵌入式表示來搭配 Cosine,相同有效。選擇方式取決於你的具體需求和資源限制。
概念延伸
除了文本匹配外,Cosine Similarity 還可應用於圖像、音頻以及其他高維資料分析。例如,在電商推薦中,可以將商品特徵轉換為多維空間點並利用此技術提升準確率。