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

導讀:一般的推薦系統主要包括召回、排序和後續的業務機制 ( 重排序、多樣性保證、用戶體驗保證等等 ) 這三大模塊,而其中召回模塊主要負責根據用戶和 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 條候選結果返回。

雙塔模型召回

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

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

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

Multi-Interest Network with Dynamic Routing 模型

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

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

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

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

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

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

04 Graph Embedding

阿里 Graph Embedding with Side information

傳統的 graph embedding 過程如下圖:

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

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

GraphSAGE:Inductive representation learning on large graphs

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

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

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

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

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

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

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

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

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

Next Item Recommendation with Self-Attention

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

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

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

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

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

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

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

06 TDM 深度樹匹配召回

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

樹結構

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

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

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

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

興趣建模

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

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

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

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

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

總結

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章