昨天比較了不同的 Chunking 策略,今天要更深入探討兩個關鍵參數:**Chunk Size(每段長度)**與 Overlap(重疊長度),這兩個參數的設定,往往比選哪種切分演算法影響更大。
| Chunk Size | 優點 | 缺點 |
|---|---|---|
| 較小(如 200 字) | 檢索精準度高、能精確定位到相關段落 | 容易失去上下文,單一 chunk 資訊不完整 |
| 較大(如 1000 字) | 保留較完整的上下文 | 可能混入不相關內容,稀釋 Embedding 的語意代表性 |
沒有一個「正確答案」,需要依據:
Overlap 是指相鄰的 chunk 之間保留一段重複的內容,用意是避免關鍵資訊剛好卡在切分邊界,被硬生生切成兩半、導致語意不完整。
Chunk 1: [.......................重疊區域]
Chunk 2: [重疊區域.......................]
一般建議 Overlap 設定為 Chunk Size 的 10%-20%。
為了找出適合我們知識庫的參數,設計一個簡單的實驗:
configs = [
{"chunk_size": 200, "overlap": 20},
{"chunk_size": 500, "overlap": 50},
{"chunk_size": 1000, "overlap": 100},
]
results = []
for cfg in configs:
chunks = recursive_split(documents, cfg["chunk_size"], cfg["overlap"])
index = build_index(chunks)
score = evaluate_retrieval(index, test_questions) # 用 Day 23 會介紹的評估方式
results.append({**cfg, "recall": score})
透過固定的測試問題集,比較不同參數組合下的 Context Recall(檢索結果中包含正確答案的比例),找出最適合的設定,而不是憑感覺猜。
一般經驗法則:
Chunk Size 與 Overlap 沒有普世的最佳值,必須透過實驗,針對自己的資料與問題類型去調校。比起憑感覺設定參數,建立一個小型測試集去量化比較,是更可靠的做法。明天我們要來看 Metadata 的設計,這是提升檢索精準度的另一個關鍵。
「實驗中評估指標使用了 Context Recall,想請問在調大 Chunk Size(如 1000 字)時,通常召回率容易提高,但會不會同時引入雜訊而拉低 Context Precision 或 Hit Rate?在實務上會建議搭配綜合指標(例如 MRR、NDCG 或 RAGAS 的 Faithfulness)一起看嗎?」