原文來自微信公眾號
協同過濾
-
定義
協同過濾 就是協同大家的反饋、評價和意見一起對海量的信息進行過濾,從中篩選出目標用戶可能感興趣的信息的推薦過程。
-
商品推薦的例子:

-
電商網站的商品庫里一共有四件商品
-
用戶X訪問該電商網站,電商網站的推薦系統需要決定是否推薦電視機給用戶X
-
將用戶商品圖轉化成矩陣的形式,被稱作“共現矩陣”,好評記為1,差評記為0,沒有的可以取評分的均值
-
推薦問題轉換成預測矩陣中問號元素的值的問題。
-
從共現矩陣中得知,用戶B和用戶C跟用戶X的行向量近似,被選為Top n(n取2)的相似用戶
-
相似用戶對“電視機”的評價是負面的,因此預測用戶X對“電視機”的評價也是負面的
-
UserCF
基於用戶相似度進行推薦,被稱為基於用戶的協同過濾,如上所示
優點
符合人們直覺上的“興趣相似的朋友喜歡的物品,我也喜歡”的思想
缺點
互聯網應用場景下,用戶數遠遠大於物品數,因此UserCF的用戶相似矩陣存儲開銷非常大
用戶的歷史數據向量非常稀疏,對於只有幾次購買或者點擊行為用戶而言,找到相似的用戶准確率非常低
-
ItemCF
基於物品相似度進行推薦的協同過濾算法。
具體步驟:
-
構建用戶-物品m*n維的共現矩陣
-
計算任意列向量間的相似性,構建n*n維物品相似度矩陣
-
獲取用戶歷史行為數據中正反饋物品列表
-
利用物品相似度矩陣,找出與用戶正反饋物品相似的Top k個物品,組成相似物品集合
-
對相似物品集合,根據相似度分值排序生成最終排序列表
應用場景
-
UserCF具備更強的社交性,可以通過“朋友”的動態快速更新自己的推薦列表,適用於新聞推薦場景
-
ItemCF適用於興趣變化較為穩定的應用,如電商場景
特點
-
直觀、解釋性強
-
頭部效應較明顯、泛化能力弱
-
無法有效地引入用戶特征、物品特征和上下文特征
相似度計算
-
余弦相似度

缺點:對絕對值大小不敏感,在某些情況下會出問題。如:用戶A對兩部電影評分分別是1分和2分,用戶B對兩部電影評分分別是4分和5分,通過余弦相似度計算,兩個用戶相似度為0.98。
-
皮爾遜相關系數
通過使用用戶平均分對各獨立評分進行修正,減小了用戶評分偏置影響


-
改進的皮爾遜相關系數
引入物品平均分的方式,減少物品評分偏置對結果的影響


矩陣分解算法
-
原理
將用戶和物品映射到同一個表示空間上,得到用戶隱向量和物品隱向量,通過用戶隱向量與物品隱向量的相似度給用戶推薦。
矩陣分解算法將協同過濾生成的m*n維共現矩陣R分解成m*k維用戶矩陣U和k*n維物品矩陣V,其中m是用戶數,n是物品數,k是隱向量維數。
用戶u對物品i的預估評分如下,其中pu是用戶矩陣U中對應行向量,qi是物品矩陣V中的列向量

-
求解過程
特征分解
只能作用於方陣,因此不能用於推薦。
特征分解是將方陣A分解成如下形式,其中Q是方陣A特征向量組成的矩陣,𝚺是特征值組成的對角矩陣。

特征向量v和特征值𝛌求解如下:

奇異值分解(SVD)
假設M是m*n的矩陣,矩陣的SVD如下,其中U是m*m的正交矩陣,V是n*n的正交矩陣,𝚺是m*n的對角陣。

取對角陣𝚺中較大的k個元素,矩陣M被分解成如下形式。

局限性:
-
要求原始共現矩陣是稠密,因此必須對缺失值填充
-
傳統奇異值分解計算復雜度高 ,達到了O(mn^2) 計算方式
梯度下降(GD):
確定目標
-
讓原始評分rui與用戶向量和物品向量之積的差盡量小

-
對目標函數求偏導
-
更新參數
-
迭代次數超過上限或者損失低於閾值結束訓練
打分偏差優化
問題:不同用戶打分體系不同,不同物品的衡量標准也不同。
為了消除用戶和物品打分偏差,在矩陣分解時加入用戶和物品的偏差向量,𝛍是全局偏差常數,bi是物品偏差系數,可使用物品i收到的所有評分,bu是用戶偏差系數,可使用用戶u給出的所有評分的均值。

特點
-
泛化性強:一定程度解決數據稀疏問題
-
空間復雜度低:不需要存儲用或物品相似性矩陣,由n^2降低到(m+n)k
-
擴展性和靈活性:與Embedding類似,便於與其他特征組合拼接
邏輯回歸
-
原理
利用用戶、物品和上下文等多種特征,生成較為“全面”的推薦結果,邏輯回歸將推薦問題轉化成一個點擊率預估問題。
-
推薦流程
-
將用戶、物品和上下文等特征轉化成數值型特征向量
-
確定優化目標,訓練模型
-
服務階段,輸入特征向量,輸出點擊概率
-
根據點擊概率對候選物品進行排序,得到推薦列表
-
優勢
-
數學含義支撐,假設因變量y服從伯努利分布
-
可解釋性強:各個特征的加權和,在施加sigmoid
-
工程化的需要:易於並行、模型簡單、訓練開銷小等
-
局限性
-
表達能力不強,無法進行特征交叉、特征篩選
POLY2
邏輯回歸只對單一特征做簡單加權,不具備特征交叉生成高維組合特征的能力,改造邏輯回歸模型,使其具有多維度特征交叉是重要的。、
-
原理
暴力組合特征,每種特征組合帶有一個權重

Wh(j1, j2)是特征組合的權重
-
特點
優點
通過暴力組合特征,一定程度解決特征組合問題
仍是線性模型,訓練方法與邏輯回歸無區別
局限性
特征交叉后會使原本非常稀疏的特征向量更加稀疏,導致大部分交叉特征權重缺乏有效的數據進行訓練,無法收斂
權重參數數量由n變成n^2
FM
-
原理
FM為每個特征學習一個隱權重向量,在特征交叉時,使用兩個特征隱向量的內積作為交叉特征的權重

-
推導





推導參考:
https://www.cnblogs.com/zhangchaoyang/articles/7897085.html
-
特點
權重參數數量減少到了nk(k為隱向量維度,n>>k)
更好解決數據稀疏問題
FFM
-
原理
相比於FM模型,FFM引入特征域概念,在做特征交叉時,每個特征選擇與對方域對應的隱向量做內積運行,得到交叉特征權重。
每個特征對應的不是唯一一個隱向量,而是一組隱向量

在FFM模型訓練過程中,需要學習n個特征在f個域上的k維隱向量,參數數量共n*k*f個,計算復雜度為kn^2
-
舉例


-
特點
相比於FM,引入特征域,為模型引入更多有價值信息,使模型表達能力更強
FFM的計算復雜度上升到kn^2,遠大於FM的kn
參考:
https://github.com/ycjuan/libffm
https://www.cnblogs.com/zhangchaoyang/articles/8157893.html
https://tech.meituan.com/2016/03/03/deep-understanding-of-ffm-principles-and-practices.html
GBDT+LR
如何有效地處理高維特征組合和篩選問題?
-
組合特征結構

-
影響
-
推進特征工程模型化,即特征工程完全交由一個獨立模型完成
LS-PLM
LS-PLM,又被成為MLR(Mixed Logistic Regression),首先對樣本進行“分片”,在每個“分片”內部構建邏輯回歸模型,將每個樣本的各“分片”概率與邏輯回歸的得分進行加權平均,得到最終預估值

-
具體例子

-
傳統LR模型不能解決非線性問題,MLR可以克服該問題

-
特點
端到端的非線性學習能力
總結

深度學習推薦系統特點
-
豐富特征交叉方式
-
組合模型
-
引入注意力機制
-
融合序列模型
-
結合強化學習
AutoRec
-
原理
利用協同過濾中的共現矩陣,完成物品向量或者用戶向量的自編碼,再利用自編碼的結果得到用戶對物品的預估評分,進而進行推薦排序。
-
模型結構圖:



-
item-based AutoRec勝出user-based AutoRec,這可能是由於每個物品評分的平均數量高於每個用戶的評分數,用戶評分數量的高方差導致基於用戶的方法的預測不可靠
-
激活函數如何選擇?g(.) sigmoid, f(.) identity
-
隱層數量?k=500
-
特點
-
使用一個單隱層泛化用戶或物品評分,使模型具有一定泛化和表達能力
-
模型簡單,泛化能力不足
-
結構上與word2vec一致
代碼
https://github.com/xiaopp123/recommendation_practice/tree/master/AutoRec
Deep Crossing
-
需要解決問題 如何解決稀疏特征向量稠密化問題
如何解決特征自動交叉組合問題
如何在輸出層達成問題設定的優化目標
-
模型結構圖

embedding層將稀疏類別型特征轉換成稠密向量,數值特征(如Feauture #2)直接進入stacking層
stacking層把不同embedding特征和數值型特征拼接一起,形成新的包含全部特征的特征向量
多層殘差網絡對特征向量各個維度進行充分交叉組合
殘差網絡解決的問題<br> 通過輸入向量短路減少過擬合現象的發生<br> 解決梯度消失現象,收斂速度加快
Scoring 使用邏輯回歸或者softmax
-
特征表示
文本特征如query:轉換為字符級的 3-gram 的形式,得到一個 49292 維的向量
類別特征:one-hot
CampaignID:按點擊次數排序,取top1000,剩余的歸為一類,形成1001個類別,然后one-hot
-
embedding
使用偏置項,max操作相當於relu

-
評價
采用“Embedding+多層神經網絡”的結構,沒有人工特征工程的參與
沒有引用注意力機制、序列模型等特殊結構
NeuralCF
-
解決問題
矩陣分解后用戶隱向量和物品隱向量點積過於簡單,NCF通過”多層神經網絡+輸出層“的結構替代了矩陣分解中簡單內積操作

-
特點
利用不同互操作層進行特征的交叉組合,並且可以靈活的進行不同互操作層的拼接
基於協同過濾思想,沒有引入其他類型的特征
代碼
https://github.com/xiaopp123/recommendation_practice/tree/master/NeuralCF
PNN
-
基本原理
乘積層代替Deep Crossing中的Stacking層,不同特征的embedding向量不是簡單拼接,而是用product操作進行兩兩交互
輸入有更多形式、不同來源的特征
多種特征交叉方式:內積,外積
-
模型結構

Wide&Deep
-
基本原理
單層的wide部分與多層的Deep部分組成混合模型
wide部分讓模型具有較強的“記憶能力”,Deep部分讓模型具有“泛化能力”
記憶能力: 利用歷史數據中物品或特征的“共現頻率”的能力,如LR,CF等
泛化能力:挖掘未出現的特征組合
-
模型結構

Deep部分(左): 全量的特征向量,離散特征經Embedding層輸入全連接層
Wide部分(右): 組合“已安裝應用”和“曝光應用”兩類特征
Deep&cross
-
原理
使用cross網絡替代原來wide部分,目的是通過多層交叉(Cross layer)增加特征之間的交互力度;Deep部分則與Wide&Deep保持一致。
-
結構
模型結構如下:

FM與深度學習融合
-
FNN 使用FM的隱向量完成embedding層初始化
-
DeepFM
結合FM的推薦能力和DNN的特征學習能力,綜合利用了低階交叉特征和高階交叉特征
模型結構

DeepFM 模型由兩種組件構成:FM 組件、deep 組件,它們共享輸入。這種共享輸入使得DeepFM 可以同時從原始特征中學習低階特征交互和高階特征交互,完全不需要執行特征工程,最終模型聯合了 FM 組件和 deep 組件的輸出

FM Component

FM部分用於學習一階特征和二階交叉特征
假設輸入包含 sparse 特征和 dense 特征,將sparse特征變成one-hot形式,dense保持其原始特征,通過向量拼接形成輸入向量

FM的輸出

標量wj對一階特征重要性進行建模,即 FM 組件左側的 + 部分
Vj用於對它的二階特征重要性進行建模,即 FM 組件右側的 x 部分
Deep Component

Deep部分是一個全連接的前饋神經網絡,用於學習高階特征交互
與FM共享輸入embedding層,embedding層的輸出如下,其中ei是field i,m是field number。

DNN的輸出

參考
https://www.ijcai.org/Proceedings/2017/0239.pdf
https://github.com/ChenglongChen/tensorflow-DeepFM https://github.com/Johnson0722/CTR_Prediction/blob/master/Deep_FM/DeepFM.py
-
NFM NFM模型用一個表達能力更強的函數替代原FM中二階隱向量內積部分

Embedding層:這是一個全連接層,將稀疏輸入映射到一個稠密向量,vi代表第i個特征的Embedding向量,在embedding后,得到全部向量

Bi-Interaction層: 該層是一個池化操作,將一系列的Embedding向量轉換成一個向量, ⦿表示element wise相乘,Bi-interaction層的輸出是一個k維向量

注意力機制在推薦模型中應用
-
AFM AFM是NFM的延續,在NFM中,不同域的特征經過交叉池化層的交叉,將各交叉向量進行“加和“。 AFM引入注意力機制是通過在特征交叉層和最終的輸出層之間加入注意力網絡實現的。 模型結構

使用MLP獲取注意力得分

AFM最后輸出

DIN
背景
在電商領域,每個用戶都有豐富的歷史行為數據,歷史行為數據指的是用戶曾經點擊過商品集合,如何對這些歷史行為數據建模得到用戶特征?
基准模型
普通DNN通常是在 embeddin層之后添加一個池化層,sum pooling 或者 avg pooling,將用戶的一組歷史行為 embedding 轉化為固定尺寸的embedding 向量,這導致部分信息丟失,無法充分利用用戶豐富的歷史行為數據
基准模型embedding&MLP由兩個部分組成:
embedding 部分:將稀疏 id 特征映射到 embedding 向量,對於長度可變序列,對向量序列聚合(sum pooling)
MLP 部分:將 embedding 向量饋入 MLP 來預測輸出

-
DIN模型

引入注意力機制,通過候選商品和歷史行為數據計算權重,該權重代表了“注意力”的強弱。

Dice激活函數
依賴於數據
參考
https://arxiv.org/pdf/1706.06978.pdf
https://github.com/zhougr1993/DeepInterestNetwork/tree/master/din
https://zhuanlan.zhihu.com/p/39439947
DIEN--序列模型與推薦系統的結合
-
背景
DIN 在內的大多數興趣模型都將用戶行為直接看做興趣,而用戶的潛在興趣往往很難通過行為來完全表示
考慮到外部環境和用戶自身認知的變化,用戶興趣會隨着時間動態變化,大多數模型都未考慮這一點
-
模型結構

Interest Extractor層
從用戶行為序列中提取背后的一系列興趣狀態。
使用GRU來對用戶行為之間的依賴進行建模,GRU的輸入是用戶按時間排序的行為序列,也就是行為對應的商品。
實際上隱狀態ht無法無法有效的表達用戶興趣,目標商品的點擊是由最終興趣觸發的,因此損失函數中使用的 label 僅僅監督了最后一個興趣狀態hT,歷史興趣狀態沒有得到合適的監督
輔助損失:利用t+1步的行為監督第t步的興趣狀態ht,正樣本就是真實的下一個item,負樣本就是從item set中隨機抽取的item

Interest Evolving層
用戶的各種興趣隨着時間的推移不斷演化
Interest Evolving層對與目標商品相關的興趣演化軌跡進行建模
DIEN 結合了注意力機制的局部激活能力以及GRU 的序列學習能力來建模興趣演化過程
注意力

GRU attention

GRU with attentional input (AIGRU)

Attention based GRU(AGRU)

GRU with attentional update gate (AUGRU)

參考
https://arxiv.org/pdf/1809.03672v1.pdf
https://github.com/mouna99/dien/blob/master/script/model.py
強化學習與推薦系統的結合
-
DRN
強化學習相比傳統深度模型的優勢在於強化學習模型能夠進行“在線學習”,不斷利用新學到的知識更新自己,及時調整和反饋。

模型學習過程
-
初始化推薦系統(agent)
-
推薦系統基於當前已收集的數據(state)進行新聞排序(action),並推送到網站或app(Environment)中
-
用戶收到推薦列表,點擊或忽略(反饋)某推薦結果
-
推薦系統收到反饋,更新當前狀態或通過模型訓練更新模型
-
重復第2步
總結

