嵌入
嵌入(embedding)把一段文字編成一串數字(向量)。訓練目標是:意思接近的句子,向量也比較近。RAG 靠這個性質,才能用「問題的向量」去找「文件段落的向量」。
為什麼不用關鍵字就好
關鍵字搜尋(例如 BM25)很擅長對到專有名詞、錯誤代碼、法規條號。但使用者常換句話說:問「怎麼退費」對得到「退款政策」,中間沒有同一個詞。嵌入比的是語意距離,不是字面重疊。
實務上兩者常一起用,稱為混合搜尋(hybrid search),見 重排序與混合搜尋。
同一套模型才比得了
查詢與文件必須用同一個嵌入模型編成同一維度。換模型就要整庫重算。常見選擇:
- 雲端 API:OpenAI
text-embedding-3-small/-large、Gemini Embedding、Cohere Embed。 - 開源:sentence-transformers 系列(例如
all-MiniLM-L6-v2入門、bge/e5中文或檢索特化)。
維度愈高、模型愈大,通常語意更細,也更貴、更慢。入門用小模型即可驗證管線,再依評估結果升級。
距離怎麼算
向量庫多半用餘弦相似度(cosine similarity)或內積。餘弦看方向是否接近,對向量長度較不敏感,RAG 很常用。你幾乎不必自己實作公式,選定套件後,檢索 API 會回傳分數與文件。
注意:不同模型的分數不能直接互相比。0.82 在 A 模型可能很好,在 B 模型只是普通。要用同一模型、同一套評估集來看相對高低。
和切塊的關係
嵌入的是「塊」,不是整本書。塊太長,向量會把很多主題混在一起,問題只碰到其中一句就可能被稀釋;塊太短,缺少上下文,生成時模型看不懂。切塊策略見 切塊。
下一頁:切塊。相關畫面可看 LangChain RAG From Scratch: Indexing。