袁騰飛:阿里飛豬信息流內容推薦探索

分享嘉賓:袁騰飛 阿里巴巴 算法專家

編輯整理:趙二白

出品平臺:DataFunSummit

導讀: 飛豬信息流的業務場景是架設在飛豬首頁裏面的猜你喜歡模塊,其本質是一個多物料混排場景,包括內容和商品,本次的分享主要是介紹內容推薦在旅行場景的一些探索及實踐。

主要有如下三部分:

01 飛豬信息流業務簡介

1. 飛豬信息流簡介

首先來看一下飛豬的信息流業務簡介。

由上圖所示,飛豬信息流的入口位於飛豬首頁裏的猜你喜歡模塊,裏面涵蓋了很多種類的物料,如視頻內容、圖文內容、商品、廣告、POI 主題等。上圖展示了比較常見的內容種類:圖文內容,以及視頻沉浸頁。

2. 飛豬信息流技術框架

上圖爲目前信息流使用的技術框架,從左到右有如下幾個重要模塊:

3. 內容投放鏈路

上面介紹的信息流推薦的框架是包含商品和內容的,現在我們來看下內容投放鏈路,分爲內容投放以及反饋鏈路,內容投放所涉及到的模塊從左到右依次是:

在反饋鏈路中制定了一套針對冷啓動的策略,在對新內容進行篩選之後進行 EE 探索以及設置探索結束條件。在探索結束之後,會基於線上 feedback 返回的特徵去判斷內容是否適合繼續在線上存活,或者是否要更多的流量激勵。對於一些不合適的內容,進行汰換下線。汰換下線之後,需要接入業務的人工複審模塊,再次確定這個內容是否適合線上分發,這就是整個的內容分發鏈路。

02 飛豬內容推薦探索

下面具體來講一下飛豬這一年在內容推薦上面做的一些探索及工作。

1. 內容算法要解決的問題

在飛豬的這種旅行場景下,內容算法面臨的問題可以分爲三類:

2. 冷啓動內容召回及粗排

(1) 面臨問題

剛纔提到由於內容對時效的要求比較高,且圖文類的內容的量比較大,供給比較豐富,所以內容的冷啓動面臨的挑戰是比較大的。而且在今年六七月份的時候我們發現,線上的圖文的流量分發過於集中,馬太效應比較嚴重,導致新內容分發不出去。整個內容推薦缺乏泛化和探索的能力。

(2) 解決方法及相關設計

緩解線上馬太效應的核心思路是提高系統對新內容的探索能力和加大新內容供給。具體分爲:

跟隨這個思路,我們講一下飛豬在召回階段跟粗排階段的一些做法,目前整個線上採用兩路召回的方法,一個是 Warm content 的 Match 方法,它使用了 U2I,I2I 相關的召回方案,例如 Mind, LookalikeI2C,還有 MixI2C。這條召回路徑是針對已經與用戶有行爲交集的這些內容。

對於新內容,因爲內容和用戶是沒有行爲互動的,所以首先我們會做基於線上 content 的基礎屬性的圖表達,給新內容找到相似的線上投放過的老內容,然後通過老內容的一些統計類數據來表示新內容。具體分爲兩部分,一個是新老內容的 CTR 特徵遷移,如上圖中左半部分的左圖,中心節點是一個新內容,通過它的一些基礎屬性可以擴展找到線上的一些相似的老內容,使用這些老內容的點贊、CTR、評論等信息來表達新內容的統計類的特徵。這樣的話,即便新內容沒有在線上分發,通過這些屬性,可以得到先驗特徵。

上圖左半部分右圖展示的是多模態相關性的圖遷移,與左邊的圖不同的是,它是基於模態之間的相關性來構建圖結構,其關於相關性的計算會比左側複雜。對於多模態相關性的計算有兩個思路,一個是直接通過新老內容的視覺的多模相似性,第二是通過屬性鏈接計算,這種方法對相關性的要求更高。對新內容召回的核心就是如何給新內容找到相關性高的老內容,然後把老內容的特徵遷移過來。

當使用上述方法確保新內容被召回且和用戶有相關性後,下面則要考慮在排序模塊中如何進行粗排,如圖右側部分所示,粗排部分我們設計了一個雙塔結構的 MLP 的 model,爲了提升整個粗排泛化性使排序不受歷史投放的影響,我們更多的考慮了內容自身的一些信息,換句話說就是跟我們線上的投放數據關係不大的特徵。整個網絡結構分爲兩個塔,一個是 content 塔,一個塔是 user 塔。User 側與我們的商品排序以及精排相同,主要是基於用戶點擊行爲序列以及其負反饋的行爲序列。在左側的 content 塔裏,我們設計瞭如何表示內容,因爲這次粗排的設計是爲了解決冷啓動問題,所以 content 側的設計沒有引入可以顯著提升排序精度的統計類特徵,更多的考慮了內容本身的 side information,也就是圖能遷移過來的屬性和相關性來表示這個內容本身。改良後的模型對新內容的冷啓動問題還是有效果的。

3. 內容多模態理解

第二部分是我們之前提到的內容理解,剛纔在內容冷啓動裏面我們提到,在召回模塊裏需要多模的向量表徵去表達新老內容之間的相關性。同時因爲目前標籤的覆蓋率和準確率不夠,所以下游的整個匹配,包括召回、排序等,也都依賴內容理解。

我們知道模型決定了效果的下限,數據決定了效果上限,特別是在做 CV 的這種領域,訓練模型需要大量的樣本。基於這樣的現狀,我們選擇了使用公開數據集去做 pre-train,然後再利用自身的業務數據進行 fine-tune 的方案。Pretrain 使用的是 CLIP 模型,大致原理是通過 text-image 的 pair 對去做無監督學習。這種類型的數據獲取方式比較簡單,可以使用句子去搜索引擎裏搜圖。這個句子就是這個圖片的 text 表達,與圖像分類不同,這裏面使用了一句話作爲圖片的標籤,而句子裏涵蓋了 multi-label。換句話說是,可以用多個標籤來描述一張圖。多標籤可以讓模型的泛化能力變得更好,也可以更好地遷移到下一個的任務裏面去。

詳細的網絡結構如左圖所示,分爲兩部分,text encoder 和 image encoder。Text encoder 目的爲了提取文本 embedding 的特徵。Image encoder 用來提取圖像的特徵。然後通過 matrix-learning 可以得到一個矩陣,矩陣的斜對角線就是我們需要取的監督信號 label。基於這種 pre-train,就可以拿到圖片的基礎向量。

接下來基於 pre-train 的結果,去做 fine-tune。如右圖所示,其思路就是現在比較流行的單流 UNITER 網絡表徵學習,它將 transformer 的思想應用到了視覺領域裏。這個網絡的整體思路和左圖的思路是類似的,其左側是我們圖文裏文字的 embedding 信息,原始信息來源於 title 或者頭部段落的 summary 信息。在右側網絡裏,對圖片進行切割,使用圖片裏的 regions 和 objects 生成 embedding 信息。然後經過 transformer 網絡。最後接了三個任務。

因爲這屬於一個無監督學習的任務,爲了更好的監督整個網絡的學習,我們在整個 transformer 的下游接了三個任務:

通過這三個任務的學習,可以讓整個模型自適應的去表達航旅裏的內容,但是我們還面臨着一個核心的問題,最終預測出來的向量更多的和文字信息相關,因爲文字裏可提取的信息更爲豐富。但是作爲一個旅行玩法,也需要圖片的視覺表達。爲了去解決這個問題,我們在整個任務裏嘗試了不同的圖與文字的模態的權重,然後在做 title 的 mask 時,會做一些隨機 drop 邏輯。表徵向量最終會拿到線上去做召回進行評估,在召回階段與基於 Content-base 圖遷移相比大概有 30% 的效果提升。

4. 排序 - 精排

然後是內容排序,內容排序包括兩個部分,一個是精排,一個是混排。這部分着重強調一下對內容排序與對其他物料排序的差異點,主要是 sample bias,分爲兩部分:

而且整個猜你喜歡的留存率還是比較高的,所以它的活躍樣本量佔比較大。但是靜默用戶是整個產品場景用戶增長的一個核心要素,也需要服務好這部分用戶。結合上面提到的問題,如上圖所示設計了整體精排模型,其思路如下:

精排部分使用的是上述的 MOE 門控網絡,最終的效果還是比較明顯的,它的 CTR 和 PCTR 提升的幅度都比較大。

5. 排序 - 混排

在精排之後,還有一層混排的邏輯,因爲首猜是一個多物料場景,它包括商品、圖文、視頻、POI,還包括一些主題,混排就是將這些物料進行統一的排序。對於混排,我們迭代過兩版方案,第一版我們做了一個多物料的統一模型,最底層將所有物料的特徵進行特徵對齊,放入同一個特徵維度空間,上層設計了一個 MOE 混合的專家網絡。

但是特徵對齊可能會出現一個問題,不是所有物料都能夠在特徵裏邊做對齊的,舉例來說,A 內容可能包含商品,但是 B 內容有可能不包括商品。爲了減少就是說這種底層特徵缺失帶來的一個影響,在上層設計了一個 expert network 的門控。它主要原理是,當底層的特徵缺失時,對應的 expert 權重可以被強制爲零,這樣的話可以減少這一部分缺失特徵帶來的影響。

這種方案的缺點也十分明顯:

基於這些問題,我們有了第二版的多物料頂層混排的嘗試,其思想是使用不同的物料在其對應的子場景裏邊單獨進行 CTR 預估,然後上層輕量使用子場景預估的 CTR 去做混排。

這種方案對頂層的混排的 RT 的要求更高。所以頂層模型需要輕量級。同時因爲子場景裏建模精度是更高的所以在頂層混排時,希望可以借鑑子場景模型預估的結果做到單物料保序。換句話說就是,子場景裏的物料順序跟我們混排裏單物料的順序保持一致。基於這樣的考慮,提出了兩個優化點:

03 內容流量機制設計

第三部分的內容是關於內容流量機制設計。其目的是爲了構建一個合理的內容流轉機制,讓分發邏輯更透明,讓業務方知道內容爲什麼分發不出去,卡在哪一個環節,使運營可以高效參與。內容的流量機制裏我們做了分級池及內容爬坡機制,內容的來源主要分爲四塊業務,在內容剛發佈時都會進入到一級池,進入保量階段,保量的目的是做一些冷啓動 EE 探索。然後在保量結束之後會有判定條件,判定是否可以進入二級池,在二級池會有助推的操作。在二級池同樣會判別這個內容是否進入流量激勵,或者普通全量池進行通投。

這裏邊其實涉及到一些子模型,當我們一個新內容發佈時,首先會去判斷內容質量,內容質量判別模型是一個很簡單的分類模型,它會將圖片質量、作者信息、summary 等一些信息作爲特徵去考量。

在內容質量判別之後,會有流量試投階段,主要 bandit 用戶的試投模型。在這裏我們會基於用戶的特徵,商品類特徵,做一些 EE 探索,給予一些激勵。

然後在流量試投策略後,就是一個二級流量池判別模型。因爲試投的流量其實不是很大,可能有時不太能直接用試投的流量的反饋數據去判斷這個內容是否有潛力繼續分發下去。所以這個判別模型除了考慮投放後反饋的數據之外,也融合了內容本身的信息,去做分類。

在二級流量池的判別模型後,我們設計了兩條鏈路,第一條是流量激勵,如果內容投放的效果可以,需要激勵時,會進行流量助推。如果內容不需要流量激勵,則直接進入普通全量池進行正常的內容汰換下線。這就是整體流量機制的設計。

今天的分享就到這裏,謝謝大家。

分享嘉賓:

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