詳細解讀!推薦算法架構——召回

導語 | 召回模塊面對幾百上千萬的推薦池物料規模,候選集十分龐大。由於後續有排序模塊作爲保障,故不需要十分準確,但必須保證不要遺漏和低延遲。目前主要通過多路召回來實現,一方面各路可以並行計算,另一方面取長補短。召回通路主要有非個性化和個性化兩大類。

在上篇_《_超強指南!推薦算法架構——重排_》_中我們結合算法架構重排進行解讀分析,本篇將深入召回這個模塊進行闡述。

一、推薦算法總體架構

(一)推薦算法意義

隨着互聯網近十年來的大力發展,用戶規模和內容規模均呈現迅猛發展。用戶側日活過億早已不是什麼新鮮事,內容側由於 UGC 生產方式的普及,擁有幾十億內容庫的平臺也屢見不鮮。如何讓海量用戶在海量內容中找到自己喜歡的,以及如何讓海量內容被海量用戶精準消費,一直以來都是每個公司十分核心的問題。在這個背景下,搜索系統和推薦系統應運而生。搜索系統主要解決用戶尋找感興趣的內容,偏主動型消費。推薦系統則主要解決內容推送給合適用戶,偏被動型消費。二者一邊牽引用戶,一邊牽引內容,是實現用戶與內容匹配的中間媒介。推薦系統在每個公司都是十分核心的地位,其意義主要有:

(二)推薦算法基本模塊

當前基於算力和存儲的考慮,還沒辦法實現整體端到端的推薦。一般來說推薦系統分爲以下幾個主要模塊:

推薦系統包含模塊很多,論文也是層出不窮,相對來說還是十分複雜的。我們掌握推薦系統算法最重要的還是要梳理清楚整個算法架構和大圖,知道每個模塊是怎麼做的,有哪些侷限性和待解決問題,可以通過什麼手段優化等。並通過算法架構大圖將各個模塊聯繫起來,融會貫通。從而不至於深陷某個細節,不能自拔。看論文的時候也應該先了解它是爲了解決什麼問題,之前已經有哪些解決方案,再去了解它怎麼解決的,以及相比其他方案有什麼改進和優化點。本文主要講解推薦算法架構大圖,幫助讀者掌握全局,起到提綱挈領作用。

二、召回

(一)多路召回

召回模塊面對幾百上千萬的推薦池物料規模,候選集十分龐大。由於後續有排序模塊作爲保障,故不需要十分準確,但必須保證不要遺漏和低延遲。目前主要通過多路召回來實現,一方面各路可以並行計算,另一方面取長補短。召回通路主要有非個性化和個性化兩大類。

非個性化召回與用戶無關,可以離線構建好,主要有:

個性化召回與用戶相關,千人千面,根據構建方式主要有:

一般先離線構建好倒排索引,在線使用時通過用戶標籤或者歷史行爲 item 作爲 trigger,取出對應候選即可。基於內容來構建倒排索引,不需要 item 有豐富的行爲,對冷啓 item 比較友好。

二者使用的時候有什麼區別呢,個人認爲主要有:

協同過濾有哪些缺點呢?

那怎麼解決這些問題呢,矩陣分解 MF 應運而生。它將 user 與 item 的行爲矩陣,分解爲 user 和 item 兩個矩陣,MN 的矩陣轉化爲 MK 和 K*N 的兩個矩陣,user 矩陣每一行就是一個 K 維 user 向量,item 矩陣每一列就是一個 K 維 item 向量。由於不像 CF 中向量是基於行爲產生的,有比較明確的含義,故 MF 中的向量也叫 user 隱向量和 item 隱向量。通過 MF,可以解決 CF 向量過於稀疏的問題,同時由於 K 遠小於 M 和 N,使得高維稀疏向量實現了低維稠密化,大大減小了存儲壓力。

MF 矩陣分解有哪些實現方法呢,可以基於 SVD 和梯度下降來計算。由於 SVD 有一定限制條件,基於梯度下降的比較多。因此 MF 也被稱爲 model-based CF。

MF 本質上仍然是基於用戶行爲來構建的,沒有充分利用 user 和 item 的各種 feature,比如用戶性別年齡,導致有大量的信息丟失。LR 和 FM 就應運而生。

線上使用時,可以有兩種方式:

(二)召回優化

多路召回的各通路主要就是這些,那召回中主要有哪些問題呢,個人認爲主要有:

基於這個問題,我們可以在推薦池中隨機選擇 item 作爲負樣本,但又會有一個問題,隨機選擇的 item,相對於正樣本來說,一般很容易區分,所以需要有 hard negative sample 來刺激和提升召回模型效果。構建 hard negative sample,是目前召回研究中比較多的一個方向,主要有:

  1. 藉助模型:比如 Facebook EBR 選取上一版召回打分處於中間位置的 item,排名 101~500 左右的 item,它們不是很靠前,可以看做負樣本,也不是吊車尾,與正樣本有一定相關性,區分起來有一定難度。EBR、Mobius、PinSage 等都有類似思路。這種方法很難定義清楚到底什麼樣的 item 是有點相似,但又不那麼相似,可能需要多次嘗試。

  2. 業務規則:比如選擇同類目、同價格檔位等規則的 item,可以參考 Airbnb 論文的做法。

  3. in-batch:batch 內其他用戶正樣本,作爲本用戶的負樣本。

  4. 主動學習:召回結果進行人工審覈,bad case 作爲負樣本。

一般會將 hard negative 與 easy negative,按照一定比例,比如 1: 100,同時作爲召回負樣本。一般 easy negative 還是佔絕大多數的。

  1. SSB 問題:召回面向的是全體推薦池,item 數量巨大,故需要做一定的負採樣,有比較大的 SSB 樣本選擇偏差問題。故需要讓選擇出來的負樣本,儘可能的能代表全體推薦池,從而提升模型泛化能力。主要問題仍然是負採樣,特別是 hard negative sample 的問題。阿里 ESAM 嘗試用遷移學習,通過 loss 正則使得曝光樣本上的模型,可以應用在非曝光 item 上,從而優化 SSB 問題。其他更多的方法則考慮從負樣本採樣出發,結合 easy negative 和 hard negative。比如 EBR、Airbnb Embedding、Mobius、PinSage 等,都有 hard negative 的優化思路。

  2. 目標不一致問題:目前的召回目標仍然是找相似,不論是基於內容的,還是基於行爲和特徵的。但精排和最終實際業務指標仍然看的是轉化,相似不代表就能得到很好的轉化,比如極端情況,全部召回與用戶最近播放相似的短視頻,顯然最終整體的轉化是不高的。百度 Mobius 在召回階段引入 CPM,將業務目標作爲向量檢索後的截斷,可優化相關性高但轉化率低的 item。阿里的 TDM 則通過最大堆樹重構了 ANN 召回檢索過程,大大降低了檢索計算量,從而可容納複雜模型,比如 DIN,使得召回與排序在結構上可以對齊(當然樣本上會差異很大),也算是對此類問題有一定的優化。

  3. 競爭問題:各召回通路最終會做 merge 去重,各通道之間重複度過高則沒有意義,特別是新增召回通路,需要對歷史通路有較好的補充增益作用,各召回通路之間存在一定的重疊和競爭問題。同時,召回通路的候選 item,不一定能在精排中競爭透出,特別是歷史召回少的 item,由於其曝光樣本很少,精排中打分不高,所以不一定能透出。召回和精排的相愛相殺,還需要通過全鏈路優化來緩解。

** 作者簡介**

謝楊易

騰訊應用算法研究員

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

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