語義搜索能返回含義相近的結果,但並不總能給出用户真正想問的答案。人類可以辨別其中的差異並跳過不相關的內容,但智能體無法做到:它會將任何返回結果視為事實依據並據此行動,而沒有人事先檢查結果是否正確。
最典型的差距在於未説明的上下文:查詢對提問者而言可能十分清晰,但仍然缺少系統正確回答所需的信息。本文使用來自 Hugging Face 的 10,000 篇 CNN 新聞文章(時間跨度 2022-2024)的公開數據集,每篇文章的文本和主題標籤作為元數據存儲,展示了 Pinecone 新的文本匹配過濾器如何在不要求預先為所有情況標註數據集的前提下解決這個問題。
歧義問題
以查詢“美國總統候選人有哪些?”為例。美國用户幾乎肯定是指美國大選,但查詢中並未明確説明。純向量搜索返回的結果全部是關於法國選舉的:
| 排名 | 文章ID | 得分 | 片段 | |------|--------|------|------| | 1 | 3433 | 0.8168 | 第一輪投票於4月23日舉行,共有11名總統候選人。勒龐和馬克龍預計... | | 2 | 8054 | 0.8138 | 法國主流政黨的總統候選人未能進入第二輪。民調領先的埃馬紐埃爾·馬克龍... | | 3 | 3421 | 0.8130 | 法國將於週日舉行第一輪總統選舉。候選人迅速反應... |
顯而易見的解決方法是讓用户將查詢重寫為“美國頂級總統候選人”,但這有兩個代價:首先,它將精確查詢的負擔推回給用户;其次,在智能體管道中,一次錯誤的檢索成本遠高於重新查詢:如果智能體基於法國選舉數據分析趨勢,不僅生成錯誤答案的令牌被浪費,後續的工具調用也會白費,錯誤會沿每一步累積。
通過元數據過濾按國家限制結果是可行的,但這意味着需要預先為每個可能的維度(國家、選舉年份、地方/全國選舉)標註每條記錄。事後發現任何新的過濾維度都需要重新處理整個數據集,對於生產系統可能涉及數十億條記錄。
解決方案:文本匹配過濾
Pinecone 的全文搜索(現處於公開預覽階段)支持文本匹配過濾器:一種詞法查詢,在語義搜索之前將候選集限定為包含特定文本的記錄,而無需為應用程序可能需要的每種情況預先標註元數據。
對同一查詢應用“United States”文本匹配過濾器後,結果變為:
| 排名 | 文章ID | 得分 | 片段 | |------|--------|------|------| | 1 | 5326 | 0.8012 | (CNN) 前副總統喬·拜登在超級星期二橫掃南部各州,但佛蒙特州參議員伯尼·桑德斯... | | 2 | 7641 | 0.7992 | (CNN) 人權運動基金會週四宣佈,將在加利福尼亞州主辦一場 CNN 民主黨總統候選人市政廳會議... | | 3 | 9859 | 0.7987 | (CNN) 唐納德·特朗普總統和民主黨總統候選人喬·拜登在多項政策上持截然不同的立場... |
查詢、模型和索引與之前完全相同,唯一區別是候選集被限定為包含“United States”的記錄。
通用場景
新聞搜索中的歧義易於理解,但同樣的模式出現在任何查詢假定未説明上下文的場景中:工業手冊限定機器編號或錯誤代碼、保險索賠限定保單編號或類型、法律搜索限定案件或管轄區。大多數語義搜索應用都會遇到此類問題,因為大多數查詢都會遺漏某些信息。
這些過濾器可以組合:與布爾運算符結合、與元數據過濾器堆疊,或針對其他字段添加更多文本匹配過濾器,從而在單個查詢中沿多個維度縮小候選集。
對智能體應用的意義
智能體沒有步驟來雙重檢查語義相近的結果是否真正適合任務。任何必要的過濾必須在結果到達智能體之前完成,而非之後。文本匹配過濾將修正移至查詢本身,而無需為應用程序可能需要的每種過濾器預先標註數據集。對於錯誤檢索會引發一連串無用工具調用的管道,在查詢時縮小候選集比事後發現錯誤成本更低。