前處理 Pipeline 準備好之後,今天正式進入 Indexing 階段的核心:Embedding——把文字轉換成能夠計算語意相似度的向量。
Embedding 是把一段文字映射成一組固定維度的數值向量(例如 1536 維),語意相近的文字,在向量空間中的距離也會相近。
"貓咪很可愛" → [0.12, -0.45, 0.88, ...]
"小貓非常討喜" → [0.15, -0.42, 0.85, ...] ← 與上面向量距離很近
"今天股市大跌" → [-0.67, 0.31, -0.02, ...] ← 與上面向量距離很遠
這就是 RAG 檢索能夠「理解語意」而不只是「比對關鍵字」的關鍵技術。
| 模型 | 提供方 | 維度 | 特色 |
|---|---|---|---|
| text-embedding-3 系列 | OpenAI | 1536 / 3072 | 泛用性高、多語言支援佳 |
| Voyage AI Embedding | Voyage AI | 依模型而定 | 針對檢索任務優化,常與 Claude 搭配使用 |
| BGE / GTE 系列 | 開源(智源、阿里等) | 依模型而定 | 可本地部署、無 API 成本、中文表現佳 |
| Gemini Embedding | 依模型而定 | 與 Google AI 生態系整合度高 |
import openai
def get_embedding(text, model="text-embedding-3-small"):
response = openai.embeddings.create(
input=text,
model=model
)
return response.data[0].embedding
# 批次處理多個 chunk
def embed_chunks(chunks):
for chunk in chunks:
chunk["embedding"] = get_embedding(chunk["content"])
return chunks
實務上建議做**批次處理(batch)**而非逐筆呼叫,可以大幅降低 API 呼叫次數與延遲。
不要只看模型的名氣或維度大小,建議實際用自己的資料做小規模測試:
這個評估方式我們會在 Day 23-24 更深入介紹,這裡先建立一個概念:Embedding 模型的選擇也應該用資料驗證,而不是憑直覺。
Embedding 是把「文字」轉換成「可計算語意相似度的向量」的關鍵一步,選型時要綜合考量語言支援、成本、部署方式與實際檢索效果。明天我們要接著討論向量資料庫的選型與建置,把這些向量真正存起來、建立可以快速查詢的索引。
備註:以上文章為範本內容,建議實際發文前依你們實驗室真正使用的技術棧(LLM、Embedding 模型、向量資料庫)替換範例程式碼與選型說明,並適度加入實際跑出來的截圖、實驗數據,會讓系列文章更有說服力與原創性。