# Day 3. [PPT Chatbot] 制定向量化策略和難題 ## 0. 前言 前一篇[Day 2. [PPT Chatbot] Qdrant + BM25 介紹](https://hackmd.io/@9Ecf9gbnTv294Ng2ICWo9g/HyBXvwyxWx)介紹了Qdrant簡易的使用方式,先透過向量搜尋Point,再透過BM25做最後的關鍵字檢查,找出真的跟user prompt有關的Point。眼看就快要完成RAG的最重要的資料萃取了,但總是事與願違。 ## 1. 制定PPT向量化的專屬策略 ### 1-1. 資料特性 我的PPT資料源有幾個特點: - 每個月會有一份檔案,有持續性的進度類報告 - 天馬行空的slide設計 - 主題固定3種,可能會有新主題 - 有時候沒有套PPT的版面設定,導致沒有標題 - textbox之間可能沒有上下文關係 - 有些slide會出現在這個月的檔案中,下個月改為隱藏 ### 1-2. 向量化策略 Qdrant有兩個儲存體可以運用:vector和payload。 - vector: - 單純的內容轉向量 - payload: - mth:檔案月份 - item:slide中提到的關鍵item - customer:slide中提到的客戶 **以每個slide為一個Point(chunk)新增到Qdrant。** ## 2. 難題 目標:希望能「正確」回答問題,包含資料正確性和資料完整性。 ### 2-1. 向量搜尋 (vector search) > 向量相似度(Dense Search):擅長語義相似,即使文件和查詢使用同義詞也能匹配(例如,查詢 "狗" 可以找到包含 "犬" 的文件)。 由於PPT轉出markdown後,是個很亂又很雜的文字檔,即使在轉出的內容前面加了metadata,實際用向量搜尋出來的結果不是很好。 以下幾種情況被我認為不好: - 漏資料 - 可能textbox的建立順序造成語意不連貫 - 可能內容太雜亂,被模型認為沒有關聯 - 可能整個slide都在講同一個item,但只有提到一次,被模型認為關聯性低 - 跨多檔的效果差 - 一樣是漏資料的問題 - 可能太多Point的分數太接近,導致有些重要的slide選不到。 ### 2-2. Top K & Top N Top K是用來設定要找出多少Point,對應到Qdrant的設定就是`limit`。 Top N是用來設定套用BM25演算法後,根據加權後的分數選出前N個Point。 以我的情境,即使套用Hybrid Search,這兩種數值怎麼設定都不對。 範例1:設定K = 100 user詢問「請給我B11 item在2025-01~2025-11的情況」,假設符合的Point有150個,這時就會有漏資料的問題發生。 範例2:設定K = 100、N = 30 user詢問「請給我M99 item在2025-01~2025-06的情況」,假設符合的Point有100個,但最後回應30個Point的內容,又會漏資料。 ## 3. 小結 有試過單檔的文件,使用一般的vector search + BM25實在是綽綽有餘。 原以為能夠順順的交作業,但遇上參數設定大魔王。 除了調整Top K或Top N外,也可以設定多少score的Point才要回傳。 雖然有這麼多參數可以設定,但我的情景似乎不能滿足多變的user prompt,只能另外再想辦法了。