RAG 與知識庫

Metadata Filtering 中繼資料過濾是什麼?先篩範圍再比語意

Metadata Filtering 中文叫中繼資料過濾,是在做語意檢索時,先用文件附帶的欄位條件把候選範圍縮小,再對剩下的內容做向量相似度比對。常用的欄位有日期、版本、部門、文件類型、語言與權限範圍。它解決的是語意相似但條件不符的問題,例如你要今年的規定,向量卻撈回去年那份幾乎一模一樣的文件。
Metadata Filtering 中繼資料過濾是什麼?先篩範圍再比語意:文章重點卡

Metadata Filtering 中繼資料過濾是什麼?先篩範圍再比語意

知識庫做好了,但同事問今年的請假規定,系統卻撈出去年那份。兩份文件講的幾乎一樣,向量分不出來哪份比較新。

這時候要加的不是更強的模型,而是中繼資料過濾。它負責的是語意管不到的那一半。

你將學到什麼

定義

先用欄位條件縮小範圍,再對剩下的內容比對語意相似度。

白話比喻

先走到正確的樓層與書架,再在那一區找書。

解決什麼問題

語意很像但條件不符,例如版本過期、部門不對、沒有權限。

跟誰容易搞混

常跟混合搜尋混淆,混合搜尋加的是關鍵字,過濾加的是條件。

定義

Metadata Filtering 中文叫中繼資料過濾。中繼資料指的是描述這份文件本身的資訊,例如它是誰寫的、什麼時候寫的、屬於哪個部門、是第幾版。

過濾的意思是:檢索時先用這些欄位把候選範圍縮小,再對剩下的內容做語意相似度比對。順序很重要,先篩再比,不是比完再說。

白話比喻

在圖書館找書時,你不會從一樓開始逐架翻。你會先走到正確的樓層與分類區,再在那一區裡找。

中繼資料就是那些樓層與分類標示。沒有它,語意檢索得在整棟樓裡找,又慢又容易撈到不相干的東西。

常用的欄位

欄位用來篩什麼典型情境
日期與版本只要現行有效的版本今年的差旅規定,不要去年那份
部門與專案只看某個範圍的文件只查行銷部的文件
文件類型區分合約、簡報、會議紀錄只找合約,不要簡報
語言避免混入其他語言的版本只回中文版說明
權限範圍使用者看得到的才進候選一般同仁看不到人事資料

兩種做法

第一種是先篩再比對。先用條件把不符合的排除,再對剩下的做相似度計算,結果最準確,多數向量資料庫都支援。缺點是條件下太緊時可能篩到沒東西可比。

第二種是先比對再篩。先取出相似度最高的一批,再把不符條件的丟掉,實作簡單,但常常篩完數量不夠,得回頭多取幾筆。實務上優先選第一種。

實際用例

企業知識庫最常見的兩個用途是權限隔離與版本控管。權限必須靠欄位硬篩,絕對不能寄望模型自己判斷「這個人不該看到這份」。版本則是靠日期與狀態欄位,只讓現行版本進入候選。

整條檢索路徑是這樣的:文件切片後做 Embedding 語意向量 存進向量資料庫,查詢時先用中繼資料篩範圍、再比語意,最後把找到的段落連同出處回給使用者,也就是 Citation 引用來源 那一步。

常見誤解誤解一,以為檢索不準是模型不夠強,於是一直換 Embedding 模型。很多時候換上過濾條件就解決了。誤解二,以為權限可以用提示詞交代,例如在指令裡寫「不要回答人事相關內容」。那不是防線,是建議,真正的隔離要在檢索階段就把資料排除。誤解三,欄位值沒有正規化,日期一下寫民國一下寫西元,篩選當然篩不到。
本文源起本文為酒Ann 的 AI 名詞彙編系列,用白話把常見名詞一次講清楚。歡迎追蹤 酒Ann 的 Facebook

延伸學習

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

常見問答

為什麼不能只靠語意檢索?
因為語意只管意思像不像,不管條件對不對。今年版跟去年版的規定用字幾乎相同,向量距離也幾乎一樣,模型沒有理由偏好比較新的那一份。日期、版本、權限這類條件必須靠欄位硬篩,不能交給語意判斷。
中繼資料要在什麼時候寫進去?
在文件切片的時候就要寫進去,跟著每一片一起存。事後想補會非常痛苦,因為你得重新對回原始檔案。切片階段就把來源檔名、日期、部門、版本、權限範圍一次帶上,是最省事的做法。
欄位越多越好嗎?
不是。只留真的會拿來篩的欄位就好。用不到的欄位不但佔空間,還會讓維護變複雜。另外欄位值一定要正規化,日期格式與部門代碼寫法不統一,篩選就會漏掉一堆該被找到的文件。