推荐场景中召回模型的演化过程
導讀:一般的推薦系統(tǒng)主要包括召回、排序和后續(xù)的業(yè)務機制 ( 重排序、多樣性保證、用戶體驗保證等等 ) 這三大模塊,而其中召回模塊主要負責根據(jù)用戶和 item 的特征,從眾多待推薦的候選 item 中初步篩選出用戶可能感興趣的 item。一般而言召回模塊都是多路并發(fā)的,各路的不同召回模型之間互不影響。本文主要關注于最近幾年,特別是深度學習廣泛用于推薦場景之后召回模型的一個演化過程。
01
傳統(tǒng)方法:基于協(xié)同過濾
協(xié)同過濾可分為基于用戶的協(xié)同過濾、基于物品的協(xié)同過濾,基于模型的協(xié)同過濾 ( 比如 MF 矩陣分解等 )。這部分不詳細講解,網上資料很多。這里說下基于 item 的協(xié)同過濾方法吧,主要思想是:根據(jù)兩個 item 被同時點擊的頻率來計算這兩個 item 之間的相似度,然后推薦用戶歷史行為中各個 item 的相似相關 item。雖然基于用戶的協(xié)同過濾召回方法具有簡單、性能較高,因此在實際的推薦場景中用途十分廣泛。不過也是有天然的缺陷:召回結果的候選集 item 限定在用戶的歷史行為類目中,并且難以結合候選 item 的 Side Information ( 比如 brand,品類一些 id 信息 ),導致其推薦結果存在發(fā)現(xiàn)性弱、對長尾商品的效果差等問題,容易導致推薦系統(tǒng)出現(xiàn) "越推越窄" 的問題,制約了推薦系統(tǒng)的可持續(xù)發(fā)展。
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 今年剛發(fā)的一篇文章就應用了經典的雙塔結構:
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
傳統(tǒng)的 graph embedding 過程如下圖:
其實就是通過?"構圖 -> 隨機游走得到序列 -> word2vec 訓練" 三部曲得到每個 item 的 embedding 表示。但是這樣訓練出來的模型會存在冷啟動問題。就是那些出現(xiàn)次數(shù)很少或者從來沒在序列中出現(xiàn)過的 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 有一個缺點:需要把所有節(jié)點都參與訓練才能得到 node 的 embedding,無法快速得到新 node 的 embedding。這是因為添加一個新的 node,意味著許多與之相關的節(jié)點的表示都應該調整。所以新的 graph 圖會發(fā)生很大的變化,要想得到新的 node 的表示,需要對新的 graph 重新訓練。
GraphSAGE 的基本思想:學習一個 node 節(jié)點的信息是怎么通過其鄰居節(jié)點的特征聚合而來的。算法如下:
大致流程是:對于一個 node 需要聚合 K 次,每次都通過聚合函數(shù) aggregator 將上一層中與當前 node 有鄰接關系的多個 nodes 聚合一次,如此反復聚合 K 次,得到該 node 最后的特征。最下面一層的 node 特征就是輸入的 node features。
05
結合用戶長期和短期興趣建模
??SDM: Sequential Deep Matching Model for Online Large-scale Recommender System
背景:在電商場景中,用戶都會有短期興趣和長期興趣,比如在當前的瀏覽session內的一個點擊序列,用戶的需求往往是明確的,這屬于用戶短期的興趣。另外用戶還有一些長期的興趣表達,比如品牌、店鋪的偏好。因此通過模型分別建模用戶的長、短期興趣是有意義的。
上圖中表示用戶短期興趣向量,表示用戶的長期興趣向量,這里需要注意的是,在求長期和短期用戶興趣向量時都使用了 Attention 機制,Attention 的 Query 向量表示 user 的 embedding,用的是基本的用戶畫像,如年齡區(qū)間、性別、職業(yè)等。得到長期和短期用戶向量后,通過 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,將?作為 transformer 中一個 block 的輸入:
這里需要注意和傳統(tǒng) transformer 的不同點:
-
計算 softmax 前先掩掉??矩陣的對角線值,因為對角線其實是 item 與本身的一個內積值,容易給該位置分配過大的權重。
-
沒有將輸入乘以得到?,而是直接將輸入??乘以 softmax 算出來的 score。
-
直接將 embedding 在序列維度求平均,作為用戶短期興趣向量。
Self-attention 模塊只使用用戶最近的 L 個交互商品作為用戶短期的興趣。那么怎么建模用戶的長期興趣呢?可認為用戶和物品同屬于一個興趣空間,用戶的長期興趣可表示成空間中的一個向量,而某物品也可表示為成該興趣空間中的一個向量。那如果一個用戶對一個物品的評分比較高,說明這兩個興趣是相近的,那么它們對應的向量在興趣空間中距離就應該較近。這個距離可用平方距離表示:
其中 U 是用戶的興趣向量,V 是物品的興趣向量
綜合短期興趣和長期興趣,可得到用戶對于某個物品的推薦分,推薦分越低,代表用戶和物品越相近,用戶越可能與該物品進行交互。
06
TDM 深度樹匹配召回
TDM 是為大規(guī)模推薦系統(tǒng)設計的、能夠承載任意先進模型 ( 也就是可以通過任何深度學習推薦模型來訓練樹 ) 來高效檢索用戶興趣的推薦算法解決方案。TDM 基于樹結構,提出了一套對用戶興趣度量進行層次化建模與檢索的方法論,使得系統(tǒng)能直接利高級深度學習模型在全庫范圍內檢索用戶興趣。其基本原理是使用樹結構對全庫 item 進行索引,然后訓練深度模型以支持樹上的逐層檢索,從而將大規(guī)模推薦中全庫檢索的復雜度由 O(n) ( n 為所有 item 的量級 ) 下降至 O(log n)。
??樹結構
如上圖所示,樹中的每一個葉節(jié)點對應一個 item;非葉節(jié)點表示 item 的集合。這樣的一種層次化結構,體現(xiàn)了粒度從粗到細的 item 架構。此時,推薦任務轉換成了如何從樹中檢索一系列葉節(jié)點,作為用戶最感興趣的 item 返回。
??怎么基于樹來實現(xiàn)高效的檢索?
采用 beam-search 的方法,根據(jù)用戶對每層節(jié)點的興趣挑選 topK,將每層 topK 節(jié)點的子節(jié)點作為下一層挑選的候選集合逐層展開,直到最終的葉子層。比如上圖中,第一層挑選的 Top2 是 LN1 和 LN2,展開的子節(jié)點是 SN1 到 SN4,在這個侯選集里挑選 SN2 和 SN3 是它的 Top2,沿著 SN2 和 SN3 它的整個子節(jié)點集合是 ITEM3 到 ITEM6,在這樣一個子結合里去挑 Top2,最后把 ITEM4 和 ITEM6 挑出來。
那么為什么可以這樣操作去 top 呢?因為這棵樹已經被興趣建模啦 ( 直白意思就是每個節(jié)點的值都通過 CTR 預估模型進行訓練過了,比如節(jié)點的值就是被預測會點擊的概率值 ),那么問題來了,怎么去做興趣建模呢 ( 基于用戶和 item 的特征進行 CTR 預估訓練 )?
??興趣建模
如上圖,假設用戶對葉子層 ITEM6 節(jié)點是感興趣的,那么可認為它的興趣是 1,同層其他的節(jié)點興趣為 0,從而也就可以認為 ITEM6 的這個節(jié)點上述的路徑的父節(jié)點興趣都為 1,那么這一層就是 SN3 的興趣為 1,其他的為 0,這層就是 LN2 的興趣為 1,其他為 0。也就是需要從葉子層確定正樣本節(jié)點,然后沿著正樣本上溯確定每一層的正樣本,其他的同層采樣一些負樣本,構建用于每一層偏序學習模型的樣本。
構造完訓練樣本后,可以利用 DIN ( 這里可以是任何先進的模型 ) 承擔用戶興趣判別器的角色,輸入就是每層構造的正負樣本,輸出的是 ( 用戶,節(jié)點 ) 對的興趣度,將被用于檢索過程作為尋找每層 Top K 的評判指標。如下圖:在用戶特征方面僅使用用戶歷史行為,并對歷史行為根據(jù)其發(fā)生時間,進行了時間窗口劃分。在節(jié)點特征方面,使用的是節(jié)點經過 embedding 后的向量作為輸入。此外,模型借助 attention 結構,將用戶行為中和本次判別相關的那部分篩選出來,以實現(xiàn)更精準的判別。
??興趣樹是怎么構建的?網絡與樹結構的聯(lián)合訓練
優(yōu)化模型和優(yōu)化樣本標簽交替進行。具體過程:最開始先生成一個初始的樹,根據(jù)這個初始的樹去訓練模型,有了模型之后,再對數(shù)據(jù)進行判別,找出哪些樣本標簽打錯了,進行標簽的調整,相當于做樹結構的調整。完成一輪新的樹的結構的調整之后,我們再來做新的模型學習,實現(xiàn)整個交替的優(yōu)化。
模型訓練、優(yōu)化樣本標簽過程迭代進行,最終得到穩(wěn)定的結構與模型。
??總結
目前TDM模型更多承擔的還是召回的工作:
TDM初步實現(xiàn)了在數(shù)據(jù)驅動下的模型、檢索和索引三者的聯(lián)合學習。其中索引決定了整個數(shù)據(jù)的組織結構,它承載的是模型能力和檢索策略,以實現(xiàn)檢索的快速和準確。檢索實際上是面向目標,它需要和索引結構相適配。模型支撐的則是整個檢索效果的優(yōu)化。
參考鏈接:
[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
總結
以上是生活随笔為你收集整理的推荐场景中召回模型的演化过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: widedeep 在贝壳推荐场景的实践
- 下一篇: 胆囊炎能不能吃银耳