OPPO 廣告召回算法實踐與探索
一、背景介紹
1、舊召回架構
上圖左上側部分是一般推薦系統流程,即先進行召回,再進行排序。左下側部分是 OPPO 舊的召回架構,即先進行定向過濾,再經過截斷策略,最后進行個性化召回。這里有兩個問題,第一個是由于性能問題,不能做全量廣告的個性化召回;第二個是由于個性化召回在截斷策略的后面,這會導致個性化召回的效果受到影響。因此我們想通過工程和算法的改造,做到全量廣告的個性化召回,提升平臺整體的指標。另外,也希望能通過一個更好的多路召回機制,來提升整個廣告播放的體驗和生態。
2、新召回架構
上圖左上側部分是新的召回架構,最重要的變化是引入了 ANN,也就是近鄰檢索的能力。通過這個工程改造,支持了全量廣告的個性化召回。
同時,我們重新設計了多路召回機制,即“單主路加多輔路”召回機制。單主路指的是主路用“面向最終目標的一致性召回”,這是一種 LTR 的方式。多輔路包括 ECPM 支路、冷啟支路和一些其他支路。
ECPM 支路主要是為了彌補主路 LTR 不足。冷啟動支路主要是對新廣告進行冷啟的扶持。
OPPO 通過“公平”和“效率”兩方面進行冷啟的扶持。“公平”方面,對于一些新廣告,會有獨立的流量供新廣告進行隨機的探索,這是一個公平的策略。“效率”方面,則通過算法找出未來有潛力的新廣告,每一次請求都會有專門針對這些新廣告的召回配額。通過這兩種方式,提升新廣告冷啟的效果。
還有一些其他支路,主要是面向某一類特定的問題,或者是作為運營同學的中短期運營手段而存在的。通過切換架構及持續迭代,新召回架構帶來了累積 15% 的 ARPU 提升,效果還是相當可觀的。
接下來分享一下 OPPO 在主路召回模型上的一些業務實踐和探索,主要從四個方面講解:主路召回模型選型、離線評估指標建設、樣本優化實踐、模型優化探索。
二、主路召回模型選型
1、主路召回模型目標
首先介紹一下主路召回模型目標,我們將其拆解為三個方向:
- 一致性:首先,召回側的打分標準要和下游保持一致(一致不等于一樣)。同時,應滿足激勵相容的邏輯,即要與整個廣告系統匹配,比如調價敏感性。
- 泛化性:指模型在未見過或者很少見過的數據上的效果。我們將其拆解為“共性”和“個性”。“共性”是指模型能不能學到普遍規律,以便推廣到沒有見過的數據上,比如推廣到新廣告、新用戶上;“個性”是指模型能不能重視個體差異,尤其是數據很少的情況,比如長尾的廣告和用戶。
- 多樣性:指降低召回的寡頭效應,讓下游鏈路見世面。大家可能在廣告系統里面很少聽到“信息繭房”的說法,但其實廣告系統里也是存在“信息繭房”的。比如,如果精排見到的廣告過于單一,那么精排可能對中長尾廣告的預估偏差比較大。
2、從 Youtube 論文看召回選型
上面三個方向確定之后,接下來看一下有哪些可能的召回選型。
我們從 2016 年 Youtube 的經典論文看起,他們將推薦系統分成兩個階段,召回和排序。對于召回,他們以“點擊且完播的概率”作為目標進行建模;對于排序,他們以“播放時長加權的點擊率”為目標進行建模。
基于以上內容,可以推導出召回的三種可能選型:
- 精準值預估:召回和排序邏輯完全一樣。比如,如果排序做回歸,那召回也做回歸。
- 排序學習:召回學習的是排序打分的分布。
- 分類學習:召回學習的是排序的競得,或者用戶的交互,比如用戶點擊的視頻、廣告等。
這三種選型本質上對應著兩種方案,第一種叫做“精準值預估”,對應上面第一個選型;第二種叫做“集合選擇”,對應上面的第二、三個選型。我們應該選擇哪種方案呢?
3、精準值預估 vs 集合選擇
首先明確我們對召回選型的訴求:第一,我們希望能夠滿足一段時期的快速迭代;第二,我們希望它的起點足夠高。我們首先對這兩種方案做了一些優缺點分析。
“精準值預估”建模的目標是 ECPM。其優勢是可解釋性很強,同時還天然具有調價敏感性。但是其缺點也很明顯:首先,召回既要與精排保持一致,又面臨大量未曝光的候選集,任務比較困難;其次,不同的 OCPC 類型分布差異巨大,雙塔模型學習難度很大;最后,召回階段對于精準 ECPM 的訴求不夠強烈,因此任務的難度可能會超過實際的需求。
“集合選擇”建模的目標是精排頭部的廣告。由于直接面向后鏈路建模,其一致性會很強。同時還天然具有自動合并下游優化項的能力。當然,它也有缺點:首先,預估值的可解釋性比較弱;其次,為了和 ECPM 打分性質保持一致,還需要單獨做一些優化(如調價敏感性)。
我們通過在線效果和優缺點對比,選擇“集合選擇”技術作為最終選型。
4、LTR 原型模型
上圖左側就是 LTR 原型模型。結構比較簡單,就是典型的雙塔模型。只是它的樣本稍微特殊一點,一條 pairwise 樣本由多條樣本組成。其中正樣本指的是精排頭部的廣告,負樣本是由大盤曝光的廣告里隨機采樣得到的。Loss 采用 Ranking Loss,這里就不細講了。
三、離線評估指標建設
通過原型模型和一些特征層面的優化,第一版上線就取得了 6% 的 ARPU 提升。在第一版之后進一步做迭代,就需要離線評估指標來指導優化。
1、離線評估建設-整體
離線評估建設主要分了三個階段。在第一階段,為了快速上線,我們并沒有專門去定制一個評估集,只是簡單地將樣本根據時間劃分成訓練集和測試集。這種方式的存在的問題是 AUC 太高了,達到了 0.98,很難進一步指導迭代。另外,由于召回是樣本的藝術,當樣本改變之后,實驗之間的 AUC 是不可比的。總的來說,這個評估集難以指導我們持續優化,因此需要一個更一致、更穩定的評估集,就引出了第二階段的方案。
2、離線評估建設-全庫評估
第二階段,是離線 Faiss 全庫檢索。此時,正樣本是精排 Top K 的廣告,負樣本是大盤曝光的廣告,指標是 GAUC 和 Recall。Recall 指的是精排頭部的 Top K 跟實際打分的 Top N 的交集數量,然后除以 K 求平均,這其實衡量的是對精排 Top K 的召回效果。其中有兩個超參,第一個是 K,一般需要根據業務實際情況去選擇;第二個是 N,指的是模型的容錯程度,理論上 N 越大,這個任務會越簡單。我們離線發現 N 的選擇需要與模型能力匹配,過于困難或過于簡單都不利于模型的迭代。
第二階段方案還存在一些小問題。首先是 Faiss 在保證精度的前提下,全庫檢索的效率還是比較低的。另外,由于當前方案只用到了隨機的負樣本,難以做更精細的效果分析。接下來介紹第三階段的評估方案,分段采樣評估。
3、離線評估建設-分段采樣評估
分段采樣評估與之前方案最大的區別是負樣本做了拆分,拆成了 Easy、Medium 和 Hard 三部分。Easy 負樣本是從大盤曝光廣告中采樣得到的;Medium 負樣本是從當次請求進入粗排但沒進入精排的廣告中采樣得到的;Hard 負樣本是從精排尾部的廣告中采樣得到的。Positive 還是由精排的 Top K 廣告組成。數量上我們要確保 Easy 遠大于 Medium 遠大于 Hard 遠大于 Positive。評估指標沒有變,還是 GAUC 和 Recall。由于拆分了負樣本,更利于我們做一些精細化的分析。
四、樣本優化實踐
確定了評估方式之后,接下來就要去做一些樣本的優化。
1、調價敏感模型
上文提到召回模型一定要具有調價敏感性,這里展開介紹一下什么叫調價敏感性。對于整個廣告系統來說,廣告的出價是廣告主投放廣告的一個很重要的抓手,會影響廣告的競爭力。我們期望廣告系統全鏈路對廣告主的出價都應該敏感。這個敏感是指:如果廣告主的出價提高了,那么所有環節對這個廣告的打分都應該提高。之前我們的處理方式是直接把這個廣告出價的分桶特征作為底層特征輸入模型。但我們發現隨著廣告主出價的提升,它的打分只有 5% 是提升的,這種敏感性是遠遠不夠的,因此我們構建了調價敏感性模型。
模型結構如上圖左側所示。整體看,其實就是在雙塔模型的右側,加了一個 bid_part 結構。這個結構本質上是由廣告的出價 CPA 乘以個性化的權重得到 bid_logits。通過這種優化,廣告的調價敏感性從原來的 5% 提升到了 90%,比較符合預期,同時在線 ARPU 也有 1% 左右的提升。
2、精排負反饋-Hard Negative
在調價敏感性問題解決后,接下來我們要做效果的優化。其實 Easy Negative 區分度已經比較好了,想要去提升效果,最簡單的方法就是引入后鏈路的數據,比如加入 Medium Negative 和 Hard Negative 作為反饋機制。
前期系統數據上報只有 Hard 數據,所以就先加入 Hard Negative。加入 Hard Negative 之前我們的預期是離線效果肯定會有提升,另外召回的多樣性也會有提升。這是因為以前樣本只關注精排的頭部數據,模型很有可能已經記憶住了,不需要很強的個性化就能夠解決這個問題。而引入了 Hard Negative 之后,它就需要對不同的請求做一些個性化的理解。從上圖右側的離線指標上也可以看到,Recall 和在線效果都有所提升。其中廣告多樣性有巨幅提升,約 8%,這是我們非常想要看到的結果。
3、人工規則挖掘 Negative
通過加入 Hard Negative 整體取得了很大提升之后,加入 Medium Negative 應該是順理成章的事情。因為這塊數據系統還沒上報,所以我們想通過人工規則挖掘一些 Medium Negative。通過分析,我們發現召回和精排的整體打分是一致的,但是存在兩種極端的 case。第一種是召回很多,但是幾乎從不競得的廣告。這些廣告存在的原因是因為它們沒有曝光,甚至沒有進入到精排,因此他們很難成為負樣本,模型就感知不到。第二種情況是召回的很少,但競得率奇高無比,當然這種情況實在太少了,所以我們忽略了這種情況。
對于第一種情況,如上圖左邊這個熱力圖,橫軸是競得次數的分桶,縱軸是召回次數的分桶,都是從小到大。左下角圈起來的部分是召回很多,但是競得很少的廣告,占比不是很多,但值得試一試。實踐發現離線在線效果只有微弱提升,并且人工挖掘樣本的效率實在太低了。因此,我們考慮能否通過模型自發現去解決這個問題。
4、模型自發現 Medium Negative
之所以會想到這一點,是因為雖然 Easy Negative 整體區分度很好,但是里面還是存在一些比較難區分的樣本,只是這些樣本的占比比較低而已。因此,如果我們讓每個正樣本都采樣海量的 Easy Negative 樣本,模型是不是就能夠自發性地學習到那些比較困難的負樣本呢?是不是就類似于 Medium Negative 呢?從這一個角度看,這類似于對比學習。
為了達到這個目的,我們有兩個方法。第一個方法就是直接往樣本里加 Easy Negative,但問題是計算跟存儲的成本都會線性增長;第二個方法就是直接在模型里做 in batch 負采樣,這種方案沒有計算和存儲的成本,因此我們優先考慮這個方案。
Loss 也有兩種方法,第一種是用 LTR Loss。但在我們的實現中,隨著每條 pairwise 樣本中樣本數的增加,LTR Loss 的計算量會呈指數級增長,所以我們想優先考慮第二種方法:Pointwise Loss。這個 Loss 的計算量隨著樣本數的增加呈線性增長。同時,由于 Loss 計算量整體在模型訓練時占比較小,對整體耗時影響不大。所以我們最終選擇了 Pointwise Loss。
5、大規模多分類解決選型簡介
確定了 Loss 的方案,具體應該用哪種 Loss 呢?在繼續介紹之前,需要先講解一下大規模多分類的背景知識。
召回可以定義成一個超大規模多分類的問題。它的負樣本就是成千上萬的廣告,正樣本就是精排 Top K 的廣告。普通的多分類,其實就是做一個 softmax,其分母就是所有負樣本的打分的累加。但對于大規模多分類來說,這樣做會使分母的計算量過大,幾乎是不可行的。針對此問題,業界有兩種方法。
第一種方法是將多分類轉化成二分類,如上圖左側部分。轉化成二分類之后,其實是轉化成了 NCE 問題。本質上是把以前模型的預估值 F(x,y) 修正成 G(x,y),中間多了一個 Log Q 的采樣概率修正系數。但這個值不好求,比較偷懶的方式,是直接讓 G(x,y) 近似等于 F(x,y),然后直接放到二分類 BCE Loss 里,這叫做 NEG,也就是 Negative Sampling。NCE 的好處是隨著負樣本的增加,從理論上能夠逼近大規模多分類的效果。而這個 NEG 理論上是有偏差的。
第二種方法就是繼續保持多分類的方式。和第一種方法很相似,區別是要把 G(x,y) 放到 softmax 的 Loss 里,同時負樣本直接采樣。與 NCE 一樣,修正的 Sample Softmax 理論上能夠逼近大規模多分類的效果,而不修正 Sample Softmax 則是有偏的。但是,由于其操作簡單,未修正的 Sample Softmax 類方法也會有一些公司使用并取得收益。
6、模型自發現 Medium Negative
在確定使用 Pointwise Loss 方法后,我們先嘗試了比較簡單的 Negative Sampling。樣本是 in batch 負采樣,Loss 是 BCE Loss,最后將原來的 BPR Loss 加上這個 BCE Loss 做融合。通過離線實驗發現,如果只使用 In Batch Negative Sampling,效果是明顯下降的。但是如果融合 LTR 和 In Batch Negative Sampling,效果則有微弱提升。
我們覺得很疑惑,加了幾百個樣本,效果居然只是微弱提升,這是不符合預期的。因此我們繼續采用了剛剛提到的 Sample Softmax 方法,還是在 In Batch 內負采樣,Loss 是不修正的 Sample Softmax Loss,如上圖右側公式所示,這有點像 infoNCE,因此我們也參考 infoNCE 引入了溫度系數的概念。效果如上圖左下側所示,如果只使用 In Batch Sample Softmax,那么效果跟舊的 LTR 基本持平。如果融合 LTR 和 In Batch Sample Softmax,效果則有大幅度的提升。進一步調整溫度系數,提升則更加明顯。使用調整過溫度系數的版本后,ARPU 提升了將近 2%,符合預期。不過這里要稍微注意下,隨著 In Batch 數量的增加,Medium 和 Hard 的效果會有一個 Trade Off。
對于 Sample Softmax 效果優于 NEG,我們是疑惑的,于是進行了一些搜索,發現在不少論文和文章里,也都有提到這個現象,看起來并非個例。因此大家后續對大規模分類問題,或許可以優先考慮 Sample Softmax 類方法。
7、場景聯合訓練獨立服務
最后講下聯合訓練,這本質上是個多場景的問題。
在 OPPO 場景,由于媒體屬性、廣告主意愿等原因,廣告在不同媒體上的分布是有較大差異的。對此,我們有以下幾種方案選型。
第一種方法是完全獨立。每個媒體單獨建模、訓練、預估。但是多個模型優化和運維的成本比較高,另外也沒辦法學習媒體之間的共性。
第二種方法是完全統一。主要是負樣本共用,聯合訓練,在服務的時候保持只用一個模型,但是媒體之間的差異性很難被體現出來。
還有一種方法是聯合訓練和獨立建模。不同媒體的樣本是獨立的,但訓練時還是聯合訓練。模型結構如上圖左側所示,不同的媒體都有一個屬于自己的 ad tower,所有媒體共享 user tower,此時不同媒體的 ad embedding 是獨立的。這種方式既能保持媒體的共性,也能學到媒體的個性,并且也能夠統一地優化和迭代。這種方式在我們的一些小場景上取得了收益,目前正計劃在大場景中推進。
上面是關于樣本優化的簡單介紹。可以看出,召回確實是樣本的藝術,更具體的說,是負樣本的藝術,我們很多工作都是圍繞著負樣本優化來做的。但是樣本只能決定模型的上限,具體怎樣去逼近這個上限,還需要做一些模型的優化。
五、模型優化探索
下面來到模型優化探索部分。主要包括兩部分,第一部分是關于雙塔交互的優化,第二部分是關于泛化性的優化。
1、雙塔交互優化-整體
受計算復雜度約束,召回普遍使用雙塔結構。但是雙塔結構的缺點就是 user 和 item 交互太晚,導致信息損失比較大。針對此問題,業界有一些探索工作,簡單歸類如下。
第一類是雙塔的交互時刻不變,提升交互向量的信息量,比如 SENet 或者并聯雙塔。另外一個是將雙塔交互的時刻提前,比如 DAT、IntTower 和 MVKE。還有一種是模型不變,通過特征去交互,比如物理含義相同的特征,讓其共享 embedding,這也是一種隱式的交互。接下來我們會從這三類里面分別挑一個我們在實踐中取得收益的模型來具體介紹。
2、提升交互向量有效信息量-SENet
第一個是 SENet。SENet 最開始主要應用在圖像領域,它是通過對特征做一些個性化的加權(有點類似于特征 attention),突出重要特征壓制不重要特征,來緩解前文中提到的“交互向量信息損失過大”的問題。其結果如上圖左側所示,SENet 在我們的場景中取得了明顯的收益。
更重要的是,我們發現 SENet 的特征權重和特征重要性高度正相關。后續我們很多特征效果或者重要性的分析,都直接將 SENet 的特征權重作為參考。
3、雙塔交互時刻提前-DAT
第二個是美團的 DAT,中文名為對偶增強的雙塔模型。它主要的優化點是把向量交互的時刻提前。優化內容主要包含兩部分,第一個部分叫做 AMM,第二部分叫 CAL。
這里主要講下 AMM。美團的雙塔由 query 塔和 item 塔組成。在 query 塔新增一個增強向量,即上圖綠色部分,期望跟 item 塔最后一層 embedding 盡可能相似。同理,在 item 塔也有一個增強向量,跟 query 塔最后一個輸出 embedding 盡可能相似。通過這種方式,讓雙塔交互增強。
實驗發現,加入 AMM 特征后,效果有明顯的提升。同時,如果在 AMM 特征輸入時,優選下特征,其提升將更加明顯。這個優選特征的規則是:用戶側用相對泛化的特征,而 item 側用更稀疏更具體的特征。我們猜測優選特征效果更好的原因是用戶側的增強向量其實不需要那么強的個性化。
4、底層特征隱式交互
最后一個就是特征的隱式交互。在雙塔模型里的 user 塔和 item 塔往往存在一些物理含義相同的特征,共享這些特征的 embedding 比直接訓練效果更好。在我們的場景里面也有這種特征,叫做語義標簽特征。這種特征的挖掘方式如上圖左側所示,我們會提取廣告的語義信息,并且輸入到大模型里,打上一些標簽。而這些廣告的標簽會根據廣告與用戶的交互行為被賦予用戶,所以用戶和廣告身上都會有這些標簽。我們在模型訓練的時候,通過上圖左下側所示的方式,使 user 塔和 item 塔的語義標簽共享 embedding table。實驗發現,這種方案的離線指標有微弱提升。
5、泛化性優化
主路召回作為召回的核心組成部分,承擔著解決“大部分問題”的任務。但由于廣告、媒體、用戶、時間上的一些細分粒度往往有差異,導致學習這些差異的共性和個性比較困難。具體來說,從廣告的視角有新老廣告;從媒體的視角有不同類型的媒體;從用戶的視角有高活用戶和低活用戶;從時間的視角有日常、周末、節假日、雙十一。本質上來說,這里需要解決的問題是“混合分布下的差異化精準建模”的問題。
關于這個問題,業界也有一些探索。有的是直接加強個性化的特征,比如 Youtube 的 BiasNet,就是直接用一個 Bias Tower 穿透到最底層;還有多專家方案,比如騰訊的 MVKE 和 Google 的 CDN;還有動態權重,比如快手的 POSO 和 PPNet;還有一些融合類的方法。接下來介紹我們在實踐中取得了一定收益的兩個方法,分別是 CDN 和 PPNet。
6、冷啟動優化-CDN
首先介紹一下使用 CDN 的背景。最開始為了加速迭代,主路模型除了在主路召回上用,也在新廣告召回支路去做冷啟。這就要求主模型兼顧新廣告的排序效果。但是在主路模型的訓練集里,新廣告的占比肯定是比較少的,同時新廣告的特征跟老廣告有明顯的差異,所以新廣告的一些信息和特征會被淹沒,新廣告的效果得不到保證。因此我們參考了 2023 年 Google 提出的 CDN 模型,期望優化新廣告效果。
CDN 結構如上圖左側紅框所示,本質上是把 item 特征拆成了記憶類特征和泛化類特征,然后通過兩個 expert 去學習,最后通過一個 Gate 門控對這兩個 expert 做加權融合。記憶類特征主要包括 item 的稀疏類特征,泛化類特征主要包括統計類特征。線上實驗證明,新廣告冷啟效率有 10% 的增長,非常可觀。
7、多場景優化-PPNet
下面介紹多場景優化,除了上文提到的樣本層面的優化,還有模型層面的優化。
首先講下背景。OPPO 有很多場景類型,比如文字信息流、視頻流等等。在將這些場景聯合訓練的時候,如何兼顧其共性和個性呢?
我們參考了快手的 PPNet,實現方式如上圖左側紅框所示。本質是通過個性化門控網絡,對原始的模型,做一個動態的個性化加權,得到一個千媒千面的模型。通過這種方式,我們發現效果是有提升的。
但是有一點需要注意,如果直接將媒體的 ID 輸入到 Gate 門控,提升是比較微弱的。如果通過專家知識對這些門控的輸入做一些聚合,那么 PPNet 就開始顯現它的威力了。聚合的方法是把屬性相似,或用戶行為相似的媒體聚合。最后,如果對不同的媒體采用不同的 batch norm(即 DBN),模型的性能會進一步提升。
六、展望
前文中介紹了今年 OPPO 召回的主要相關工作,接下來分享一些我們的展望。
首先,雖然當前 ECPM 支路比較簡單,但是 ECPM 支路還是能夠對 LTR 主路起到補充作用,因此我們后續還會在 ECPM 支路上做一些工作。
其次,現在廣告推薦整體已經走向了廣告商品化、創意智能化。在這個趨勢下,召回和排序的分工也會發生一些變化。當然,召回輔助下游找到價值最高的廣告,這一個定位是不變的。
以上就是本次分享的全部內容,謝謝。
七、問答環節
Q1:如果召回的算法太復雜的話,你們是怎么考慮的?
A1:我們不能要求召回算法復不復雜,因為這取決于你想解決的是什么類型的問題。舉個例子,現在 OPPO 召回的定位是“單主路加多輔路”,主路要解決大部分的問題,那主路算法可能就復雜些。有些傳統公司的召回是“多主路召回”,比如熱度召回、統計召回、興趣召回等等疊加,那每一個路召回可能都比較簡單,算法也不需要太復雜。
Q2:讓召回去學精排,會不會導致召回更加局限性呢?
A2:如果把局限理解為 SSB 問題,其實召回一直存在這個問題。之前的 gap 是從召回的全量候選到曝光候選。現在如果讓召回去學精排,那現在的 gap 就是從全量候選到精排的 Top 部分廣告。這種方式的 SSB 會緩解一些,SSB 問題是要長期去探索解決的。
Q3:離線評估指標 Recall 公式里的 N 和 K 是如何確定的?
A3:不同的場景中,N 和 K 的取值是不一樣的。
K 得根據具體的業務場景來定。比如在信息流,一般我們就看幾個廣告,那 K 可能取 1-3;在下載商店,一次性會展示很多 APP,那 K 就會很大,甚至取上百個。
N 的取值則與模型效果和 K 有關,N 越大任務越簡單。如果任務太簡單,Recall 非常高,比如 0.99,那么任何優化都很難離線體現出效果;任務太難,Recall 非常小,那很多優化也可能無法體現出來,就像讓小學生去參加高考,大家都 0 分。具體的 N 和 K 的組合,需要自行根據場景和模型調節。
Q4:在召回階段樣本設計時,簡單和困難樣本比例是怎么調控的?
A4:召回是在全量候選集里面找出用戶可能感興趣的廣告,這就決定了在樣本設計時,簡單樣本數量要遠遠大于困難樣本數量。
簡單和困難樣本的比例,是通過實踐去確定的。比如 Facebook 的論文中提到,簡單和困難樣本的比例值是 100 比 1。我們的場景沒有那么懸殊,但也差不多。
Q5:召回離線評估為什么用 AUC?你們的召回離線評估和線上效果是一致的嗎?
A5:在召回階段,AUC 類似一個護欄指標,是為了確保召回里的排序整體沒有大的分布問題。在此基礎上,我們盡量提升 Recall。另外,我們大部分的離線指標和在線指標整體的趨勢是一致的。當然,我們無法保證離線和在線提升的百分比是完全相同的。