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