推薦系統中的深度匹配模型

文章作者:辛俊波 騰訊 高級研究員
編輯整理:Hoh Xil
內容來源:作者授權
文章出品:DataFunTalk
注:轉載請聯系作者本人。
導讀:推薦系統和搜索應該是機器學習乃至深度學習在工業界落地應用最多也最容易變現的場景。而無論是搜索還是推薦,本質其實都是匹配,搜索的本質是給定 query,匹配 doc;推薦的本質是給定 user,推薦 item。本文主要講推薦系統里的匹配問題,包括傳統匹配模型和深度學習模型。
深度學習之風雖然愈演愈烈,但背后體現的矩陣分解思想、協同過濾思想等其實一直都是貫穿其中,如 svd++ 體現的 userCF 和 itemCF 的思想,FM 模型本質上可以退化成以上大多數模型等。多對這些方法做總結,有助於更深刻理解不同模型之間的關聯。

PS:本文主要啟發來源 SIGIR2018:Deep Learning for Matching in Search and Recommendation,重點闡述搜索和推薦中的深度匹配問題,非常 solid 的綜述,針對里面的一些方法,尤其是 feature-based 的深度學習方法增加了近期一些相關 paper。
本文主要分為以下幾部分:
❶ 推薦系統概述
❷ 推薦系統的傳統匹配模型
❸ 基於 representation learning 的深度匹配模型
❹ 基於 match function learning 的深度匹配模型
01
▬
推薦系統概述
1.1 推薦系統本質
推薦系統就是系統根據用戶的屬性 ( 如性別、年齡、學歷、地域、職業 ),用戶在系統里過去的行為 ( 例如瀏覽、點擊、搜索、購買、收藏等 ),以及當前上下文環境 ( 如網絡、手機設備、時間等 ),從而給用戶推薦用戶可能感興趣的物品 ( 如電商的商品、feeds 推薦的新聞、應用商店推薦的 app 等 ),從這個過程來看,推薦系統就是一個給 user 匹配 ( match ) 感興趣的 item 的過程。
1.2 推薦和搜索比較
推薦和搜索有很多相同又有很多不同的地方,放到一起的原因是兩者其實都是一個 match 的過程,圖1.1展示的是一個搜索引擎的架構,需要 match 的是 query 和相關的 doc;圖1.2展示的是一個推薦系統的架構,需要 match 的是 user ( 可能會帶有主動意圖的 query ) 和相關的 item。

1.2.1 搜索和推薦不同之處
❶ 意圖不同
搜索是用戶帶着明確的目的,通過給系統輸入 query 來主動觸發的,搜索過程用戶帶着明確的搜索意圖。而推薦是系統被動觸發,用戶是以一種閑逛的姿態過來的,系統是帶着一種 "猜" 的狀態給用戶推送物品。
簡單來說,搜索是一次主動 pull 的過程,用戶用 query 告訴系統,我需要什么,你給我相關的結果就行;而推薦是一次 push 的過程,用戶沒有明顯意圖,系統給用戶被動 push 認為用戶可能會喜歡的東西吧。
❷ 時效不同
搜索需要盡快滿足用戶此次請求 query,如果搜索引擎無法滿足用戶當下的需求,例如給出的搜索結果和用戶輸入的 query 完全不相關,盡是瞎猜的結果,用戶體驗會變得很差。
推薦更希望能增加用戶的時長和留存從而提升整體 LTV ( long time value,衡量用戶對系統的長期價值 ),例如視頻推薦系統希望用戶能夠持續的沉浸在觀看系統推薦的視頻流中;電商推薦系統希望用戶能夠多逛多點擊推薦的商品從而提高 GMV。
❸ 相關性要求不同
搜索有嚴格的 query 限制,搜索結果需要保證相關性,搜索結果量化評估標准也相對容易。給定一個 query,系統給出不同結果,在上線前就可以通過相關性對結果進行判定相關性好壞。例如下圖中搜索 query 為 "pool schedule",搜索結果 "swimming pool schedule" 認為是相關的、而最后一個 case,用戶搜索 "why are windows so expensive" 想問的是窗戶為什么那么貴,而如果搜索引擎將這里的 windows 理解成微軟的 windows 系統從而給出結果是蘋果公司的 mac,一字之差意思完全不同了,典型的 bad case。

而推薦沒有明確的相關性要求。一個電商系統,用戶過去買了足球鞋,下次過來推薦電子類產品也無法說明是 bad case,因為用戶行為少,推完全不相關的物品是系統的一次探索過程。推薦很難在離線階段從相關性角度結果評定是否好壞,只能從線上效果看用戶是否買單做評估。
❹ 實體不同
搜索中的兩大實體是 query 和 doc,本質上都是文本信息。這就是上文說到的為什么搜索可以通過 query 和 doc 的文本相關性判斷是否相關。Query 和 doc 的匹配過程就是在語法層面理解 query 和 doc 之間 gap 的過程。
推薦中的兩大實體是 user 和 item,兩者的表征體系可能完全沒有重疊。例如電影推薦系統里,用戶的特征描述是:用戶 id,用戶評分歷史、用戶性別、年齡;而電影的特征描述是:電影 id,電影描述,電影分類,電影票房等。這就決定了推薦中,user 和 item 的匹配是無法從表面的特征解決兩者 gap 的。

❺ 個性化要求不同
雖然現在但凡是一個推薦系統都在各種標榜如何做好個性化,"千人千面",但搜索和推薦天然對個性化需求不同。搜索有用戶的主動 query,本質上這個 query 已經在告訴系統這個 "用戶" 是誰了,query 本身代表的就是一類用戶,例如搜索引擎里搜索 "深度學習綜述" 的本質上就代表了機器學習相關從業者或者對其感興趣的這類人。在一些垂直行業,有時候 query 本身就夠了,甚至不需要其他用戶屬性畫像。例如在 app 推薦系統里,不同的用戶搜索 "京東",並不會因為用戶過去行為、本身畫像屬性不同而有所不同。

而推薦沒有用戶主動的 query 輸入,如果沒有用戶畫像屬性和過去行為的刻畫,系統基本上就等於瞎猜。
1.2.2 搜索和推薦相同之處
❶ 本質是都是 match 過程
如果把 user 比作 query,把 item 比作 doc,那么推薦和搜索在這個層面又是相同的,都是針對一個 query ( 一個 user ),從海量的候選物品庫中,根據 query 和 doc 的相關性 ( user 過去的歷史、畫像等和 item 的匹配程度 ),去推薦匹配的 doc ( item )。
❷ 目標相同
搜索和推薦的目標都是針對一次 context ( 或者有明確意圖,或者沒有 ),從候選池選出盡可能滿足需求的物品。兩者區別只是挑選過程使用的信息特征不同。
❸ 語義鴻溝 ( semantic gap ) 都是兩者最大的挑戰
在搜索里表現是 query 和 doc 的語義理解,推薦里則是 user 和 item 的理解。例如,搜索里多個不同的 query 可能表示同一個意圖;而推薦里用來表示 user 和 item 的特征體系可能完全不是一個層面的意思。
02▬
推薦系統的傳統匹配模型2.1 基於 Collaborative Filtering 的方法
2.1.1 CF 模型
說到推薦系統里最經典的模型,莫過於大名鼎鼎的協同過濾了。協同過濾基於一個最基本的假設:一個用戶的行為,可以由和他行為相似的用戶進行預測。
協同過濾的基本思想是基於 <user, item> 的所有交互行為,利用集體智慧進行推薦。CF 按照類型可以分為3種,user-based CF、item-based CF 和 model-based CF。
❶ User-base CF:通過對用戶喜歡的 item 進行分析,如果用戶 a 和用戶 b 喜歡過的 item 差不多,那么用戶 a 和 b 是相似的。類似朋友推薦一樣,可以將 b 喜歡過但是 a 沒有看過的 item 推薦給 a。
❷ Item-base CF: item A 和 item B 如果被差不多的人喜歡,認為 item A 和 item B 是相似的。用戶如果喜歡 item A,那么給用戶推薦 item B 大概率也是喜歡的。比如用戶瀏覽過這篇介紹推薦系統的文章,也很有可能會喜歡和推薦系統類似的其他機器學習相關文章。
❸ Model-base CF: 也叫基於學習的方法,通過定義一個參數模型來描述用戶和物品、用戶和用戶、物品和物品之間的關系,然后通過已有的用戶-物品評分矩陣來優化求解得到參數。例如矩陣分解、隱語義模型 LFM 等。
CF 協同過濾的思路要解決的問題用數據形式表達就是:矩陣的未知部分如何填充問題 ( Matrix Completion )。如圖2.1所示,已知的值是用戶已經交互過的 item,如何基於這些已知值填充矩陣剩下的未知值,也就是去預測用戶沒有交互過的 item 是矩陣填充要解決的問題。

矩陣填充可以用經典的 SVD ( Singular Value Decomposition ) 解決,如圖2.1所示。

其中左側 M=m*n 表示用戶評分矩陣,m 矩陣的行表示用戶數,n 矩陣的列表示 item 數,在大多數推薦系統中 m 和 n 規模都比較大,因此希望通過將 M 分解成右側低秩的形式。一般來說 SVD 求解可以分為三步:
❶ 對 M 矩陣的 missing data 填充為0
❷ 求解 SVD 問題,得到 U 矩陣和 V 矩陣
❸ 利用 U 和 V 矩陣的低秩 k 維矩陣來估計
對於第二步種的 SVD 求解問題,等價於以下的最優化問題:
其中 yij 為用戶 i 對物品 j 的真實評分,也就是 label,U 和 V 為模型預估值,求解矩陣 U 和 V 的過程就是最小化用戶真實評分矩陣和預測矩陣誤差的過程。
這種 SVD 求解方法存在以下問題:
❶ Missing data ( 在數據集占比超過99% ) 和 observe data 權重一樣。
❷ 最小化過程沒有正則化 ( 只有最小方差 ),容易產生過擬合。
因此,一般來說針對原始的 SVD 方法會有很多改進方法。
2.1.2 MF 模型 ( 矩陣分解 )
為解決上述過擬合情況,矩陣分解模型 ( matrix factorization ) 提出的模型如下:
MF 模型的核心思想可以分成兩步:
❶ 將用戶 u 對物品 i 的打分分解成用戶的隱向量 vu,以及物品的隱向量 vi;
❷ 用戶 u 和物品 i 的向量點積 ( inner product ) 得到的 value,可以用來代表用戶 u 對物品i的喜好程度,分數越高代表該 item 推薦給用戶的概率就越大。
同時,MF 模型引入了 L2 正則來解決過擬合問題。
當然,這里除了用 L2 正則,其他正則手段例如 L1 正則,cross-entropy 正則也都是可以的。
2.1.3 FISM 模型
上述提到的兩種模型 CF 方法和 MF 方法都只是簡單利用了 user-item 的交互信息,對於用戶本身的表達是 userid 也就是用戶本身。2014年 KDD 上提出了一種更加能夠表達用戶信息的方法,Factored Item Similarity Model,簡稱 FISM,顧名思義,就是將用戶喜歡過的 item 作為用戶的表達來刻畫用戶,用數據公式表示如下:
注意到用戶表達不再是獨立的隱向量,而是用用戶喜歡過的所有 item 的累加求和得到作為 user 的表達;而 item 本身的隱向量 vi 是另一套表示,兩者最終同樣用向量內積表示。
2.1.4 SVD++ 模型
MF 模型可以看成是 user-based 的 CF 模型,直接將用戶id映射成隱向量,而 FISM 模型可以看成是 item-based 的 CF 模型,將用戶交戶過的 item 的集合映射成隱向量。一個是 userid 本身的信息,一個是 user 過去交互過的 item 的信息,如何結合 user-base 和 item-base 這兩者本身的優勢呢?
SVD++ 方法正是這兩者的結合,數學表達如下:
其中,每個用戶表達分成兩個部分,左邊 vu 表示用戶 id 映射的隱向量 ( user-based CF 思想 ),右邊是用戶交互過的 item 集合的求和 ( item-based CF 思想 )。User 和 item 的相似度還是用向量點擊來表達。
這種融合方法可以看成早期的模型融合方法,在連續3年的 Netflix 百萬美金推薦比賽中可是表現最好的模型。
2.2 Generic feature-based 的方法
上述的方法中,無論是 CF,MF,SVD,SVD++,還是 FISM,都只是利用了 user 和 item 的交互信息 ( ratin g data ),而對於大量的 side information 信息沒有利用到。例如 user 本身的信息,如年齡,性別、職業;item 本身的 side information,如分類,描述,圖文信息;以及 context 上下文信息,如位置,時間,天氣等。因此,傳統模型要講的第二部分,是如何利用這些特征,去構造 feature-based 的 model。

2.2.1 FM 模型
首先要介紹的是大名鼎鼎的 FM 模型。FM 模型可以看成由兩部分組成,如圖2.4所示,藍色的 LR 線性模型,以及紅色部分的二階特征組合。對於每個輸入特征,模型都需要學習一個低維的隱向量表達 v,也就是在各種 NN 網絡里所謂的 embedding 表示。

FM 模型的數學表達如圖2.5所示:

注意紅色部分表示的是二階特征的兩兩組合 ( 特征自己和自己不做交叉 ),向量之間的交叉還是用向量內積表示。FM 模型是 feature-based 模型的一個范式表達,接下來介紹的幾個模型都可以看成是 FM 模型的特殊范例。
2.2.2 FM 模型和 MF 關系
假如只使用 userid 和 itemid,我們可以發現其實 FM 退化成加了 bias 的 MF 模型,如圖2.6所示:

數學表達式如下:
2.2.3 FM 模型和 FISM 關系
如果輸入包含兩個變量,① 用戶交互過的 item 集合;② itemid 本身,那么,此時的 FM 又將退化成帶 bias 的 FISM 模型,如圖2.7所示,藍色方框表示的是用戶歷史交互過的 item ( rated movies ),右邊橙色方框表示的是 itemid 本身的 one-hot 特征。

此時的 FM 模型數學表達如下:
同樣道理,如果再加上 userid 的隱向量表達,那么 FM 模型將退化成 SVD++ 模型。可見 MF,FISM,SVD++ 其實都是 FM 的特例。
2.3 傳統模型總結
上面介紹的模型都是通過打分預測來解決推薦系統的排序問題,這在很多時候一般都不是最優的,原因有如下幾個方面:
❶ 預測打分用的 RMSE 指標和實際的推薦系統排序指標的 gap:
預測打分用的 RMSE 擬合的是最小方差 ( 帶正則 ),而實際面臨的是個排序問題。
❷ 觀察數據天然存在 bias
用戶一般傾向於給自己喜歡的 item 打分,而用戶沒有打分過的 item 未必就真的是不喜歡。針對推薦系統的排序問題,一般可以用 pairwise 的 ranking 來替代 RMSE。
如上述公式所示,不直接擬合用戶對 item 的單個打分,而是以 pair 的形式進行擬合;一般來說,用戶打分高的 item > 用戶打分低的 item;用戶用過交互的 item > 用戶未交互過的 item ( 不一定真的不喜歡 )。
03▬
基於 representation learning 的深度匹配模型終於要講到激動人心的深度學習部分了。深度學習匹配模型從大致方向上可以分為兩大類,分別是基於 representation learning 的模型以及 match function learning 的模型。
本章主要講述第一種方法,representation learning,也就是基於表示學習的方法。這種方法會分別學習用戶的 representation 以及 item 的 representation,也就是 user 和 item 各自的 embedding 向量 ( 或者也叫做隱向量 ),然后通過定義 matching score 的函數,一般是簡單的向量點擊、或者 cosine 距離來得到兩者的匹配分數。整個 representation learning 的框架如圖3.1所示,是個典型的 user 和 item 的雙塔結構:

圖3.1 基於 representation learning 的匹配模型
基於 representation learning 的深度學習方法,又可以分為兩大類,基於 CF 以及 CF + side info 的方法。下面的介紹將分別從 input 、representation function 和 matching function 三個角度分別看不同的模型有什么不同。
3.1 基於 Collaborative Filtering 的方法
3.1.1 CF 模型 ( collaborative filtering )
重新回顧下傳統方法里的協同過濾方法,如果從表示學習的角度來看,就是個經典的 representation learning 的模型,分別學習 user 和 item 的隱向量。
❶ input layer:只有兩個,分別是 userid ( one-hot ),itemid ( one-hot )
❷ representation function:線性 embedding layer
❸ matching function:向量內積 ( inner product )

3.1.2 模型 ( Deep Matrix Factorization )
DMF 模型也就是深度矩陣分解模型,在傳統的 MF 中增加了 MLP 網絡,整個網絡框架如圖3.3所示。
❶ input layer
由兩部分組組成,其中 user 由 user 交互過的 item 集合來表示,是個 multi-hot 的打分表示,如 [0 0 4 0 0 … 1 5 …],在矩陣中用行表示;item 也由交互過的 user 集合來表示,也是個 multi-hot 的表示,如 [5 0 0 3 … 1 3],在矩陣中用列表示。

可以發現這里的輸入都是 one-hot 的,一般來說 M 用戶數比較大,N 作為 item 數量假設是百萬級別的。
❷ representation function
Multi-Layer-Perceptron,也就是經典的全連接網絡。
❸ matching function
用 cosine 點擊表示兩個向量的匹配分數。
對比普通的 CF 模型,最大的特點是在 representation function 中,增加了非線性的 MLP,但是由於輸入是 one-hot 的,假設用戶規模是100萬,MLP 的第一層隱層是100,整個網絡光 user 側的第一層參數將達到1億,參數空間將變得非常大。
3.1.3 AutoRec 模型
借鑒 auto-encoder 的思路,AutoRec 模型對輸入做重建,來建立 user 和 item 的 representation,和 CF 一樣,也可以分為 user-based 和 item-based 的模型。對於 item-based AutoRec,input 為 R 里的每列,即每個 item 用各個 user 對它的打分作為其向量描述;對於 user-based AutoRec 則是用 R 里的每行來表示,即每個 user 用他打分過的 item 的向量來表達。
用 ru 表示用戶向量,ri 表示 item 向量,通過 autoencoder 將 ru 或者 ri 投射到低維向量空間 ( encode 過程 ),然后再將其投射到正常空間 ( decode 過程 ),利用 autoencoder 中目標值和輸入值相近的特性,從而重建 ( reconstruct ) 出用戶對於未交互過的 item 的打分。
❶ input layer
和 DMF 一樣,user 用 user 作用過的 item 集合表示,item 則用 itemid 本身表示,圖中在原 slides 是說 user-autoencoder,但個人在看原始 autoRec 論文時,這塊應該有誤,應該是 item-based 的,因為 m 表示的是用戶數,n 表示 item 數,下方的輸入表示所有 user(1,2,3,…m) 對 item i 的交互輸入。

❷ representation function
通過 auto-encoder 的結構表示,其中,h(r; theta) 表示的是輸入層到隱層的重建;由於輸入的是用戶交互過的 item(multi-hot),所以在隱層中的藍色節點表示的就是 user representation;而輸出的節點表示的是 item 的 representation,這樣就可以得到 user 和 item 各自 representation,如下面公式所示:
損失函數為最小化預測的平方差以及 W 和 V 矩陣的 L2 正則:
❸ matching function
有了 user 和 item 的 representation,就可以用向量點擊得到兩者的匹配分數。
3.1.4 模型 ( Collaborative Denoising Auto-Encoders )
CDAE 模型類似 SVD++ 的思想,除了 userid 本身表達用戶,也將用戶交互過的 item 作為 user 的表達。
❶ input layer
用戶 id,用戶歷史交互過的 item;以及 itemid。可以發現對比上述基礎的 autoRec,用戶側輸入同時使用了用戶歷史交互過的 item 以及 userid 本身這個 bias,思想很類似 SVD++。如圖3所示的 input layer 節點,綠色節點表示每個用戶交互過的 item,最下面的紅色節點 user node 表示用戶本身的偏好,可以認為是 userid 的表達。
❷ representation function

其中,中間藍色的隱層節點作為用戶表示,其中 Vu 為 input layer 中的 user node 的 representation,針對所有用戶 id 會學習一個和 item 無關的 Vu 向量表達,可以認為是用戶本身的 bias,例如有些用戶打分本身比較嚴格,再好的 item 打分也不會太高;有些用戶打分很寬松,只要 item 別太差都會給高分,加上 Vu 可以更好的刻畫用戶之間天然的 bias。
而對於輸出層的節點,可以認為是用戶 u 對物品 i 的打分預測:
❸ matching function
使用向量點積作為匹配分數:
3.1.5 基於 CF 方法的深度模型總結
總結下以上基於 CF 的方法,有以下幾個特點:
❶ User 或者 item 要么由本身 id 表達,要么由其歷史交互過的行為來表達;
❷ 用歷史交互過的行為來作為 user 或者 item 的表達,比用 id 本身表達效果更好,但模型也變得更復雜;
❸ Auto-encoder 本質上等同於 MLP+MF,MLP 用全連接網絡做 user 和 item 的 representation 表達;
❹ 所有訓練數據僅用到 user-item 的交互信息,完全沒有引入 user 和 item 的 side info 信息。
3.2 基於 Collaborative Filtering+ side information 的方法
基於 CF 的方法沒有引入 side information,因此,對於 representation learning 的第二種方法,是基於 CF + side info,也就是在 CF 的方法上額外引入了 side info。
3.2.1 DCF 模型 ( Deep Collaborative Filtering )
❶ input layer
除了用戶和物品的交互矩陣,還有用戶特征 X 和物品特征 Y。
❷ representation function
和傳統的 CF 表示學習不同,這里引入了用戶側特征X例如年齡、性別等;物品側特征 Y 例如文本、標題、類目等;user 和 item 側的特征各自通過一個 auto-encoder 來學習,而交互信息 R 矩陣依然做矩陣分解 U,V。整個模型框架如圖3.6所示。

損失函數優化,需要最小化用戶側特征的 reconstruction 和 item 側的 encoder 部分,以及交互矩陣和預測矩陣的平方差,還有加上 L2 正則。如圖3.7第一個公式。
其中 W1,表示的用戶側特征 X 在 auto-encoder 過程中的 encode 部分,也就是輸入到隱層的重建,P1 表示的是用戶特征到交互矩陣 R 的映射;而 W2 表示物品側特征 Y 在 auto-encoder 過程中的 encode 部分。P2 表示的是物品特征到交互矩陣 R 的映射。

圖3.7下面兩組公式中,可以看出用戶側和物品側特征都由兩項 error 組成,第一項衡量的是 input 和 corrupted input 構建的預估誤差,需要保證 W1 和 W2 對於 corrupted 后的 input x 和 y 不能擬合太差;第二項表達的是映射后的隱層特征空間 W1X 和投射到 U 矩陣的誤差不能太大。
簡單理解,整個模型的學習,既需要保證用戶特征 X 和物品特征 Y 本身 encode 盡可能准確 ( auto-encoder 的 reconstruction 誤差 ),又需要保證用戶對物品的預估和實際觀測的盡可能接近 ( 矩陣分解誤差 ),同時正則化也約束了模型的復雜度不能太高。
3.2.2 DUIF 模型 ( Deep User and Image Feature Learning )
❶ input layer
除了用戶和物品的交互矩陣,還有用戶特征 X 和物品特征 Y。
❷ representation function
整個 match score 可以用下圖表示:fi 表示原始圖片特征,通過 CNN 網絡提取的圖片特征作為 item 的表達,然后用一個線性映射可以得到 item 的 embedding 表達。
❸ match function
通過模型學到的 pu 作為用戶的 representation,以及通過 CNN 提取的圖片特征作為 item 的 representation,兩者通過向量點積得到兩者的匹配分數。
3.2.3 ACF 模型 ( Attentive Collaborative Filtering )
Sigir2017 提出的 Attention CF 方法,在傳統的 CF 里引入了 attention 機制。這里的 attention 有兩層意思,第一層 attention,認為用戶歷史交互過的 item 的權重是不一樣的;另一個 attention 意思是,用戶同一個 item 里到的視覺特征的權重也是不一樣的,如圖3.8所示。

❶ input layer
① 用戶側:userid;用戶歷史交互過的 item。
② Item側:itemid;item 相關的視覺相關特征。
❷ representation function
可以分為兩個 attention,一個是 component 層級的 attention,主要是提取視覺特征;第二層是 item 層級的 attention,主要提取用戶對物品的喜好程度權重。
① component-attention
在該 paper 里的推薦系統針對的是 multi-media 的,有很多圖文和視頻的特征信息提取,所以引入的第一層 attention 指的是 component attention,認為對於不同的 components 對 item representation 的貢獻程度是不同的,如圖3.9所示。
圖3.9 component attention 框架
對第 l 個 item,輸入為不同 region 本身的特征 xl1,xl2,xlm,表示的是 m 個不同的 item feature, 以及用戶輸入 ui,最終 item 的表達為不同的 region 的加權 embedding。
其中第一個公式表示用戶 i 對物品 l 第 m 個 component ( 例如圖片特征中的局部區域特征,或者視頻中不同幀的特征 ) 的權重;第二個公式 softmax 對 attention 權重歸一化。
② item attention
第二層 attention,認為用戶作用過的 item 歷史中,權重應該是不同的。這里文章使用了 SVD++ 的方式,用戶本身的表達引入了 a(i, l),代表的是用戶 i 對其歷史交互過的物品 l 的權重。
用戶 i 對第 l 個 item 的權重表達可以用如下的數據表示:
其中 ui 是用戶本身的 latent vector,vl 是物品 l 的 latent vector,pl 是物品 l 的輔助 latent vector;xl 是表示前面提到的從圖文信息提取的特征 latent vector。用戶最終的表達是自身 ui 的 latent vector,以及歷史行為的 attention 加權的 representation 表示。
模型使用的是 pairwise loss 進行優化:
❸ representation function
使用 user 和 item 的向量點擊作為匹配分數。
3.2.4 CKB 模型 ( Collaborative Knowledge Base Embedding )
CKB 模型是在2016年 KDD 提出的,利用知識圖譜做 representation learning,模型框架如圖3.10所示。整個 CKB 模型框架其實思想比較簡單,分別在結構化信息、文本信息和視覺信息中提取 item 側特征作為 item 的 representation。

❶ input layer
① user側:userid
② item側:itemid;基於知識圖譜的 item 特征 ( structural,textual,visual )
❷ representation function
主要是從知識圖譜的角度,從結構化信息,文本信息以及圖文信息分別提取 item 側的表達,最終作為 item 的 embedding。
① 結構化特征 struct embedding: transR,transE

② 文本特征 Textual embedding: stacked denoising auto-encoders ( S-DAE )

③ 視覺特征 Visual embedding: stacked convolutional auto-encoders ( SCAE )

❸ matching function
得到用戶向量和 item 向量后,用向量點擊表示 user 和 item 的匹配分數;損失函數則用如下的 pair-wise loss 表示:
3.3 基於 representation 的深度匹配方法總結
總結上述基於 CF 的方法,可以用如下的范式作為表達:

❶ representation learning:目的是學習到 user 和 item 各自的 representation ( 也叫 latent vector,或者 embedding )。
❷ 特征表達:user 側特征除了用戶 id 本身 userid,可以加上其他 side info;item 側特征除了物品 id 本身 itemid,還有其他文本特征、圖文特征、視頻幀特征等信息。
❸ 模型表達:除了傳統的 DNN,其他結構如 Auto-Encoder ( AE ),Denoise-Auto-Encoder ( DAE ),CNN,RNN 等。
基於 representation learning 的深度匹配模型不是一個 end-2-end 模型,通過 user 和 item 各自的 representation 作為中間產物,解釋性較好,而且可以用在出了排序階段以外的其他環節,例如求物品最相似的 item 集合,召回環節等。
04▬
基於 match function learning 的深度匹配模型
對比 representation learning 的方法,基於 match function learning 最大的特點是,不直接學習 user 和 item 的 embedding,而是通過已有的各種輸入,通過一個 neural network 框架,來直接擬合 user 和 item 的匹配分數。

簡單來說,第一種方法 representation learning 不是一種 end-2-end 的方法,通過學習 user 和 item 的 embedding 作為中間產物,然后可以方便的計算兩者的匹配分數;而第二種方法 matching function learning 是一種 end2end 的方法,直接擬合得到最終的匹配分數。本章主要介紹基於 match function learning 的深度學習匹配方法。
4.1 CF-based 的深度模型
前面傳統匹配模型以及基於表示學習的模型,其 base 模型都離不開協同過濾,也可以稱為基於矩陣分解的模型。基於 match function learning 的模型也不例外。
4.1.1 基於 NCF 框架的方法
基於神經網絡的學習方法 ( NCF ) 為何向南博士在2017年提出,對比傳統的 CF 網絡,在得到 user vector 和 item vector 后,連接了 MLP 網絡后,最終擬合輸出,得到一個 end-2-end 的 model。這套框架好處就是足夠靈活,user 和 item 側的雙塔設計可以加入任意 side info 的特征,而 MLP 網絡也可以靈活的設計,如圖4.2所示。

NCF 框架對比第三章所說的 CF 方法最主要引入了 MLP 去擬合 user 和 item 的非線性關系,而不是直接通過 inner product 或者 cosine 去計算兩者關系,提升了網絡的擬合能力。然而 MLP 對於直接學習和捕獲從 mf 提取的 user 和 item vector 能力其實並不強。在 wsdm2018 的一篇文章質疑的就是 MLP 對特征組合的擬合能力。

該 paper 做了一組實驗,使用1層的 MLP 網絡去擬合數據;實驗證明對於二維一階的數據,也需要100個節點才能擬合;如果超過2階,整個 MLP 的表現將會非常差。文章因此說明了 DNN 對於高階信息的捕捉能力並不強,只能捕捉低階信息。
下文要講的模型,也是在模型結構或者特征層面做的各種變化。
4.1.1.1 NeuMF 模型 ( Neural Matrix Factorization )
Neural MF,顧名思義,同時利用了 MF 和神經網絡 MLP 的能力來擬合 matching score;MF 利用向量內積學習 user 和 item 的關聯,同時 MLP 部分捕捉兩者的其他高階信息。這篇 paper 其實和 NCF 框架是出自同一篇 paper 的。模型可以分為 GMF 和 MLP 兩個部分來看,如圖4.4所示。

❶ GMF ( General Matrix Factorization ) 部分
User 和 item 都通過 one-hot 編碼得到稀疏的輸入向量,然后通過一個 embedding 層映射為 user vector 和 item vector。這樣就獲得了 user 和 item 的隱向量,一般可以通過向量點積或者哈達馬積 ( element-wide product ) 得到交互,不過在 NeuMF 中多連接了一個連接層,也就是 GMF layer:
❷ MLP 部分
輸入和 GMF 部分一樣,都是 one-hot 的稀疏編碼,然后通過 embedding 層映射為 user vector 和 item vector。注意到這里 user 和 item 的 vector 和 GMF 部分是不一樣的,原因是 GMF 和 MLP 兩個網絡結構對隱層維度要求不同,MLP 部分會高一些 ( 個人感覺 share embedding 能更充分訓練 embedding )。
Embedding 層之后就是幾層常規的 MLP,這塊沒什么好說的,最后一層輸出作為 MLP 的 output。
4.1.1.2 NNCF 模型 ( Neighbor-based NCF )
CIKM2017 提出的一種基於 neighbor 的 NCF 方法,最大的不同在於輸入除了 user 和 item 的信息,還各自引入了 user 和 item 各自的 neighbor 信息。
圖4.5 NNCF 模型框架
圖4.5所示的輸入由兩部分組成,中間 xu 和 yi 為原始的 user 和 item 的 one-hot 輸入,通過 embedding 層后映射為 pu 和 qi 的 embedding 向量,然后通過哈達馬積作為 MLP 的輸入。而輸入層兩側的 nu 和 ni 是 user 和 item 各自的 neighbor 信息的輸入,這里 nu 和ni 信息如何提取可以采用多種手段,如二部圖挖掘,user-CF 或者 item-CF 等。
對於 neighbor 信息,由於每個用戶和 item 的 neighbor 數不一致,輸入是不定長的,通過卷積和 pooling 后提取得到定長的 embedding,然后和 user 以及 item 本身的向量 concat 后輸入到模型中:
4.1.1.3 ONCF 模型 ( Outer-Product based NCF )
何向南博士2018年在 NCF 模型框架上提出了 outer-product based NCF,在原有的 NCF 框架上,引入了 outer product 的概念,如圖4.6所示。

在 embedding layer 之后,O-NCF 模型引入了 interaction map 也就是特征交叉層,對於用戶 u 的向量 pu 和物品 i 的向量 qi,引入兩者的 outer-product:
E 是一個 k*k 維的矩陣,其中的每個 element 兩兩相乘,得到2維的矩陣。到這,可以通過把二維矩陣展開變成一個 k2 維度的向量,作為 MLP 的輸入。假設 k=64,那么 E 就是個4096的向量,每一層隱層單元個數設置為上一層的一半,那么第一層的維度為4096*2048約需要840萬的網絡參數需要訓練,參數量非常巨大。
因此,文章提出了一種利用 CNN 局部連接共享參數的方法來減少 embedding layer 到 hidden layer 之間的參數,如圖4.7所示。

假設隱層維度 K=64,有6層 hidden layer,每一層有32個卷積核 ( feature map ),步長 stride=2,那么經過每個卷積核后的 feature map 大小為原來的1/4 ( 長和寬各少了一半 )。以第一層卷積為例:
那么第一層卷積后得到的網絡是個32*32*32的3維 vector,其中最后一個32代表 feature map 個數。這里如何體現特征交叉的思想呢?ei,j,c 代表的就是在前一層的 feature map 中,第 i 個單元和第 j 個 element 的二階交叉。第一層 feature map 中,每個單元提取的是上一層2*2區域的 local 連接信息,第三層提取的就是第一層4*4的信息,那么在網絡的最后一層就能提取到原始 feature map 里的 global 連接信息,從而達到高階特征提取的目的。
總結來說,使用原始的 outer-product 思想,在第一層網絡處有近千萬的參數需要學習,而使用 CNN 網絡一方面能夠減少參數量,另一方面又同時提取了低階和高階特征的組合。個人覺得引入 CNN 固然能節省內存,但也同時會帶來訓練和推理時間的增加,是一種時間換空間的思想。另外用 CNN 是否能夠比原始 MLP 更有效擬合特征組合也需要結合數據分布去看。
4.1.1.4 小結
基於 NCF 框架的方法基礎原理是基於協同過濾,而協同過濾本質上又是在做 user 和 item 的矩陣分解,所以,基於 NCF 框架的方法本質上也是基於 MF 的方法。矩陣分解本質是盡可能將 user 和 item 的 vector,通過各種方法去讓 user 和 item 在映射后的空間中的向量盡可能接近 ( 用向量點擊或者向量的 cosine 距離直接衡量是否接近)。
而另外一種思路,基於翻譯的方法,也叫 translation based model,認為 user 和 item 在新的空間中映射的 vector 可以有 gap,這個 gap 用 relation vector 來表達,也就是讓用戶的向量加上 relation vector 的向量,盡可能和 item vector 接近。兩種方法的區別可以用圖4.8形象的表示。

4.1.2 基於 translation 框架的方法
4.1.2.1 transRec 模型
2017年的 recsys 會議上提出的一種基於 "translate" 的推薦方法,要解決的是 next item 的推薦問題。基本思想是說用戶本身的向量,加上用戶上一個交互的 item 的向量,應該接近於用戶下一個交互的 item 的向量,輸入是 (user, prev item, next item),預測下個 item 被推薦的概率。

用戶向量表達如下:
這里 ri 和 rj 表示的是用戶上一個交互的 item i 和下一個交互的 item j,tu 為用戶本身的向量表達。而在實際的推薦系統中,往往存在數據稀疏和用戶冷啟動問題,因此,作者將用戶向量 tu 分解成了兩個向量:
這里 t 可以認為是全局向量,表示的是所有用戶的平均行為,tu 表示用戶 u 本身的 bias,例如對於冷啟動用戶,tu 可以設置為0,用全局用戶的表達 t 作為冷啟動。
對於熱門 item 由於出現次數非常多,會導致最終熱門 item 的向量和絕大多數用戶向量加上 item 向量很接近,因此文章對熱門 item 做了懲罰,最終,已知上一個 item i,用戶和下一個 item j 的匹配 score 表達為:
其中, 第一項 βj 表示的是物品 j 的全局熱度;第二項 d 表示的是用戶向量加上物品 i 的向量與物品 j 向量的距離;距離越小表示 i 和 j 距離越接近,被推薦的可能性就越大。
4.1.2.2 LRML 模型 ( Latent Relational Metric Learning )
前面講到,基於 translation 框架的方法對比基於 CF 框架方法最大的不同,在於找到一個 relation vector,使得 user vector + relation vector 盡可能接近 item vector。WWW2018 提出的 LRML 模型通過引入 memory network 來學習度量距離。可以分為三層 layer,分別是 embedding layer, memory layer 和 relation layer。

❶ embedding layer
底層是常規的雙塔 embedding,分別是用戶 embedding 矩陣和物品的 embedding 矩陣,用戶 one-hot 輸入和 item 的 one-hot 輸入通過 embedding 后得到用戶向量 p 和物品向量 q。
❷ memory layer
記憶網絡層是文章的核心模塊,作者通過引入 memory layer 作為先驗模塊。這個模塊可以分為三個步驟進行計算:
① 用戶和物品 embedding 融合
Embedding 層得到的 user 和 item 向量 p 和 q 需要先經過交叉合成一個向量后輸入到下一層,作者提到使用哈達碼積效果優於 MLP 效果,也更簡單:
② 用戶-物品 key addressing
從第一步得到的向量 s 中,去和 memory 記憶網絡模塊中的各個 memory vector 挨個計算相似度,相似度可以用內積表達並做歸一化:
得到的 ai 代表的是當前用戶-物品輸入對 (p,q) 與 memory-network 中的第 i 個向量的相似度。
③ 最終加權表達
最終得到的 relation vector 是第二步得到的 memory 記憶網絡中不同 vector 的加權表達,如下所示:
❸ relation layer
從 memory layer 得到的 r 向量可以認為是用戶向量 p 與物品向量 q 的 relation vector,最終的距離用平方損失衡量,如圖4.11所示。

由於解決的是推薦物品的排序問題,文章使用的是 pairwise loss,因此在網絡的最后一層,對 user 和 item 分別進行負樣本采樣得到 p' 和 q',然后使用 pairwise hinge loss 進行優化:
4.2 feature-based 的深度模型
4.1介紹的基於 CF 的方法,對大多數推薦系統來說,輸入的特征向量往往都是非常高維而且稀疏的,而特征之間的交叉關系對模型來說往往都是非常重要的。例如,用戶一般會在一天快吃三餐的時候,打開和訂餐相關的 app,這樣,用戶使用訂餐 app 和時間存在着二階交叉關系;又比如說,男性的青年群體,往往更喜歡射擊類的游戲,性別、年齡以及類目之間存在着三階的交叉關系。因此,如何捕捉特征之間的交叉關系,衍生了眾多基於特征的模型,在這里將這些捕捉特征交叉關系的模型稱為 feature-based model。
4.2.1 wide&deep 模型
提到深度學習模型,最經典的莫過於2016年 google 提出的 wide and deep 模型。說是模型,不如說是通用的一套范式框架,在整個工業界一舉奠定了風靡至今的模型框架,如圖4.12所示。

在這個經典的 wide&deep 模型中,google 提出了兩個概念:generalization ( 泛化性 ) 和 memory ( 記憶性 )。
❶ 記憶性:wide 部分長處在於學習樣本中的高頻部分,優點是模型的記憶性好,對於樣本中出現過的高頻低階特征能夠用少量參數學習;缺點是模型的泛化能力差,例如對於沒有見過的 ID 類特征,模型學習能力較差。
❷ 泛化性:deep 部分長處在於學習樣本中的長尾部分,優點是泛化能力強,對於少量出現過的樣本甚至沒有出現過的樣本都能做出預測 ( 非零的 embedding 向量 ),容易帶來驚喜。缺點是模型對於低階特征的學習需要用較多參數才能等同 wide 部分效果,而且泛化能力強某種程度上也可能導致過擬合出現 bad case。尤其對於冷啟動的一些 item,也有可能用用戶帶來驚嚇。

值得注意的是,雖然模型的 deep 部分擬合和泛化能力很強,但絕對不意味着把特征交叉都交給 MLP 就夠了。實際證明,對於重要的一些人工經驗的特征,對於提升整體效果還是非常重要的,如圖4.13所示。這個人工特征的所謂缺點,也是后續各種模型結構想對其進行 "自動化" 的優化點。
4.2.2 deep crossing 模型
微軟在2016年提出了一套框架 deep crossing,這篇文章在輸入到 embedding 這里到是和 wide&deep 沒有太多不同,主要區別在於 MLP 部分。
Google 的 wide&deep 模型里深度網絡的 MLP 部分是全連接網絡,每一層的網絡輸入都是前一層的輸入出,受限於模型結構,越往后越難學習到原始輸入的表達,一般深度不會太深,超過5層的網絡在工業界已經算很少見了。為了解決這個問題,deep crossing 網絡引入了 resnet 殘差網絡的概念,通過 short-cut,在 MLP 的深層網絡,也能接收來自第一層的輸入,這樣可以使得模型的深度達到10層之多,如圖4.14所示。

上述提到的 wide&deep 以及 deep crossing 框架更像是在模型結構做的改進,一個引入了 wide&deep,一個引入了 resnet,特征層面並沒有做太多改造,如何體現 feature-base 呢?SigIR2017 就有一篇文章做了個實驗,對 wide&deep 以及 Deep&Cross 實驗按照 embedding 是否做初始化分別做了實驗。實驗發現,如果 embedding 是隨機初始化的,兩個深度模型連基礎的 FM 模型都打不過;哪怕經過 FM 初始化了 embedding,wide&deep 模型效果也僅僅略好於 FM 模型,而 deep crossing 模型依然比不過 FM 模型,實驗結果如圖4.15所示。

這個結論也引出了關於 MLP 的一些思考,全連接網絡表面上看對所有節點都進行了連接,理論上應該學習到了各個節點的交叉特征,但是從結果上來看,MLP 對這些特征交叉的學習能力確實非常差的。糾其原因,還是在模型結構的設計上。

圖4.16里無論是 wide&deep 還是 deep crossing network,embedding 層之后到 MLP 之間,都是將 embedding 做 concat 的。這些 concat 后的信息其實能夠表達的特征交叉信息其實是非常有限的,僅靠 MLP 想完全捕捉到特征的有效交叉其實是非常困難的。因此,有大量工作關於在 embedding 這里如何捕捉特征交叉,其實就是在 MLP 網絡之前,利用更多的數學先驗范式做特征交叉去提取特征,這也是本節提到的方法叫做 feature-based 的原因。
4.2.3 PNN 模型
Embedding layer 進入 MLP 之前,引入了 product layer 來顯式的學習每個 field 的 embedding 向量之間的兩兩交叉,如圖4.17所示。

左邊 z 為 embedding 層的線性部分,右邊為 embedding 層的特征交叉部分。這種 product 思想來源於,推薦系統中的特征之間的交叉關系更多是一種 and "且" 的關系,而非 add "加" 的關系。例如,性別為男且喜歡游戲的人群,比起性別男和喜歡游戲的人群,前者的組合比后者更能體現特征交叉的意義。根據 product 的方式不同,可以分為 inner product ( IPNN ) 和 outer product ( OPNN ),如圖4.18所示。

其中,IPNN 模型每個特征是個 inner product,f 個 field 兩兩交叉,得到的新的特征組合有 f*(f-1)/2個;outer product 是兩個向量的乘積,得到的新的特征組合有 f*(f-1)/2*k*k 個。
4.2.4 deepFM 模型
Google 的 wide&deep 框架固然強大,但由於 wide 部分是個 LR 模型,仍然需要人工特征工程。華為諾亞方舟團隊結合 FM 相比 LR 的特征交叉的功能,在2017年提出了 deepFM,將 wide&deep 部分的 LR 部分替換成 FM 來避免人工特征工程,如圖4.19所示。

比起 wide&deep 的 LR 部分,deeFM 采用 FM 作為 wide 部分的輸出,FM 部分如圖4.20所示。

除此之外,deepFM 還有如下特點:
❶ 更強的低階特征表達
Wide 部分取代 WDL 的 LR,與4.2.1和4.2.2提到的 wide&deep 模型以及 deep crossing 模型相比更能捕捉低階特征信息。
❷ Embedding 層共享
Wide&deep 部分的 embedding 層得需要針對 deep 部分單獨設計;而在 deepFM 中,FM 和 DEEP 部分共享 embedding 層,FM 訓練得到的參數既作為 wide 部分的輸出,也作為 DNN 部分的輸入。
❸ end-end 訓練
Embedding 和網絡權重聯合訓練,無需預訓練和單獨訓練。
4.2.5 NFM 模型 ( Neural Factorization Machines )
DeepFM 在 embedding 層后把 FM 部分直接 concat 起來 ( f*k 維,f 個 field,每個 filed 是 k 維向量 ) 作為 DNN 的輸入。Neural Factorization Machines,簡稱 NFM,提出了一種更加簡單粗暴的方法,在 embedding 層后,做了一個叫做 Bi-interaction 的操作,讓各個 field 做 element-wise 后 sum 起來去做特征交叉,MLP 的輸入規模直接壓縮到 k 維,和特征的原始維度 n 和特征 field 維度 f 沒有任何關系,如圖4.21所示。

這里論文只畫出了其中的 deep 部分, wide 部分在這里省略沒有畫出來。Bi-interaction 所做的操作很簡單:讓 f 個 field 兩兩 element-wise 相乘后,得到 f*(f-1)/2 個維度為 k 的向量,然后直接 sum 起來,最后得到一個 k 維的向量。所以該層沒有任何參數需要學習,同時也降低了網絡復雜度,能夠加速網絡的訓練;但同時這種方法也可能帶來較大的信息損失。
4.2.6 AFM 模型 ( Attention Factorization Machines )
前面提到的各種網絡結構中的 FM 在做特征交叉時,讓不同特征的向量直接做交叉,基於的假設是各個特征交叉對結果的貢獻度是一樣的。這種假設往往不太合理,原因是不同特征對最終結果的貢獻程度一般是不一樣的。Attention Neural Factorization Machines,簡稱 AFM 模型,利用了近年來在圖像、NLP、語音等領域大獲成功的 attention 機制,在前面講到的 NFM 基礎上,引入了 attention 機制來解決這個問題,如圖4.22所示。

圖4.22 AFM 模型框架
AFM 的 embedding 層后和 NFM 一樣,先讓 f 個 field 的特征做了 element-wise product 后,得到 f*(f-1)/2 個交叉向量。和 NFM 直接把這些交叉項 sum 起來不同,AFM 引入了一個 Attention Net,認為這些交叉特征項每個對結果的貢獻是不同的,例如 xi 和 xj的權重重要度,用 aij 來表示。從這個角度來看,其實 AFM 其實就是個加權累加的過程。Attention Net 部分的權重 aij 不是直接學習,而是通過如下公式表示:
這里 t 表示 attention net 中的隱層維度,k 和前面一樣,為 embedding 層的維度。所以這里需要學習的參數有3個,W,b,h,參數個數共 t*k+2*t 個。得到 aij 權重后,對各個特征兩兩點積加權累加后,得到一個 k 維的向量,引入一個簡單的參數向量 hT,維度為 k 進行學習,和 wide 部分一起得到最終的 AFM 輸出。

關於 AFM 還有個好處,通過 attention-base pooling 計算的 score 值 aij 體現的是特征 vi 和 vj 之間的權重,能夠選擇有用的二階特征,如圖4.23所示。
4.2.7 DCN 模型 ( Deep Cross Network )
前面提到的幾種 FM-based 的方法都是做的二階特征交叉,如 PNN 用 product 方式做二階交叉,NFM 和 AFM 也都采用了 Bi-interaction 的方式學習特征的二階交叉。對於更高階的特征交叉,只有讓 deep 去學習了。為解決這個問題,google 在2017年提出了 Deep&Cross Network,簡稱 DCN 的模型,可以任意組合特征,而且不增加網絡參數。圖4.24為 DCN 的結構。

整個網絡分4部分組成:
❶ embedding and stacking layer
之所以不把 embedding 和 stacking 分開來看,是因為很多時候,embedding 和 stacking 過程是分不開的。前面講到的各種 XX-based FM 網絡結構,利用 FM 學到的 v 向量可以很好的作為 embedding。而在很多實際的業務結構,可能已經有了提取到的 embedding 特征信息,例如圖像的特征 embedding,text 的特征 embedding,item 的 embedding 等,還有其他連續值信息,例如年齡,收入水平等,這些 embedding 向量 stack 在一起后,一起作為后續網絡結構的輸入。當然,這部分也可以用前面講到的 FM 來做 embedding。為了和原始論文保持一致,這里我們假設 x0 向量維度為 d ( 上文的網絡結構中為 k ),這一層的做法就是簡答的把各種 embedding 向量 concat 起來。
❷ deep layer network
在 embedding and stacking layer 之后,網絡分成了兩路,一路是傳統的 DNN 結構。表示如下:
為簡化理解,假設每一層網絡的參數有 m 個,一共有 Ld 層,輸入層由於和上一層連接,有 d*m 個參數 ( d 為 x0 向量維度 ),后續的 Ld-1 層,每層需要 m*(m+1) 個參數,所以一共需要學習的參數有 d*m+m*(m+1)*(Ld-1)。最后的輸出也是個 m 維向量。
❸ cross layer network
Embedding and stacking layer 輸入后的另一路就是 DCN 的重點工作了。每一層 l+1 和前一層l的關系可以用如下關系表示:
可以看到 f 是待擬合的函數,xl 即為上一層的網絡輸入。需要學習的參數為 wl 和 bl,因為 xl維度為 d,當前層網絡輸入 xl+1 也為 d 維,待學習的參數 wl 和 bl 也都是 d 維向量。因此,每一層都有 2*d 的參數 ( w 和 b ) 需要學習,網絡結構如下。

經過 Lc 層的 cross layer network 后,在該 layer 最后一層 Lc 層的輸出為 Lc2 的 d 維向量。
❹ combination output layer
經過 cross network 的輸出 XL1 ( d 維 ) 和 deep network 之后的向量輸入 ( m 維 ) 直接做 concat,變為一個 d+m 的向量,最后套一個 LR 模型,需要學習參數為 1+d+m。
總結起來,DCN 引入的 cross network 理論上可以表達任意高階組合,同時每一層保留低階組合,參數的向量化也控制了模型的復雜度。Cross 網絡部分的交叉學習的是特征向量中每一個 element 的交叉,本質上是 bit-wise 的。
4.2.8 xDeepFM 模型 ( extreme Deep Factor Machine )
xDeepFM 模型從名字上聽好像是 deepFM 模型的升級,但其實更應該拿來和 DCN 模型做對比。DCN 模型引入了高階特征交叉,但是特征的交叉本質上是在 bit-wise 的。而 xDeepFM 模型認為特征向量 i 和特征向量 j 的交叉過程中,i 本身的元素交叉沒有意義,提取 i 和 j 的向量交叉才是更有效捕捉特征的方式,也就是 vector-wise 的交叉,整個模型的框架如圖4.26所示,最核心的模塊在於特征交叉的 CIN 模塊。

首先我們來看下整個 CIN 的整體框架圖,如圖4.27所示,假設特征 field 個數是 m,每個 field 的隱層維度為 d,那么原始 embedding 層的大小為 m*d,而 cross network 有 Hk層,提取的是特征的交叉。每一層網絡在做什么事情呢?就是和第一層 x0 做特征交叉得到新的特征向量后,然后這 Hk 層 cross net 得到的特征向量 concat 到一起,作為 MLP 的輸入。那么,這里面,每一層的特征 xk 到底是如何輸入層 x0 發生交互的?

以 cross net 的第 k 層和原始輸入 x0 為例,我們看下如何提取得到新的特征,圖4.28是其特征交叉的過程。其中 xk 的維度為 Hk*D,表示的是第 k 層有 Hk 個 vector,而原始輸入 x0的維度為 m*D,表示輸入層有 m 個 D 維的 vector。

這里 Wk,h 表示的是第 k 層的第 h 個 vector 的權重,是模型需要學習的參數。整個公式的理解是整個 xDeepFM 理解的關鍵,我們具體看下發生了什么:
❶ 首先,從前一層的輸入 Xk-1 ( 一共有 Hk-1 個 vector ),取出任意一個 vector;從原始輸入 x0 ( 一共有 m 個 vector ),取出任意一個 vector,兩者兩兩做哈達碼積,可以得到 Hk-1*m 個 vector。
❷ 這 Hk-1*m 個交叉得到的 vector,每個 vector 維度都是 D,我們通過一個 W 矩陣做乘積進行加權求和,相當於是個帶權重的 pooling,最終得到加權求和后的 vector Xh,k,表示的是第 h 層第 k 個 vector。這里的 W 矩陣就是模型要學習的。
❸ 為什么說是壓縮,壓縮體現在哪里?還是用圖說話,這里我們看下原始論文給出的圖示,有助於整個過程的理解。

在圖4.29左圖中,我們把 D 看成是原始二維平面的寬度,我們沿着 D 的方向挨個進行計算。先看 xk 向量中 D 的第一維,有 Hk 個數;x0 向量中 D 的第一維,有 m 個數,讓 Hk 和 m 兩兩計算,就可以得到 Hk*m 的一個平面。一直沿着 D 方向,2,3,4,…D,我們就可以得到一個 Hk*m*D 的三維矩陣,暫且叫做 zk+1,注意這個過程只是簡單的矩陣計算,沒有參數需要學習。
在4.29右邊的圖中,我們開始提取前面 zk+1 的信息,還是以 D 方向的第一維為例,一個 m*Hk 的平面,乘以一個大小一樣的 m*Hk 矩陣 W,然后加權求和,就可以得到這個平面最后壓縮的一個實數。整個平面被 "壓縮" 成為了一個一維的數。一直沿着 D 方向求解每個平面壓縮后的數,就可以得到一個 D 維的向量。
這就是整個 "壓縮" 的取名原因。整個過程非常類似 CNN 的 filter 卷積思想,W 就是卷積核,得到的每個特征映射的值就是 feature map。
4.2.9 FGCNN 模型 ( Feature Generate by CNN )
CNN 模型在圖像,語音,NLP 領域都是非常重要的特征提取器,原因是對圖像、視頻、語言來說,存在着很強的 local connection 信息。而在推薦系統中由於特征輸入都是稀疏無序的,很難直接利用 CNN 作為特征提取。華為諾亞方舟在2019年的 WWW 會議上提出了一種巧妙的利用 CNN 提取特征的方法 FGCNN,整個模型框架如圖4.30所示。

其中利用 CNN 提取新特征是整個 paper 的核心模塊,具體框架如圖4.31所示,可以分為4個層,卷積層、池化層、重組層以及特征輸出層。下面分別介紹這4個不同的層,分別看下各自的輸入,輸出以及具體的網絡結構。

❶ 卷積層 Convolution Layer

原始 one-hot 特征經過 embedding 后,進入的是卷積層。卷積的思想和 TextCNN 類似,通過一個高度為 hp,寬度為 d 的卷積核進行卷積;其中高度 hp 代表的是每次卷積連接的鄰域的個數,以圖4.32為例,hp=2,表示二維特征的交叉,從上到下卷積,表示的是 N&A,A&H,H&G 卷積,分別表示名字和年齡、年齡和身高、身高和性別的交叉;而寬度方向 d 需要和 embedding 的維度 d 保持一致,這和 TextCNN 的思想是一致的,只在高度方向上進行卷積。
① Convolutional layer 輸入
特征 one-hot 之后經過 embedding 層后的輸出作為卷積層的輸入,輸入維度為 nf*k。nf為 field 個數,k 為隱層維度
② Convolutional layer 輸出
經過二維平面大小不變,增加第三維卷積核大小,第一層卷積層的輸出大小為 nf*k*mc1,C1為第1個卷積層的卷積個數,以 l=1 為例,C:,:,i 表示的是第一層卷積層第 i 個 feature-map,每個 feature map 的大小為 nf*k,Cp,q,i 表示的是第一層第 i 個 feature map 的坐標為 (p,q) 的元素:
❷ 池化層 Pooling Layer
特征經過第一層卷積層之后,從 nf*k 變成了 nf*k*mc1,維度反而擴了 mc1 倍,這和預期的特征降維不一致,解決辦法和 CNN 里常用的套路一樣,通過 pooling 做降維。該 paper 使用的是 max pooling,在原先卷積高度 hp 上選擇最大值作為卷積后的特征表達,表達如下所示:
① pooling 層輸入
卷積層的輸出作為池化層的輸出,以第一層為例,pooling 層的輸入維度為 nf*k*mc1。
② pooling 層輸出
卷積層輸出的時候在高度方向上選擇 max,只有高度方向維度發生變化,卷積輸出后維度為nf/hp * k *mc1,hp 為卷積核高度,相當於沿着 field 的方向壓縮了 hp 倍。
❸ 重組層 Recombination Layer
經過特征卷積層和特征池化層后,可以通過特征重組 Recombination layer 生成新的特征組了。還是以第一層的 Recombination layer 為例,mc1 為原始 feature map 的個數,mr1為新生成的特征 feature map 的個數:
其中 S1 為池化層的輸出,而 WR1 和 BR1 為該層待學習的參數。
① Recombination 層輸入
卷積層的輸出 S1 為該層的輸入,通過 WR1 的矩陣進行特征的 recombination
② Recombination 層輸出
新生成的特征維度為 nf/hp*k*mr1
❹ 特征輸出層 Concatenation Layer
第一層 Convolution layer -> pooling layer -> recombination layer 后,生成第一層的新特征 R1,連同第2,3,4,…,nc 層的新特征 R2,R3,R4,…,Rnc 層一起 concat 起來,組成新的特征 R=(R1,R2,…,Rnc)。之后 R 可以和原始特征一樣做各種可能的交叉,例如和原始特征做二階交叉等,再一起輸入到模型層。

① concatenation 層輸入
重組層 Recombination layer 輸出的新特征 R1,R2,R3, Rnc,作為 concatenation layer 的輸入
② concatenation 層輸出
原有的特征E和新特征 R 連在一起作為 concatenation 的特征輸出,作為 NN 層的輸入
4.2.10 FiBiNet 模型 ( Feature Importance & Bilinear feature Interaction )
新浪微博張俊林團隊2019年提出的結合特征重要性 ( Fi ) 和雙線性特征交叉 ( Bi ) 的方法,Feature Importance & Bilinear feature Interaction,簡稱 FiBiNet,其實是兩個相對獨立的模塊,兩個模塊可以獨立套用在其他的網絡結構上,整體框架如圖4.34所示。

❶ SENet:特征重要性提取層
該層作用主要是提取特征重要性。可以分為三層 Squeeze, Extract, Reweight,從原始的特征 e1,e2,e3,…,ef 提取到新的特征 v1,v2,v3,…, vf,其中 f 為特征 field 的個數,整體框架如下:

① Squeeze 層
特征壓縮層,對每個特征組中的 embedding 向量進行匯總統計量的 pooling 操作,每個 field 的維度為 k,從中 squeeze 壓縮提取最重要的1維。典型的方法一般有 Max pooling 或者 average pooling,在更原始的 SENet 里用的是 max pooling,但是在該 paper 里作者提到 average pooling 表現更好,個人其實也傾向於認為 average pooling 直覺上更加 make sense,只用 max pooling 從 d 維特征提取一維信息損失實在太大。當然具體表現也需要結合具體數據實驗才知道:
經過 S 層,第 i 維特征從 ei 變成了 zi,從維度為 d 的向量變成了一個維度為1的實數。整個輸入從 f*d 的矩陣變為 f 維的向量。
② Excitation 層
特征激活層,向量先做壓縮 r ( r 為壓縮的倍數 ),然后擴展恢復,類似 auto-encoder 思路:
W1 和 W2 為兩個轉換矩陣,先經過壓縮然后恢復,最終得到的 A 還是一個維度為 f 的向量。
③ Reweight 層
經過前面 Squeeze 和 Excitation 得到的 A 相當於是原始特征 E 的權重向量,乘以原始的特征 E 后,可以得到最終加權提取的 V 向量,可以認為是原始特征的重要性表達:
總結來說:SENet,用兩層全連接階層提取每個 field 的特征重要性:
S 層:壓縮提取 field 中最重要的特征 ( max 或者 average 特征 )
E 層:對 s 層提取的特征信息進行 auto-encoder 式的信息提取
R 層:SE 提取到的每個 field 特征重要性,進行加權提取
❷ Bilinear 特征交叉層
從 SENet 提取到的新特征 V,還有原始特征 E,可以組合成為新的特征一起輸入到模型的 MLP 網絡中。但是如前面提到的 MLP 對特征交叉很弱的學習能力一樣,本文一樣提出了一些做特征交叉的方法。我們回顧下在前面提到的兩個向量的交叉,無非是向量內積,得到一個實數;或者是向量的哈達馬積分如圖4.36的 a 所示,得到的還是一個向量,如圖中4.36的 b 方法所示。這兩種方法都是直接計算的,沒有新的參數學習。在該 paper 中,作者提出了另一種引入參數的方法,也就是 Bilinear 雙線性特征交叉的方法,如圖中4.36的 c 方法所示:

假設特征 field 的個數是 f 個,每個 field 的隱層維度為 d。那么,如何確定需要學習的參數 W 呢?根據 W 的共享情況,可以分為以下三種類型:
① field type
W 在所有特征之間是完全共享的,也就是說在任意兩個需要交叉的特征 i 和特征 j 之間 ( vi,vj ) 共享一個 W,W 的參數維度為 k*k:
② field each
對於每個特征 i 來說,都需要學習唯一的一個 Wi 矩陣,該 Wi 只和左乘的特征 vi 有關,和右乘特征 vj 無關,一共有 f 個 field,所以 W 的參數維度為 f*k*k:
③ field-interaction type
對於任意兩個需要交叉的特征 vi 和 vj,都需要學習一個唯一的矩陣 Wij,Wij不僅和左乘的特征有關,也和右乘的特征有關,也就是說,vi 和 vj 的交叉,以及 vj 和 vi 的特征交叉,兩者用到的 Wij 和 Wji 是不一樣的,所以 W 的參數維度為 f*f*k*k:
當然,以上三種不同的特征類型沒有絕對的誰好誰壞,不存在越復雜效果越好的情況,對於簡單的數據集,可能 w 共享是最好的,具體還是需要實驗才能知道。在文章里用了 criteio 和 avazu 數據集進行實驗時,使用不同的模型,三種交叉方法也是各有千秋。
總結本文的兩個核心工作,第一個工作,SENet,目的是從一個 f*d 的特征向量中,提取得到表達了特征重要性的同樣維度為 f*d 的新特征向量,該網絡結構可以和其他模型結構套用。第二個工作 bi-net,從輸入的 embedding 特征中提出了幾種不同的特征交叉的方法,也可以給其他網絡模型做特征交叉提供一些不同的手段。
4.2.11 AutoInt 模型 ( Auto Feature Interaction )
目前為止講到的模型中,使用到 attention 的是 AFM 模型,而在 AutoInt 文章中,作者除了 attention 機制,還使用了在 transform 中很火的 multi-head 和 self-attention 的概念,整體框架如圖4.37所示。
文章中的輸入沒有什么特別需要講的,就是常規的 one-hot 稀疏的特征經過 embedding 層得到 dense value。這里 embedding 層倒是值得一提,一般在大多數推薦系統里,對於 one-hot 做 embedding 是因為需要轉成 dense 的特征,而原本就是 dense 的特征原本就是定長 dense 特征,比較少見到做 embedding 的,而在該文章中將連續值特征和 one-hot 一樣去做 embedding 處理。不過這一塊不影響 auto-int 部分的理解。

該 paper 里提到的 attention 機制,才是文章里的核心亮點,在介紹文章的核心機制之前,先在這里簡單介紹下 NLP 里的 attention 里涉及到的3個重要的概念,query,keys,value。想象一下,你在搜索引擎輸入了一個搜索詞,這個搜索詞就是 query,假設你搜了 "應用寶",然后存在一堆候選結果就叫做 keys,例如 "下載 app 的地方","手機應用市場","app store","手機系統" 等等,對這里的每個 key,都去計算和候選詞 query 的相似度,例如 "手機應用市場" 對 "應用寶" 的權重,顯然是要高於 "手機系統",最終的表達,其實就是每個 keys 的 value 的加權求和,也就是說,誰和 query 的相似度高,在結果中 value 的權重占比就更高。經典的 QKV 結果表達如下:
回到本文的 attention 機制中,假設特征 field 個數為 M,對於第 m 個 field,在第 h 個 head 空間下的特征表達如下:

❶ 特征 m 在空間 h 下的新映射
每個特征 m,在空間 h 下都有3組向量表示,分表代表特征 m 在空間 h 下的 query 向量 Equery、key 向量 Ekey、value 向量 Evalue:
這里需要學習的參數為 WQuery,Wkey,Wvalue,每個矩陣的維度為 d'*d,從而將特征從 d 維映射為 d'。W 在所有特征中都是共享的,並不是每組特征都需要學習3個 W。
❷ 特征 k 對特征 m 相似度表達,使用向量的點積:
❸ 特征 k 對特征 m 的歸一化注意力 ( M 個特征做歸一化 )
❹ 特征 m 在空間 h 下的加權新特征:
❺ 特征 m 的全空間表達:
有 H 個 head,特征 m 最終的表達為 H 個新特征的 concat,特征長度為 H*d'。
❻ 特征 m 最終表達:resnet 保留原始信息
作者為了保留更多信息,除了第5步得到的 multi-head 的新特征,也將原始的特征 em 引入到進來,其實就是一種 resnet 思路,所以在這里需要有個額外的參數 WRes 需要學習,需要將原始的特征維度 d 映射為和 em 一致的 H*d',所以 WRes 的參數維度為 d'*H*d。
4.2.12 DIN 模型 ( Deep Interest Network )
4.2.11提到的 AutoInt 里特征的 attention 機制有個特點,就是在計算特征的重要性的時候,所有特征都有機會成為 query, 將其他特征作為 keys 去計算和當前 query 的重要性從而得到權重的。而提到推薦系統里的 attention 機制,不得不提的就是阿里的這篇 deep interest network 了,簡稱 DIN。工業界的做法不像學術界,很多模型網絡結構優化並不一味的追求模型的復雜和網絡結構有多 fancy,每一步背后都有大量的業務思考后沉淀下來的。
阿里這篇 DIN 也如此。在了解 DIN 之前,我們先看下 DIN 前身的模型,GwEN 模型 ( Group-wise Embedding Network,阿里內部稱呼 )。

前面講到的很多模型,輸入層都是大規模稀疏特征,經過 embedding 層后輸入到 MLP 網絡中。這里的一個假設就是,每個 field 都是 one-hot 的,如果不是 one-hot 而是 multi-hot,那么就用 pooling 的方式,如 sum pooling,average pooling,max pooling 等,這樣才能保證每個特征 field embedding 都是定長的。DIN 的前身 GwEN 模型也一樣,對於 multi-hot 特征的典型代表,用戶歷史行為,比如用戶在電商系統里購買過的商品,往往都是幾十幾百甚至幾千的,需要經過 sum pooling 和其他特征 concat 一起。
而這種數學假設其實往往都是和實際的發生場景不一致的。例如一個女性用戶過去在淘寶買過白色針織衫、連衣裙、帽子、高跟鞋、單肩包、洗漱用品等,當前候選商品是一件黑色外套,白色針織衫對黑色外套的權重影響應該更大,洗漱用品權重應該更小。如果將這些歷史行為過的商品做 sum pooling,那么無論對於當前推薦什么商品,用戶都是一個固定向量的表達,信息損失很大,顯然優化空間很大。

針對 sum/average pooling 的缺點,DIN 提出了一種 local activation 的思想,基於一種基本的假設:用戶歷史不同的行為,對當前不同的商品權重是不一樣的。例如用戶過去有 a,b,c 三個行為,如果當前商品是 d,那么 a,b,c 的權重可能是 0.8,0.2,0.2;如果是商品 e,那么 a,b,c 的權重可能變成了0.4,0.8,0.1。也就是說,不同的 query,激發用戶歷史行為不同的 keys 的權重是不一樣的。
① query:用戶歷史行為,長度為 H,e1,e2,…,eH 表示用戶歷史行為的向量表示。
② keys:當前候選廣告 ( 店鋪、類目、或者其他 item 實體 )
關於 DIN 里的 activation weight 還有個可以稍微講幾句的點。兩個向量的相似度,在前面講各種 CF 的方法的時候基本是用的點積或者 cosine,2017年 DIN 掛在 arXiv 的版本中是使用了兩個向量本身以及 concat 后進入 MLP 得到其相似度,2018發在 KDD 的版本中多了 outer product,以及向量相減,相當於引入和保留了更多特征的信息。另外作者在文章提到為了保持不同歷史行為對當前 attention 的影響,權重也不做歸一化,這個和原始的 attention 也有所不同。

作為工業界的落地實踐,阿里在 DIN 上很 "克制" 的只用了最能表達用戶個性化需求的特征--用戶行為 keys,而 query 也是當前候選的商品廣告,與線上提升 ctr 的指標更為吻合,對工業界的推薦系統來說借鑒意義還是很大的。當然這不是說之前的其他 attention 機制模型沒用,不同的數據集,不同的落地場景需求不一致,也給工業界更多的嘗試提供了很多思路的借鑒。
4.2.13 DIEN 模型 ( Deep Interest Evolution Network )
在前面講到的模型中,所使用的特征都是時間無序的,DIN 也如此,用戶的行為特征之間並沒有先后順序,強調的是用戶興趣的多樣性。但是實際用戶的興趣應該是在不斷進化的,用戶越近期的行為,對於預測后續的行為越重要,而用戶越早期的行為,對於預測后續行為的權重影響應該小一點。因此,為了捕獲用戶行為興趣隨時間如何發展變化,在din提出一年后,阿里又進一步提出了 DIEN,引入了時間序列概念,深度興趣進化網絡。
DIEN 文章里提到,在以往的推薦模型中存在的序列模型中,主要利用 RNN 來捕獲用戶行為序列也就是用戶歷史行為數據中的依賴關系,比對用戶行為序列直接做 pooling 要好。但是以往這些模型有兩個缺點,第一是直接將 RNN 的隱層作為興趣表達,而一般來隱層的表達和真正表達的商品 embedding 一般不是等價的,並不能直接反映用戶的興趣;另外一點,RNN 將用戶歷史行為的每個行為看成等權的一般來說也不合理。整個 DIEN 的整體框架,如圖4.43所示。

❶ 輸入層
和 DIN 的輸入一樣。按照類型可以分為4大類
① 用戶畫像特征:如年齡、性別、職業等
② context 特征:如網絡環境、時間、IP 地址、手機型號等,與 user 以及 item 無關
③ target ad 特征:當前候選廣告
④ 用戶行為特征:DIEN 里最重要的能體現用戶個性化的特征,對於每個用戶來說,假設有 T 個歷史行為,按照發生的先后順序依次輸入模型
❷ embedding 層
將 one-hot 特征轉為 dense 的 embedding 向量
❸ 興趣抽取層 ( interest extractor layer )
該層的主要作用和 DIN 一樣,為了從 embedding 層中抽取出用戶的興趣。該 paper 認為用戶當前對候選廣告是否感興趣,是和歷史行為 behavior 有關的,所以引入了 GRU 的序列模型來擬合抽取用戶興趣。
經過 GRU 結構后,商品的 embedding 表達從 e(t) 變成了 h(t),表示第 t 個行為序列的 embedding 表達。

除了 GRU 結構提取隱層的向量,DIEN 還引入了有監督學習,強行讓原始的行為向量 e(t) 和 h(t) 產生交互。如圖4.44所示,引入了輔助 loss(auxiliary loss),當前時刻 h(t) 作為輸入,下一刻的輸入 e(t+1) 認為是正樣本 (click),負樣本進行負采樣 ( 不等於當前時刻 );然后讓 h(t) 與正負樣本分別做向量內積,輔助 loss 定義為:
最終的 loss 表達為:
其中 a 為超參數,代表的是輔助 loss 對整體 loss 的貢獻。有了這個輔助 loss,t 時刻提取的隱層向量 h(t) 可以比原始的 h(t) 更有助於表達用戶興趣,也可以加速網絡的訓練過程。
❹ 興趣進化層 ( interest evolving layer )
理論上來說,h(t) 如果替代 e(t) 作為商品的最終表達其實也是可以的,把用戶序列 t=1,2,3,…,T 當成用戶的 T 個行為過的商品,然后和當前的候選廣告套用 DIN 的 attention 網絡去計算每個行為和當前候選廣告的權重,最終得到用戶的歷史行為加權表達也是完全 ok 的。但作者認為用戶的行為模式是會發展的,因此引入了第二層 GRU 網絡來學習每個歷史行為序列和當前候選廣告之間的權重。
對於每個歷史行為 ht,當前候選廣告 ea,通過 softmax 求出兩者的權重。注意這里不是直接向量點擊,而是引入了矩陣 W,可以認為是簡單的一層全連接網絡。
如何使用這里學習的 attention 作為興趣進化層的輸入,作者又提出了三種計算方法:
❶ AIGRU ( attention input with GRU )
最基礎的版本,興趣進化層第 t 個行為序列的 input 就是隱層 ht 的加權:
作者嘗試后發現效果並不好,原因是如果是輸入0,也會參與到隱層 ht 的計算和更新,相當於給用戶興趣的提取引入了噪音,不相關的用戶行為會干擾模型的學習。
❷ AGRU ( attention base GRU )
這里作者使用了 attention 權重 at 來取代原始 GRU 中的更新門,表達如下:
❸ AUGRU ( GRU with attentional update gate )
這里作者依然對原始 GRU 做了改造,公式如下:

其中,ut' 引入了 at 來取代原有的更新向量 ut,表達的是當前 ut' 對結果的影響。如果當前權重 at 較大,ut' 也較大,當前時刻 ht' 保留更多,上一個時刻 ht-1 影響也會少一點。從而整個 AUGRU 結果可以更平滑的學習用戶興趣。
4.3 Feature-based 模型總結
Feature-based 的模型主要在於學習特征之間的交叉,是近年來整個推薦系統在排序層面的主流研究方向,按照不同維度,我個人把4.2列到的模型分為4個類型,同一個模型可能會分到不同的類型里。這里的分類僅僅代表個人的觀點,歡迎探討。
4.3.1 基於框架的模型
① wide&deep 模型
深度加寬度的模型范式,本身並不是一個具體的模型,wide 和 deep 部分可以用任意結構框架,wide 的 baseline 是 LR 模型;deep 的 baseline 是 MLP 模型。
② deep crossing 模型
和 wide&deep 最大的不同是 deep 部分引用了 res-net,但個人覺得在目前主流的模型里用的較少。雖然 res-net 理論上可以使用更深的模型提升效果,但在目前工業界大規模稀疏的推薦系統里,還沒見到太多往 res-net 方向取得較大進展的工作。
4.3.2 基於 FM 特征二階組合的模型
學習特征交叉的主要手段是將特征的 embedding 做交叉,特點是特征的交叉是二維的,無非是二階交叉如何做。
① deepFM 模型
特征交叉使用的 element-wise product,最終得到的是一個實數。
② NFM 模型
交叉使用的 bi-interaction,可以理解成是所有 vector 的 sum pooling,最終得到的是一個向量。
③ AFM 模型
交叉使用的帶權重的 bi-interaction,可以理解成所有 vector 的 weight sum pooling,然后使用一個簡單的線性模型得到最終的值。
④ PNN 模型
PNN 模型放到基於 FM 的模型是因為本質上和 FM 一樣,都是在學習特征的二階組合。和 deepFM 不同的是,以 IPNN 為例,PNN 的所有特征兩兩 product 交叉學習得到的值 conat 后得到現實的 product vector 后進入 MLP 模型;而 deepFM 是直接將 FM 模型的 vector 輸入到 MLP 模型中。
4.3.3 基於 attention 的模型
① AutoInt 模型
使用 multi head 機制,每個特征用 self-attention 得到其他特征和自己的 attention 權重。每個特征的所有 head 得到的特征 concat 起來作為新特征。
② DIN 模型
只使用戶歷史行為特征作為 keys,keys 之前沒有時間序列;得到 keys 和當前候選 item 的 attention。
③ DIEN 模型
只使用用戶歷史行為特征作為 keys,keys 之間具有先后順序,引入兩層 GRU 表達,第一層 GRU 學習用戶歷史行為序列的信息,每個時刻 t 輸出的隱層 embedding 為該時刻 item 的 embedding 表達;第二層 GRU 用來學習歷史每個時刻 t 的歷史行為和當前候選廣告的權重。
④ FiBiNet 模型
把 FiBiNet 模型放在 attention 模型主要是它的 SENet 部分,通過 squeeze -> Excitation -> reweight 提取原始 embedding 的特征重要性,得到新特征,這里其實也體現了每個特征 embedding 的 attention。
4.3.4 基於特征高階組合的模型
① DCN 模型
使用多層的 cross 來做特征交叉,對於 cross 網絡中每一層的輸入都由前一層以及第一層的輸入組成,從這個維度上代表的是高階特征的組合。比如說,第四層網絡的輸出包含了第三層和第二層的輸入;而第三層又包含了第二層和第一層,因此這里就是個3階的特征交叉。特征的交叉使用的是 bit-wise,也就是每個特征內部 embedding 的 element 也會兩兩交叉。
② xDeepFM 模型
使用 CIN 模型來提取特征交叉。和 DCN 模型一樣的是,這里也使用了多層的 cross,每一層的輸入也是由第一層和上一層的輸入組成,不同的是,xdeepFM 模型的特征交叉是 vector wise 層級的,而 DCN 模型是 bit-wise 的。
③ FGCNN 模型
通過使用 CNN 模塊,先是卷積層提取局部特征的連接,如高度等於3能夠提取相鄰3個 field 的特征的關系,因此具有高階特征的交叉能力。然后又通過池化層提取 global 信息,確保特征的輸入順序對結果的影響能夠被捕捉到。
05
▬
總結
推薦和搜索的本質其實都是匹配,前者匹配用戶和物品;后者匹配 query 和 doc。具體到匹配方法,分為傳統模型和深度模型兩大類,第二章講的是傳統模型,第三章和第四章講的是深度模型。
對於傳統模型,主要分為基於協同過濾的模型和基於特征的模型,兩者最大的不同在於是否使用了 side information。基於協同過濾的模型,如 CF,MF,FISM,SVD++,只用到了用戶-物品的交互信息,如 userid, itemid, 以及用戶交互過的 item 集合本身來表達。而基於特征的模型以 FM 為例,主要特點是除了用戶-物品的交互之外,還引入了更多的 side information。FM 模型是很多其他模型的特例,如 MF,SVD++,FISM 等。
對於深度模型,主要分為基於 representation learning 的深度模型以及 match function learning 的深度模型。基於 representation learning 的深度模型學習的是用戶和物品的表示,然后通過匹配函數來計算,這里重點在與 representation learning 階段,可以通過 CNN 網絡,auto-encoder,知識圖譜等模型結構來學習。
對於 match function learning 的深度模型,也分為基於協同過濾的模型和基於特征的模型。前者和傳統 CF 模型一樣,不同在於后面接入了 MLP 模型來增強非線性表達,目的是為了使得 user 和 item 的 vector 盡可能接近,這種方法就是基於 NCF 的模型;也有通過引入 relation vector 來是的 user vector 加上 relation vector 后接近 item vector,這種方法是基於翻譯的模型。
對於 match function learning 另一種模型框架,是基於特征層面的,有基於 fm 模型的,基於 attention 的,以及高階特征捕捉的,另外還有基於時間序列的文章中只提到了 DIEN 模型。
整理本篇綜述主要基於原始 slides,對其中的 paper 部分粗讀部分精讀,收獲頗多,在全文用如何做好推薦 match 的思路,將各種方法盡可能串到一起,主要體現背后一致的思想指導。多有錯漏,歡迎批評指出。
06 ▬參考資料
1. https://www.comp.nus.edu.sg/~xiangnan/sigir18-deep.pdf
2. Xiangnan He, Hanwang Zhang, Min-Yen Kan, and Tat-Seng Chua. Fast matrix factorization for online recommendation with implicit feedback. In SIGIR 2016.
3. Yehuda Koren, and Robert Bell. Advances in collaborative filtering. Recommender systems handbook. Springer, Boston, MA, 2015. 77-118.
4. Santosh Kabbur, Xia Ning, and George Karypis. Fism: factored item similarity models for top-n recommender systems. In KDD 2013.
5. Yehuda Koren. Factorization meets the neighborhood: a multifaceted collaborative filtering model. In KDD 2018.
6. Steffen Rendle. Factorization machines. In ICDM 2010.
7. Hong-Jian Xue, Xin-Yu Dai, Jianbing Zhang, Shujian Huang, and Jiajun Chen. Deep matrix factorization models for recommender systems. IJCAI 2017.
8. Suvash Sedhain, Aditya Krishna Menon, Scott Sanner, and Lexing Xie. Autorec: Autoencoders meet collaborative filtering. In WWW 2015.
9. Yao Wu, Christopher DuBois, Alice X. Zheng, and Martin Ester. Collaborative denoising auto- encoders for top-n recommender systems. In WSDM 2016.
10. Sheng Li, Jaya Kawale, and Yun Fu. Deep collaborative filtering via marginalized denoising auto- encoder. In CIKM 2015.
11. Xue Geng, Hanwang Zhang, Jingwen Bian, and Tat-Seng Chua. Learning image and user features for recommendation in social networks. In ICCV 2015.
12. Jingyuan Chen, Hanwang Zhang, Xiangnan He, Liqiang Nie, Wei Liu, and Tat-Seng Chua. Attentive collaborative filtering: Multimedia recommendation with item-and component-level attention. In SIGIR 2017.
13. Fuzheng, Zhang, Nicholas Jing Yuan, Defu Lian, Xing Xie, and Wei-Ying Ma. Collaborative knowledge base embedding for recommender systems. In KDD 2016.
14. Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, and Tat-Seng Chua. Neural collaborative filtering. In WWW 2017.
15. Ting Bai, Ji-Rong Wen, Jun Zhang, and Wayne Xin Zhao. A Neural Collaborative Filtering Model with Interaction-based Neighborhood. CIKM 2017.
16. Xiangnan He, Xiaoyu Du, Xiang Wang, Feng Tian, Jinhui Tang, and Tat-Seng Chua. Out Product-based Neural Collaborative Filtering. In IJCAI 2018.
17. Tay, Yi, Shuai Zhang, Luu Anh Tuan, and Siu Cheung Hui. "Self-Attentive Neural Collaborative Filtering." arXiv preprint arXiv:1806.06446 (2018).
18. Ruining He, Wang-Cheng Kang, and Julian McAuley. Translation-based Recommendation. In Recsys 2017.
19. Yi Tay, Luu Anh Tuan, and Siu Cheung Hui. Latent Relational Metric Learning via Memory-based Attention for Collaborative Ranking. In WWW 2018.
20. Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, Glen Anderson et al. Wide & deep learning for recommender systems. In DLRS 2016.
21. Ying Shan, T. Ryan Hoens, Jian Jiao, Haijing Wang, Dong Yu, and J. C. Mao. Deep crossing: Web-scale modeling without manually crafted combinatorial features. In KDD 2016.
22. Xiangnan He,
推薦系統中的深度匹配模型

文章作者:辛俊波 騰訊 高級研究員
編輯整理:Hoh Xil
內容來源:作者授權
文章出品:DataFunTalk
注:轉載請聯系作者本人。
導讀:推薦系統和搜索應該是機器學習乃至深度學習在工業界落地應用最多也最容易變現的場景。而無論是搜索還是推薦,本質其實都是匹配,搜索的本質是給定 query,匹配 doc;推薦的本質是給定 user,推薦 item。本文主要講推薦系統里的匹配問題,包括傳統匹配模型和深度學習模型。
深度學習之風雖然愈演愈烈,但背后體現的矩陣分解思想、協同過濾思想等其實一直都是貫穿其中,如 svd++ 體現的 userCF 和 itemCF 的思想,FM 模型本質上可以退化成以上大多數模型等。多對這些方法做總結,有助於更深刻理解不同模型之間的關聯。

PS:本文主要啟發來源 SIGIR2018:Deep Learning for Matching in Search and Recommendation,重點闡述搜索和推薦中的深度匹配問題,非常 solid 的綜述,針對里面的一些方法,尤其是 feature-based 的深度學習方法增加了近期一些相關 paper。
本文主要分為以下幾部分:
❶ 推薦系統概述
❷ 推薦系統的傳統匹配模型
❸ 基於 representation learning 的深度匹配模型
❹ 基於 match function learning 的深度匹配模型
01
▬
推薦系統概述
1.1 推薦系統本質
推薦系統就是系統根據用戶的屬性 ( 如性別、年齡、學歷、地域、職業 ),用戶在系統里過去的行為 ( 例如瀏覽、點擊、搜索、購買、收藏等 ),以及當前上下文環境 ( 如網絡、手機設備、時間等 ),從而給用戶推薦用戶可能感興趣的物品 ( 如電商的商品、feeds 推薦的新聞、應用商店推薦的 app 等 ),從這個過程來看,推薦系統就是一個給 user 匹配 ( match ) 感興趣的 item 的過程。
1.2 推薦和搜索比較
推薦和搜索有很多相同又有很多不同的地方,放到一起的原因是兩者其實都是一個 match 的過程,圖1.1展示的是一個搜索引擎的架構,需要 match 的是 query 和相關的 doc;圖1.2展示的是一個推薦系統的架構,需要 match 的是 user ( 可能會帶有主動意圖的 query ) 和相關的 item。

1.2.1 搜索和推薦不同之處
❶ 意圖不同
搜索是用戶帶着明確的目的,通過給系統輸入 query 來主動觸發的,搜索過程用戶帶着明確的搜索意圖。而推薦是系統被動觸發,用戶是以一種閑逛的姿態過來的,系統是帶着一種 "猜" 的狀態給用戶推送物品。
簡單來說,搜索是一次主動 pull 的過程,用戶用 query 告訴系統,我需要什么,你給我相關的結果就行;而推薦是一次 push 的過程,用戶沒有明顯意圖,系統給用戶被動 push 認為用戶可能會喜歡的東西吧。
❷ 時效不同
搜索需要盡快滿足用戶此次請求 query,如果搜索引擎無法滿足用戶當下的需求,例如給出的搜索結果和用戶輸入的 query 完全不相關,盡是瞎猜的結果,用戶體驗會變得很差。
推薦更希望能增加用戶的時長和留存從而提升整體 LTV ( long time value,衡量用戶對系統的長期價值 ),例如視頻推薦系統希望用戶能夠持續的沉浸在觀看系統推薦的視頻流中;電商推薦系統希望用戶能夠多逛多點擊推薦的商品從而提高 GMV。
❸ 相關性要求不同
搜索有嚴格的 query 限制,搜索結果需要保證相關性,搜索結果量化評估標准也相對容易。給定一個 query,系統給出不同結果,在上線前就可以通過相關性對結果進行判定相關性好壞。例如下圖中搜索 query 為 "pool schedule",搜索結果 "swimming pool schedule" 認為是相關的、而最后一個 case,用戶搜索 "why are windows so expensive" 想問的是窗戶為什么那么貴,而如果搜索引擎將這里的 windows 理解成微軟的 windows 系統從而給出結果是蘋果公司的 mac,一字之差意思完全不同了,典型的 bad case。

而推薦沒有明確的相關性要求。一個電商系統,用戶過去買了足球鞋,下次過來推薦電子類產品也無法說明是 bad case,因為用戶行為少,推完全不相關的物品是系統的一次探索過程。推薦很難在離線階段從相關性角度結果評定是否好壞,只能從線上效果看用戶是否買單做評估。
❹ 實體不同
搜索中的兩大實體是 query 和 doc,本質上都是文本信息。這就是上文說到的為什么搜索可以通過 query 和 doc 的文本相關性判斷是否相關。Query 和 doc 的匹配過程就是在語法層面理解 query 和 doc 之間 gap 的過程。
推薦中的兩大實體是 user 和 item,兩者的表征體系可能完全沒有重疊。例如電影推薦系統里,用戶的特征描述是:用戶 id,用戶評分歷史、用戶性別、年齡;而電影的特征描述是:電影 id,電影描述,電影分類,電影票房等。這就決定了推薦中,user 和 item 的匹配是無法從表面的特征解決兩者 gap 的。

❺ 個性化要求不同
雖然現在但凡是一個推薦系統都在各種標榜如何做好個性化,"千人千面",但搜索和推薦天然對個性化需求不同。搜索有用戶的主動 query,本質上這個 query 已經在告訴系統這個 "用戶" 是誰了,query 本身代表的就是一類用戶,例如搜索引擎里搜索 "深度學習綜述" 的本質上就代表了機器學習相關從業者或者對其感興趣的這類人。在一些垂直行業,有時候 query 本身就夠了,甚至不需要其他用戶屬性畫像。例如在 app 推薦系統里,不同的用戶搜索 "京東",並不會因為用戶過去行為、本身畫像屬性不同而有所不同。

而推薦沒有用戶主動的 query 輸入,如果沒有用戶畫像屬性和過去行為的刻畫,系統基本上就等於瞎猜。
1.2.2 搜索和推薦相同之處
❶ 本質是都是 match 過程
如果把 user 比作 query,把 item 比作 doc,那么推薦和搜索在這個層面又是相同的,都是針對一個 query ( 一個 user ),從海量的候選物品庫中,根據 query 和 doc 的相關性 ( user 過去的歷史、畫像等和 item 的匹配程度 ),去推薦匹配的 doc ( item )。
❷ 目標相同
搜索和推薦的目標都是針對一次 context ( 或者有明確意圖,或者沒有 ),從候選池選出盡可能滿足需求的物品。兩者區別只是挑選過程使用的信息特征不同。
❸ 語義鴻溝 ( semantic gap ) 都是兩者最大的挑戰
在搜索里表現是 query 和 doc 的語義理解,推薦里則是 user 和 item 的理解。例如,搜索里多個不同的 query 可能表示同一個意圖;而推薦里用來表示 user 和 item 的特征體系可能完全不是一個層面的意思。
02▬
推薦系統的傳統匹配模型2.1 基於 Collaborative Filtering 的方法
2.1.1 CF 模型
說到推薦系統里最經典的模型,莫過於大名鼎鼎的協同過濾了。協同過濾基於一個最基本的假設:一個用戶的行為,可以由和他行為相似的用戶進行預測。
協同過濾的基本思想是基於 <user, item> 的所有交互行為,利用集體智慧進行推薦。CF 按照類型可以分為3種,user-based CF、item-based CF 和 model-based CF。
❶ User-base CF:通過對用戶喜歡的 item 進行分析,如果用戶 a 和用戶 b 喜歡過的 item 差不多,那么用戶 a 和 b 是相似的。類似朋友推薦一樣,可以將 b 喜歡過但是 a 沒有看過的 item 推薦給 a。
❷ Item-base CF: item A 和 item B 如果被差不多的人喜歡,認為 item A 和 item B 是相似的。用戶如果喜歡 item A,那么給用戶推薦 item B 大概率也是喜歡的。比如用戶瀏覽過這篇介紹推薦系統的文章,也很有可能會喜歡和推薦系統類似的其他機器學習相關文章。
❸ Model-base CF: 也叫基於學習的方法,通過定義一個參數模型來描述用戶和物品、用戶和用戶、物品和物品之間的關系,然后通過已有的用戶-物品評分矩陣來優化求解得到參數。例如矩陣分解、隱語義模型 LFM 等。
CF 協同過濾的思路要解決的問題用數據形式表達就是:矩陣的未知部分如何填充問題 ( Matrix Completion )。如圖2.1所示,已知的值是用戶已經交互過的 item,如何基於這些已知值填充矩陣剩下的未知值,也就是去預測用戶沒有交互過的 item 是矩陣填充要解決的問題。

矩陣填充可以用經典的 SVD ( Singular Value Decomposition ) 解決,如圖2.1所示。

其中左側 M=m*n 表示用戶評分矩陣,m 矩陣的行表示用戶數,n 矩陣的列表示 item 數,在大多數推薦系統中 m 和 n 規模都比較大,因此希望通過將 M 分解成右側低秩的形式。一般來說 SVD 求解可以分為三步:
❶ 對 M 矩陣的 missing data 填充為0
❷ 求解 SVD 問題,得到 U 矩陣和 V 矩陣
❸ 利用 U 和 V 矩陣的低秩 k 維矩陣來估計
對於第二步種的 SVD 求解問題,等價於以下的最優化問題:
其中 yij 為用戶 i 對物品 j 的真實評分,也就是 label,U 和 V 為模型預估值,求解矩陣 U 和 V 的過程就是最小化用戶真實評分矩陣和預測矩陣誤差的過程。
這種 SVD 求解方法存在以下問題:
❶ Missing data ( 在數據集占比超過99% ) 和 observe data 權重一樣。
❷ 最小化過程沒有正則化 ( 只有最小方差 ),容易產生過擬合。
因此,一般來說針對原始的 SVD 方法會有很多改進方法。
2.1.2 MF 模型 ( 矩陣分解 )
為解決上述過擬合情況,矩陣分解模型 ( matrix factorization ) 提出的模型如下:
MF 模型的核心思想可以分成兩步:
❶ 將用戶 u 對物品 i 的打分分解成用戶的隱向量 vu,以及物品的隱向量 vi;
❷ 用戶 u 和物品 i 的向量點積 ( inner product ) 得到的 value,可以用來代表用戶 u 對物品i的喜好程度,分數越高代表該 item 推薦給用戶的概率就越大。
同時,MF 模型引入了 L2 正則來解決過擬合問題。
當然,這里除了用 L2 正則,其他正則手段例如 L1 正則,cross-entropy 正則也都是可以的。
2.1.3 FISM 模型
上述提到的兩種模型 CF 方法和 MF 方法都只是簡單利用了 user-item 的交互信息,對於用戶本身的表達是 userid 也就是用戶本身。2014年 KDD 上提出了一種更加能夠表達用戶信息的方法,Factored Item Similarity Model,簡稱 FISM,顧名思義,就是將用戶喜歡過的 item 作為用戶的表達來刻畫用戶,用數據公式表示如下:
注意到用戶表達不再是獨立的隱向量,而是用用戶喜歡過的所有 item 的累加求和得到作為 user 的表達;而 item 本身的隱向量 vi 是另一套表示,兩者最終同樣用向量內積表示。
2.1.4 SVD++ 模型
MF 模型可以看成是 user-based 的 CF 模型,直接將用戶id映射成隱向量,而 FISM 模型可以看成是 item-based 的 CF 模型,將用戶交戶過的 item 的集合映射成隱向量。一個是 userid 本身的信息,一個是 user 過去交互過的 item 的信息,如何結合 user-base 和 item-base 這兩者本身的優勢呢?
SVD++ 方法正是這兩者的結合,數學表達如下:
其中,每個用戶表達分成兩個部分,左邊 vu 表示用戶 id 映射的隱向量 ( user-based CF 思想 ),右邊是用戶交互過的 item 集合的求和 ( item-based CF 思想 )。User 和 item 的相似度還是用向量點擊來表達。
這種融合方法可以看成早期的模型融合方法,在連續3年的 Netflix 百萬美金推薦比賽中可是表現最好的模型。
2.2 Generic feature-based 的方法
上述的方法中,無論是 CF,MF,SVD,SVD++,還是 FISM,都只是利用了 user 和 item 的交互信息 ( ratin g data ),而對於大量的 side information 信息沒有利用到。例如 user 本身的信息,如年齡,性別、職業;item 本身的 side information,如分類,描述,圖文信息;以及 context 上下文信息,如位置,時間,天氣等。因此,傳統模型要講的第二部分,是如何利用這些特征,去構造 feature-based 的 model。

2.2.1 FM 模型
首先要介紹的是大名鼎鼎的 FM 模型。FM 模型可以看成由兩部分組成,如圖2.4所示,藍色的 LR 線性模型,以及紅色部分的二階特征組合。對於每個輸入特征,模型都需要學習一個低維的隱向量表達 v,也就是在各種 NN 網絡里所謂的 embedding 表示。

FM 模型的數學表達如圖2.5所示:

注意紅色部分表示的是二階特征的兩兩組合 ( 特征自己和自己不做交叉 ),向量之間的交叉還是用向量內積表示。FM 模型是 feature-based 模型的一個范式表達,接下來介紹的幾個模型都可以看成是 FM 模型的特殊范例。
2.2.2 FM 模型和 MF 關系
假如只使用 userid 和 itemid,我們可以發現其實 FM 退化成加了 bias 的 MF 模型,如圖2.6所示:

數學表達式如下:
2.2.3 FM 模型和 FISM 關系
如果輸入包含兩個變量,① 用戶交互過的 item 集合;② itemid 本身,那么,此時的 FM 又將退化成帶 bias 的 FISM 模型,如圖2.7所示,藍色方框表示的是用戶歷史交互過的 item ( rated movies ),右邊橙色方框表示的是 itemid 本身的 one-hot 特征。

此時的 FM 模型數學表達如下:
同樣道理,如果再加上 userid 的隱向量表達,那么 FM 模型將退化成 SVD++ 模型。可見 MF,FISM,SVD++ 其實都是 FM 的特例。
2.3 傳統模型總結
上面介紹的模型都是通過打分預測來解決推薦系統的排序問題,這在很多時候一般都不是最優的,原因有如下幾個方面:
❶ 預測打分用的 RMSE 指標和實際的推薦系統排序指標的 gap:
預測打分用的 RMSE 擬合的是最小方差 ( 帶正則 ),而實際面臨的是個排序問題。
❷ 觀察數據天然存在 bias
用戶一般傾向於給自己喜歡的 item 打分,而用戶沒有打分過的 item 未必就真的是不喜歡。針對推薦系統的排序問題,一般可以用 pairwise 的 ranking 來替代 RMSE。
如上述公式所示,不直接擬合用戶對 item 的單個打分,而是以 pair 的形式進行擬合;一般來說,用戶打分高的 item > 用戶打分低的 item;用戶用過交互的 item > 用戶未交互過的 item ( 不一定真的不喜歡 )。
03▬
基於 representation learning 的深度匹配模型終於要講到激動人心的深度學習部分了。深度學習匹配模型從大致方向上可以分為兩大類,分別是基於 representation learning 的模型以及 match function learning 的模型。
本章主要講述第一種方法,representation learning,也就是基於表示學習的方法。這種方法會分別學習用戶的 representation 以及 item 的 representation,也就是 user 和 item 各自的 embedding 向量 ( 或者也叫做隱向量 ),然后通過定義 matching score 的函數,一般是簡單的向量點擊、或者 cosine 距離來得到兩者的匹配分數。整個 representation learning 的框架如圖3.1所示,是個典型的 user 和 item 的雙塔結構:

圖3.1 基於 representation learning 的匹配模型
基於 representation learning 的深度學習方法,又可以分為兩大類,基於 CF 以及 CF + side info 的方法。下面的介紹將分別從 input 、representation function 和 matching function 三個角度分別看不同的模型有什么不同。
3.1 基於 Collaborative Filtering 的方法
3.1.1 CF 模型 ( collaborative filtering )
重新回顧下傳統方法里的協同過濾方法,如果從表示學習的角度來看,就是個經典的 representation learning 的模型,分別學習 user 和 item 的隱向量。
❶ input layer:只有兩個,分別是 userid ( one-hot ),itemid ( one-hot )
❷ representation function:線性 embedding layer
❸ matching function:向量內積 ( inner product )

3.1.2 模型 ( Deep Matrix Factorization )
DMF 模型也就是深度矩陣分解模型,在傳統的 MF 中增加了 MLP 網絡,整個網絡框架如圖3.3所示。
❶ input layer
由兩部分組組成,其中 user 由 user 交互過的 item 集合來表示,是個 multi-hot 的打分表示,如 [0 0 4 0 0 … 1 5 …],在矩陣中用行表示;item 也由交互過的 user 集合來表示,也是個 multi-hot 的表示,如 [5 0 0 3 … 1 3],在矩陣中用列表示。

可以發現這里的輸入都是 one-hot 的,一般來說 M 用戶數比較大,N 作為 item 數量假設是百萬級別的。
❷ representation function
Multi-Layer-Perceptron,也就是經典的全連接網絡。
❸ matching function
用 cosine 點擊表示兩個向量的匹配分數。
對比普通的 CF 模型,最大的特點是在 representation function 中,增加了非線性的 MLP,但是由於輸入是 one-hot 的,假設用戶規模是100萬,MLP 的第一層隱層是100,整個網絡光 user 側的第一層參數將達到1億,參數空間將變得非常大。
3.1.3 AutoRec 模型
借鑒 auto-encoder 的思路,AutoRec 模型對輸入做重建,來建立 user 和 item 的 representation,和 CF 一樣,也可以分為 user-based 和 item-based 的模型。對於 item-based AutoRec,input 為 R 里的每列,即每個 item 用各個 user 對它的打分作為其向量描述;對於 user-based AutoRec 則是用 R 里的每行來表示,即每個 user 用他打分過的 item 的向量來表達。
用 ru 表示用戶向量,ri 表示 item 向量,通過 autoencoder 將 ru 或者 ri 投射到低維向量空間 ( encode 過程 ),然后再將其投射到正常空間 ( decode 過程 ),利用 autoencoder 中目標值和輸入值相近的特性,從而重建 ( reconstruct ) 出用戶對於未交互過的 item 的打分。
❶ input layer
和 DMF 一樣,user 用 user 作用過的 item 集合表示,item 則用 itemid 本身表示,圖中在原 slides 是說 user-autoencoder,但個人在看原始 autoRec 論文時,這塊應該有誤,應該是 item-based 的,因為 m 表示的是用戶數,n 表示 item 數,下方的輸入表示所有 user(1,2,3,…m) 對 item i 的交互輸入。

❷ representation function
通過 auto-encoder 的結構表示,其中,h(r; theta) 表示的是輸入層到隱層的重建;由於輸入的是用戶交互過的 item(multi-hot),所以在隱層中的藍色節點表示的就是 user representation;而輸出的節點表示的是 item 的 representation,這樣就可以得到 user 和 item 各自 representation,如下面公式所示:
損失函數為最小化預測的平方差以及 W 和 V 矩陣的 L2 正則:
❸ matching function
有了 user 和 item 的 representation,就可以用向量點擊得到兩者的匹配分數。
3.1.4 模型 ( Collaborative Denoising Auto-Encoders )
CDAE 模型類似 SVD++ 的思想,除了 userid 本身表達用戶,也將用戶交互過的 item 作為 user 的表達。
❶ input layer
用戶 id,用戶歷史交互過的 item;以及 itemid。可以發現對比上述基礎的 autoRec,用戶側輸入同時使用了用戶歷史交互過的 item 以及 userid 本身這個 bias,思想很類似 SVD++。如圖3所示的 input layer 節點,綠色節點表示每個用戶交互過的 item,最下面的紅色節點 user node 表示用戶本身的偏好,可以認為是 userid 的表達。
❷ representation function

其中,中間藍色的隱層節點作為用戶表示,其中 Vu 為 input layer 中的 user node 的 representation,針對所有用戶 id 會學習一個和 item 無關的 Vu 向量表達,可以認為是用戶本身的 bias,例如有些用戶打分本身比較嚴格,再好的 item 打分也不會太高;有些用戶打分很寬松,只要 item 別太差都會給高分,加上 Vu 可以更好的刻畫用戶之間天然的 bias。
而對於輸出層的節點,可以認為是用戶 u 對物品 i 的打分預測:
❸ matching function
使用向量點積作為匹配分數:
3.1.5 基於 CF 方法的深度模型總結
總結下以上基於 CF 的方法,有以下幾個特點:
❶ User 或者 item 要么由本身 id 表達,要么由其歷史交互過的行為來表達;
❷ 用歷史交互過的行為來作為 user 或者 item 的表達,比用 id 本身表達效果更好,但模型也變得更復雜;
❸ Auto-encoder 本質上等同於 MLP+MF,MLP 用全連接網絡做 user 和 item 的 representation 表達;
❹ 所有訓練數據僅用到 user-item 的交互信息,完全沒有引入 user 和 item 的 side info 信息。
3.2 基於 Collaborative Filtering+ side information 的方法
基於 CF 的方法沒有引入 side information,因此,對於 representation learning 的第二種方法,是基於 CF + side info,也就是在 CF 的方法上額外引入了 side info。
3.2.1 DCF 模型 ( Deep Collaborative Filtering )
❶ input layer
除了用戶和物品的交互矩陣,還有用戶特征 X 和物品特征 Y。
❷ representation function
和傳統的 CF 表示學習不同,這里引入了用戶側特征X例如年齡、性別等;物品側特征 Y 例如文本、標題、類目等;user 和 item 側的特征各自通過一個 auto-encoder 來學習,而交互信息 R 矩陣依然做矩陣分解 U,V。整個模型框架如圖3.6所示。

損失函數優化,需要最小化用戶側特征的 reconstruction 和 item 側的 encoder 部分,以及交互矩陣和預測矩陣的平方差,還有加上 L2 正則。如圖3.7第一個公式。
其中 W1,表示的用戶側特征 X 在 auto-encoder 過程中的 encode 部分,也就是輸入到隱層的重建,P1 表示的是用戶特征到交互矩陣 R 的映射;而 W2 表示物品側特征 Y 在 auto-encoder 過程中的 encode 部分。P2 表示的是物品特征到交互矩陣 R 的映射。

圖3.7下面兩組公式中,可以看出用戶側和物品側特征都由兩項 error 組成,第一項衡量的是 input 和 corrupted input 構建的預估誤差,需要保證 W1 和 W2 對於 corrupted 后的 input x 和 y 不能擬合太差;第二項表達的是映射后的隱層特征空間 W1X 和投射到 U 矩陣的誤差不能太大。
簡單理解,整個模型的學習,既需要保證用戶特征 X 和物品特征 Y 本身 encode 盡可能准確 ( auto-encoder 的 reconstruction 誤差 ),又需要保證用戶對物品的預估和實際觀測的盡可能接近 ( 矩陣分解誤差 ),同時正則化也約束了模型的復雜度不能太高。
3.2.2 DUIF 模型 ( Deep User and Image Feature Learning )
❶ input layer
除了用戶和物品的交互矩陣,還有用戶特征 X 和物品特征 Y。
❷ representation function
整個 match score 可以用下圖表示:fi 表示原始圖片特征,通過 CNN 網絡提取的圖片特征作為 item 的表達,然后用一個線性映射可以得到 item 的 embedding 表達。
❸ match function
通過模型學到的 pu 作為用戶的 representation,以及通過 CNN 提取的圖片特征作為 item 的 representation,兩者通過向量點積得到兩者的匹配分數。
3.2.3 ACF 模型 ( Attentive Collaborative Filtering )
Sigir2017 提出的 Attention CF 方法,在傳統的 CF 里引入了 attention 機制。這里的 attention 有兩層意思,第一層 attention,認為用戶歷史交互過的 item 的權重是不一樣的;另一個 attention 意思是,用戶同一個 item 里到的視覺特征的權重也是不一樣的,如圖3.8所示。

❶ input layer
① 用戶側:userid;用戶歷史交互過的 item。
② Item側:itemid;item 相關的視覺相關特征。
❷ representation function
可以分為兩個 attention,一個是 component 層級的 attention,主要是提取視覺特征;第二層是 item 層級的 attention,主要提取用戶對物品的喜好程度權重。
① component-attention
在該 paper 里的推薦系統針對的是 multi-media 的,有很多圖文和視頻的特征信息提取,所以引入的第一層 attention 指的是 component attention,認為對於不同的 components 對 item representation 的貢獻程度是不同的,如圖3.9所示。
圖3.9 component attention 框架
對第 l 個 item,輸入為不同 region 本身的特征 xl1,xl2,xlm,表示的是 m 個不同的 item feature, 以及用戶輸入 ui,最終 item 的表達為不同的 region 的加權 embedding。
其中第一個公式表示用戶 i 對物品 l 第 m 個 component ( 例如圖片特征中的局部區域特征,或者視頻中不同幀的特征 ) 的權重;第二個公式 softmax 對 attention 權重歸一化。
② item attention
第二層 attention,認為用戶作用過的 item 歷史中,權重應該是不同的。這里文章使用了 SVD++ 的方式,用戶本身的表達引入了 a(i, l),代表的是用戶 i 對其歷史交互過的物品 l 的權重。
用戶 i 對第 l 個 item 的權重表達可以用如下的數據表示:
其中 ui 是用戶本身的 latent vector,vl 是物品 l 的 latent vector,pl 是物品 l 的輔助 latent vector;xl 是表示前面提到的從圖文信息提取的特征 latent vector。用戶最終的表達是自身 ui 的 latent vector,以及歷史行為的 attention 加權的 representation 表示。
模型使用的是 pairwise loss 進行優化:
❸ representation function
使用 user 和 item 的向量點擊作為匹配分數。
3.2.4 CKB 模型 ( Collaborative Knowledge Base Embedding )
CKB 模型是在2016年 KDD 提出的,利用知識圖譜做 representation learning,模型框架如圖3.10所示。整個 CKB 模型框架其實思想比較簡單,分別在結構化信息、文本信息和視覺信息中提取 item 側特征作為 item 的 representation。

❶ input layer
① user側:userid
② item側:itemid;基於知識圖譜的 item 特征 ( structural,textual,visual )
❷ representation function
主要是從知識圖譜的角度,從結構化信息,文本信息以及圖文信息分別提取 item 側的表達,最終作為 item 的 embedding。
① 結構化特征 struct embedding: transR,transE

② 文本特征 Textual embedding: stacked denoising auto-encoders ( S-DAE )

③ 視覺特征 Visual embedding: stacked convolutional auto-encoders ( SCAE )

❸ matching function
得到用戶向量和 item 向量后,用向量點擊表示 user 和 item 的匹配分數;損失函數則用如下的 pair-wise loss 表示:
3.3 基於 representation 的深度匹配方法總結
總結上述基於 CF 的方法,可以用如下的范式作為表達:

❶ representation learning:目的是學習到 user 和 item 各自的 representation ( 也叫 latent vector,或者 embedding )。
❷ 特征表達:user 側特征除了用戶 id 本身 userid,可以加上其他 side info;item 側特征除了物品 id 本身 itemid,還有其他文本特征、圖文特征、視頻幀特征等信息。
❸ 模型表達:除了傳統的 DNN,其他結構如 Auto-Encoder ( AE ),Denoise-Auto-Encoder ( DAE ),CNN,RNN 等。
基於 representation learning 的深度匹配模型不是一個 end-2-end 模型,通過 user 和 item 各自的 representation 作為中間產物,解釋性較好,而且可以用在出了排序階段以外的其他環節,例如求物品最相似的 item 集合,召回環節等。
04▬
基於 match function learning 的深度匹配模型
對比 representation learning 的方法,基於 match function learning 最大的特點是,不直接學習 user 和 item 的 embedding,而是通過已有的各種輸入,通過一個 neural network 框架,來直接擬合 user 和 item 的匹配分數。

簡單來說,第一種方法 representation learning 不是一種 end-2-end 的方法,通過學習 user 和 item 的 embedding 作為中間產物,然后可以方便的計算兩者的匹配分數;而第二種方法 matching function learning 是一種 end2end 的方法,直接擬合得到最終的匹配分數。本章主要介紹基於 match function learning 的深度學習匹配方法。
4.1 CF-based 的深度模型
前面傳統匹配模型以及基於表示學習的模型,其 base 模型都離不開協同過濾,也可以稱為基於矩陣分解的模型。基於 match function learning 的模型也不例外。
4.1.1 基於 NCF 框架的方法
基於神經網絡的學習方法 ( NCF ) 為何向南博士在2017年提出,對比傳統的 CF 網絡,在得到 user vector 和 item vector 后,連接了 MLP 網絡后,最終擬合輸出,得到一個 end-2-end 的 model。這套框架好處就是足夠靈活,user 和 item 側的雙塔設計可以加入任意 side info 的特征,而 MLP 網絡也可以靈活的設計,如圖4.2所示。

NCF 框架對比第三章所說的 CF 方法最主要引入了 MLP 去擬合 user 和 item 的非線性關系,而不是直接通過 inner product 或者 cosine 去計算兩者關系,提升了網絡的擬合能力。然而 MLP 對於直接學習和捕獲從 mf 提取的 user 和 item vector 能力其實並不強。在 wsdm2018 的一篇文章質疑的就是 MLP 對特征組合的擬合能力。

該 paper 做了一組實驗,使用1層的 MLP 網絡去擬合數據;實驗證明對於二維一階的數據,也需要100個節點才能擬合;如果超過2階,整個 MLP 的表現將會非常差。文章因此說明了 DNN 對於高階信息的捕捉能力並不強,只能捕捉低階信息。
下文要講的模型,也是在模型結構或者特征層面做的各種變化。
4.1.1.1 NeuMF 模型 ( Neural Matrix Factorization )
Neural MF,顧名思義,同時利用了 MF 和神經網絡 MLP 的能力來擬合 matching score;MF 利用向量內積學習 user 和 item 的關聯,同時 MLP 部分捕捉兩者的其他高階信息。這篇 paper 其實和 NCF 框架是出自同一篇 paper 的。模型可以分為 GMF 和 MLP 兩個部分來看,如圖4.4所示。

❶ GMF ( General Matrix Factorization ) 部分
User 和 item 都通過 one-hot 編碼得到稀疏的輸入向量,然后通過一個 embedding 層映射為 user vector 和 item vector。這樣就獲得了 user 和 item 的隱向量,一般可以通過向量點積或者哈達馬積 ( element-wide product ) 得到交互,不過在 NeuMF 中多連接了一個連接層,也就是 GMF layer:
❷ MLP 部分
輸入和 GMF 部分一樣,都是 one-hot 的稀疏編碼,然后通過 embedding 層映射為 user vector 和 item vector。注意到這里 user 和 item 的 vector 和 GMF 部分是不一樣的,原因是 GMF 和 MLP 兩個網絡結構對隱層維度要求不同,MLP 部分會高一些 ( 個人感覺 share embedding 能更充分訓練 embedding )。
Embedding 層之后就是幾層常規的 MLP,這塊沒什么好說的,最后一層輸出作為 MLP 的 output。
4.1.1.2 NNCF 模型 ( Neighbor-based NCF )
CIKM2017 提出的一種基於 neighbor 的 NCF 方法,最大的不同在於輸入除了 user 和 item 的信息,還各自引入了 user 和 item 各自的 neighbor 信息。
圖4.5 NNCF 模型框架
圖4.5所示的輸入由兩部分組成,中間 xu 和 yi 為原始的 user 和 item 的 one-hot 輸入,通過 embedding 層后映射為 pu 和 qi 的 embedding 向量,然后通過哈達馬積作為 MLP 的輸入。而輸入層兩側的 nu 和 ni 是 user 和 item 各自的 neighbor 信息的輸入,這里 nu 和ni 信息如何提取可以采用多種手段,如二部圖挖掘,user-CF 或者 item-CF 等。
對於 neighbor 信息,由於每個用戶和 item 的 neighbor 數不一致,輸入是不定長的,通過卷積和 pooling 后提取得到定長的 embedding,然后和 user 以及 item 本身的向量 concat 后輸入到模型中:
4.1.1.3 ONCF 模型 ( Outer-Product based NCF )
何向南博士2018年在 NCF 模型框架上提出了 outer-product based NCF,在原有的 NCF 框架上,引入了 outer product 的概念,如圖4.6所示。

在 embedding layer 之后,O-NCF 模型引入了 interaction map 也就是特征交叉層,對於用戶 u 的向量 pu 和物品 i 的向量 qi,引入兩者的 outer-product:
E 是一個 k*k 維的矩陣,其中的每個 element 兩兩相乘,得到2維的矩陣。到這,可以通過把二維矩陣展開變成一個 k2 維度的向量,作為 MLP 的輸入。假設 k=64,那么 E 就是個4096的向量,每一層隱層單元個數設置為上一層的一半,那么第一層的維度為4096*2048約需要840萬的網絡參數需要訓練,參數量非常巨大。
因此,文章提出了一種利用 CNN 局部連接共享參數的方法來減少 embedding layer 到 hidden layer 之間的參數,如圖4.7所示。

假設隱層維度 K=64,有6層 hidden layer,每一層有32個卷積核 ( feature map ),步長 stride=2,那么經過每個卷積核后的 feature map 大小為原來的1/4 ( 長和寬各少了一半 )。以第一層卷積為例:
那么第一層卷積后得到的網絡是個32*32*32的3維 vector,其中最后一個32代表 feature map 個數。這里如何體現特征交叉的思想呢?ei,j,c 代表的就是在前一層的 feature map 中,第 i 個單元和第 j 個 element 的二階交叉。第一層 feature map 中,每個單元提取的是上一層2*2區域的 local 連接信息,第三層提取的就是第一層4*4的信息,那么在網絡的最后一層就能提取到原始 feature map 里的 global 連接信息,從而達到高階特征提取的目的。
總結來說,使用原始的 outer-product 思想,在第一層網絡處有近千萬的參數需要學習,而使用 CNN 網絡一方面能夠減少參數量,另一方面又同時提取了低階和高階特征的組合。個人覺得引入 CNN 固然能節省內存,但也同時會帶來訓練和推理時間的增加,是一種時間換空間的思想。另外用 CNN 是否能夠比原始 MLP 更有效擬合特征組合也需要結合數據分布去看。
4.1.1.4 小結
基於 NCF 框架的方法基礎原理是基於協同過濾,而協同過濾本質上又是在做 user 和 item 的矩陣分解,所以,基於 NCF 框架的方法本質上也是基於 MF 的方法。矩陣分解本質是盡可能將 user 和 item 的 vector,通過各種方法去讓 user 和 item 在映射后的空間中的向量盡可能接近 ( 用向量點擊或者向量的 cosine 距離直接衡量是否接近)。
而另外一種思路,基於翻譯的方法,也叫 translation based model,認為 user 和 item 在新的空間中映射的 vector 可以有 gap,這個 gap 用 relation vector 來表達,也就是讓用戶的向量加上 relation vector 的向量,盡可能和 item vector 接近。兩種方法的區別可以用圖4.8形象的表示。

4.1.2 基於 translation 框架的方法
4.1.2.1 transRec 模型
2017年的 recsys 會議上提出的一種基於 "translate" 的推薦方法,要解決的是 next item 的推薦問題。基本思想是說用戶本身的向量,加上用戶上一個交互的 item 的向量,應該接近於用戶下一個交互的 item 的向量,輸入是 (user, prev item, next item),預測下個 item 被推薦的概率。

用戶向量表達如下:
這里 ri 和 rj 表示的是用戶上一個交互的 item i 和下一個交互的 item j,tu 為用戶本身的向量表達。而在實際的推薦系統中,往往存在數據稀疏和用戶冷啟動問題,因此,作者將用戶向量 tu 分解成了兩個向量:
這里 t 可以認為是全局向量,表示的是所有用戶的平均行為,tu 表示用戶 u 本身的 bias,例如對於冷啟動用戶,tu 可以設置為0,用全局用戶的表達 t 作為冷啟動。
對於熱門 item 由於出現次數非常多,會導致最終熱門 item 的向量和絕大多數用戶向量加上 item 向量很接近,因此文章對熱門 item 做了懲罰,最終,已知上一個 item i,用戶和下一個 item j 的匹配 score 表達為:
其中, 第一項 βj 表示的是物品 j 的全局熱度;第二項 d 表示的是用戶向量加上物品 i 的向量與物品 j 向量的距離;距離越小表示 i 和 j 距離越接近,被推薦的可能性就越大。
4.1.2.2 LRML 模型 ( Latent Relational Metric Learning )
前面講到,基於 translation 框架的方法對比基於 CF 框架方法最大的不同,在於找到一個 relation vector,使得 user vector + relation vector 盡可能接近 item vector。WWW2018 提出的 LRML 模型通過引入 memory network 來學習度量距離。可以分為三層 layer,分別是 embedding layer, memory layer 和 relation layer。

❶ embedding layer
底層是常規的雙塔 embedding,分別是用戶 embedding 矩陣和物品的 embedding 矩陣,用戶 one-hot 輸入和 item 的 one-hot 輸入通過 embedding 后得到用戶向量 p 和物品向量 q。
❷ memory layer
記憶網絡層是文章的核心模塊,作者通過引入 memory layer 作為先驗模塊。這個模塊可以分為三個步驟進行計算:
① 用戶和物品 embedding 融合
Embedding 層得到的 user 和 item 向量 p 和 q 需要先經過交叉合成一個向量后輸入到下一層,作者提到使用哈達碼積效果優於 MLP 效果,也更簡單:
② 用戶-物品 key addressing
從第一步得到的向量 s 中,去和 memory 記憶網絡模塊中的各個 memory vector 挨個計算相似度,相似度可以用內積表達並做歸一化:
得到的 ai 代表的是當前用戶-物品輸入對 (p,q) 與 memory-network 中的第 i 個向量的相似度。
③ 最終加權表達
最終得到的 relation vector 是第二步得到的 memory 記憶網絡中不同 vector 的加權表達,如下所示:
❸ relation layer
從 memory layer 得到的 r 向量可以認為是用戶向量 p 與物品向量 q 的 relation vector,最終的距離用平方損失衡量,如圖4.11所示。

由於解決的是推薦物品的排序問題,文章使用的是 pairwise loss,因此在網絡的最后一層,對 user 和 item 分別進行負樣本采樣得到 p' 和 q',然后使用 pairwise hinge loss 進行優化:
4.2 feature-based 的深度模型
4.1介紹的基於 CF 的方法,對大多數推薦系統來說,輸入的特征向量往往都是非常高維而且稀疏的,而特征之間的交叉關系對模型來說往往都是非常重要的。例如,用戶一般會在一天快吃三餐的時候,打開和訂餐相關的 app,這樣,用戶使用訂餐 app 和時間存在着二階交叉關系;又比如說,男性的青年群體,往往更喜歡射擊類的游戲,性別、年齡以及類目之間存在着三階的交叉關系。因此,如何捕捉特征之間的交叉關系,衍生了眾多基於特征的模型,在這里將這些捕捉特征交叉關系的模型稱為 feature-based model。
4.2.1 wide&deep 模型
提到深度學習模型,最經典的莫過於2016年 google 提出的 wide and deep 模型。說是模型,不如說是通用的一套范式框架,在整個工業界一舉奠定了風靡至今的模型框架,如圖4.12所示。

在這個經典的 wide&deep 模型中,google 提出了兩個概念:generalization ( 泛化性 ) 和 memory ( 記憶性 )。
❶ 記憶性:wide 部分長處在於學習樣本中的高頻部分,優點是模型的記憶性好,對於樣本中出現過的高頻低階特征能夠用少量參數學習;缺點是模型的泛化能力差,例如對於沒有見過的 ID 類特征,模型學習能力較差。
❷ 泛化性:deep 部分長處在於學習樣本中的長尾部分,優點是泛化能力強,對於少量出現過的樣本甚至沒有出現過的樣本都能做出預測 ( 非零的 embedding 向量 ),容易帶來驚喜。缺點是模型對於低階特征的學習需要用較多參數才能等同 wide 部分效果,而且泛化能力強某種程度上也可能導致過擬合出現 bad case。尤其對於冷啟動的一些 item,也有可能用用戶帶來驚嚇。

值得注意的是,雖然模型的 deep 部分擬合和泛化能力很強,但絕對不意味着把特征交叉都交給 MLP 就夠了。實際證明,對於重要的一些人工經驗的特征,對於提升整體效果還是非常重要的,如圖4.13所示。這個人工特征的所謂缺點,也是后續各種模型結構想對其進行 "自動化" 的優化點。
4.2.2 deep crossing 模型
微軟在2016年提出了一套框架 deep crossing,這篇文章在輸入到 embedding 這里到是和 wide&deep 沒有太多不同,主要區別在於 MLP 部分。
Google 的 wide&deep 模型里深度網絡的 MLP 部分是全連接網絡,每一層的網絡輸入都是前一層的輸入出,受限於模型結構,越往后越難學習到原始輸入的表達,一般深度不會太深,超過5層的網絡在工業界已經算很少見了。為了解決這個問題,deep crossing 網絡引入了 resnet 殘差網絡的概念,通過 short-cut,在 MLP 的深層網絡,也能接收來自第一層的輸入,這樣可以使得模型的深度達到10層之多,如圖4.14所示。

上述提到的 wide&deep 以及 deep crossing 框架更像是在模型結構做的改進,一個引入了 wide&deep,一個引入了 resnet,特征層面並沒有做太多改造,如何體現 feature-base 呢?SigIR2017 就有一篇文章做了個實驗,對 wide&deep 以及 Deep&Cross 實驗按照 embedding 是否做初始化分別做了實驗。實驗發現,如果 embedding 是隨機初始化的,兩個深度模型連基礎的 FM 模型都打不過;哪怕經過 FM 初始化了 embedding,wide&deep 模型效果也僅僅略好於 FM 模型,而 deep crossing 模型依然比不過 FM 模型,實驗結果如圖4.15所示。

這個結論也引出了關於 MLP 的一些思考,全連接網絡表面上看對所有節點都進行了連接,理論上應該學習到了各個節點的交叉特征,但是從結果上來看,MLP 對這些特征交叉的學習能力確實非常差的。糾其原因,還是在模型結構的設計上。

圖4.16里無論是 wide&deep 還是 deep crossing network,embedding 層之后到 MLP 之間,都是將 embedding 做 concat 的。這些 concat 后的信息其實能夠表達的特征交叉信息其實是非常有限的,僅靠 MLP 想完全捕捉到特征的有效交叉其實是非常困難的。因此,有大量工作關於在 embedding 這里如何捕捉特征交叉,其實就是在 MLP 網絡之前,利用更多的數學先驗范式做特征交叉去提取特征,這也是本節提到的方法叫做 feature-based 的原因。
4.2.3 PNN 模型
Embedding layer 進入 MLP 之前,引入了 product layer 來顯式的學習每個 field 的 embedding 向量之間的兩兩交叉,如圖4.17所示。

左邊 z 為 embedding 層的線性部分,右邊為 embedding 層的特征交叉部分。這種 product 思想來源於,推薦系統中的特征之間的交叉關系更多是一種 and "且" 的關系,而非 add "加" 的關系。例如,性別為男且喜歡游戲的人群,比起性別男和喜歡游戲的人群,前者的組合比后者更能體現特征交叉的意義。根據 product 的方式不同,可以分為 inner product ( IPNN ) 和 outer product ( OPNN ),如圖4.18所示。

其中,IPNN 模型每個特征是個 inner product,f 個 field 兩兩交叉,得到的新的特征組合有 f*(f-1)/2個;outer product 是兩個向量的乘積,得到的新的特征組合有 f*(f-1)/2*k*k 個。
4.2.4 deepFM 模型
Google 的 wide&deep 框架固然強大,但由於 wide 部分是個 LR 模型,仍然需要人工特征工程。華為諾亞方舟團隊結合 FM 相比 LR 的特征交叉的功能,在2017年提出了 deepFM,將 wide&deep 部分的 LR 部分替換成 FM 來避免人工特征工程,如圖4.19所示。

比起 wide&deep 的 LR 部分,deeFM 采用 FM 作為 wide 部分的輸出,FM 部分如圖4.20所示。

除此之外,deepFM 還有如下特點:
❶ 更強的低階特征表達
Wide 部分取代 WDL 的 LR,與4.2.1和4.2.2提到的 wide&deep 模型以及 deep crossing 模型相比更能捕捉低階特征信息。
❷ Embedding 層共享
Wide&deep 部分的 embedding 層得需要針對 deep 部分單獨設計;而在 deepFM 中,FM 和 DEEP 部分共享 embedding 層,FM 訓練得到的參數既作為 wide 部分的輸出,也作為 DNN 部分的輸入。
❸ end-end 訓練
Embedding 和網絡權重聯合訓練,無需預訓練和單獨訓練。
4.2.5 NFM 模型 ( Neural Factorization Machines )
DeepFM 在 embedding 層后把 FM 部分直接 concat 起來 ( f*k 維,f 個 field,每個 filed 是 k 維向量 ) 作為 DNN 的輸入。Neural Factorization Machines,簡稱 NFM,提出了一種更加簡單粗暴的方法,在 embedding 層后,做了一個叫做 Bi-interaction 的操作,讓各個 field 做 element-wise 后 sum 起來去做特征交叉,MLP 的輸入規模直接壓縮到 k 維,和特征的原始維度 n 和特征 field 維度 f 沒有任何關系,如圖4.21所示。

這里論文只畫出了其中的 deep 部分, wide 部分在這里省略沒有畫出來。Bi-interaction 所做的操作很簡單:讓 f 個 field 兩兩 element-wise 相乘后,得到 f*(f-1)/2 個維度為 k 的向量,然后直接 sum 起來,最后得到一個 k 維的向量。所以該層沒有任何參數需要學習,同時也降低了網絡復雜度,能夠加速網絡的訓練;但同時這種方法也可能帶來較大的信息損失。
4.2.6 AFM 模型 ( Attention Factorization Machines )
前面提到的各種網絡結構中的 FM 在做特征交叉時,讓不同特征的向量直接做交叉,基於的假設是各個特征交叉對結果的貢獻度是一樣的。這種假設往往不太合理,原因是不同特征對最終結果的貢獻程度一般是不一樣的。Attention Neural Factorization Machines,簡稱 AFM 模型,利用了近年來在圖像、NLP、語音等領域大獲成功的 attention 機制,在前面講到的 NFM 基礎上,引入了 attention 機制來解決這個問題,如圖4.22所示。

圖4.22 AFM 模型框架
AFM 的 embedding 層后和 NFM 一樣,先讓 f 個 field 的特征做了 element-wise product 后,得到 f*(f-1)/2 個交叉向量。和 NFM 直接把這些交叉項 sum 起來不同,AFM 引入了一個 Attention Net,認為這些交叉特征項每個對結果的貢獻是不同的,例如 xi 和 xj的權重重要度,用 aij 來表示。從這個角度來看,其實 AFM 其實就是個加權累加的過程。Attention Net 部分的權重 aij 不是直接學習,而是通過如下公式表示:
這里 t 表示 attention net 中的隱層維度,k 和前面一樣,為 embedding 層的維度。所以這里需要學習的參數有3個,W,b,h,參數個數共 t*k+2*t 個。得到 aij 權重后,對各個特征兩兩點積加權累加后,得到一個 k 維的向量,引入一個簡單的參數向量 hT,維度為 k 進行學習,和 wide 部分一起得到最終的 AFM 輸出。

關於 AFM 還有個好處,通過 attention-base pooling 計算的 score 值 aij 體現的是特征 vi 和 vj 之間的權重,能夠選擇有用的二階特征,如圖4.23所示。
4.2.7 DCN 模型 ( Deep Cross Network )
前面提到的幾種 FM-based 的方法都是做的二階特征交叉,如 PNN 用 product 方式做二階交叉,NFM 和 AFM 也都采用了 Bi-interaction 的方式學習特征的二階交叉。對於更高階的特征交叉,只有讓 deep 去學習了。為解決這個問題,google 在2017年提出了 Deep&Cross Network,簡稱 DCN 的模型,可以任意組合特征,而且不增加網絡參數。圖4.24為 DCN 的結構。

整個網絡分4部分組成:
❶ embedding and stacking layer
之所以不把 embedding 和 stacking 分開來看,是因為很多時候,embedding 和 stacking 過程是分不開的。前面講到的各種 XX-based FM 網絡結構,利用 FM 學到的 v 向量可以很好的作為 embedding。而在很多實際的業務結構,可能已經有了提取到的 embedding 特征信息,例如圖像的特征 embedding,text 的特征 embedding,item 的 embedding 等,還有其他連續值信息,例如年齡,收入水平等,這些 embedding 向量 stack 在一起后,一起作為后續網絡結構的輸入。當然,這部分也可以用前面講到的 FM 來做 embedding。為了和原始論文保持一致,這里我們假設 x0 向量維度為 d ( 上文的網絡結構中為 k ),這一層的做法就是簡答的把各種 embedding 向量 concat 起來。
❷ deep layer network
在 embedding and stacking layer 之后,網絡分成了兩路,一路是傳統的 DNN 結構。表示如下:
為簡化理解,假設每一層網絡的參數有 m 個,一共有 Ld 層,輸入層由於和上一層連接,有 d*m 個參數 ( d 為 x0 向量維度 ),后續的 Ld-1 層,每層需要 m*(m+1) 個參數,所以一共需要學習的參數有 d*m+m*(m+1)*(Ld-1)。最后的輸出也是個 m 維向量。
❸ cross layer network
Embedding and stacking layer 輸入后的另一路就是 DCN 的重點工作了。每一層 l+1 和前一層l的關系可以用如下關系表示:
可以看到 f 是待擬合的函數,xl 即為上一層的網絡輸入。需要學習的參數為 wl 和 bl,因為 xl維度為 d,當前層網絡輸入 xl+1 也為 d 維,待學習的參數 wl 和 bl 也都是 d 維向量。因此,每一層都有 2*d 的參數 ( w 和 b ) 需要學習,網絡結構如下。

經過 Lc 層的 cross layer network 后,在該 layer 最后一層 Lc 層的輸出為 Lc2 的 d 維向量。
❹ combination output layer
經過 cross network 的輸出 XL1 ( d 維 ) 和 deep network 之后的向量輸入 ( m 維 ) 直接做 concat,變為一個 d+m 的向量,最后套一個 LR 模型,需要學習參數為 1+d+m。
總結起來,DCN 引入的 cross network 理論上可以表達任意高階組合,同時每一層保留低階組合,參數的向量化也控制了模型的復雜度。Cross 網絡部分的交叉學習的是特征向量中每一個 element 的交叉,本質上是 bit-wise 的。
4.2.8 xDeepFM 模型 ( extreme Deep Factor Machine )
xDeepFM 模型從名字上聽好像是 deepFM 模型的升級,但其實更應該拿來和 DCN 模型做對比。DCN 模型引入了高階特征交叉,但是特征的交叉本質上是在 bit-wise 的。而 xDeepFM 模型認為特征向量 i 和特征向量 j 的交叉過程中,i 本身的元素交叉沒有意義,提取 i 和 j 的向量交叉才是更有效捕捉特征的方式,也就是 vector-wise 的交叉,整個模型的框架如圖4.26所示,最核心的模塊在於特征交叉的 CIN 模塊。

首先我們來看下整個 CIN 的整體框架圖,如圖4.27所示,假設特征 field 個數是 m,每個 field 的隱層維度為 d,那么原始 embedding 層的大小為 m*d,而 cross network 有 Hk層,提取的是特征的交叉。每一層網絡在做什么事情呢?就是和第一層 x0 做特征交叉得到新的特征向量后,然后這 Hk 層 cross net 得到的特征向量 concat 到一起,作為 MLP 的輸入。那么,這里面,每一層的特征 xk 到底是如何輸入層 x0 發生交互的?

以 cross net 的第 k 層和原始輸入 x0 為例,我們看下如何提取得到新的特征,圖4.28是其特征交叉的過程。其中 xk 的維度為 Hk*D,表示的是第 k 層有 Hk 個 vector,而原始輸入 x0的維度為 m*D,表示輸入層有 m 個 D 維的 vector。

這里 Wk,h 表示的是第 k 層的第 h 個 vector 的權重,是模型需要學習的參數。整個公式的理解是整個 xDeepFM 理解的關鍵,我們具體看下發生了什么:
❶ 首先,從前一層的輸入 Xk-1 ( 一共有 Hk-1 個 vector ),取出任意一個 vector;從原始輸入 x0 ( 一共有 m 個 vector ),取出任意一個 vector,兩者兩兩做哈達碼積,可以得到 Hk-1*m 個 vector。
❷ 這 Hk-1*m 個交叉得到的 vector,每個 vector 維度都是 D,我們通過一個 W 矩陣做乘積進行加權求和,相當於是個帶權重的 pooling,最終得到加權求和后的 vector Xh,k,表示的是第 h 層第 k 個 vector。這里的 W 矩陣就是模型要學習的。
❸ 為什么說是壓縮,壓縮體現在哪里?還是用圖說話,這里我們看下原始論文給出的圖示,有助於整個過程的理解。

在圖4.29左圖中,我們把 D 看成是原始二維平面的寬度,我們沿着 D 的方向挨個進行計算。先看 xk 向量中 D 的第一維,有 Hk 個數;x0 向量中 D 的第一維,有 m 個數,讓 Hk 和 m 兩兩計算,就可以得到 Hk*m 的一個平面。一直沿着 D 方向,2,3,4,…D,我們就可以得到一個 Hk*m*D 的三維矩陣,暫且叫做 zk+1,注意這個過程只是簡單的矩陣計算,沒有參數需要學習。
在4.29右邊的圖中,我們開始提取前面 zk+1 的信息,還是以 D 方向的第一維為例,一個 m*Hk 的平面,乘以一個大小一樣的 m*Hk 矩陣 W,然后加權求和,就可以得到這個平面最后壓縮的一個實數。整個平面被 "壓縮" 成為了一個一維的數。一直沿着 D 方向求解每個平面壓縮后的數,就可以得到一個 D 維的向量。
這就是整個 "壓縮" 的取名原因。整個過程非常類似 CNN 的 filter 卷積思想,W 就是卷積核,得到的每個特征映射的值就是 feature map。
4.2.9 FGCNN 模型 ( Feature Generate by CNN )
CNN 模型在圖像,語音,NLP 領域都是非常重要的特征提取器,原因是對圖像、視頻、語言來說,存在着很強的 local connection 信息。而在推薦系統中由於特征輸入都是稀疏無序的,很難直接利用 CNN 作為特征提取。華為諾亞方舟在2019年的 WWW 會議上提出了一種巧妙的利用 CNN 提取特征的方法 FGCNN,整個模型框架如圖4.30所示。

其中利用 CNN 提取新特征是整個 paper 的核心模塊,具體框架如圖4.31所示,可以分為4個層,卷積層、池化層、重組層以及特征輸出層。下面分別介紹這4個不同的層,分別看下各自的輸入,輸出以及具體的網絡結構。

❶ 卷積層 Convolution Layer

原始 one-hot 特征經過 embedding 后,進入的是卷積層。卷積的思想和 TextCNN 類似,通過一個高度為 hp,寬度為 d 的卷積核進行卷積;其中高度 hp 代表的是每次卷積連接的鄰域的個數,以圖4.32為例,hp=2,表示二維特征的交叉,從上到下卷積,表示的是 N&A,A&H,H&G 卷積,分別表示名字和年齡、年齡和身高、身高和性別的交叉;而寬度方向 d 需要和 embedding 的維度 d 保持一致,這和 TextCNN 的思想是一致的,只在高度方向上進行卷積。
① Convolutional layer 輸入
特征 one-hot 之后經過 embedding 層后的輸出作為卷積層的輸入,輸入維度為 nf*k。nf為 field 個數,k 為隱層維度
② Convolutional layer 輸出
經過二維平面大小不變,增加第三維卷積核大小,第一層卷積層的輸出大小為 nf*k*mc1,C1為第1個卷積層的卷積個數,以 l=1 為例,C:,:,i 表示的是第一層卷積層第 i 個 feature-map,每個 feature map 的大小為 nf*k,Cp,q,i 表示的是第一層第 i 個 feature map 的坐標為 (p,q) 的元素:
❷ 池化層 Pooling Layer
特征經過第一層卷積層之后,從 nf*k 變成了 nf*k*mc1,維度反而擴了 mc1 倍,這和預期的特征降維不一致,解決辦法和 CNN 里常用的套路一樣,通過 pooling 做降維。該 paper 使用的是 max pooling,在原先卷積高度 hp 上選擇最大值作為卷積后的特征表達,表達如下所示:
① pooling 層輸入
卷積層的輸出作為池化層的輸出,以第一層為例,pooling 層的輸入維度為 nf*k*mc1。
② pooling 層輸出
卷積層輸出的時候在高度方向上選擇 max,只有高度方向維度發生變化,卷積輸出后維度為nf/hp * k *mc1,hp 為卷積核高度,相當於沿着 field 的方向壓縮了 hp 倍。
❸ 重組層 Recombination Layer
經過特征卷積層和特征池化層后,可以通過特征重組 Recombination layer 生成新的特征組了。還是以第一層的 Recombination layer 為例,mc1 為原始 feature map 的個數,mr1為新生成的特征 feature map 的個數:
其中 S1 為池化層的輸出,而 WR1 和 BR1 為該層待學習的參數。
① Recombination 層輸入
卷積層的輸出 S1 為該層的輸入,通過 WR1 的矩陣進行特征的 recombination
② Recombination 層輸出
新生成的特征維度為 nf/hp*k*mr1
❹ 特征輸出層 Concatenation Layer
第一層 Convolution layer -> pooling layer -> recombination layer 后,生成第一層的新特征 R1,連同第2,3,4,…,nc 層的新特征 R2,R3,R4,…,Rnc 層一起 concat 起來,組成新的特征 R=(R1,R2,…,Rnc)。之后 R 可以和原始特征一樣做各種可能的交叉,例如和原始特征做二階交叉等,再一起輸入到模型層。

① concatenation 層輸入
重組層 Recombination layer 輸出的新特征 R1,R2,R3, Rnc,作為 concatenation layer 的輸入
② concatenation 層輸出
原有的特征E和新特征 R 連在一起作為 concatenation 的特征輸出,作為 NN 層的輸入
4.2.10 FiBiNet 模型 ( Feature Importance & Bilinear feature Interaction )
新浪微博張俊林團隊2019年提出的結合特征重要性 ( Fi ) 和雙線性特征交叉 ( Bi ) 的方法,Feature Importance & Bilinear feature Interaction,簡稱 FiBiNet,其實是兩個相對獨立的模塊,兩個模塊可以獨立套用在其他的網絡結構上,整體框架如圖4.34所示。

❶ SENet:特征重要性提取層
該層作用主要是提取特征重要性。可以分為三層 Squeeze, Extract, Reweight,從原始的特征 e1,e2,e3,…,ef 提取到新的特征 v1,v2,v3,…, vf,其中 f 為特征 field 的個數,整體框架如下:

① Squeeze 層
特征壓縮層,對每個特征組中的 embedding 向量進行匯總統計量的 pooling 操作,每個 field 的維度為 k,從中 squeeze 壓縮提取最重要的1維。典型的方法一般有 Max pooling 或者 average pooling,在更原始的 SENet 里用的是 max pooling,但是在該 paper 里作者提到 average pooling 表現更好,個人其實也傾向於認為 average pooling 直覺上更加 make sense,只用 max pooling 從 d 維特征提取一維信息損失實在太大。當然具體表現也需要結合具體數據實驗才知道:
經過 S 層,第 i 維特征從 ei 變成了 zi,從維度為 d 的向量變成了一個維度為1的實數。整個輸入從 f*d 的矩陣變為 f 維的向量。
② Excitation 層
特征激活層,向量先做壓縮 r ( r 為壓縮的倍數 ),然后擴展恢復,類似 auto-encoder 思路:
W1 和 W2 為兩個轉換矩陣,先經過壓縮然后恢復,最終得到的 A 還是一個維度為 f 的向量。
③ Reweight 層
經過前面 Squeeze 和 Excitation 得到的 A 相當於是原始特征 E 的權重向量,乘以原始的特征 E 后,可以得到最終加權提取的 V 向量,可以認為是原始特征的重要性表達:
總結來說:SENet,用兩層全連接階層提取每個 field 的特征重要性:
S 層:壓縮提取 field 中最重要的特征 ( max 或者 average 特征 )
E 層:對 s 層提取的特征信息進行 auto-encoder 式的信息提取
R 層:SE 提取到的每個 field 特征重要性,進行加權提取
❷ Bilinear 特征交叉層
從 SENet 提取到的新特征 V,還有原始特征 E,可以組合成為新的特征一起輸入到模型的 MLP 網絡中。但是如前面提到的 MLP 對特征交叉很弱的學習能力一樣,本文一樣提出了一些做特征交叉的方法。我們回顧下在前面提到的兩個向量的交叉,無非是向量內積,得到一個實數;或者是向量的哈達馬積分如圖4.36的 a 所示,得到的還是一個向量,如圖中4.36的 b 方法所示。這兩種方法都是直接計算的,沒有新的參數學習。在該 paper 中,作者提出了另一種引入參數的方法,也就是 Bilinear 雙線性特征交叉的方法,如圖中4.36的 c 方法所示:

假設特征 field 的個數是 f 個,每個 field 的隱層維度為 d。那么,如何確定需要學習的參數 W 呢?根據 W 的共享情況,可以分為以下三種類型:
① field type
W 在所有特征之間是完全共享的,也就是說在任意兩個需要交叉的特征 i 和特征 j 之間 ( vi,vj ) 共享一個 W,W 的參數維度為 k*k:
② field each
對於每個特征 i 來說,都需要學習唯一的一個 Wi 矩陣,該 Wi 只和左乘的特征 vi 有關,和右乘特征 vj 無關,一共有 f 個 field,所以 W 的參數維度為 f*k*k:
③ field-interaction type
對於任意兩個需要交叉的特征 vi 和 vj,都需要學習一個唯一的矩陣 Wij,Wij不僅和左乘的特征有關,也和右乘的特征有關,也就是說,vi 和 vj 的交叉,以及 vj 和 vi 的特征交叉,兩者用到的 Wij 和 Wji 是不一樣的,所以 W 的參數維度為 f*f*k*k:
當然,以上三種不同的特征類型沒有絕對的誰好誰壞,不存在越復雜效果越好的情況,對於簡單的數據集,可能 w 共享是最好的,具體還是需要實驗才能知道。在文章里用了 criteio 和 avazu 數據集進行實驗時,使用不同的模型,三種交叉方法也是各有千秋。
總結本文的兩個核心工作,第一個工作,SENet,目的是從一個 f*d 的特征向量中,提取得到表達了特征重要性的同樣維度為 f*d 的新特征向量,該網絡結構可以和其他模型結構套用。第二個工作 bi-net,從輸入的 embedding 特征中提出了幾種不同的特征交叉的方法,也可以給其他網絡模型做特征交叉提供一些不同的手段。
4.2.11 AutoInt 模型 ( Auto Feature Interaction )
目前為止講到的模型中,使用到 attention 的是 AFM 模型,而在 AutoInt 文章中,作者除了 attention 機制,還使用了在 transform 中很火的 multi-head 和 self-attention 的概念,整體框架如圖4.37所示。
文章中的輸入沒有什么特別需要講的,就是常規的 one-hot 稀疏的特征經過 embedding 層得到 dense value。這里 embedding 層倒是值得一提,一般在大多數推薦系統里,對於 one-hot 做 embedding 是因為需要轉成 dense 的特征,而原本就是 dense 的特征原本就是定長 dense 特征,比較少見到做 embedding 的,而在該文章中將連續值特征和 one-hot 一樣去做 embedding 處理。不過這一塊不影響 auto-int 部分的理解。

該 paper 里提到的 attention 機制,才是文章里的核心亮點,在介紹文章的核心機制之前,先在這里簡單介紹下 NLP 里的 attention 里涉及到的3個重要的概念,query,keys,value。想象一下,你在搜索引擎輸入了一個搜索詞,這個搜索詞就是 query,假設你搜了 "應用寶",然后存在一堆候選結果就叫做 keys,例如 "下載 app 的地方","手機應用市場","app store","手機系統" 等等,對這里的每個 key,都去計算和候選詞 query 的相似度,例如 "手機應用市場" 對 "應用寶" 的權重,顯然是要高於 "手機系統",最終的表達,其實就是每個 keys 的 value 的加權求和,也就是說,誰和 query 的相似度高,在結果中 value 的權重占比就更高。經典的 QKV 結果表達如下:
回到本文的 attention 機制中,假設特征 field 個數為 M,對於第 m 個 field,在第 h 個 head 空間下的特征表達如下:

❶ 特征 m 在空間 h 下的新映射
每個特征 m,在空間 h 下都有3組向量表示,分表代表特征 m 在空間 h 下的 query 向量 Equery、key 向量 Ekey、value 向量 Evalue:
這里需要學習的參數為 WQuery,Wkey,Wvalue,每個矩陣的維度為 d'*d,從而將特征從 d 維映射為 d'。W 在所有特征中都是共享的,並不是每組特征都需要學習3個 W。
❷ 特征 k 對特征 m 相似度表達,使用向量的點積:
❸ 特征 k 對特征 m 的歸一化注意力 ( M 個特征做歸一化 )
❹ 特征 m 在空間 h 下的加權新特征:
❺ 特征 m 的全空間表達:
有 H 個 head,特征 m 最終的表達為 H 個新特征的 concat,特征長度為 H*d'。
❻ 特征 m 最終表達:resnet 保留原始信息
作者為了保留更多信息,除了第5步得到的 multi-head 的新特征,也將原始的特征 em 引入到進來,其實就是一種 resnet 思路,所以在這里需要有個額外的參數 WRes 需要學習,需要將原始的特征維度 d 映射為和 em 一致的 H*d',所以 WRes 的參數維度為 d'*H*d。
4.2.12 DIN 模型 ( Deep Interest Network )
4.2.11提到的 AutoInt 里特征的 attention 機制有個特點,就是在計算特征的重要性的時候,所有特征都有機會成為 query, 將其他特征作為 keys 去計算和當前 query 的重要性從而得到權重的。而提到推薦系統里的 attention 機制,不得不提的就是阿里的這篇 deep interest network 了,簡稱 DIN。工業界的做法不像學術界,很多模型網絡結構優化並不一味的追求模型的復雜和網絡結構有多 fancy,每一步背后都有大量的業務思考后沉淀下來的。
阿里這篇 DIN 也如此。在了解 DIN 之前,我們先看下 DIN 前身的模型,GwEN 模型 ( Group-wise Embedding Network,阿里內部稱呼 )。

前面講到的很多模型,輸入層都是大規模稀疏特征,經過 embedding 層后輸入到 MLP 網絡中。這里的一個假設就是,每個 field 都是 one-hot 的,如果不是 one-hot 而是 multi-hot,那么就用 pooling 的方式,如 sum pooling,average pooling,max pooling 等,這樣才能保證每個特征 field embedding 都是定長的。DIN 的前身 GwEN 模型也一樣,對於 multi-hot 特征的典型代表,用戶歷史行為,比如用戶在電商系統里購買過的商品,往往都是幾十幾百甚至幾千的,需要經過 sum pooling 和其他特征 concat 一起。
而這種數學假設其實往往都是和實際的發生場景不一致的。例如一個女性用戶過去在淘寶買過白色針織衫、連衣裙、帽子、高跟鞋、單肩包、洗漱用品等,當前候選商品是一件黑色外套,白色針織衫對黑色外套的權重影響應該更大,洗漱用品權重應該更小。如果將這些歷史行為過的商品做 sum pooling,那么無論對於當前推薦什么商品,用戶都是一個固定向量的表達,信息損失很大,顯然優化空間很大。

針對 sum/average pooling 的缺點,DIN 提出了一種 local activation 的思想,基於一種基本的假設:用戶歷史不同的行為,對當前不同的商品權重是不一樣的。例如用戶過去有 a,b,c 三個行為,如果當前商品是 d,那么 a,b,c 的權重可能是 0.8,0.2,0.2;如果是商品 e,那么 a,b,c 的權重可能變成了0.4,0.8,0.1。也就是說,不同的 query,激發用戶歷史行為不同的 keys 的權重是不一樣的。
① query:用戶歷史行為,長度為 H,e1,e2,…,eH 表示用戶歷史行為的向量表示。
② keys:當前候選廣告 ( 店鋪、類目、或者其他 item 實體 )
關於 DIN 里的 activation weight 還有個可以稍微講幾句的點。兩個向量的相似度,在前面講各種 CF 的方法的時候基本是用的點積或者 cosine,2017年 DIN 掛在 arXiv 的版本中是使用了兩個向量本身以及 concat 后進入 MLP 得到其相似度,2018發在 KDD 的版本中多了 outer product,以及向量相減,相當於引入和保留了更多特征的信息。另外作者在文章提到為了保持不同歷史行為對當前 attention 的影響,權重也不做歸一化,這個和原始的 attention 也有所不同。

作為工業界的落地實踐,阿里在 DIN 上很 "克制" 的只用了最能表達用戶個性化需求的特征--用戶行為 keys,而 query 也是當前候選的商品廣告,與線上提升 ctr 的指標更為吻合,對工業界的推薦系統來說借鑒意義還是很大的。當然這不是說之前的其他 attention 機制模型沒用,不同的數據集,不同的落地場景需求不一致,也給工業界更多的嘗試提供了很多思路的借鑒。
4.2.13 DIEN 模型 ( Deep Interest Evolution Network )
在前面講到的模型中,所使用的特征都是時間無序的,DIN 也如此,用戶的行為特征之間並沒有先后順序,強調的是用戶興趣的多樣性。但是實際用戶的興趣應該是在不斷進化的,用戶越近期的行為,對於預測后續的行為越重要,而用戶越早期的行為,對於預測后續行為的權重影響應該小一點。因此,為了捕獲用戶行為興趣隨時間如何發展變化,在din提出一年后,阿里又進一步提出了 DIEN,引入了時間序列概念,深度興趣進化網絡。
DIEN 文章里提到,在以往的推薦模型中存在的序列模型中,主要利用 RNN 來捕獲用戶行為序列也就是用戶歷史行為數據中的依賴關系,比對用戶行為序列直接做 pooling 要好。但是以往這些模型有兩個缺點,第一是直接將 RNN 的隱層作為興趣表達,而一般來隱層的表達和真正表達的商品 embedding 一般不是等價的,並不能直接反映用戶的興趣;另外一點,RNN 將用戶歷史行為的每個行為看成等權的一般來說也不合理。整個 DIEN 的整體框架,如圖4.43所示。

❶ 輸入層
和 DIN 的輸入一樣。按照類型可以分為4大類
① 用戶畫像特征:如年齡、性別、職業等
② context 特征:如網絡環境、時間、IP 地址、手機型號等,與 user 以及 item 無關
③ target ad 特征:當前候選廣告
④ 用戶行為特征:DIEN 里最重要的能體現用戶個性化的特征,對於每個用戶來說,假設有 T 個歷史行為,按照發生的先后順序依次輸入模型
❷ embedding 層
將 one-hot 特征轉為 dense 的 embedding 向量
❸ 興趣抽取層 ( interest extractor layer )
該層的主要作用和 DIN 一樣,為了從 embedding 層中抽取出用戶的興趣。該 paper 認為用戶當前對候選廣告是否感興趣,是和歷史行為 behavior 有關的,所以引入了 GRU 的序列模型來擬合抽取用戶興趣。
經過 GRU 結構后,商品的 embedding 表達從 e(t) 變成了 h(t),表示第 t 個行為序列的 embedding 表達。

除了 GRU 結構提取隱層的向量,DIEN 還引入了有監督學習,強行讓原始的行為向量 e(t) 和 h(t) 產生交互。如圖4.44所示,引入了輔助 loss(auxiliary loss),當前時刻 h(t) 作為輸入,下一刻的輸入 e(t+1) 認為是正樣本 (click),負樣本進行負采樣 ( 不等於當前時刻 );然后讓 h(t) 與正負樣本分別做向量內積,輔助 loss 定義為:
最終的 loss 表達為:
其中 a 為超參數,代表的是輔助 loss 對整體 loss 的貢獻。有了這個輔助 loss,t 時刻提取的隱層向量 h(t) 可以比原始的 h(t) 更有助於表達用戶興趣,也可以加速網絡的訓練過程。
❹ 興趣進化層 ( interest evolving layer )
理論上來說,h(t) 如果替代 e(t) 作為商品的最終表達其實也是可以的,把用戶序列 t=1,2,3,…,T 當成用戶的 T 個行為過的商品,然后和當前的候選廣告套用 DIN 的 attention 網絡去計算每個行為和當前候選廣告的權重,最終得到用戶的歷史行為加權表達也是完全 ok 的。但作者認為用戶的行為模式是會發展的,因此引入了第二層 GRU 網絡來學習每個歷史行為序列和當前候選廣告之間的權重。
對於每個歷史行為 ht,當前候選廣告 ea,通過 softmax 求出兩者的權重。注意這里不是直接向量點擊,而是引入了矩陣 W,可以認為是簡單的一層全連接網絡。
如何使用這里學習的 attention 作為興趣進化層的輸入,作者又提出了三種計算方法:
❶ AIGRU ( attention input with GRU )
最基礎的版本,興趣進化層第 t 個行為序列的 input 就是隱層 ht 的加權:
作者嘗試后發現效果並不好,原因是如果是輸入0,也會參與到隱層 ht 的計算和更新,相當於給用戶興趣的提取引入了噪音,不相關的用戶行為會干擾模型的學習。
❷ AGRU ( attention base GRU )
這里作者使用了 attention 權重 at 來取代原始 GRU 中的更新門,表達如下:
❸ AUGRU ( GRU with attentional update gate )
這里作者依然對原始 GRU 做了改造,公式如下:

其中,ut' 引入了 at 來取代原有的更新向量 ut,表達的是當前 ut' 對結果的影響。如果當前權重 at 較大,ut' 也較大,當前時刻 ht' 保留更多,上一個時刻 ht-1 影響也會少一點。從而整個 AUGRU 結果可以更平滑的學習用戶興趣。
4.3 Feature-based 模型總結
Feature-based 的模型主要在於學習特征之間的交叉,是近年來整個推薦系統在排序層面的主流研究方向,按照不同維度,我個人把4.2列到的模型分為4個類型,同一個模型可能會分到不同的類型里。這里的分類僅僅代表個人的觀點,歡迎探討。
4.3.1 基於框架的模型
① wide&deep 模型
深度加寬度的模型范式,本身並不是一個具體的模型,wide 和 deep 部分可以用任意結構框架,wide 的 baseline 是 LR 模型;deep 的 baseline 是 MLP 模型。
② deep crossing 模型
和 wide&deep 最大的不同是 deep 部分引用了 res-net,但個人覺得在目前主流的模型里用的較少。雖然 res-net 理論上可以使用更深的模型提升效果,但在目前工業界大規模稀疏的推薦系統里,還沒見到太多往 res-net 方向取得較大進展的工作。
4.3.2 基於 FM 特征二階組合的模型
學習特征交叉的主要手段是將特征的 embedding 做交叉,特點是特征的交叉是二維的,無非是二階交叉如何做。
① deepFM 模型
特征交叉使用的 element-wise product,最終得到的是一個實數。
② NFM 模型
交叉使用的 bi-interaction,可以理解成是所有 vector 的 sum pooling,最終得到的是一個向量。
③ AFM 模型
交叉使用的帶權重的 bi-interaction,可以理解成所有 vector 的 weight sum pooling,然后使用一個簡單的線性模型得到最終的值。
④ PNN 模型
PNN 模型放到基於 FM 的模型是因為本質上和 FM 一樣,都是在學習特征的二階組合。和 deepFM 不同的是,以 IPNN 為例,PNN 的所有特征兩兩 product 交叉學習得到的值 conat 后得到現實的 product vector 后進入 MLP 模型;而 deepFM 是直接將 FM 模型的 vector 輸入到 MLP 模型中。
4.3.3 基於 attention 的模型
① AutoInt 模型
使用 multi head 機制,每個特征用 self-attention 得到其他特征和自己的 attention 權重。每個特征的所有 head 得到的特征 concat 起來作為新特征。
② DIN 模型
只使用戶歷史行為特征作為 keys,keys 之前沒有時間序列;得到 keys 和當前候選 item 的 attention。
③ DIEN 模型
只使用用戶歷史行為特征作為 keys,keys 之間具有先后順序,引入兩層 GRU 表達,第一層 GRU 學習用戶歷史行為序列的信息,每個時刻 t 輸出的隱層 embedding 為該時刻 item 的 embedding 表達;第二層 GRU 用來學習歷史每個時刻 t 的歷史行為和當前候選廣告的權重。
④ FiBiNet 模型
把 FiBiNet 模型放在 attention 模型主要是它的 SENet 部分,通過 squeeze -> Excitation -> reweight 提取原始 embedding 的特征重要性,得到新特征,這里其實也體現了每個特征 embedding 的 attention。
4.3.4 基於特征高階組合的模型
① DCN 模型
使用多層的 cross 來做特征交叉,對於 cross 網絡中每一層的輸入都由前一層以及第一層的輸入組成,從這個維度上代表的是高階特征的組合。比如說,第四層網絡的輸出包含了第三層和第二層的輸入;而第三層又包含了第二層和第一層,因此這里就是個3階的特征交叉。特征的交叉使用的是 bit-wise,也就是每個特征內部 embedding 的 element 也會兩兩交叉。
② xDeepFM 模型
使用 CIN 模型來提取特征交叉。和 DCN 模型一樣的是,這里也使用了多層的 cross,每一層的輸入也是由第一層和上一層的輸入組成,不同的是,xdeepFM 模型的特征交叉是 vector wise 層級的,而 DCN 模型是 bit-wise 的。
③ FGCNN 模型
通過使用 CNN 模塊,先是卷積層提取局部特征的連接,如高度等於3能夠提取相鄰3個 field 的特征的關系,因此具有高階特征的交叉能力。然后又通過池化層提取 global 信息,確保特征的輸入順序對結果的影響能夠被捕捉到。
05
▬
總結
推薦和搜索的本質其實都是匹配,前者匹配用戶和物品;后者匹配 query 和 doc。具體到匹配方法,分為傳統模型和深度模型兩大類,第二章講的是傳統模型,第三章和第四章講的是深度模型。
對於傳統模型,主要分為基於協同過濾的模型和基於特征的模型,兩者最大的不同在於是否使用了 side information。基於協同過濾的模型,如 CF,MF,FISM,SVD++,只用到了用戶-物品的交互信息,如 userid, itemid, 以及用戶交互過的 item 集合本身來表達。而基於特征的模型以 FM 為例,主要特點是除了用戶-物品的交互之外,還引入了更多的 side information。FM 模型是很多其他模型的特例,如 MF,SVD++,FISM 等。
對於深度模型,主要分為基於 representation learning 的深度模型以及 match function learning 的深度模型。基於 representation learning 的深度模型學習的是用戶和物品的表示,然后通過匹配函數來計算,這里重點在與 representation learning 階段,可以通過 CNN 網絡,auto-encoder,知識圖譜等模型結構來學習。
對於 match function learning 的深度模型,也分為基於協同過濾的模型和基於特征的模型。前者和傳統 CF 模型一樣,不同在於后面接入了 MLP 模型來增強非線性表達,目的是為了使得 user 和 item 的 vector 盡可能接近,這種方法就是基於 NCF 的模型;也有通過引入 relation vector 來是的 user vector 加上 relation vector 后接近 item vector,這種方法是基於翻譯的模型。
對於 match function learning 另一種模型框架,是基於特征層面的,有基於 fm 模型的,基於 attention 的,以及高階特征捕捉的,另外還有基於時間序列的文章中只提到了 DIEN 模型。
整理本篇綜述主要基於原始 slides,對其中的 paper 部分粗讀部分精讀,收獲頗多,在全文用如何做好推薦 match 的思路,將各種方法盡可能串到一起,主要體現背后一致的思想指導。多有錯漏,歡迎批評指出。
06 ▬參考資料
1. https://www.comp.nus.edu.sg/~xiangnan/sigir18-deep.pdf
2. Xiangnan He, Hanwang Zhang, Min-Yen Kan, and Tat-Seng Chua. Fast matrix factorization for online recommendation with implicit feedback. In SIGIR 2016.
3. Yehuda Koren, and Robert Bell. Advances in collaborative filtering. Recommender systems handbook. Springer, Boston, MA, 2015. 77-118.
4. Santosh Kabbur, Xia Ning, and George Karypis. Fism: factored item similarity models for top-n recommender systems. In KDD 2013.
5. Yehuda Koren. Factorization meets the neighborhood: a multifaceted collaborative filtering model. In KDD 2018.
6. Steffen Rendle. Factorization machines. In ICDM 2010.
7. Hong-Jian Xue, Xin-Yu Dai, Jianbing Zhang, Shujian Huang, and Jiajun Chen. Deep matrix factorization models for recommender systems. IJCAI 2017.
8. Suvash Sedhain, Aditya Krishna Menon, Scott Sanner, and Lexing Xie. Autorec: Autoencoders meet collaborative filtering. In WWW 2015.
9. Yao Wu, Christopher DuBois, Alice X. Zheng, and Martin Ester. Collaborative denoising auto- encoders for top-n recommender systems. In WSDM 2016.
10. Sheng Li, Jaya Kawale, and Yun Fu. Deep collaborative filtering via marginalized denoising auto- encoder. In CIKM 2015.
11. Xue Geng, Hanwang Zhang, Jingwen Bian, and Tat-Seng Chua. Learning image and user features for recommendation in social networks. In ICCV 2015.
12. Jingyuan Chen, Hanwang Zhang, Xiangnan He, Liqiang Nie, Wei Liu, and Tat-Seng Chua. Attentive collaborative filtering: Multimedia recommendation with item-and component-level attention. In SIGIR 2017.
13. Fuzheng, Zhang, Nicholas Jing Yuan, Defu Lian, Xing Xie, and Wei-Ying Ma. Collaborative knowledge base embedding for recommender systems. In KDD 2016.
14. Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, and Tat-Seng Chua. Neural collaborative filtering. In WWW 2017.
15. Ting Bai, Ji-Rong Wen, Jun Zhang, and Wayne Xin Zhao. A Neural Collaborative Filtering Model with Interaction-based Neighborhood. CIKM 2017.
16. Xiangnan He, Xiaoyu Du, Xiang Wang, Feng Tian, Jinhui Tang, and Tat-Seng Chua. Out Product-based Neural Collaborative Filtering. In IJCAI 2018.
17. Tay, Yi, Shuai Zhang, Luu Anh Tuan, and Siu Cheung Hui. "Self-Attentive Neural Collaborative Filtering." arXiv preprint arXiv:1806.06446 (2018).
18. Ruining He, Wang-Cheng Kang, and Julian McAuley. Translation-based Recommendation. In Recsys 2017.
19. Yi Tay, Luu Anh Tuan, and Siu Cheung Hui. Latent Relational Metric Learning via Memory-based Attention for Collaborative Ranking. In WWW 2018.
20. Heng-Tze Cheng, Levent Koc, Jeremiah Harmsen, Tal Shaked, Tushar Chandra, Hrishi Aradhye, Glen Anderson et al. Wide & deep learning for recommender systems. In DLRS 2016.
21. Ying Shan, T. Ryan Hoens, Jian Jiao, Haijing Wang, Dong Yu, and J. C. Mao. Deep crossing: Web-scale modeling without manually crafted combinatorial features. In KDD 2016.
22. Xiangnan He, and Tat-Seng Chua. Neural factorization machines for sparse predictive analytics. In SIGIR 2017.
23. Jun Xiao, Hao Ye, Xiangnan He, Hanwang Zhang, Fei Wu, and Tat-Seng Chua. Attentional factorization machines: Learning the weight of feature interactions via attention networks. IJCAI 2017.
24. He. Deepfm: A factorization-machine based neural network for CTR prediction. IJCAI 2017.
25. Ruoxi Wang, Gang Fu, Bin Fu, Mingliang Wang. Deep & Cross Network for Ad Click Predictions. ADKDD2017.
26. Jianxun Lian, Xiaohuan Zhou, Fuzheng Zhang, Zhongxia Chen, Xing Xie, Guangzhong Sun. xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems. KDD2018.
27. Bin Liu, Ruiming Tang, Yingzhi Chen, Jinkai Yu,Huifeng Guo, Yuzhou Zhang. Feature Generation by Convolutional Neural Network for Click-Through Rate Prediction. WWW2019.
28. Tongwen Huang, Zhiqi Zhang, Julin Zhang. FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction. Recsys2019.
29. Weiping Song, Chence Shi, Zhiping Xiao, Zhijian Duan, Yewen Xu, Ming Zhang,Jian Tang. AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks. CIKM2019.
30. Guorui Zhou, Xiaoqiang Zhu, Chengru Song, Ying Fan, Han Zhu, Xiao Ma,Yanghui Yan,Junqi Jin,Han Li, Kun Gai. Deep Interest Network for Click-Through Rate Prediction. KDD2018.
31. Guorui Zhou, Na Mou, Ying Fan, Qi Pi,Weijie Bian, Chang Zhou, Xiaoqiang Zhu and Kungai. Deep Interest Evolution Network for Click-Through Rate Prediction. AAAI2019.
原文鏈接:
https://zhuanlan.zhihu.com/p/101136699
and Tat-Seng Chua. Neural factorization machines for sparse predictive analytics. In SIGIR 2017.
23. Jun Xiao, Hao Ye, Xiangnan He, Hanwang Zhang, Fei Wu, and Tat-Seng Chua. Attentional factorization machines: Learning the weight of feature interactions via attention networks. IJCAI 2017.
24. He. Deepfm: A factorization-machine based neural network for CTR prediction. IJCAI 2017.
25. Ruoxi Wang, Gang Fu, Bin Fu, Mingliang Wang. Deep & Cross Network for Ad Click Predictions. ADKDD2017.
26. Jianxun Lian, Xiaohuan Zhou, Fuzheng Zhang, Zhongxia Chen, Xing Xie, Guangzhong Sun. xDeepFM: Combining Explicit and Implicit Feature Interactions for Recommender Systems. KDD2018.
27. Bin Liu, Ruiming Tang, Yingzhi Chen, Jinkai Yu,Huifeng Guo, Yuzhou Zhang. Feature Generation by Convolutional Neural Network for Click-Through Rate Prediction. WWW2019.
28. Tongwen Huang, Zhiqi Zhang, Julin Zhang. FiBiNET: Combining Feature Importance and Bilinear feature Interaction for Click-Through Rate Prediction. Recsys2019.
29. Weiping Song, Chence Shi, Zhiping Xiao, Zhijian Duan, Yewen Xu, Ming Zhang,Jian Tang. AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks. CIKM2019.
30. Guorui Zhou, Xiaoqiang Zhu, Chengru Song, Ying Fan, Han Zhu, Xiao Ma,Yanghui Yan,Junqi Jin,Han Li, Kun Gai. Deep Interest Network for Click-Through Rate Prediction. KDD2018.
31. Guorui Zhou, Na Mou, Ying Fan, Qi Pi,Weijie Bian, Chang Zhou, Xiaoqiang Zhu and Kungai. Deep Interest Evolution Network for Click-Through Rate Prediction. AAAI2019.
原文鏈接:
https://zhuanlan.zhihu.com/p/101136699