搜尋相關性排序怎麼優化?召回 + 排序雙階段方法
摘要:搜尋相關性問題要先判定發生在召回還是排序:召回不足就補候選來源與召回寬度,排序不當就補特徵與模型。兩條排查路徑幾乎正交,混在一起改通常無效。
使用者抱怨「搜出來不相關」時,問題可能出在兩個完全不同的環節:目標文件沒進候選集(召回失敗),或者進了候選集卻排到第 40 位(排序失敗)。前者調排序權重毫無用處,後者加召回路數只在尾部塞進更多雜訊。本文按「召回—排序」雙階段拆解:兩類問題的判別表、多路召回的漏斗量級、粗排與精排分工、精排特徵與 Learning to Rank 三類方法取捨、四類排序失真的修法,以及離線評估與三階段落地路徑。
關鍵要點
- 相關性問題先分兩類:召不回來與排不上去,判據是目標文件是否出現在候選集裡。
- 召回階段主看 Recall@K 與漏斗各層候選量級,多路召回的價值是覆蓋不同匹配邏輯。
- 粗排把候選從萬級降到百級,精排決定百級到十級的順序,兩者延遲預算完全不同。
- 精排特徵分文本相關性、使用者行為、文件屬性、上下文四類,缺一類就會產生可預測的失真。
- Learning to Rank 的 pointwise、pairwise、listwise 在標註成本與最佳化目標上取捨不同。
- 離線指標漲不等於線上漲,必須做顯著性檢驗並按查詢類型分段。
一、先分清兩類問題:召不回來,還是排不上去
最佳化相關性的第一步不是調參,而是定位。同一個「搜出來不相關」的投訴,可能來自兩個正交的環節:候選集裡沒有目標文件(召回不足),或文件在候選集裡卻排到了後面(排序不當)。
判定方法是離線回放:取一批 bad case 查詢(零結果、無點擊、翻頁過深),人工標註本應出現的文件,再重跑鏈路看它們是否進入召回候選集。判斷標準是目標文件是否進了候選,而非它最終排第幾。統計幾十條就能定優先級:沒進候選就先做召回,進了候選卻排在幾十名之外就先做排序。
| 維度 | 召回不足 | 排序不當 |
|---|---|---|
| 判別信號 | 目標文件不在召回候選集內 | 目標文件在候選集內,精排後靠後 |
| 典型表現 | 零結果、結果極少、翻到底也找不到 | 結果很多、前幾頁不對、翻深了能找到 |
| 主看指標 | Recall@K、零結果率 | NDCG@10、MRR、首位命中率 |
| 有效手段 | 加召回路數、擴召回寬度、補查詢理解 | 補特徵、上精排模型、校正位置偏差 |
| 常見無效動作 | 調排序權重、加精排特徵 | 繼續加召回路數、擴大候選集 |
二、召回階段:多路召回與漏斗量級
召回的目標不是「排得準」,而是以可接受的代價把可能相關的文件儘量撈進候選集。單路召回必然有盲區,主流做法是四路並行。
字面召回基於倒排索引與詞頻統計(如 BM25),強在型號與編碼的精確命中;向量召回把查詢與文件對映到同一向量空間,解決用詞不一致的詞彙鴻溝,兩者邊界與融合方式見語意搜尋是什麼?向量檢索與關鍵字檢索全面對比;結構化過濾處理類目、價格、庫存等硬約束,應作過濾條件而非打分信號;熱門與個人化兜底保證極短查詢時仍有內容可展示。
多路結果需要融合。Elasticsearch 官方把倒數排名融合(RRF)定義為「把具有不同相關性指標的多路結果集合併為單一結果集」的方法,優點是無需調參、各路指標不必同尺度可比。
漏斗量級為:全量文件 → 過濾後數千至數萬 → 粗排後數百 → 精排後數十 → 展示十條,每層候選量都是下一層的天花板。召回率用 Recall@K 度量。難點在真值:相關文件全集要麼靠標註集,要麼靠點擊日誌反推,而後者天然不完整。
三、排序階段:粗排與精排怎麼分工
排序分兩段,是因為候選量與延遲預算不在一個量級。粗排面對數千到數萬候選,只能用倒排或向量庫內可計算的輕量打分(BM25 分、向量相似度、靜態品質分)配合線性融合,延遲預算在個位數毫秒;它的任務只有一個:把候選從萬級篩到百級,且不提前淘汰好文件。
精排面對數百候選,可用全量特徵與複雜模型(GBDT、LambdaMART、神經網路),延遲預算放寬到幾十毫秒,透過 rescore 實現。Elastic 官方文件對 Learning to Rank 的定位正是如此:模型通常作為第二階段的重排器,用於提升第一階段召回結果的相關性。
精排之後還有一層重排,即業務規則層:置頂、遮蔽、去重、打散、合規過濾。它不是兜底,而是業務可控性的來源。三層架構在什麼是推薦系統?召回、排序、重排三層架構解析中有對應拆解,搜尋與推薦在這一層是同構的。
四、精排特徵與 Learning to Rank 的取捨
精排特徵是相關性的載體,建議按四類搭齊:文本相關性(BM25 得分、欄位命中、查詢詞覆蓋率、詞項緊鄰度、向量相似度);使用者行為(點擊率、加購率、轉化率,必須按曝光量平滑,否則雜訊會淹沒信號);文件屬性(時效、品質分、評分、銷量、庫存);上下文(裝置、時段、查詢類型、使用者歷程)。
有了特徵,接下來是用什麼目標組合它們,即 Learning to Rank 的方法選擇。
| 方法 | 標註形式 | 最佳化目標 | 適用與代價 |
|---|---|---|---|
| Pointwise | 單條文件的相關性等級 | 單點預測誤差 | 標註最簡單;但目標與排序位置脫節 |
| Pairwise | 文件對的偏序 | 逆序對數量 | 標籤可由點擊對構造;忽略列表整體,易紮堆 |
| Listwise | 整個列表的順序 | 直接最佳化 NDCG 等指標 | 最貼近線上目標;標註與計算成本最高 |
選型上,標註靠人工、資料量小時從 pointwise 起步;有穩定點擊日誌後轉 pairwise;只有確需最佳化列表級目標(多樣性、整體收益)時才上 listwise。需要說明的是,Airbnb 在公開研究中指出,常用 LTR 框架隱含的「一條結果的價值可獨立於列表中其他條目確定」這一假設並不成立——這正是只做 pointwise 的系統容易「前十條長得一樣」的結構性原因。
五、四類常見排序失真與修法
相關性被銷量淹沒。 行為特徵的量級與覆蓋率遠大於文本特徵,模型很快學會「銷量高的排前面」。修法是把文本相關性設為硬門檻:文本分低於門檻的文件不得進入頭部,再用分位數校準與分桶正規化把行為特徵壓到可比尺度。
長尾查詢塌陷。 訓練樣本被頭部查詢主導,長尾查詢的排序幾近隨機。修法是按查詢頻次分層抽樣或加權,讓長尾樣本在訓練集中保住比例;同時對長尾查詢提高文本特徵權重、降低行為特徵權重。
新內容排不上。 沒有曝光就沒有點擊,形成死循環。修法有三:保證索引即時性,讓新內容分鐘級可被召回;用不依賴曝光的特徵(內容品質分、屬性完整度)做冷啟動打分;預留固定比例的探索流量累積資料。零結果率的成因與降法在站內搜尋零結果率怎麼降?8 個可落地策略中有專門拆解。
位置偏差。 越靠前的結果越容易被點擊,把點擊直接當相關性標籤,等於把歷史排序固化。微軟研究院在 SIGIR 2018 提出的無偏排序學習方法用傾向性估計(IPS)校正:按「該位置的結果被使用者觀察到的機率」對點擊加權,從有偏日誌中學到無偏的排序模型。更輕量的做法是維持少量隨機化或交換位置的探索流量。
六、評估與落地:離線指標與三階段路徑
離線指標解決「能否快速迭代」,線上 A/B 解決「是否真的有用」。MRR 適合導航型、唯一答案型查詢;MAP 考察多個相關結果的整體品質;NDCG@K 同時考慮多級相關性與位置折損,是多結果場景的預設選擇。Elasticsearch 的排序評估介面支援 precision、recall@k、MRR、DCG 等指標,可對標註集直接評測。
標註測試集這樣建:從真實查詢日誌分層抽樣,頭部、腰部、長尾各佔固定比例;每個查詢標註 20–50 條候選的相關性等級;雙人獨立標註並檢驗一致性;內容更新後定期重標。行為信號可作弱標籤,但自帶位置偏差。
必須分段評估,按查詢類型、是否有結果、品類分別統計。整體指標會被頭部查詢平均掉,最常見的失敗是「整體漲了、長尾崩了」卻未被發現。此外,LTR 的優勢並非總是穩固:有研究對多個公開資料集的統計檢驗顯示,許多 LTR 演算法相對「資料集中最好的單個特徵」並未產生顯著差異,基線之間多數統計打平,因此離線評估必須做顯著性檢驗。
落地分三階段。階段一建觀測與基線:補齊查詢詞、曝光、點擊、無結果、換詞埋點,建標註集跑出分段基線,盯零結果率與首位點擊率。階段二補召回與粗排:接上多路召回與 RRF 融合,做查詢理解(糾錯、同義歸一、意圖識別),把過濾條件從打分中剝離,盯 Recall@K 與長尾候選覆蓋率。階段三上精排與規則層:搭四類特徵、訓 LTR 模型、配業務規則並保留探索流量,盯 NDCG@10 的分段提升與線上 A/B 顯著性。此階段搜尋與推薦可共用排序底座,協同方式見推薦系統與搜尋的協同:一體化增長方案。
常見問題
問:怎麼快速判斷搜尋相關性差的是召回問題還是排序問題?
答:做離線回放:取一批 bad case 查詢,人工標註本應出現的文件,重跑鏈路看它們是否進入召回候選集。沒進候選是召回問題,進候選卻在精排後掉到幾十名是排序問題。
問:多路召回是不是路數越多越好?
答:不是。每加一路都要付出索引、延遲與融合的代價,只有能覆蓋現有盲區時才值得加。判斷標準是增量召回率:新路帶來的、其他路召不回的相關文件佔比過低就該放棄。
問:沒有標註資料,能做 Learning to Rank 嗎?
答:可以,但要降低預期。先用點擊日誌構造偏序對訓練 pairwise 模型,同時建小規模人工標註集驗證。純行為標籤帶位置偏差,需預留探索流量或用逆傾向加權校正,否則模型只會強化歷史排序。
問:為什麼離線 NDCG 提升了,線上轉化率卻沒變?
答:三個常見原因:沒做顯著性檢驗,漲幅落在雜訊區間;整體指標被頭部查詢平均掉,長尾其實變差了;離線標註的相關性與購買意圖不是一回事,需檢查標註口徑。
問:新上架的內容總是排不上怎麼辦?
答:先確認能否被召回:索引即時性不足時新內容不在候選集裡,屬於召回問題。若能召回卻排不上,則是行為特徵缺失導致的冷啟動,需用內容品質分、屬性完整度等特徵打分。
問:上了精排模型後還需要保留人工規則嗎?
答:需要。置頂、遮蔽、打散與合規過濾是業務可控性的來源,模型無法保證這些約束。分工是模型負責相關性排序,規則層負責業務約束與多樣性,只在必要處覆蓋結果。
關於通智雲
通智搜尋面向本文描述的相關性調優場景,提供多路召回、倒數排名融合、Learning to Rank 精排與人工規則干預能力,支援離線評測與線上 A/B 聯動。通智雲(TENGENCE)是 AI 時代的企業增長引擎,專注公域引流獲客與私域轉化成交;核心產品為通智 GEO(GEO + SEO 雙引擎)與通智搜尋。
相關閱讀
資料來源
- arXiv《Unbiased Learning to Rank with Unbiased Propensity Estimation》(微軟研究院,2018):支撐「位置偏差可用傾向性估計(IPS)校正」的論斷。
- arXiv《Is Learning to Rank Worth It? A Statistical Analysis of Learning to Rank Methods》(2013):支撐「離線漲幅必須做顯著性檢驗、多數基線與 LTR 統計打平」的論斷。
- arXiv《Learning To Rank Diversely At Airbnb》(Airbnb,2022):支撐「單條結果的價值不能獨立於結果列表確定」的論斷。
- Elasticsearch 官方指南《Learning To Rank (LTR)》:支撐「LTR 模型通常作為第二階段重排器,提升第一階段召回結果的相關性」這一雙階段論斷。
- Elasticsearch 官方指南《Reciprocal rank fusion》:支撐「RRF 把不同相關性指標的多路結果集合併為單一結果集且無需調參」的論斷。
- Elasticsearch 官方指南《Evaluate ranked search results》:支撐「排序評估介面支援 precision、recall@k、MRR、DCG 等離線指標」的論斷。