iT邦幫忙

2025 iThome 鐵人賽

DAY 4
0
生成式 AI

30天RAG一點通系列 第 4

(RAG 1-4) 文檔切分的科學:語義完整性與檢索效率的平衡術

  • 分享至 

  • xImage
  •  

RAG 系統中的文檔切分 (Chunking) 完整指南

在 RAG 系統裡,文檔切分 (Chunking) 是一個看似小細節,卻極大影響檢索與答案準確性的環節。 想像一下:如果你把一本百科全書切成一頁一頁,那檢索會很快,但每頁可能都缺乏上下文;反之,如果整本書作為一個 Chunk,雖然資訊完整,但向量檢索幾乎失效。

因此,如何「切得剛剛好」,就是文檔切分的核心科學。

核心概念

  • Chunking 策略的理論基礎:平衡「語義完整性」與「檢索效率」
  • 學習內容:固定長度、語義切分、遞歸切分等方法的優劣比較
  • 實踐工具:決策框架 + Python 實作範例

為什麼 Chunking 重要?

  1. 檢索精度:Chunk 太大 → 可能檢索到一堆無關資訊;Chunk 太小 → 語意斷裂,LLM 難以理解。
  2. 系統效能:Chunk 越多,向量庫越大 → 檢索速度、儲存成本增加。
  3. 使用者體驗:Chunking 直接決定 LLM 回答時的上下文品質,影響最終答案的可讀性與可信度。

五種主流文檔切分策略

1. 固定長度切分 (Fixed-length Split)

  • 原理:按字數/Token 數切分,如每 500 Token 一段。
  • 優點:實作簡單,速度快,適合簡單文件。
  • 缺點:可能破壞語義邊界,例如把一個句子切一半。
  • 適用場景:短文檔、FAQ、產品說明。

2. 語義切分 (Semantic Split)

  • 原理:利用 NLP 模型 (如句子分割、語法樹分析) 在語義邊界斷開。
  • 優點:保證語意完整性,避免「半句話」的問題。
  • 缺點:計算成本較高;遇到複雜格式(表格/程式碼)不一定好切。
  • 適用場景:法律文本、技術手冊、研究論文。

3. 遞歸切分 (Recursive Split)

  • 原理:先用結構化規則切大段(如章節、段落),若超過 Token 限制,再進一步細分。
  • 優點:兼顧結構與靈活性。
  • 缺點:實作稍微複雜,需要定義多層規則。
  • 適用場景:長篇技術文檔、混合格式(文字 + 表格 + 程式碼)的文件。

4. 滑動視窗切分 (Sliding Window Split)

  • 原理:在相鄰 Chunk 之間保留重疊區域,例如每段 300 Token,重疊 50 Token。
  • 優點:避免重要語境被切掉。
  • 缺點:Chunk 數量會增加,向量庫變大。
  • 適用場景:對上下文依賴高的場景(醫療紀錄、對話紀錄)。

5. 混合策略 (Hybrid Strategy)

  • 原理:將固定長度 + 語義切分 + 滑動視窗組合使用。
  • 優點:可針對不同檔案靈活調整。
  • 缺點:需要更多工程規劃與調參。
  • 適用場景:企業級 RAG,跨多種文件類型(合約、客服 FAQ、技術手冊)。

決策樹框架

一個簡單的決策樹:

def choose_chunking_strategy(doc_type, size, structure):
    if size < 10000 and structure == "simple":
        return "fixed_length"
    elif doc_type in ["legal", "technical"]:
        return "semantic_split"
    elif structure == "hierarchical":
        return "recursive_split"
    elif doc_type == "conversation":
        return "sliding_window"
    else:
        return "hybrid"

工程實務上,常見做法是:

  • 先用 Recursive → 保留文檔結構
  • 再加 Sliding Window → 確保上下文不斷裂
  • 最後視情況調整 Chunk 長度(常見設定:300–500 Token,Overlap 50–100 Token)

效果評估方法

如何知道「Chunking 切得好不好」?

  1. 檢索準確率 (Recall):檢索到的 Chunk 是否包含正確答案。
  2. 回答品質 (Answer Quality):LLM 基於 Chunk 生成的答案是否完整、正確。
  3. 效率 (Latency):切分後向量庫大小是否影響查詢速度。

小技巧:可以針對同一份文件,嘗試不同切分策略,再用小樣本測試問答效果,找出最適合的配置。

思考問題

  1. 如果你要設計一個 法律文檔查詢系統,會如何選擇切分策略?
  2. 滑動視窗會讓向量資料庫膨脹,你會如何平衡「語境完整性」與「效能成本」?
  3. 未來隨著 LLM 上下文窗口擴大到 1M Token,Chunking 是否還有必要?

上一篇
(RAG 1-3) RAG 系統解剖:從文檔到智能問答的技術旅程
下一篇
(RAG 1-5) 嵌入模型決策指南——準確度、成本與部署的三維權衡
系列文
30天RAG一點通11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言