🧮

向量嵌入與相似度原理

Part 3:理解 RAG 的核心技術 - 如何讓電腦「理解」語意

向量嵌入 語意搜尋 餘弦相似度 Embedding

🤔 電腦如何「理解」文字?

電腦其實不懂文字,它只懂數字!

❌ 傳統關鍵字搜尋

搜尋「蘋果」只能找到包含「蘋果」這個詞的文件

找不到「iPhone」「水果」等相關內容

✅ 語意向量搜尋

搜尋「蘋果」能找到語意相關的內容

能找到「水果」「Apple」「iPhone」等

關鍵差異:向量搜尋理解「意思」,不只是比對「字串」!

📐 什麼是向量嵌入(Embedding)?

向量嵌入就是把文字轉換成「一串數字」,讓電腦能夠計算。

「Python 是程式語言」
↓ 經過 Embedding 模型轉換 ↓
[0.234, -0.567, 0.891, 0.123, -0.456, 0.789, ...]
(這串數字稱為「向量」,通常有 384~768 個維度)
核心概念:語意相近的句子,轉換出來的向量也會很相近!

🌌 向量空間的魔法

想像所有文字都被放進一個「多維空間」裡...

🍎 水果區

  • 「蘋果」
  • 「香蕉」
  • 「橘子」

這些詞彼此距離很近

💻 程式區

  • 「Python」
  • 「JavaScript」
  • 「程式設計」

這些詞彼此距離很近

📊 距離代表相似度

向量距離越近 = 語意越相似

向量距離越遠 = 語意越不同

這就是為什麼搜尋「程式入門」能找到「Python 教學」!

🤖 我們使用的 Embedding 模型

paraphrase-multilingual-MiniLM-L12-v2

🌍 多語言支援

支援 50+ 種語言,包含中文、英文、日文等

🧠 語意理解

能理解句子的意思,不只是字面比對

📦 適中大小

約 400MB,平衡了效能與精確度

⚡ 速度快

處理一個句子只需幾十毫秒

Sentence Transformers 套件提供,首次啟動會自動下載。

📏 如何計算相似度?

我們使用 餘弦相似度(Cosine Similarity) 來計算向量之間的相似程度。

數學原理(簡化版)

計算兩個向量的「夾角」:

  • 夾角 = 0° → 完全相同(相似度 1)
  • 夾角 = 90° → 完全無關(相似度 0)
  • 夾角越小 → 越相似

實際意義

相似度 0.95 = 非常相關

相似度 0.70 = 有些相關

相似度 0.30 = 可能相關

相似度 < 0.30 = 不太相關

系統預設門檻是 0.3,低於這個值的結果不會被採用。

🔄 RAG 向量搜尋流程

使用者問題
問題向量化
計算相似度
排序篩選
取前 N 筆

1️⃣ 問題向量化

「Flask 是什麼?」→ [0.12, -0.34, ...]

2️⃣ 逐一比對

與知識庫中每筆資料的向量計算相似度

3️⃣ 排序篩選

依相似度排序,篩選超過門檻的結果

4️⃣ 組成上下文

取前 3 筆最相關的內容給 AI 參考

💻 程式碼實作(簡化版)

# 1. 載入模型
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('paraphrase-multilingual-MiniLM-L12-v2')

# 2. 將問題轉換成向量
question = "什麼是 Flask?"
question_vector = model.encode(question)

# 3. 計算與知識庫的相似度
from sklearn.metrics.pairwise import cosine_similarity
similarities = cosine_similarity([question_vector], knowledge_vectors)

# 4. 找出最相似的內容
top_indices = similarities[0].argsort()[-3:][::-1]  # 取前3筆
就這麼簡單! 幾行程式碼就能實現語意搜尋。

⚖️ 向量搜尋 vs 關鍵字搜尋

搜尋「如何學 Python」 關鍵字搜尋 向量搜尋
「Python 入門教學」 ✅ 有 Python ✅ 語意相似
「程式設計新手指南」 ❌ 沒有 Python ✅ 語意相似
「學習寫程式的方法」 ❌ 沒有 Python ✅ 語意相似
「Python 蛇類介紹」 ✅ 有 Python ❌ 語意不同
向量搜尋理解「意圖」,而不只是比對「字串」!

🎯 實際效果展示

使用者問題:「網站怎麼架設?」

找到的相關知識:

🥇 相似度 92%

「如何建立網頁應用程式?」

🥈 相似度 85%

「Flask 網站部署教學」

🥉 相似度 78%

「前端與後端的差異」

即使問題的「用詞不同」,向量搜尋依然能找到相關內容!

📝 Part 3 總結

向量嵌入

把文字轉成數字向量,讓電腦能計算語意

餘弦相似度

計算向量夾角,判斷語意相似程度

語意搜尋

理解意思而非字面,找到真正相關的內容

RAG 核心

向量搜尋是 RAG 技術的靈魂所在

🚀 下一步

Part 4:系統架構與程式碼解析!