超強指南!推薦算法架構——重排

導語 | 重排技術細節非常多,一定要清楚技術架構大圖,從而將細節串聯起來。實際上主要是爲了解決三大方面的問題:用戶體驗、算法效率、流量調控。

在上篇_《_圖文解讀:推薦算法架構——精排!_》_中我們結合算法架構精排進行解讀分析,本篇將深入重排這部分進行闡述。

一、總體架構

精排打分完成後,就到了重排階段,之後可能還會有混排。召回、精排、重排三個模塊中,重排離最終的用戶展現最近,所以也十分關鍵。重排的技術點也十分多,總結下來,個人認爲重排主要是爲了解決三大方面的問題:用戶體驗、算法效率、流量調控。下圖是重排總體架構:

二、用戶體驗

重排模塊是推薦系統最後一個模塊(可能還會有混排),離用戶最近。作爲最後一層兜底,用戶體驗十分重要。主要包括打散、多樣性等內容。曝光過濾有時候也會放在重排中,但本質上完全可以在召回鏈路,對已充分曝光的短視頻,或者剛剛已經購買過的商品,進行過濾,從而防止用戶牴觸。

(一)打散

對同類目、同作者、相似封面圖的 item 進行打散,可以有效防止用戶疲勞和系統過度個性化,同時有利於探索和捕捉用戶的潛在興趣,對用戶體驗和長期目標都很關鍵。

打散問題一般可以定義爲,輸入一個 item 有序序列,每個 item 有幾個需要隔離開的屬性,輸出一個相似屬性分離開的 item 序列。打散可以基於規則,也可以基於 embedding。基於規則比較簡單可控,但由於 item 屬性枚舉值較多,可能需要頻繁更新,擴展性不強。基於 embedding 的打散,泛化能力強,但容易出現 bad case。目前主流方法仍然是基於規則的打散。

基於規則的打散主要有如下幾種:

其中 W 爲每個屬性的權重,代表屬性打散需求的優先級。Count 爲同屬性 item 已經出現的次數。f(x) 即爲打散加權分數,按照它從低到高對 item 進行排序,即可完成打散。這種方法實現也比較容易,而且可以充分考慮多種屬性的疊加,擴展性也很強。但仍然容易出現末尾扎堆。

  1. 滑動窗口法:在一個長度可控的滑動窗口(session)內,同屬性 item 超過一定次數後,就交換出 session。這種方法只用考慮局部,不需要全局計算,因此計算量較低。同時對原序的破壞也比較低,最大限度保留相關性。但也會出現末尾扎堆的現象。

(二)多樣性

多樣性是一個很大的話題,後面我們會作爲專項來梳理。多樣性會對用戶體驗、長期目標有比較關鍵的影響。召回、精排、重排全鏈路都要考慮多樣性問題,但確實一般重排中考慮比較多一些,我們這兒也一起分析下。

多樣性評價可以使用兩種方法:

兩種方法各有所長,一般還是需要結合一起使用。特別是人工體驗評估,千萬不可忽略。算法工程師也要經常去體驗和對比自己的實際業務場景。

個人認爲多樣性算法經歷了三個階段:

三、算法效率

重排對於提升算法準確率和效率,從而提升業務指標也十分關鍵。重排提升算法效率,主要分爲三個方向:

(一)多任務融合

當前大多數業務場景需要優化多個任務,算法模型也已經實現了多任務學習,比如 MMOE 和 PLE 等。那模型輸出的多個任務分數怎麼融合呢?我們可以在精排階段融合,也可以在重排階段融合。由於重排模型相對精排要輕量級一些,容易實現在線學習,所以有不少場景放在重排階段進行多任務融合。

目前多任務融合主要有以下幾種方式:

(二)上下文感知

由於精排模型一般比較複雜,基於系統時延考慮,一般採用 point-wise 方式,並行對每個 item 進行打分。這就使得打分時缺少了上下文感知能力。用戶最終是否會點擊購買一個商品,除了和它自身有關外,和它周圍其他的 item 也息息相關。重排一般比較輕量,可以加入上下文感知能力,提升推薦整體算法效率。

context-wise 建模的方法主要有:pairwise 和 listwise 兩大類。

通過對比兩個商品之間相對關係來構建,有一定的上下文感知能力,但仍然忽略了全局信息,而且造成了極大的計算和性能開銷。這種方法有 RankSVM、GBRank、RankNet、LambdaRank 等經典的 pairwise LTR 方法。

建模 item 序列整體信息,通過 listwise 損失函數來對比商品之間序列關係。可以通過 DNN、RNN、self-attention 等多種方式建模和提取 item 序列信息,再通過 beam-search 等貪婪搜索方法得到最終的序列。主要有五種建模方法:

這兒簡單介紹下 PRM,它構建了 input layer、encoding layer、output layer 三層,通過 self-attention 使得序列內 item 充分交互,提取序列信息,通過貪婪搜索得到最終序列:

  1. 每個 item 對應一個特徵向量 E。

  2. user 和 item 之間計算一個個性化向量 PV,通過預訓練模型得到。

  3. item 的位置編碼 PE。

整個過程和機器翻譯等 NLP 場景任務很像,同樣可以結合 pointer-network 來優化。paper 地址:(https://arxiv.org/pdf/1904.06813.pdf)

(三)實時性提升

推薦系統的實時性也是一個比較大的話題。實時性對於提升用戶體驗,優化算法效率,都十分重要。實時性主要包括 3 方面:

重排階段提升實時性主要方法有,在線學習 ODL 和端上重排,下面詳細講解。

深度模型由於需要的訓練數據和時間都比較大,資源消耗也比較多,故一般以離線訓練爲主。小時級或者天級更新。對於用戶的實時行爲 pattern,或者冷啓 item 都不是特別友好。特別在大促期間和秒殺場景,用戶興趣和需求轉瞬即逝,商品也隨時可能會被售空。我們這兒就不談數據鏈路和推薦工程方面的工作了,算法方面主要的問題有:

邊緣計算和端上重排這兩年一直都很火,它可以有效降低雲端負載,保證數據安全隱私性。同時也可以提升算法效率,算法側的優點主要有:

端上重排需要將一個輕量級的模型,部署在端側,實現端上推理。

四、流量調控

流量調控在推薦系統中也十分重要,重排在最後一環,責無旁貸。流量調控要兼顧實時性和準確性,二者之間需要達到平衡。流量調控的作用和方式主要有:

** 作者簡介**

謝楊易

騰訊應用算法研究員

騰訊應用算法研究員,畢業於中國科學院,目前在騰訊負責視頻推薦算法工作,有豐富的自然語言處理和搜索推薦算法經驗。

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/wXb5uQJBCzSEq6IITP7VCQ