淘寶個性化推薦中的多場景模型建模實踐

陶然陶然發表於2023-04-12

  導讀:本文將分享淘寶個性化推薦場景中關於自適應和無監督的多場景建模的思考及實踐。這項工作發表在2022年CIKM上(論文題目: Scenario-Adaptive and Self-Supervised Model for Multi-Scenario Personalized Recommendation)。文中將介紹多場景建模是如何細粒度地刻畫全域場景和單場景的遷移關係來實現領域自適應,以及如何在多場景建模中引入無監督資料,還將介紹多場景建模在推薦召回階段的落地實踐。

   01 背景介紹和方案動機

  首先介紹多場景建模的業務背景、建模動機以及方案選型。本文將聚焦於推薦系統的多場景建模問題,這也是目前各個推薦系統普遍存在且亟待解決的問題。具體圍繞 5 個問題進行介紹。  

  1. 問題一:什麼是多場景

  可以從業務視角和模型視角分別進行解釋。從業務視角來看,“場景”可以簡單地理解為推薦平臺上不同的推薦入口或者推薦承載頁面。舉例來說,比如在廣告領域中,相同的廣告可以在不同的媒體端進行投放,同時又可以對應不同的投放形式,比如資訊流形式的廣告,或者開屏廣告。在電商領域中,也會有非常豐富的推薦投放頁面,以淘寶為例,有首頁猜你喜歡的商品推薦介面、購物車內的推薦場景以及商品詳情頁上的相關推薦等場景。在內容推薦領域,比如我們的實際業務 -- 淘寶逛逛,推薦頁面包含了一跳的雙列展示場景,以及點選進入二跳後上下滑的沉浸式的無盡流的推薦等形式。在這些例子當中,每一個承載的頁面都可以作為一個場景,而同樣一個推薦平臺也會有多種推薦場景,呈現出多場景的特點。

  從模型建模的視角來看,多場景問題可以簡單的定義為共享同樣的特徵空間和 label 空間,但是資料分佈不同的多個資料集合。每一個推薦場景裡記錄的資料都可以構成對應的資料集合,儘管每個資料集合有不同的來源,但是他們的特徵體系以及 label 空間是一致的。

  2. 問題二:多場景的特點

  第一點,流量重疊,從使用者的角度出發,對於同一個使用者,他在一個推薦產品或者一個推薦系統中是可以訪問到不同的場景的,並且在多個場景中會留下相應的瀏覽、點選等一些互動行為。

  第二點,供給重疊,不管是廣告、商品還是內容的投放,都可以投放到不同場景並在不同場景展現。

  第三點,場景間的分佈差異,從行為模式上,同一個使用者訪問了多個不同的場景,而該使用者在場景當中的行為可能是不一樣的;同樣的,從供給的角度看,對於同一個廣告、商品或者內容,它在不同的場景上面的投放所展現出的曝光表現以及互動表現也是不一樣的。因此在資料分佈上,不同場景之間是存在差異的。因此, 我們現在面臨的多場景推薦問題,集中體現了對場景共性和特性的刻畫:使用者可能具有可延續的興趣,但在不同場景下的表現形式可能是不同的。

  第四點,場景間的特徵空間以及目標是一致的,不同場景之間更多反映的是在資料分佈上的差異,而在特徵體系上其實是相對一致的。另外,場景間的 label 空間是一樣的,也就是說在多個場景之間建模的任務其實是相同的。比如在商品場景上建模點選的任務,或者是在內容場景上建模完播或者長播等型別的任務。

  3. 問題三:多場景建模的目標

  結合具體的業務背景,我們希望透過多場景問題的建模來重點實現以下兩個方面的目標。

  第一個是在效果上的目標,重點最佳化資料稀疏的問題。單一推薦場景通常面臨使用者行為資料比較稀疏的問題,而這種現象在一些小場景或者新場景上表現得尤其明顯。多場景問題其中一個重要目標就是希望能夠透過多個場景之間的資訊共享去緩解資料稀疏的問題,提升所有場景的業務指標。

  第二個是在迭代及運維成本上的目標,傳統的最佳化方式是針對每一個場景分配專門的人員去維護並最佳化獨立的模型,而當一些新的場景接入時,可能又需要重複整個接入流程以及模型訓練過程。這樣就相當於所有的人員分配、模型部署工作以及維護成本都是和場景的數量呈正相關的,這會導致整個維護成本以及迭代成本相對較高。

  從實際成本上考慮,我們希望能夠搭建統一的一套演算法框架,同時服務到各個場景中,並且能夠支援新場景的快速接入,這是我們想透過多場景建模達到的另一個目標。

  另外需要強調的是,多場景問題和目前大家已知的多目標以及跨域問題是有區別的。多場景問題重點體現在共享相同的特徵體系,擁有多個不同的資料來源,並且有相同的目標。多目標是針對同一個資料來源有多個不同的最佳化目標。而跨域問題通常是分成一個源域和一個目標域,一般是假設源域的資料量和效果都是較優的,然後透過源域來輔助提升目標域的效果。而多場景問題裡每個場景並沒有優劣關係,建模目標是希望提升所有場景的效果。

  4. 問題四:多場景問題的相關解決方案

  在實際應用落地的前期,針對這種多場景問題的建模我們對目前業界已有的方案進行了簡單的分類,大致分成以下四種型別。  

  第一種是最直觀的,也是目前很多業務實踐落地選用的一個方案,即針對每個單獨的場景,採用這些場景各自的資料去分別訓練單獨的模型,然後在上線部署以及預估時,每個場景會有單獨的模型。這種方式可以在不同場景下選擇目前業界已有的模型結構來進行建模。

  當然這種方案也存在一些不足之處,主要集中在以下幾點,第一點就是這種方式不能很好地解決單場景的資料稀疏問題,這是因為無法利用到同型別的其他場景的特徵資訊補充,尤其在一些資料量比較小,或者行為資料比較稀疏的場景上,資料稀疏問題更為突出。第二點之前提到,這種單場景單模型的建模方式在模型維護和迭代成本方面,對人力和資源的消耗都比較高。第三點就是當業務上有一些新場景接入時,也會存在成本較高的問題。

  既然單場景單模型的方式存在樣本稀疏的問題,那麼第二種解決方案就是把所有場景的樣本資料進行混合,用混合資料訓練一個模型,然後將同一個模型部署到所有場景上。這種方式可以緩解第一類方案中的兩個問題,因為這種方案用到了所有場景的樣本,並且所有的場景共用同一個模型。然而它的不足之處體現在,這種比較粗暴的資料樣本混合訓練破壞了各個場景之間自身的資料分佈,會引入一些噪聲。另外,整體的模型效果可能會被其中某幾個大場景的資料主導,從而影響到一些小場景的效果。

  第三類解決方案是採用兩階段的訓練方式,也就是先把所有的場景的樣本進行混合訓練,訓練一個 base 模型,然後再用每個場景各自獨立的樣本對原來的 base 模型進行場景內微調。在模型的部署和預估上,同樣是每個場景用各自場景資料微調之後的模型進行上線和預估。這種方式的不足之處是每個場景需要單獨部署自己的模型。另外這種直接的預訓練加微調的方式,也沒有很好的去建模場景和場景之間的關聯關係。

  最後一類是目前業界主流的用來進行多場景建模的方式,透過借鑑多工的學習架構,在模型結構上考慮各個場景的資料來進行聯合建模,並且透過模型結構的設計來刻畫場景之間的共性表達以及差異性的表達。近兩年在業界有比較多的嘗試和落地,比如 SAR-Net 透過類似 MMOE 的方式進行訓練,STAR 則透過構建這種全域性共享的網路以及每個場景特有的網路,透過模型引數之間矩陣對映的方式來實現這種場景差異性的刻畫,以及其它透過動態引數網路的方式來刻畫這種場景差異性的一些工作。

  考慮到前三類方法的不足,我們選擇了基於聯合訓練的方式展開後續工作。

  5. 問題五:實際業務中多場景建模面臨的挑戰  

  而在我們實際的業務落地過程中,對於這種透過統一的模型來進行多場景的聯合建模,我們也面臨著一些更加具體的挑戰,主要體現在以下幾個方面。

  挑戰一:我們採用聯合建模的方式,是希望能充分利用所有場景的資訊來解決單場景的資料稀疏問題,其本質是希望把其他場景的有效資訊遷移到指定場景中,儘管前面提到的一些方法透過引數矩陣運算或者動態引數網路等方式來刻畫場景的共性和差異,但這些變換方式是相對隱性的,無法可解釋地量化其他場景是否向指定場景遷移了資訊,以及遷移了多少資訊。因此, 如何實現精細化的有效場景資訊遷移,是我們面臨的第一個挑戰。簡單來說就是,怎麼來建模是否要遷移資訊,以及遷移多少資訊。

  挑戰二:我們在模型訓練的時候主要還是基於使用者互動行為,比如商品點選或者影片完播這樣的正反饋訊號來構造正樣本,也就是在有標籤的樣本資料上進行訓練,這對於一些行為較少的場景會存在比較嚴重的資料稀疏問題。如果我們能夠藉助一些無監督的任務,將訓練資料從有標籤樣本空間擴充套件到無標籤樣本空間,將有助於緩解資料稀疏的問題。

  挑戰三:我們都知道整個推薦鏈路分為召回、排序等幾個核心階段。在前期的調研中,我們發現針對多場景問題的聯合建模,主要都是集中在了排序階段,包括前面列出的一些模型,基本都是排序的模型。而召回作為整個推薦鏈路的第一階段,面對的候選規模和檢索方式和排序是有很大差別的。因此,如何把多場景聯合建模如何在召回階段進行落地也是我們面臨的一個挑戰。

   02 場景自適應與無監督的多場景模型(SASS)

  下面介紹一下我們在實際業務落地時的模型方案,這個模型簡稱為 SASS。這一方案主要聚焦於三個核心關鍵詞,第一個是場景的自適應遷移(Scenario-Adaptive),第二個是無監督(Self-Supervised),第三個是針對召回任務的落地探索。  

  整體的模型框架包含了兩個階段,一個是預訓練任務,另一個是微調任務。其中階段一是在無標籤的樣本集合上構建一個無監督的預訓練任務,透過對比學習來建模場景和場景之間的關係。另外,因為整個模型是在召回階段落地,需要對 user 側和 item 側進行獨立建模,因此在 user 側和 item 側我們進行了對稱的結構設計。

  第二個階段是微調任務,會在第一階段的基礎上進行模型結構的複用,包括載入第一階段預訓練的 embedding 和網路結構引數。此外,第二階段是在有標籤的樣本空間上訓練一個召回的任務,然後輸出 user 側和 item 側的表徵向量。接下來具體介紹一下這兩個階段。

  1. 階段一:預訓練任務  

  首先,在第一個階段的預訓練任務中,我們構建一個場景和場景之間的對比學習的無監督任務。如圖右上角部分所示,大家應該對對比學習的經典訓練正規化都比較熟悉,同一個物件x透過兩種不同的資料增強的方式得到兩個不同的特徵集合,然後透過特徵的抽取網路及對映網路,最終得到同一個物件的兩個不同的向量表達,隨後就可以透過對比學習的度量 loss 來拉近這兩個向量之間的表徵距離,以此來實現無監督的預訓練任務。

  在對比學習思路的啟發下,我們將多場景建模中場景和場景之間的對齊表達和對比學習的預訓練任務進行了結合。前面提到了同一個使用者可能會訪問多個不同的場景,並且在不同的場景中有不同的互動行為,並留下一些和場景相關的統計資訊。因此我們可以把這種使用者在不同場景上面的行為差異視作一種天然的資料增強的方式,同一個使用者的興趣有延續性,但是他在不同的場景之間的表達可能存在一定的差別。然後我們在此基礎上構建一個對比學習的無監督的任務。

  從具體的模型看,如圖左側所示, 我們對不同的場景會構建一個統一的特徵體系, 但特徵的具體取值是和場景對應的,比如我們把使用者的行為序列分場景拆開,使用者在各自場景有對應的興趣偏好等統計特徵。透過這樣的拆分方式,同一使用者有場景相關的多個不同的特徵值集合。比如圖中同一個使用者在場景 a 和場景 b 的特徵,然後透過一個統一的表徵網路(這個表徵網路後面會介紹),我們可以得到同一使用者在不同場景各自的表徵向量,最後透過對比學習的 loss 來拉近兩者的度量距離。

  剛才說的是 user 側的訓練方式,在召回任務裡 user 側和 item 側通常都是各自獨立建模的。因此 item 側也採用對稱的結構和任務來訓練,並且 user 側和 item 側是共享相同的 embedding 層的。具體來說,對於同一個 item,我們把 item 側的特徵取值也分場景拆分開,透過 item 側的表徵網路後,得到每個場景各自的向量表達,然後採用相同的對比學習 loss 進行訓練。

  在樣本構造的時候我們有個特殊處理是,一個使用者訪問的場景可能大於 2 個,因此在構造對比學習的訓練任務的時候,我們會對使用者訪問過的場景兩兩組合來構造出多條訓練樣本。同樣在 item 側也是透過這種兩種組合的方式來構造出多條樣本。

  在具體的對比學習任務上,我們沿用了 InfoNCE 的 loss 形式來進行訓練。

  我們透過建模場景和場景之間對比學習的任務來實現多個場景之間對於無標籤資料的預訓練,接下來介紹整個模型框架裡面比較重要的表徵網路的設計細節。  

  模型中場景表徵網路是一個多層的、場景的自適應的遷移網路。首先從整體模型結構上,在模型的 embedding 層是共享引數的。而這種表徵網路從整體上可以分為幾個組成部分,第一個是全場景共享的網路,也就是圖中模型左側的藍色部分,這裡的全域性共享網路是所有場景的樣本都會經過這裡進行訓練,可以看作是對 user 側或者 item 側所有的場景樣本混合進行訓練的表徵結構。

  第二部分是每一個場景各自特有的網路結構,也就是圖中每個場景對應的灰色部分。每個場景對應的樣本經過相應的網路來進行訓練,由於每個場景的網路層引數是分開的,這種訓練及表徵就可以很好地刻畫每個場景之間各自分佈的差異性。另外在圖中左下角部分,我們也引入了一個輔助的 bias 網路。這個 bias 網路的輸入包括場景 id 以及某些場景所特有的特徵,還有一些上下文的特徵。這樣可以在共有體系的基礎上進一步刻畫場景自身上下文之間的差異和 bias 資訊。

  在具體的訓練過程中,每條樣本透過統一的特徵 embedding 層並進行拼接之後,會進入到全場景共享網路以及這條樣本所對應的場景所特有的網路,進行前向傳播以及反向傳播的網路訓練。

  同時在整個網路結構當中全場景共享網路每一層的輸出都會透過一個場景自適應的門控單元,把全場景的融合資訊遷移到單場景上,以此來實現場景資訊之間精細化的遷移。具體可以參考圖中模型右上角的結構,該遷移結構重點包含一個 adaptive gate 和一個 update gate。其中 adaptive gate 的輸出值用來控制全場景的資訊中有多少是能夠被遷移到單場景上面去的,而 update gate 的輸出是控制從全場景網路遷移過來的資訊和單場景原有的資訊進行加權融合的權重值。這兩個 gate 網路的輸入包含了全場景網路的資訊、單場景網路的資訊以及場景自身 bias 的資訊。透過這種精細化的、自適應的遷移結構去建模表徵場景的遷移方向以及遷移資訊量。我們將該遷移結構堆疊多層,最終每條樣本都可以得到它在各自對應場景上面的一個向量表徵。最後,每個場景各自的輸出和對應的場景上 bias 的輸出進行融合,得到它在對應的場景上最終的向量表達。

  2. 階段二:微調任務  

  第二階段是微調任務。由於我們想將模型落地到推薦鏈路的召回階段,因此微調任務和召回任務的目標是對齊的。在樣本選擇上,我們採用 user 點選的 item 作為正樣本,透過隨機取樣的方式來構造負樣本,然後透過構造三元組的方式來進行 pairwise loss 的計算,從而進行訓練。

  另外,在微調階段我們會進行模型結構以及引數的複用,即我們會在微調階段的模型結構上重新採用和預訓練階段相同的表徵網路結構,並且會去載入預訓練階段的 embedding 層以及網路引數,相當於將第一階段場景之間無監督訓練的資訊保留下來。

  在微調階段的 user 側和 item 側的度量匹配任務上面,我們也引入了一個新的輔助任務來幫助訓練。前面提到每條樣本在透過表徵網路進行表徵後可以得到兩個向量表達,一個是每個單場景網路特有的向量輸出,這個向量刻畫了它在每個對應場景上面的獨立的表達;另外一個是全域性共享的向量輸出,刻畫了 user 特徵或者 item 特徵在全域上的表達。因此在整個的微調階段的訓練任務中包含了兩個 loss,一個是單場景的網路所輸出的 user embedding 以及 item embedding 之間訓練的 loss;另外一個就是全場景網路對應輸出的 user embedding 以及 item embedding 也可以透過這樣一種計算方式得到另一個 loss,最後兩個 loss 的加權和作為最終的 loss 進行訓練。而引入全場景 loss 的輔助任務,相當於刻畫同使用者和 item 在全域的表達,儘管它的表達可能並不適配於各自場景的獨立特徵表達,但是如果把它加到一個全域性的任務中訓練後,對整體效果的收斂是有好處的,後面的實驗分析也可以論證這一點。

  接下來介紹一下如何去部署召回模型。在模型訓練完成後,我們會把微調階段的模型進行部署上線。線上上預估時,每個場景的資訊會透過模型上對應場景的網路得到在該場景下的表徵向量。

  另外,在輔助任務中全場景網路的輸出只在訓練階段使用,因為它是混合樣本,可能存在一些噪聲,然後在預估的時候,每個場景還是使用各自場景輸出的那個特徵向量。針對召回任務,在 item 側我們會針對所有的候選去生成這個向量,之後去構造成相應的索引,再透過模型部署,線上預估的時候生成向量。隨後透過向量檢索獲取到 topk 的結果,最後把結果返回給排序階段,來進行整個推薦鏈路後續的一些操作。

   03 實驗分析和落地應用

  接下來介紹一下利用該模型進行的一些實驗分析和已經落地的應用。  

  我們是在兩個開源資料集以及自身業務的工業資料集上面與其他方法進行了效果比較。

  對比的方法主要分成三類,第一類是傳統的單場景模型,因為我們關注的是一個召回任務,因此對比目前業界比較流行的一些召回方法,比如 YoutubeDNN、MIND、BST、DSSM 等。這些單場景模型都是用各自場景各自獨立的樣本來進行訓練。第二類是用多個場景混合的樣本進行訓練,模型上仍然選用目前業界常用的單場景模型。第三類是業界已有的和我們提出的多場景聯合建模的一些方法,其中一些方法是用在排序階段,而針對在召回階段的落地實踐,為了更好地對比,我們對這些方法稍加改造——即取排序模型網路最後一層的輸出作為一個表徵向量去適配召回任務。

  上表中最後兩列是我們提出的模型,其中 SASS-Base 是不加預訓練的模型結構,而 SASS 是增加了預訓練階段。由於我們驗證的第二個資料集存在特徵缺失問題,不能夠支撐預訓練任務,因此針對這個資料集我們重點比較了 SASS-Base 和其他方法的效果。

  從多種型別的方法對比當中,我們得到了幾個比較有價值的結論。第一點是採用混合樣本訓練的單場景模型在大多數情況下的效果反而不如單場景用自己單獨的樣本進行訓練。這和我們前面論證及調研的結論是相符合的,即這種混合樣本的方式可能會引入比較多的噪聲,而且打破了每個場景原本的資料分佈。但是對於一些資料特別稀疏的小場景,混合樣本反而達到比較好的效果。因為對於這些場景,用本身稀疏的資料進行訓練其實是很難學到有效資訊的,採用這種混合樣本的方式,雖然資料上面可能是有偏的,但能夠透過樣本量的增加帶來一些收益和效果的提升。

  第二個結論是透過多場景聯合建模的方式訓練得到的模型普遍優於前兩類單場景的建模方法,我們提出的模型在不增加預訓練任務,即 SASS-Base 模型結構上,在各個場景基本上也優於或者可以和其他多場景聯合建模方式取得差不多的效果。而在疊加了預訓練任務後,整體的效果有了進一步的提升。  

  後續我們又進行了一系列的消融實驗,主要包括以下幾個部分。

  第一個是刻畫全域場景到單場景上資訊遷移的自適應的 gate 結構。我們對模型的 gate 網路上的結構和目前已有的其他型別的 gate 遷移方式進行了對比,包括(1)利用矩陣乘法對映的方式來實現資訊遷移;(2)使用類似於 Simnet 這樣兩個特徵進行加法、乘法以及拼接,然後透過 MLP 的方式來進行融合的這種遷移方式;(3)類似 MOE 這樣的結構,透過 Sigmoid gate 來進行遷移的網路結構。最後從實際實驗效果來看,我們這種自適應的方式能夠取得不錯的效果。

  第二點是針對是否要增加預訓練的任務以及不同的預訓練任務型別對實驗結果影響的對比。對比的預訓練方式是透過使用者的行為序列來對下一個影片或者下一個 item 預測的訓練任務。經結果比較,可以證明增加了預訓練的任務,並且透過這種場景和場景之間的對比學習可以提升模型的效果。

  第三點是去論證模型結構設計中的輔助網路以及一個輔助任務。其中一個是我們在微調階段引入了全域性共享的網路,利用該網路輸出的結果來進行輔助的微調訓練,另外一個是在我們的網路結構設計中,針對每個場景的輸出,去融合場景相關的 bias 特徵的消融實驗。實驗結果也證明了這兩個結構的新增對整體模型效果有一定的提升。

  另外,由於我們的表徵網路是一個多層的資訊遷移結構,因此我們也對比了這種網路層數的增加對我們模型效果的提升。可以看到整體的趨勢是隨著網路層數的增加,模型效果是先提升然後再下降的。後續網路層數增加所引起的效果變差,我們分析可能是因為網路層數增加後整個引數量隨之增加,會存在一些過擬合現象。另外在得到上層表徵之後再進行這種大量的資訊遷移,可能會使得單場景的表徵更容易受到全場景資訊的影響。因此這種多層網路結構的層數增加在一定程度上可以提升效果,但是網路層數並不一定越多越好。

  下一組實驗,我們針對召回任務對比了不同 item 側的表徵向量,因為在召回上每個場景都會生成各自的向量。在一些多場景建模時,user 側會對應有各自不同的表達,但在 item 側並沒有詳細地去刻畫,而在我們的召回任務當中 user 側和 item 側對應的都是它在每個場景下各自獨立的向量表達,因此我們也對比了每個場景對應的 item 表達以及場景共享的同一個 item 側的 embedding。透過對比發現,在 item 側同樣能夠區分開各個場景獨立的向量表達。

  最後我們將這個模型在一個實際的內容推薦場景上面進行了線上的 A/B 實驗。在一些實驗指標上取得了不錯的效果,尤其在一些相對來說比較小或者資料比較稀疏的場景中,提升幅度更高一些。

  目前我們提出的模型方案已經在淘寶的內容推薦場景,包括短影片、圖文推薦等場景上完成推廣,並且這個模型在各個場景都成為了主要的召回方式之一。

   04 總結  

  最後進行一下總結。整體上,我們想要解決的問題就是推薦領域中的多場景建模的問題,這也是目前在推薦系統當中普遍存在的一個問題。而針對這種多場景建模,我們的核心目標是希望能夠透過構建一套統一的框架最大化各個場景之間的資訊使用。透過這種聯合建模的方式解決資料稀疏問題,同時去提升各個場景的業務指標。並且透過同樣的一套方法架構降低模型迭代以及部署的成本。

  但是在我們的實際業務應用當中,多場景建模面臨著三個核心挑戰。第一個是如何實現精細化以及有效場景資訊的遷移;另外在多場景建模裡面怎樣解決資料稀疏的問題,怎樣去引入一些無標籤資料;然後第三點就是多場景聯合建模在召回階段進行落地。

  在我們的實踐當中,透過去設計這種自適應的場景資訊遷移的網路架構,以及構建場景和場景之間的對比學習的無監督任務,並且包括在模型結構設計、訓練方式以及部署上去適配召回階段的任務來解決上面的挑戰。最後,這種場景自適應的無監督模型目前在全場景上較好地落地,並且是作為一個主要的召回方式。

來自 “ DataFunTalk ”, 原文作者:張遠亮;原文連結:http://server.it168.com/a2023/0412/6798/000006798517.shtml,如有侵權,請聯絡管理員刪除。

相關文章