Day 21 整理了 Retrieval。
系統會根據使用者的問題,從 Vector Database 裡找出最相關的幾個 Chunk。
但這裡還有一個問題:
Vector Search 排在最前面的資料,就一定是最適合拿來回答的嗎?
不一定。
所以今天要整理另一個概念:
Reranking。
Reranking 可以簡單理解成:
先搜尋出一批候選資料,再重新判斷一次相關程度,重新排序。
例如第一次 Retrieval 找到:
如果使用者真正問的是:
睡覺的房間要注意什麼?
第一次搜尋可能只是因為這些內容都和「睡眠」有關,所以一起被找出來。
但經過 Reranking 之後,就可以把:
睡眠環境注意事項
重新排到最前面。
Vector Search 主要依照 語意相似度 找資料。
但語意相似,不一定代表最適合回答目前的問題。
例如:
最近晚上都睡不好,房間環境可以怎麼調整?
「失眠原因」和「睡眠環境」可能都很相似。
但真正能直接回答問題的,其實是:
睡眠環境相關內容。
所以 Reranking 的目的,就是進一步判斷:
哪一段資料對目前這個問題最有幫助。
可以把兩個步驟理解成:
Retrieval:先找出可能相關的資料
Reranking:再從裡面挑出最適合的資料
所以完整流程會變成:
使用者問題
→ Retrieval
→ 找出候選 Chunks
→ Reranking
→ 重新排序
→ 取出最相關內容
→ 提供給 AI
例如 Retrieval 先找出 Top-10。
經過 Reranking 後,再從裡面選出真正最適合的 Top-3 給 AI。
如果一開始就只取 Top-3,有可能真正重要的資料剛好排在第四或第五。
所以有一種做法是:
第一次搜尋範圍稍微放大,再透過 Reranking 縮小。
例如:
Vector Search:Top-10
↓
Reranking
↓
最後提供 Top-3
這樣可以同時保留搜尋範圍,又減少不相關資料進入 Prompt。
加入 Reranking 之後,可以改善幾個問題:
所以 Reranking 並不是取代 Retrieval。
而是在 Retrieval 之後,再增加一層篩選。
假設使用者問:
VoCare 的語音功能要怎麼使用?
第一次 Retrieval 可能找到:
這些內容都有關係。
但真正最適合回答問題的,應該優先是:
Reranking 就可以協助把這些真正能回答問題的內容排到前面。