RAG 與知識庫

Contextual Retrieval 是什麼?切片前先補上它的來歷

Contextual Retrieval(情境式檢索)是一種改善檢索品質的做法:在把文件切成片段並轉成向量之前,先為每一段補上一句說明它出自哪份文件、屬於哪個章節、在講什麼主題的脈絡,然後把「脈絡加原文」一起拿去嵌入。這樣做是為了解決切片的老問題:片段一旦離開原文,代名詞與省略的主詞就失去指涉,檢索時比對不到,撈回來也讀不懂。
Contextual Retrieval 是什麼?切片前先補上它的來歷:文章重點卡

Contextual Retrieval 是什麼?切片前先補上它的來歷

知識庫建好了卻答不準,最常見的原因不在模型,在切片。一段話被切下來之後,「它」是誰、「這個方案」是哪個方案,都不見了。

情境式檢索處理的就是這件事:在切片進入索引之前,先幫它補上來歷。

你將學到什麼

定義

切片嵌入之前,先為每段補上所屬文件與章節的脈絡說明。

白話比喻

像替每張剪報加一行註記,寫清楚剪自哪份報紙的哪個版面。

解決什麼

片段離開原文後失去指涉,導致檢索比對不到、撈回來也讀不懂。

代價

建索引時要多一道處理,成本與時間都會增加。

定義

情境式檢索是在切片與嵌入之前,先為每一段補上它所屬的脈絡。把脈絡與原文一起拿去做向量化,而不是只嵌入孤立的那段文字。

補的內容通常是三件事:出自哪份文件、屬於哪個章節、這一段在談什麼。

白話比喻

像整理一疊剪報。你把每篇文章剪下來丟進盒子,過幾個月再翻,會完全看不懂那半頁在講誰。

如果剪的時候順手在角落寫一行「某報某版,談某某政策」,那疊剪報才有用。情境式檢索做的就是這一行註記。

它在解決什麼問題

一般的 切片 是把長文切成小段再各自轉成向量。問題在於:中文寫作大量省略主詞,代名詞也很多。

「它的續約條件是這樣」這種句子,離開原文之後就無法比對到任何查詢。加上脈絡之後,這段才會被正確地檢索到。

跟相近做法的差別

做法補什麼解決的問題
Overlap 切片重疊相鄰片段共用一小段文字句子在邊界被切斷
Contextual Retrieval整份文件層級的脈絡說明片段失去指涉與主題
Metadata Filtering來源、日期、分類等欄位檢索前先縮小範圍
Re-ranking 重排序取回後再精算相關度撈回來的順序不夠準

實際用例

適合的資料:合約與法規、技術文件、長篇報告、課程講義。共通點是章節之間相依性高,單看一段常常不知道在講誰。

實務上會搭配 混合搜尋 一起用。脈絡補得好,語意檢索的命中率會提升,關鍵字那一路也更容易對上專有名詞。

常見誤解

最常見的誤解是把脈絡直接拼進原文然後一起存回知識庫。補上去的說明是為了嵌入用的,回傳給使用者的內容還是要以原文為準,否則引用會出現原文裡沒有的句子。

第二個誤解是以為補了脈絡就不用管切片大小。切得太碎,補再多脈絡也救不回來,兩件事要一起調。

本文源起本文為酒Ann 的 AI 名詞彙編系列,用白話把常見名詞一次講清楚。歡迎追蹤 酒Ann 的 Facebook

延伸學習

把這篇文章分享給需要的人FacebookLINEThreadsX

常見問答

這跟切片重疊度不是同一件事嗎?
不一樣。重疊度是讓相鄰片段共用一小段文字,避免句子在邊界被切斷,處理的是局部連續性。情境式檢索補的是整份文件層級的脈絡,例如這段屬於哪一章、在討論哪個主題,兩者解決的問題不同,可以一起用。
脈絡說明要寫多長?
通常一到兩句就夠,重點是把「出自哪份文件」「屬於哪個段落主題」講清楚。寫太長會稀釋原文本身的語意,反而讓向量偏離片段真正的內容。
有必要對每一段都做嗎?
看資料型態。結構清楚、每段都自成段落的文件效益有限;長篇論述、大量代名詞、章節相依性高的文件效益最明顯。實務上可以先抽樣測檢索命中率,再決定要不要全量做。