跳至主要内容

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 通常會在以下場景中被使用:

  1. 文本分析:
    • 比如檢索文檔集內最相關的內容。
  2. 推薦系統:
    • 比如根據使用者過去行為預測可能喜歡的物品。
  3. 聚類(Clustering):
    • 用於分群算法中衡量樣本之間關聯性。
  4. 特徵選擇:
    • 在多維空間中比對特徵的重要性。

Where?​

Cosine Similarity 多應用於架構中的以下部分:

  1. 資料預處理階段:
    • 將原始數據轉換成數值型向量,例如將文本轉換成 TF-IDF 或 Word2Vec 向量後再計算。
  2. 模型執行階段:
    • 在模型內部進行相似度計算,用以完成分類、聚類等任務。
  3. 查詢處理階段:
    • 當接受到即時查詢時,用 Cosine Similarity 計算該查詢與目標集合中每一項資料的相關性。

Why?​

Cosine Similarity 的主要目的是解決如何高效且準確地衡量兩個向量之間的類似程度。以下是其核心價值:

  1. 忽略大小差異:只專注於向量方向,而不考慮其絕對大小。例如,「快樂」和「非常快樂」可能具有不同頻率,但方向高度一致。
  2. 適合高維空間操作:在 NLP 或推薦系統中常見多維度特徵(例如Bag-of-Words 模型),Cosine Similarity 能有效處理這些情況。
  3. 運算效率高:相比其他距離公式(如歐幾里得距離),計算角度更簡單且快速。

How?​

🛠️ 建立階段​

  1. 資料預處理:

    • 將原始數據轉換成可操作形式,例如將文本轉換成 TF-IDF 或嵌入式向量(如 Word2Vec)。
  2. 正規化向量:

    • 確保所有向量經過正規化處理,使其長度為 1,以避免大小差異影響結果。
  3. 計算內積與模長:

    • 使用公式 $$\vec{A} \cdot \vec{B}$$ 計算內積,再分別求 $$|\vec{A}|$$ 和 $$|\vec{B}|$$ 作為分母。
  4. 得出 Cosine 相似度值:

    • 最終結果由公式 $$\frac{\vec{A} \cdot \vec{B}}{|\vec{A}| |\vec{B}|}$$ 求出,範圍介於 [-1, 1]。

🔍 查詢階段​

  1. 接收 Query 向量:

  2. 比較 Query 與目標集合每個項目:

    • 遍歷目標集合中的所有項目,用 Cosine Similarity 計算每一對 Query 與項目的相似性值。
  3. 排序並返回結果:

    • 將計算出的相似性值排序(由大到小),返回最相關的一組結果給使用者。

補充說明​

🔧 關鍵技術工具​

工具名稱功能描述適合場景
Scikit-learn提供 cosine_similarity APIPython 資料科學工作流程
TensorFlow / PyTorch可自訂計算張量之間 Cosine 相似度深度學習模型
gensim支援 Word2Vec 向量與文本分析NLP 領域

📌 範例比較​

以下是不同技術在測試某 Query 與文檔集時得到的結果比較:

技術名稱文檔 A 相似度文檔 B 相似度文檔 C 相似度
TF-IDF + Cosine0.850.720.10
Word2Vec + Cosine0.910.780.24

從表格可看出,在不同嵌入技術下,Cosine 相似性的表現有所差異,可根據需求選擇適合方式。

🧠 延伸/常見誤解​

容易混淆概念​

  1. 歐幾里得距離 vs Cosine Similarity

    • 歐幾里得距離著重於「空間距離」,因此大小也會影響結果;而 Cosine Similarity 著重於「方向」,忽略了大小問題。因此,當需要純粹比較方向一致性時,Cosine 更適合。
  2. TF-IDF 是必須?

    • 不一定!雖然 TF-IDF 是常見方法,但也可以直接使用深度學習生成的嵌入式表示來搭配 Cosine,相同有效。選擇方式取決於你的具體需求和資源限制。

概念延伸​

除了文本匹配外,Cosine Similarity 還可應用於圖像、音頻以及其他高維資料分析。例如,在電商推薦中,可以將商品特徵轉換為多維空間點並利用此技術提升準確率。