前幾天整理了 RAG、Embedding 和 Vector Database。
目前流程大概可以整理成:
文件
→ 建立 Embedding
→ 存進 Vector Database
→ 搜尋相關內容
→ AI 回答
但實際上,在文件建立 Embedding 之前,還有一個很重要的步驟:
Chunking。
也就是把一份完整文件,切成比較小的內容單位。
Chunking 可以簡單理解成:
把大型文件拆成多個較小的段落,再分別處理。
例如一份 30 頁的文件,不會直接把整份文件當成一筆資料。
而是先變成:
完整文件
→ Chunk 1
→ Chunk 2
→ Chunk 3
→ ……
接著每個 Chunk 再分別建立 Embedding,存進 Vector Database。
之後使用者提問時,系統只需要找出最相關的幾個 Chunk。
如果直接把整份文件當成一個單位,文件裡可能同時包含很多不同主題。
例如一份照護資料可能同時包含:
如果使用者只詢問睡眠,系統卻拿到整份文件,會混入大量無關資訊。
所以 Chunking 的目的之一,就是:
讓搜尋的範圍變得更精準。
如果每個 Chunk 太大,一個 Chunk 裡可能同時包含很多不同內容。
這樣即使搜尋到了正確的 Chunk,裡面還是會有很多不相關資訊。
結果就是:
搜尋得到,但不夠精準。
但 Chunk 也不能切得太小。
例如原本一句完整內容是:
規律的生活作息有助於維持良好的睡眠品質。
如果被拆得太細,原本完整的語意就可能被切斷。
這樣即使搜尋到其中一小段,也可能因為缺少上下文而無法正確理解。
所以 Chunking 並不是:
切得越小越好。
真正要找到的是:
搜尋精準度和上下文完整度之間的平衡。