是新朋友嗎?記得先點藍字關注我哦~
作者介紹
知乎@王多魚
京東的一名推薦算法攻城獅。
主要負責商品推薦的召回和排序模型的優化工作。
前言
前文介紹了一種普適性比較強的DeepFM排序模型,易用且部署簡單。本文結合用戶的行為序列數據剖析一下由阿里媽媽算法團隊開發的深度興趣網絡模型(下稱DIN模型)。
以往的深度點擊預估模型都是對特徵進行Embedding映射,拼接組合後輸入到多層感知器網絡(下稱MLP)。在這種情況下,無論候選商品是什麼,用戶的特徵都被壓縮為固定長度的Embedding向量,該方式難以捕獲用戶的多樣性的興趣而無法有效地從豐富的歷史行為中表達label的信息。
為此阿里提出了一個新穎的模型:DIN模型通過引入注意力機制(下稱Attention)捕捉用戶的興趣點,用來表示用戶對某個商品的歷史行為的興趣,用戶的Embedding向量隨著候選商品的變化而變化,有效的提升了模型的表達能力。此外,文中還提出mini-batch aware正則方法和自適應激活函數來輔助模型進行訓練。
一、Attention機制介紹
1.1 Attention機制簡介
在正式介紹模型之前,先介紹一下Attention機制。Attention機制是模仿人類注意力而提出的一種解決問題的辦法,簡單地說就是從大量信息中快速篩選出高價值信息,即一種將內部經驗和外部感覺對齊從而增加部分區域的觀察精細度的機制。
例如人的視覺在處理一張圖片時,會通過快速掃描全局圖像,獲得需要重點關注的目標區域,也就是注意力焦點。然後對這一區域投入更多的注意力資源,以獲得更多所需要關注的目標的細節信息,並抑制其它無用信息。圖1中對Attention機制進行了圖示,其中亮白色區域表示更關注的區域。
圖1 注意力機制直觀展示圖
Attention機制的具體計算過程見圖2。對目前大多數Attention方法進行抽象,可以將其歸納為兩個過程,三個階段:
第一個過程是根據query和key計算權重係數;
(1)第一個階段根據query和key計算兩者的相似性或者相關性;
(2)第二個階段對第一階段的原始分值進行歸一化處理;
第二個過程根據權重係數對value進行加權求和。
圖2 三階段計算Attention過程
1.2 特徵數據簡介
工業CTR預測任務中的特徵數據主要是由畫像特徵、統計特徵、行為序列特徵、上下文特徵等組成,DIN模型中使用的特徵列表如下:
用戶端的特徵主要包含畫像特徵和多組行為序列特徵;商品端主要包含畫像特徵;上下文特徵包含時間、網絡、地點、終端等特徵。
處理類別特徵主要採用Embedding方式,連續特徵採用分桶、歸一化、或log等方式進行轉化。
1.3 基準模型簡介
基準模型就是比較常見的多層神經網絡,即:
(1)先對每個特徵進行Embedding操作,得到一系列Embedding向量;
(2)將不同Group的特徵拼接組合起來之後得到一個固定長度的用戶Embedding向量,和候選商品Embedding向量;
(3)然後將(2)中的向量輸入後續的全連接網絡,最後輸出pCTR值。具體網絡結構見圖3。
圖3 基準模型結構圖
從基準模型的結構圖中可以看出,無論候選商品是什麼,用戶的Embedding值均不會發生改變。用戶的歷史行為中的商品Embedding數據對用戶的Embedding的貢獻力度是一樣的,然而這與實際情況並不符合,因為每個用戶的興趣是多樣性的。
舉個例子:某用戶購買過「外套」、「手機」、「洗面奶」、「小說」等,當用戶計劃購買「耳機」的時候,歷史行為中的「手機」自然比其他商品對本次決策的貢獻更大一些;當計劃購買褲子的時候,歷史行為中的「外套」自然比其他商品對本次決策的貢獻更大一些。
在實際情況下,基準模型的效果存在待改進的空間,由此阿里提出了基於用戶興趣的深層網絡。圖4展示了一位女生的歷史行為數據,與候選商品之間的相關度權重情況,進度條越大,表示歷史的商品與候選的商品越相似。
圖4 歷史行為數據與候選商品之間的相關度權重情況
二、DIN模型詳解
2.1 模型結構
DIN模型在基準模型的基礎上,增加了注意力機制,就是模型在對候選商品預測的時候,對用戶不同行為的注意力是不一樣的。「相關」的行為歷史看重一些,「不相關」的歷史甚至可以忽略。圖5展示了DIN模型的網絡結構圖。
DIN的模型結構中增加了 Activation Unit模塊,該模塊主要提取當前候選商品與歷史行為中的商品的權重值。輸入包括兩個部分,一個是原始的用戶行為Embedding向量、商品Embedding向量;另外一個是兩者Embedding向量經過外積計算後得到的向量,和兩者Embedding向量差值得到的向量。文章指出這種方式有利於保留更豐富的信息。
圖5 DIN模型結構圖
輸入層:
(1)用戶的畫像特徵,例如性別、年齡、學歷等;
(2)用戶的行為序列數據,例如點擊商品的行為序列、購買商品的行為序列;
(3)候選商品的畫像特徵,例如品類、品牌等;
(4)上下文特徵,例如設備終端、時間、地點等;
Embedding層:
(1)將輸入層的特徵映射為固定長度的向量;
Concat層:
(1)將Embedding向量組合為一個向量;
Activation Unit層:
(1)計算候選商品與歷史行為商品之間的權重。該模塊可以認為是一個獨立的MLP;
Sum Pooling層:
(1)將用戶歷史行為的商品Embedding進行Sum操作;
Concat和Flatten層:
(1)將以上的Embedding合併,並展平;
全連接網絡層:
(1)經過兩層全連接,並使用自定義Dice激活函數激活神經元;
輸出層:
(1)對全連接網絡層的結果進行Softmax操作,返回最大值的索引作為預測結果;
2.2 模型細節
2.2.1 講解一下Activation Unit模塊
與基準模型相比,DIN模型引入了一種新穎設計的Attention單元,並保持其他結構相同。Attention單元應用於用戶特徵組中,通過「加權」方式自適應地計算用戶在候選商品中用戶向量的興趣表示值。Activation Unit的網絡結構如圖6所示。
圖6 Activation Unit的網絡結構圖
(1)輸入層:
user 產生行為(例如點擊、或購買)的 item embedding,作為key;
候選 item embedding,作為query;
(2)Out Product層:
計算矩陣之間的 element-wise 乘法;
(3)Concat層:
將 query, key, query-key, query*key(Out Product層,element-wise 乘法) 的結果進行拼接;
(4)Dense層:
全連接層,並以PRelu或Dice作為激活函數;
(5)Linear層(輸出層):
全連接層,輸出單元為1,即得到(query, key)相應的權重值;
Activation Unit的表達式如公式(1)所示。
(1)
其中:
{e1,e2,……,eH}是用戶U歷史行為商品的embedding,長度為H;
uA是候選商品的embedding;
a() 是前向網絡,矩陣以out product進行計算,輸出結果為權重值。
2.2.2 講解一下小批量aware正則化
mini-batch aware regularization主要解決的就是在大規模稀疏場景下,採用SGD對引入L2正則的loss進行更新時計算開銷過大的問題。該方法只對每一個mini-batch中不為0的參數進行梯度更新,經過一系列推到之後得到近似的梯度計算公式如公式(2)所示,對於第m個小批量,特徵j的梯度權重是:
(2)
2.2.3 自適應激活函數Dice
文章認為採用PRelu激活函數的校正點固定不變,在輸入分布發生變化時是不適用的。文章對該激活函數進行了改進,Dice激活函數會根據每層輸入數據的分布來自適應調整校正點的位置,具體形式如下:
(3)
其中:E[s]和Var[s]是每個小批量輸入數據的均值和方差,ε是一個常數,設定為10-8。
三、DIN模型實踐
下面使用一個簡單的數據集,實踐一下DIN排序模型。該模型的實現主要參考:python軟體的DeepCtr模塊。
3.1數據處理
(1.1)加載數據
samples.txt 數據可以從百度網盤下載:
提取碼: gap1
本示例中包含:7個特徵。
●user端特徵有5個,分別為["user_id", "gender", "age", "hist_movie_id", "hist_len"];
user_id 為 用戶ID特徵,離散特徵,從1-3表示;gender 為 用戶性別特徵,離散特徵,從1-2表示; age 為 用戶年齡特徵,離散特徵,從1-3表示; hist_movie_id 為 用戶觀看的movie序列特徵,根據觀看的時間倒排,即最新觀看的movieID排在前面; hist_len 為 用戶觀看的movie序列長度特徵,連續特徵;
●movie端特徵有2個,為 ["movie_id", "movie_type_id"];
movie_id 為 movieID特徵,離散特徵,從1-208表示;movie_type_id 為 movieID 類型特徵,離散特徵,從1-9表示;
(1.2)分割數據為訓練集和驗證集
(1.3)轉換數據存儲格式
3.2構建模型
(2.1)統計每個離散特徵的詞頻量,構造特徵參數
(2.2)構建模型及訓練模型
由於數據量較少等原因,本次實驗觸發了早停機制。
(2.3)列印看一下模型的結構
(2.4)繪製損失函數圖
一個數據人的自留地是一個助力數據人成長的大家庭,幫助對數據感興趣的夥伴們明確學習方向、精準提升技能。