在我們繼續往Agentic RAG前進前,筆者想先補充一個RAG場景常遇到的痛點-Retrieval找不回正確的資料,這個問題會導致RAG系統參考不到正確的資料或是參考到了太多雜訊的資料,導致系統失敗。
造成這個問題的原因可能有許多種,今天我們會介紹一下可能的場景,並針對embeding model的優化策略做一些說明。
問題類別 | 常見原因 | 解法建議 |
---|---|---|
資料層面 | 文件未正確分段、段落過長或無語義邊界 | 使用語義斷句或基於標點/標題的 chunking;控制段落在 200–500 tokens |
文件未涵蓋查詢主題或內容過舊 | 定期更新資料庫,建立資料版本管理;可記錄來源與時間戳 | |
Embedding 層面 | 使用的 embedding 模型語言不符(如中文語料用英文模型) | 選擇與語料一致的模型(如 BGE-M3、Taiwan LLM Embeddings) |
embedding模型不了解領域專有名詞 | 使用字詞擴充或是fine-tuning模型 | |
查詢與文件 embedding 分散在不同空間(維度或版本不一致) | 確保 embedding 模型版本固定,並在 pipeline 中設置版本標記 | |
檢索層面 | 相似度門檻設太低/太高導致召回錯誤 | 透過實驗調整 top-k 與相似度閾值;可使用重排序(re-ranking) |
Qdrant / 向量資料庫未建立正確索引或未正規化 | 使用 cosine / dot-product 一致的設定,並啟用 HNSW 索引優化 | |
Query 層面 | 使用者輸入模糊、過短或含多義詞 | 增加 query 擴增(query expansion)或語義改寫(paraphrasing) |
未使用 query embedding cache 導致重算不一致 | 實作 exact-match + semantic cache,確保穩定輸入向量 | |
LLM 層面 | 模型回傳幻覺、未使用檢索結果 | 檢查 prompt 模板:確保指示模型「僅依據提供資料回答」 |
檢索結果過多導致上下文稀釋 | 控制 context 長度(通常 2–4 段最有效),可引入上下文加權策略 |
由上表可以了解到,RAG系統是許多元件組合而成,因此問題往往不是只有一個原因,而解決方案也不會只有一個,今天筆者將針對Embedding層面中-embedding模型不了解領域專有名詞這個場景做進一步的說明。
當 embedding 模型「不了解領域專有名詞」時,根本原因通常在於 訓練語料缺乏該領域的語義分佈。
Embedding 模型(例如 BERT、BGE、E5 等)在預訓練階段會學習「詞語在上下文中的語義關係」。
若模型主要學習的是一般泛用的網路語料,那麼像特定領域的專有名,或是公司內部的特殊代碼等情境,
這類專業詞彙在訓練資料中幾乎不存在,模型就無法形成穩定、語義一致的向量表示。
因此:
後面筆者將提供兩個在過去專案進行中有幫助的解決方法。
在實務中,最簡單有效的方式是建立一個 專有名詞對照表,於查詢階段自動展開。
term_expansion = {
"HQLA": "HQLA (High Quality Liquid Asset),高品質流動性資產,用於衡量銀行流動性風險。",
"RAG Agent": "RAG Agent 結合檢索 (Retrieval) 與生成 (Generation) 的智能代理。",
}
query = "解釋HQLA在監理報告中的用途"
expanded_query = query.replace("HQLA", term_expansion["HQLA"])
當使用者輸入:
HQLA對銀行的重要性?
系統會自動轉成
HQLA (High Quality Liquid Asset),代表高品質流動性資產,常用於衡量銀行流動性風險,對銀行的重要性?
這個方法類似在 prompt 中進行語意補全,讓模型更能理解專業上下文,可以讓RAG更靈活適應專業領域。
若你的場景不只有專有名詞,還有許多特定專業領域內容例如縮寫、代碼等情境,要透過對照表去擴充可能相當複雜,這樣的狀況下可以考慮對 bge-m3 進行微調。
因筆者參考論文 《Efficient Fine-tuning Methodology of Text Embedding Models for Information Retrieval: Contrastive Learning Penalty (CLP)》實際操作,以下整理一些資訊和大家討論
在針對 embedding 模型(如 bge-m3) 進行 fine-tuning 時,最常見的策略是 對比式學習 (Contrastive Learning, CL)。
其核心目標是讓模型能夠在向量空間中:
這種方法在句向量訓練中被證明能顯著提升檢索與語意匹配效能。
以下是幾個與 CL 相關的主要研究方向與技術改進:
對比式學習技術發展比較表
方法論 | 主要概念 | 核心貢獻 |
---|---|---|
Contrastive Learning (CL) | 拉近正樣本距離、推遠負樣本距離。 | 建立基礎語意空間結構,為句向量訓練的核心方法。 |
Informative Negatives (ANCE) | 使用模型檢索出的 Top-k 近似但非正解的「困難負樣本 (hard negatives)」。 | 加速模型收斂,讓模型學會更精確的語意區分。 |
Contrastive Learning Penalty (CLP) | 在訓練中加入懲罰項,使負樣本仍保留與查詢的局部語意關聯性。 | 避免破壞原有語意拓撲,維持 embedding 空間的穩定性。 |
Mixture of Experts (MoE) | 透過 gating 機制分派輸入至不同的「專家模型」。 | 提升多語言、多任務的泛化能力,常見於大型多語模型(如 bge-m3)。 |
Contrastive Learning Penalty (CLP) 概念
傳統的對比式學習雖能有效區分語意,但若負樣本過於相似,模型可能被迫「硬拉開」兩個其實具有關聯的語意。
這會導致 embedding 空間失衡,甚至破壞語意鄰近關係。
CLP (Contrastive Learning Penalty) 透過在 loss 函數中引入懲罰項,
讓模型在分離負樣本時仍考慮其與正樣本之間的語意距離,保持語意拓撲的連續性。
📘 簡單理解:
CLP 的目的不是讓所有負樣本都「遠離」,
而是根據語意相似度「適度拉開」距離。
如此 embedding 空間能更真實反映語言語意的連續性。
該論文最後在 bge-m3 的微調過程中,提供以下思路做為建議:
👉 我的建議:
找不到正確資料的問題其實蠻好判斷,如果你的場景有一些專有名詞,很可能就是要對embedding這部份來去下手,而處理方法建議採漸進式的方式:
EFFICIENT FINE-TUNING METHODOLOGY OF TEXT EMBEDDING
MODELS FOR INFORMATION RETRIEVAL: CONTRASTIVE
LEARNING PENALTY (CLP)
BGE-M3