Categories
程式開發

推薦場景中召回模型的演化過程


導讀:一般的推薦系統主要包括召回、排序和後續的業務機制( 重排序、多樣性保證、用戶體驗保證等等) 這三大模塊,而其中召回模塊主要負責根據用戶和item 的特徵,從眾多待推薦的候選item 中初步篩選出用戶可能感興趣的item。一般而言召回模塊都是多路並發的,各路的不同召回模型之間互不影響。本文主要關注於最近幾年,特別是深度學習廣泛用於推薦場景之後召回模型的一個演化過程。

01 傳統方法:基於協同過濾

協同過濾可分為基於用戶的協同過濾、基於物品的協同過濾,基於模型的協同過濾 ( 比如 MF 矩陣分解等 )。這部分不詳細講解,網上資料很多。這裡說下基於 item 的協同過濾方法吧,主要思想是:根據兩個 item 被同時點擊的頻率來計算這兩個 item 之間的相似度,然後推薦用戶歷史行為中各個 item 的相似相關 item。雖然基於用戶的協同過濾召回方法具有簡單、性能較高,因此在實際的推薦場景中用途十分廣泛。不過也是有天然的缺陷:召回結果的候選集item 限定在用戶的歷史行為類目中,並且難以結合候選item 的Side Information ( 比如brand,品類一些id 信息),導致其推薦結果存在發現性弱、對長尾商品的效果差等問題,容易導致推薦系統出現“越推越窄” 的問題,制約了推薦系統的可持續發展。

02 單 Embedding 向量召回

這部分工作主要介紹單embedding 向量召回( 每個user 和item 在一個時刻只用一個embedding 向量去表示) 的一些經典方法,其主要思想為:將user 和item 通過DNN 映射到同一個低維度向量空間中,然後通過高效的檢索方法去做召回。

Youtube DNN 召回

使用特徵:用戶觀看過視頻的 embedding 向量、用戶搜索詞的 embedding 向量、用戶畫像特徵、context 上下文特徵等。

訓練方式:三層 ReLU 神經網絡之後接 softmax 層,去預測用戶下一個感興趣的視頻,輸出是在所有候選視頻集合上的概率分佈。訓練完成之後,最後一層 Relu 的輸出作為 user embedding,softmax 的權重可當做當前預測 item 的 embedding 表示。

線上預測:通過 userId 找到相應的 user embedding,然後使用 KNN 方法 ( 比如 faiss ) 找到相似度最高的 top-N 條候選結果返回。

推薦場景中召回模型的演化過程 1

雙塔模型召回

雙塔模型基本是:兩側分別對 user 和 item 特徵通過 DNN 輸出向量,並在最後一層計算二個輸出向量的內積。

推薦場景中召回模型的演化過程 2

例如 YouTube 今年剛發的一篇文章就應用了經典的雙塔結構:

推薦場景中召回模型的演化過程 3

03 多 Embedding 向量召回-用戶多興趣表達

Multi-Interest Network with Dynamic Routing 模型

背景:電商場景下用戶行為序列中的興趣分佈是多樣的,如下圖用戶A 和B 的點擊序列商品類別分佈較廣,因此如果只用一個embedding 向量來表示用戶的興趣其表徵能力是遠遠不夠的。所以需要通過一種模型來建模出用戶多個 embedding 的表示。

推薦場景中召回模型的演化過程 4

MIND 模型通過引入 capsule network 的思想來解決輸出多個向量 embedding 的問題,具體結構如下圖:

推薦場景中召回模型的演化過程 5

訓練:Multi-Interest 抽取層負責建模用戶多個興趣向量 embedding,然後通過 Label-aware Attention 結構對多個興趣向量加權。這是因為多個興趣 embedding 和待推薦的 item 的相關性肯定不同 ( 這裡的思想和 DIN 模型如出一轍 )。其中上圖中的 K,V 都表示用戶多興趣向量,Q 表示待推薦 item 的 embedding 表示,最終用戶的 embedding 表示為:

推薦場景中召回模型的演化過程 6

公式中的 ei 表示 item embedding,Vu 表示 Multi-Interest 抽取層輸出的用戶多個興趣向量 embedding。

然後使用 Vu 和待推薦 item embedding,計算用戶 u 和商品 i 交互的概率,計算方法和 YouTube DNN 一樣:

推薦場景中召回模型的演化過程 7

線上 serving:在線計算用戶的多個興趣向量後,每個興趣向量 embedding 通過 KNN 檢索得到最相似的 Top-N 候選商品集合。這裡有個問題大家思考下?得到多個興趣向量後通過權重將這些向量的 embedding 累加起來成為一個 ( 表示為多個向量的加權和 ),然後只去線上檢索這一個 embedding 的 Top-N 相似,大家覺得這樣操作可以嗎?不可以的原因又是什麼呢?

04 Graph Embedding

阿里 Graph Embedding with Side information

傳統的 graph embedding 過程如下圖:

推薦場景中召回模型的演化過程 8

其實就是通過 “構圖 -> 隨機遊走得到序列 -> word2vec 訓練” 三部曲得到每個 item 的 embedding 表示。但是這樣訓練出來的模型會存在冷啟動問題。就是那些出現次數很少或者從來沒在序列中出現過的 item embedding 無法精確的表徵。本文通過添加 side information ( 比如商品的種類、品牌、店鋪 id 等 ) 等輔助類信息來緩解該問題,如下圖 SI 1 – SI n 表示 n-1 個輔助 id 特徵的 embedding 表示。

推薦場景中召回模型的演化過程 9

該模型的亮點是考慮了不同的 side information 在最終的 aggregated embeddings 中所佔的權重是不同的,最後 aggregated embeddings 計算公式如下,其中分母用來歸一化。

推薦場景中召回模型的演化過程 10

GraphSAGE:Inductive representation learning on large graphs

經典的圖卷積神經網絡 GCN 有一個缺點:需要把所有節點都參與訓練才能得到 node 的 embedding,無法快速得到新 node 的 embedding。這是因為添加一個新的 node,意味著許多與之相關的節點的表示都應該調整。所以新的 graph 圖會發生很大的變化,要想得到新的 node 的表示,需要對新的 graph 重新訓練。

GraphSAGE 的基本思想:學習一個 node 節點的信息是怎麼通過其鄰居節點的特徵聚合而來的。算法如下:

推薦場景中召回模型的演化過程 11

大致流程是:對於一個 node 需要聚合 K 次,每次都通過聚合函數 aggregator 將上一層中與當前 node 有鄰接關係的多個 nodes 聚合一次,如此反复聚合 K 次,得到該 node 最後的特徵。最下面一層的 node 特徵就是輸入的 node features。

推薦場景中召回模型的演化過程 12

05 結合用戶長期和短期興趣建模

SDM: Sequential Deep Matching Model for Online Large-scale Recommender System

背景:在電商場景中,用戶都會有短期興趣和長期興趣,比如在當前的瀏覽session內的一個點擊序列,用戶的需求往往是明確的,這屬於用戶短期的興趣。另外用戶還有一些長期的興趣表達,比如品牌、店舖的偏好。因此通過模型分別建模用戶的長、短期興趣是有意義的。

推薦場景中召回模型的演化過程 13

上圖中$P_u$ 表示用戶短期興趣向量,$s^u_t$ 表示用戶的長期興趣向量,這裡需要注意的是,在求長期和短期用戶興趣向量時都使用了Attention 機制,Attention 的Query 向量$ e_u$ 表示user 的embedding,用的是基本的用戶畫像,如年齡區間、性別、職業等。得到長期和短期用戶向量後,通過 gru 中的 gate 機制去融合兩者:

推薦場景中召回模型的演化過程 14

上面的公式輸出表示用戶的 embedding 表示,而 item 的 embedding 表示和 YouTube DNN 一樣,可以拿 softmax 層的權重。其實也可用 graph embedding 先離線訓練好 item 的 embedding 表示。

線上預測:通過 user id 找到相應的 user embedding,然後使用 KNN 方法 ( 比如 faiss ) 找到相似度最高的 top-N 條候選結果返回。

Next Item Recommendation with Self-Attention

推薦場景中召回模型的演化過程 15

本文亮點是同時建模用戶短期興趣 ( 由 self-attention 結構提取 ) 和用戶長期興趣。其短期興趣建模過程:使用用戶最近的 L 條行為記錄來計算短期興趣。可使用 X 表示整個物品集合的 embedding,那麼,用戶 u 在 t 時刻的前 L 條交互記錄所對應的 embedding 表示如下:

推薦場景中召回模型的演化過程 16

其中每個 item 的 embedding 維度為 d,將 $X^u_t$ 作為 transformer 中一個 block 的輸入:

推薦場景中召回模型的演化過程 17

推薦場景中召回模型的演化過程 18

推薦場景中召回模型的演化過程 19

推薦場景中召回模型的演化過程 20

這裡需要注意和傳統 transformer 的不同點:

  • 計算 softmax 前先掩掉 $Q’K’^T$ 矩陣的對角線值,因為對角線其實是 item 與本身的一個內積值,容易給該位置分配過大的權重。
  • 沒有將輸入 $X^u_t$ 乘以 $W_V$ 得到 $V’$,而是直接將輸入 $X^u_t$ 乘以 softmax 算出來的 score。
  • 直接將 embedding 在序列維度求平均,作為用戶短期興趣向量。

Self-attention 模塊只使用用戶最近的 L 個交互商品作為用戶短期的興趣。那麼怎麼建模用戶的長期興趣呢?可認為用戶和物品同屬於一個興趣空間,用戶的長期興趣可表示成空間中的一個向量,而某物品也可表示為成該興趣空間中的一個向量。那如果一個用戶對一個物品的評分比較高,說明這兩個興趣是相近的,那麼它們對應的向量在興趣空間中距離就應該較近。這個距離可用平方距離表示:

推薦場景中召回模型的演化過程 21

其中 U 是用戶的興趣向量,V 是物品的興趣向量

綜合短期興趣和長期興趣,可得到用戶對於某個物品的推薦分,推薦分越低,代表用戶和物品越相近,用戶越可能與該物品進行交互。

推薦場景中召回模型的演化過程 22

06 TDM 深度樹匹配召回

TDM 是為大規模推薦系統設計的、能夠承載任意先進模型 ( 也就是可以通過任何深度學習推薦模型來訓練樹 ) 來高效檢索用戶興趣的推薦算法解決方案。 TDM 基於樹結構,提出了一套對用戶興趣度量進行層次化建模與檢索的方法論,使得系統能直接利高級深度學習模型在全庫範圍內檢索用戶興趣。其基本原理是使用樹結構對全庫item 進行索引,然後訓練深度模型以支持樹上的逐層檢索,從而將大規模推薦中全庫檢索的複雜度由O(n) ( n 為所有item 的量級) 下降至O(log n)。

樹結構

推薦場景中召回模型的演化過程 23

如上圖所示,樹中的每一個葉節點對應一個 item;非葉節點表示 item 的集合。這樣的一種層次化結構,體現了粒度從粗到細的 item 架構。此時,推薦任務轉換成瞭如何從樹中檢索一系列葉節點,作為用戶最感興趣的 item 返回。

怎麼基於樹來實現高效的檢索?

推薦場景中召回模型的演化過程 24

採用 beam-search 的方法,根據用戶對每層節點的興趣挑選 topK,將每層 topK 節點的子節點作為下一層挑選的候選集合逐層展開,直到最終的葉子層。比如上圖中,第一層挑選的Top2 是LN1 和LN2,展開的子節點是SN1 到SN4,在這個侯選集裡挑選SN2 和SN3 是它的Top2,沿著SN2 和SN3 它的整個子節點集合是ITEM3 到ITEM6,在這樣一個子結合裡去挑Top2,最後把ITEM4 和ITEM6 挑出來。

那麼為什麼可以這樣操作去 top 呢?因為這棵樹已經被興趣建模啦( 直白意思就是每個節點的值都通過CTR 預估模型進行訓練過了,比如節點的值就是被預測會點擊的概率值),那麼問題來了,怎麼去做興趣建模呢( 基於用戶和item 的特徵進行CTR 預估訓練)?

興趣建模

推薦場景中召回模型的演化過程 25

如上圖,假設用戶對葉子層ITEM6 節點是感興趣的,那麼可認為它的興趣是1,同層其他的節點興趣為0,從而也就可以認為ITEM6 的這個節點上述的路徑的父節點興趣都為1,那麼這一層就是SN3 的興趣為1,其他的為0,這層就是LN2 的興趣為1,其他為0。也就是需要從葉子層確定正樣本節點,然後沿著正樣本上溯確定每一層的正樣本,其他的同層採樣一些負樣本,構建用於每一層偏序學習模型的樣本。

構造完訓練樣本後,可以利用DIN ( 這裡可以是任何先進的模型) 承擔用戶興趣判別器的角色,輸入就是每層構造的正負樣本,輸出的是( 用戶,節點) 對的興趣度,將被用於檢索過程作為尋找每層Top K 的評判指標。如下圖:在用戶特徵方面僅使用用戶歷史行為,並對歷史行為根據其發生時間,進行了時間窗口劃分。在節點特徵方面,使用的是節點經過 embedding 後的向量作為輸入。此外,模型借助 attention 結構,將用戶行為中和本次判別相關的那部分篩選出來,以實現更精準的判別。

推薦場景中召回模型的演化過程 26

興趣樹是怎麼構建的?網絡與樹結構的聯合訓練

優化模型和優化樣本標籤交替進行。具體過程:最開始先生成一個初始的樹,根據這個初始的樹去訓練模型,有了模型之後,再對數據進行判別,找出哪些樣本標籤打錯了,進行標籤的調整,相當於做樹結構的調整。完成一輪新的樹的結構的調整之後,我們再來做新的模型學習,實現整個交替的優化。

推薦場景中召回模型的演化過程 27

模型訓練、優化樣本標籤過程迭代進行,最終得到穩定的結構與模型。

總結

目前TDM模型更多承擔的還是召回的工作:

推薦場景中召回模型的演化過程 28

TDM初步實現了在數據驅動下的模型、檢索和索引三者的聯合學習。其中索引決定了整個數據的組織結構,它承載的是模型能力和檢索策略,以實現檢索的快速和準確。檢索實際上是面向目標,它需要和索引結構相適配。模型支撐的則是整個檢索效果的優化。

參考鏈接

(1)https://static.googleusercontent.com/media/research.google.com/zh-CN//pubs/archive/45530.pdf

(2)https://dl.acm.org/citation.cfm?id=3346996

(3)https://arxiv.org/pdf/1904.08030.pdf

(4)https://arxiv.org/pdf/1803.02349.pdf

(5)https://arxiv.org/pdf/1706.02216.pdf

(6)https://zhuanlan.zhihu.com/p/74242097

(7)https://arxiv.org/abs/1909.00385v1

(8)https://www.jianshu.com/p/9eb209343c56

(9)https://zhuanlan.zhihu.com/p/78941783

原文鏈接

https://zhuanlan.zhihu.com/p/97821040

作者介紹

Alex-zhai 京東算法工程師。從事深度強化學習、深度學習、圖像處理、深度學習推薦算法、分佈式訓練架構等方向。

本文來自 DataFunTalk

原文鏈接

https://mp.weixin.qq.com/s/Y4g2T6qMGzCcE67bINPiGA