天天看點

DIN模型Deep Interest Network for Click-Through Rate Prediction

Deep Interest Network for Click-Through Rate Prediction

摘要

在工業界,點選率預估是一項基本的任務,例如線上廣告。最近基于Embedding和MLP的深度學習模型特别的流行。将大量稀疏特征轉化為低維的Embedding向量,以分組的轉化為固定的長度,然後拼接在一起喂給全連接配接層,學習特征的非線性關系。**通過這種方式,使用者的特征被壓縮成固定長度的向量表達,但是,沒有考慮廣告的候選集是什麼。**由于使用者行為豐富多變,使用固定長度的向量,不能很好地表征使用者興趣。在本論文中,我們提出如下創新DIN模型:**為了解決這個問題,我們通過設計局部激活單元,根據給定廣告,從使用者的曆史行為中學習使用者的興趣點。**這種表征根據根據廣告的不同而發生變化,很大程度提升模型的能力。除此之外,我們還發明了兩個技巧:小樣本正則化和資料自适應激活函數,能夠訓練1億多個參數工業級深度網絡。在兩個公開資料集和2億樣本阿裡巴巴資料上證明該方法的有效性。該模型的效果優于現有的方法。DIN模型成功地應用于阿裡巴巴的廣告系統,服務于主要的流量。

1 背景介紹

在CPC廣告系統中, 廣告商會根據eCPM(千次展示收入)進行排序,它是根據競價和CTR預估計算得到,而CTR需要根據系統進行計算。是以,CTR預估在廣告系統中扮演重要角色,直接影響到最終的廣告收入。在商業和研究領域,CTR預估得到廣泛的關注。

受深度學習在視覺和NLP領域成功的啟發,深度學習開始應用于CTR預估的任務。将大量稀疏特征轉化為低維的Embedding向量,以分組的轉化為固定的長度,然後拼接在一起喂給全連接配接層,學習特征的非線性關系。相對于邏輯回歸,這些深度模型減少特征工程的工作量,很大程度地提升模型的能力。Embedding&MLP在CTR預估的任務已經變得非常流行。

用有限次元的Embedding&MLP表征多樣的使用者興趣存在困難。使用者通路電商網站會對多種商品感興趣,這也就是說,使用者的興趣是多變的。對CTR進行預估的時候,使用使用者的曆史行為資料。Embedding&MLP将使用者行為資料轉化為固定的長度向量,限制對多變興趣表征能力。 為了表征多樣的使用者興趣,增加向量的次元,但是這樣存在過拟合的風險,而且增加計算量,這是不能容忍的。

換句話說,沒有必要将所有的使用者興趣壓縮到一個相同次元的向量中。隻有部分興趣影響目前的點選行為。舉例來說,一個婦女點選一個護目眼鏡,主要是由于她前段時間購買遊泳衣和她上周購買一雙鞋子沒有太大的關系。我們提出的DIN模型會根據候選的廣告和使用者的曆史行為的相關性,動态地表征使用者興趣。DIN模型采用局部激活單元,根據使用者曆史行為,搜尋與目前候選廣告相關的購買行為,根據相關性設定權重,進行sum pooling操作,以此表征使用者興趣。 相關性越高,權重越大,通過這種方式,在有限次元的向量情況下,表征使用者多變的興趣,提升模型的表達能力。

在工業級的應用中,使用大量的稀疏特征訓練模型存在巨大挑戰。舉例來說:SGD基于mini-batch訓練模型,L2正則化基于mini-batch全部參數(有時參數多達10億級别)使得計算變得不可接受。我們提出mini-batch aware 正則化,隻更新特征值非零的參數。除此之外,我們設計自适應激活函數, 使得PReLU通用化,根據輸入資料的分布進行動态調整。

這篇論文做出以下幾點貢獻:

  • 設計局部激活單元(local activation unit) 能夠根據特定的廣告自适應學習使用者興趣,解決固定長度向量表征多樣使用者興趣的不足的問題。DIN模型更好地捕捉使用者興趣,提升了模型的表達能力。
  • 提出訓練工業級神經網絡兩個創新技術:1)mini-batch aware regularization 解決了由于參數過多帶來計算複雜性問題,同時避免過拟合情況。2)在考慮資料分布的情況下,設計資料自适應激活函數(data adaptive activation function),使得模型獲得良好的表現。
  • 我們在兩個公開資料集和阿裡巴巴資料進行實驗,證明了DIN模型和訓練技巧的有效性。我們代碼開源,在世界上最大廣告平台-阿裡巴巴得到應用,為商業界做出巨大的貢獻。

我們這篇論文主要聚焦在電商廣告展示的CTR預估模型。這個模型同樣也适用于其他相似的場景,電商中的個性化推薦和社交領域的feed流排序。

論文分為以下幾個部分:第2節介紹相關工作,第3節介紹電商廣告系統使用者行為資料

應用情況。第4、5節詳細介紹DIN模型的設計和兩個訓練技巧。第6節介紹實驗的應用。第7節說明下總體的結論。

2 相關工作

CTR預估模型的結構從淺層到深層進行演化,樣本量和特征次元也越來越大。為了提供模型的表征能力,在網絡結構設計進行了相關研究。

NNLM通過Embedding替代onehot方式,學習預測下一個單詞,避免單詞特征次元過高的問題,為CTR預估模型學習稀疏特征情況帶來啟發。

LS-PLM和FM模型為了捕捉特征之間的交叉情況,首次将稀疏特征做embedding處理,然後輸入到特定設計的轉換函數。

Deep Crossing、Wide&Deep Learning、YouTube Recommendation CTR模型對LS-PLM和FM進行擴充,利用複雜的MLP替換轉換函數,提升模型的能力。PNN為了捕捉更高階交叉特征在embedding layer之後引入product layer。DeepFM加入因子分解機作為Wide&Deep的Wide部分,不需要進行特征工程。這些模型都有相似的網絡結構,Embedding層學習稀疏的類别特征,MLP層學習特征的交叉組合,減少了特征工程的工作量。我們基礎對比模型也采用相似的網絡結構。**使用者興趣是通過搜尋和點選商品的id來表現的。這些模型使用求和或者求平均pooling方式将序列商品id轉化為固定的長度,會損失很多資訊。**這就需要通過DIN模型根據候選廣告id自适應學習特征表示, 提升模型的表征能力。

Attention機制來自深度翻譯模型(NMT)領域。為了得到期望的下一個單詞,NMT對所有譯文進行求和權重,計算與其最相關的詞作為目标詞。DeepIntent在搜尋廣告領域采用類似NMT的attention機制,他們采用RNN進行模組化,學習全局隐藏層向量,對使用者檢索的關鍵詞采用注意力機制。這也說明了注意力機制能夠捕捉使用者的在廣告和搜尋中能夠關注使用者的意圖。DIN模型設計局部激活單元對使用者的行為進行相關性計算,在給定廣告的情況下,采用權重求和的方式自适應的學習使用者的興趣。使用者的表征興趣随着廣告的不同發生變化,這是和DeepIntent不同的地方,DeepIntent沒有采用廣告和使用者興趣的互動情況。

我們部署的DIN模型代碼開源并且在世界上最大的廣告系統的得到成功的應用,在多達上億參數的網絡模型進行訓練優化,對訓練的技巧進行創新。

3 背景

在電商網站,例如阿裡巴巴,廣告就是商品。如果我們不做特别聲明,我們将廣告稱作商品。Figure 1描述了購物流程。

DIN模型Deep Interest Network for Click-Through Rate Prediction

圖1描述的廣告展示系統主要包括兩個階段:1)使用類似協同過濾的方法,比對産生候選集的階段。2)根據預估的CTR進行排序的階段。每天會有大量的使用者通路網站,産生大量的使用者行為,這些對比對和排序是非常重要的。這些使用者曆史行為表征使用者多樣的興趣。例如,年輕媽媽最近浏覽過大衣,T恤、耳環、皮包或者寶寶衣服等等。這些使用者行為表明了使用者的興趣。當她再次通路網站時展示合适廣告給她,例如一個新款的包包。顯然,這個廣告展示和這麼年輕媽媽的興趣是互相比對的。總之,使用者的興趣是豐富多樣的,可以在給定特定廣告下比對使用者興趣。接下來,我們将讨論如何利用這些特征建構CTR預估模型。

4 深度興趣模型(Deep Interest Network)

不同于搜尋,廣告展示系統無法擷取使用者明确的意圖。是以,我們隻能從曆史行為中提取使用者的興趣,建立CTR預估模型。由于使用者和廣告是廣告系統中基本元素,使用這些特征進行深度挖掘是非常重要的。

4.1 特征表示

在CTR預估模型使用的特征通常是多種類别的,例如【星期五,性别:女, 通路的類别ids:{包、書籍}, 廣告的類别id: 書籍】,通常會将稀疏的類别特征轉化為對其進行高維二進制表示。數學上編碼第$i $個特征 t i ∈ R K i t_i \in R^{K_i} ti​∈RKi​. 其中 K i K_i Ki​是特征的次元。 K i K_i Ki​個唯一編碼次元(例如:性别編碼 K i = 2 K_i=2 Ki​=2)。 t i [ j ] t_i[j] ti​[j] 表明 t i t_i ti​的第 j j j個元素, t i [ j ] ∈ { 0 , 1 } t_i[j] \in \{0,1\} ti​[j]∈{0,1}。 ∑ j = 1 K i = k \sum_{j=1}^{K_i}=k ∑j=1Ki​​=k。如果向量 t i t_i ti​計算的 k = 1 k=1 k=1表明是one-hot編碼, k > 1 k>1 k>1表明是multi-hot編碼。一個樣本可以表示為 x = [ t 1 T , t 2 T , ⋯   , t M T ] T x=[t_1^T,t_2^T,\cdots,t_M^T]^T x=[t1T​,t2T​,⋯,tMT​]T,其中,M是特征的個數。 ∑ i = 1 M K i = K \sum_{i=1}^{M}K_i=K ∑i=1M​Ki​=K, K K K是所有特征的次元。前面提到的4個特征可以通過以下方式表示

DIN模型Deep Interest Network for Click-Through Rate Prediction

全部的特征集合如下表1所示。它是由4種類别組成,multi-hot編碼的使用者行為和豐富的使用者興趣。注意,在我們的設定中,沒有使用交叉特征。我們可以通過深度網絡捕捉特征之間的交叉關系。

DIN模型Deep Interest Network for Click-Through Rate Prediction

4.2 基礎模型(Embedding&MLP)

如 Fig.2 左邊的圖所示。它是由以下幾個部分組成

Embedding layer .将高維的二值變量轉化為低次元稠密的向量。對于 t i t_i ti​個特征,用向量 W i = [ w 1 i , … , w j i , … , w K i i ] ∈ R D × K i \mathrm{W}^{i}=\left[w_{1}^{i}, \ldots, w_{j}^{i}, \ldots, w_{K_{i}}^{i}\right] \in \mathbb{R}^{D \times K_{i}} Wi=[w1i​,…,wji​,…,wKi​i​]∈RD×Ki​表示第 i i i特征的字典,其中, w j i ∈ R D w_j^i\in R^D wji​∈RD表示embedding向量的次元為 D D D。Embedding操作如下Fig.2所示。

  • 如果 t i t_i ti​的 第 j j j個元素 t i [ j ] = 1 t_i[j]=1 ti​[j]=1是one-hot向量, t i t_i ti​的embedded表示是單獨的向量。 e i = w j i e_i=w_j^i ei​=wji​。
  • 如果 t i t_i ti​是multi-hot向量, t i [ j ] = 1 t_i[j]=1 ti​[j]=1 對 j ∈ { i 1 , i 2 , ⋯ , i k } j\in \{i_1,i_2,\cdots, i_k\} j∈{i1​,i2​,⋯,ik​}, t i t_i ti​的embedded表示是一個list: { e i 1 , e i 2 , … e i k } = { w i 1 i , w i 2 i , … w i k i } \left\{\boldsymbol{e}_{i_{1}}, \boldsymbol{e}_{i_{2}}, \ldots \boldsymbol{e}_{i_{k}}\right\}=\left\{w_{i_{1}}^{i}, w_{i_{2}}^{i}, \ldots w_{i_{k}}^{i}\right\} {ei1​​,ei2​​,…eik​​}={wi1​i​,wi2​i​,…wik​i​}。

Pooling layer and Concat layer 不同使用者的行為序列長度是不同的,導緻他們的特征 t i t_i ti​表示embedding向量是變化的,需要将其轉化為固定的長度。

e i = pooling ( e i 1 , e i 2 , ⋯   , e i k ) (1) e_i=\text{pooling}(e_{i1}, e_{i2}, \cdots, e_{ik})\tag{1} ei​=pooling(ei1​,ei2​,⋯,eik​)(1)

DIN模型Deep Interest Network for Click-Through Rate Prediction

兩個常用處理embedding list方式包括sum pooling和average pooling。

對于每個稀疏特征,将其映射為固定長度的多重向量表示,将他們拼接在一起,構成該樣本的全部表示。

MLP 将稠密的向量拼接在一起,利用全連接配接網絡自動學習特征組合,可以更好地提取特征資訊。

Loss 基礎模型的目标函數是負log-likelihood函數,定義如下:

L = − 1 N ∑ ( x , y ) ∈ S ( y log ⁡ p ( x ) + ( 1 − y ) log ⁡ ( 1 − p ( x ) ) ) (2) L=-\frac{1}{N} \sum_{(x, y) \in \mathcal{S}}(y \log p(x)+(1-y) \log (1-p(x)))\tag{2} L=−N1​(x,y)∈S∑​(ylogp(x)+(1−y)log(1−p(x)))(2)

其中,訓練的資料集 S S S, 資料集的大小為 N N N, x x x是特征輸入, y y y是标簽, p ( x ) p(x) p(x)是softmax後的輸出機率, 表征預測的機率。

4.3 DIN模型的結構

如Table 1所示, 在電商應用中,利用使用者行為特征表征使用者興趣是非常重要的。

def DIN(dnn_feature_columns, history_feature_list, dnn_use_bn=False,
        dnn_hidden_units=(200, 80), dnn_activation='relu', att_hidden_size=(80, 40), att_activation="dice",
        att_weight_normalization=False, l2_reg_dnn=0, l2_reg_embedding=1e-6, dnn_dropout=0, seed=1024,
        task='binary'):
    dnn_input_emb_list = embedding_lookup(embedding_dict, features, sparse_feature_columns,
                                          mask_feat_list=history_feature_list, to_list=True)
    dense_value_list = get_dense_input(features, dense_feature_columns)

    sequence_embed_dict = varlen_embedding_lookup(embedding_dict, features, sparse_varlen_feature_columns)
    sequence_embed_list = get_varlen_pooling_list(sequence_embed_dict, features, sparse_varlen_feature_columns,
                                                  to_list=True)

    dnn_input_emb_list += sequence_embed_list

    keys_emb = concat_func(keys_emb_list, mask=True)
    deep_input_emb = concat_func(dnn_input_emb_list)
    query_emb = concat_func(query_emb_list, mask=True)
    hist = AttentionSequencePoolingLayer(att_hidden_size, att_activation,
                                         weight_normalization=att_weight_normalization, supports_masking=True)([
        query_emb, keys_emb])

    deep_input_emb = tf.keras.layers.Concatenate()([NoMask()(deep_input_emb), hist])
    deep_input_emb = tf.keras.layers.Flatten()(deep_input_emb)
    dnn_input = combined_dnn_input([deep_input_emb], dense_value_list)
    output = DNN(dnn_hidden_units, dnn_activation, l2_reg_dnn, dnn_dropout, dnn_use_bn, seed=seed)(dnn_input)
    final_logit = tf.keras.layers.Dense(1, use_bias=False,
                                        kernel_initializer=tf.keras.initializers.glorot_normal(seed))(output)
    output = PredictionLayer(task)(final_logit)

    model = tf.keras.models.Model(inputs=inputs_list, outputs=output)
    return model
           

在基礎模型中,如Eq.(1)所示,使用固定的長度向量通過pooling的方式表征使用者興趣。給定使用者,他們的表征向量是相同的,與候選的廣告無關。用固定長度的向量表征使用者興趣存在瓶頸問題,需要增加向量的次元,但是,增加向量的次元會導緻學習參數任務非常重。而且在有限的樣本下,會導緻過拟合的風險,增加計算和存儲的複雜度,不利于工業級的應用。

如何用有限的特征次元表征豐富的使用者興趣?對使用者的興趣進行局部激活給了我們設計DIN模型的靈感。以上面第3節提到的那個例子,年輕媽媽發現一個非常可愛的手提包,點選了她。讓我們剖析背後的原因發現,她最近浏覽其他手提包。換句話說,使用者的過去行為會對目前點選産生貢獻。DIN模型根據候選的廣告計算和過去曆史行為的相關性表征使用者興趣,替代之前使用固定的向量表征全部使用者興趣的方式。這種表征随着廣告的變化而變化的。

如Fig.2 的右半部分所示,描述DIN模型的網絡結構。相比于基礎模型,DIN模型引進局部激活單元,其他結構都相同。這種局部激活單元表征使用者興趣,它是通過給定廣告A的情況下,計算權重sum pooling自适應計算 v U v_U vU​,如下Eq.(3)所示

v U ( A ) = f ( v A , e 1 , e 2 , … , e H ) = ∑ j = 1 H a ( e j , v A ) e j = ∑ j = 1 H w j e j (3) \boldsymbol{v}_{U}(A)=f\left(\boldsymbol{v}_{A}, \boldsymbol{e}_{1}, \boldsymbol{e}_{2}, \ldots, \boldsymbol{e}_{H}\right)=\sum_{j=1}^{H} a\left(\boldsymbol{e}_{j}, \boldsymbol{v}_{A}\right) \boldsymbol{e}_{j}=\sum_{j=1}^{H} \boldsymbol{w}_{j} \boldsymbol{e}_{j}\tag{3} vU​(A)=f(vA​,e1​,e2​,…,eH​)=j=1∑H​a(ej​,vA​)ej​=j=1∑H​wj​ej​(3)

其中, { e 1 , e 2 , ⋯   , e H } \{e_1,e_2,\cdots,e_H\} {e1​,e2​,⋯,eH​}是使用者 U U U一組行為embedding向量,長度為 H H H, v A v_A vA​是廣告 A A A的embedding向量。通過這種方式, v U ( A ) v_U(A) vU​(A)随着廣告變化而不同。 a ( ⋅ ) a(\cdot) a(⋅)作為前向傳播的激活權重函數,如Fig.2描述。除了兩個輸入的向量, a ( ⋅ ) a(\cdot) a(⋅)将他們的外積拼接,喂給接下來的網絡,這一明确的知識,可以幫助接下來的關聯模組化。

Eq.(3) 局部激活單元相似的思想來自NMT 任務。但是與傳統的attention機制不同,在Eq.(3)中放寬了 ∑ i w i = 1 \sum_i w_i=1 ∑i​wi​=1的限制,目的是為了保留使用者興趣的強度。對 a ( ⋅ ) a(\cdot) a(⋅)使用softmax對其進行标準化已經被放棄了。例如一個使用者的曆史行為90%購買購買的衣服,10%購買的電器産品。如果給定T恤和手機兩個候選廣告,T恤的使用者興趣強度 v U v_U vU​高于手機。傳統的注意力機制通過标準化,數值上失去分辨率。

我們已經嘗試通過LSTM對使用者的曆史行為序列進行模組化,但是效果沒有提升。NLP任務通常存在固定的文法,而使用者的曆史行為同時存在多種興趣組合,興趣的跳躍性和突然的結束會讓資料看起來存在很多的噪音。是以,針對這種序列資料,需要設計特殊的模型結構。這留給我們将來去研究。

class LocalActivationUnit(Layer):

    def __init__(self, hidden_units=(64, 32), activation='sigmoid', l2_reg=0, dropout_rate=0, use_bn=False, seed=1024,
                 **kwargs):
		pass
    def build(self, input_shape):
		pass

    def call(self, inputs, training=None, **kwargs):

        query, keys = inputs

        keys_len = keys.get_shape()[1]
        queries = K.repeat_elements(query, keys_len, 1)

        att_input = tf.concat(
            [queries, keys, queries - keys, queries * keys], axis=-1)

        att_out = self.dnn(att_input, training=training)

        attention_score = self.dense([att_out, self.kernel, self.bias])

        return attention_score

    def compute_output_shape(self, input_shape):
		pass

    def compute_mask(self, inputs, mask):
        pass

    def get_config(self, ):
		pass

           

5 訓練技巧

在阿裡巴巴的廣告系統中,存在上億級别的使用者和商品。訓練工業資料的大量稀疏特征給訓練帶來巨大的挑戰。在本節中,我們介紹兩個重要的技巧幫助解決這個問題。

5.1 Mini-batch Aware Regularization

過拟合是工業界網絡模型訓練面臨巨大挑戰。像通路商品id、使用者特征、廣告id等,多達6億。如Fig.4綠線所示,如果沒有正則化處理,模型效果在第一輪訓練後,會顯著下降。傳統的 L 1 L1 L1和 L 2 L2 L2正則項不适合處理稀疏且存在百萬級别參數網絡。以 L 2 L2 L2正則為例,對每個batch來說, L 2 L2 L2正則需要對多達上億的參數進行更新,這樣就會增加計算的壓力,而對于那些稀疏特征來說,我們隻需要更新那些非0的資料的參數。

DIN模型Deep Interest Network for Click-Through Rate Prediction

在本篇論文中,我們介紹mini-batch aware regularizer, 隻是更具存在非零資料更新模型的參數。實際上,向量字典的學習是最重的計算任務。 W ∈ R D × K \mathbf{W} \in \mathbb{R}^{D\times K} W∈RD×K表示embedding字典全部參數。 D D D表示向量的次元, K K K表示空間的次元。對 L 2 L2 L2正則化擴充方式如下:

L 2 ( W ) = ∥ W ∥ 2 2 = ∑ j = 1 K ∥ w j ∥ 2 2 = ∑ ( x , y ) ∈ S ∑ j = 1 K I ( x j ≠ 0 ) n j ∥ w j ∥ 2 2 (4) L_{2}(\mathbf{W})=\|\mathbf{W}\|_{2}^{2}=\sum_{j=1}^{K}\left\|\boldsymbol{w}_{j}\right\|_{2}^{2}=\sum_{(\boldsymbol{x}, y) \in \mathcal{S}} \sum_{j=1}^{K} \frac{I\left(\boldsymbol{x}_{j} \neq 0\right)}{n_{j}}\left\|\boldsymbol{w}_{j}\right\|_{2}^{2}\tag{4} L2​(W)=∥W∥22​=j=1∑K​∥wj​∥22​=(x,y)∈S∑​j=1∑K​nj​I(xj​​=0)​∥wj​∥22​(4)

其中, w j ∈ R D w_j\in \mathbb{R}^D wj​∈RD是第 j j j個embedding向量。 I ( x j ≠ 0 ) I\left(\boldsymbol{x}_{j} \neq 0\right) I(xj​​=0)表示樣本是否有特征 j j j, n j n_j nj​表示樣本 j j j在所有樣本出現的次數。Eq.(4)可以轉化為Eq.(5):

L 2 ( W ) = ∑ j = 1 K ∑ m = 1 B ∑ ( x , y ) ∈ B m I ( x j ≠ 0 ) n j ∥ w j ∥ 2 2 (5) L_{2}(\mathbf{W})=\sum_{j=1}^{K} \sum_{m=1}^{B} \sum_{(\boldsymbol{x}, y) \in \mathcal{B}_{m}} \frac{I\left(\boldsymbol{x}_{j} \neq 0\right)}{n_{j}}\left\|\boldsymbol{w}_{j}\right\|_{2}^{2}\tag{5} L2​(W)=j=1∑K​m=1∑B​(x,y)∈Bm​∑​nj​I(xj​​=0)​∥wj​∥22​(5)

其中, B B B表示mini-batches的數量, B m \mathcal{B}_m Bm​表示第 m m m個mini-batch。 α m j = max ⁡ ( x , y ) ∈ B m I ( x j ≠ 0 ) \alpha_{m j}=\max _{(x, y) \in \mathcal{B}_{m}} I\left(x_{j} \neq 0\right) αmj​=max(x,y)∈Bm​​I(xj​​=0)表示在mini-batch至少有一個特征 j j j。然後Eq.(5)可以用以下方式近似表示:

L 2 ( W ) ≈ ∑ j = 1 K ∑ m = 1 B α m j n j ∥ w j ∥ 2 2 (6) L_{2}(\mathbf{W}) \approx \sum_{j=1}^{K} \sum_{m=1}^{B} \frac{\alpha_{m j}}{n_{j}}\left\|w_{j}\right\|_{2}^{2} \tag{6} L2​(W)≈j=1∑K​m=1∑B​nj​αmj​​∥wj​∥22​(6)

通過這種方式,我們衍生新的 L 2 L2 L2正則化。對于第 m m m個mini-batch, 特征 j j j 的embedding 權重更新方式如下:

w j ← w j − η [ 1 ∣ B m ∣ ∑ ( x , y ) ∈ B m ∂ L ( p ( x ) , y ) ∂ w j + λ α m j n j w j ] (7) w_{j} \leftarrow w_{j}-\eta\left[\frac{1}{\left|\mathcal{B}_{m}\right|} \sum_{(x, y) \in \mathcal{B}_{m}} \frac{\partial L(p(x), y)}{\partial w_{j}}+\lambda \frac{\alpha_{m j}}{n_{j}} w_{j}\right]\tag{7} wj​←wj​−η⎣⎡​∣Bm​∣1​(x,y)∈Bm​∑​∂wj​∂L(p(x),y)​+λnj​αmj​​wj​⎦⎤​(7)

通過這種方式,在第 m m m個mini-batch中,隻有存在特征值才會參與計算。

5.2 資料自适應激活函數

常用的PReLU的激活函數如下:

f ( s ) = { s  if  s > 0 α s  if  s ≤ 0 = p ( s ) ⋅ s + ( 1 − p ( s ) ) ⋅ α s (8) f(s)=\left\{\begin{array}{ll} s & \text { if } s>0 \\ \alpha s & \text { if } s \leq 0 \end{array}=p(s) \cdot s+(1-p(s)) \cdot \alpha s\right. \tag{8} f(s)={sαs​ if s>0 if s≤0​=p(s)⋅s+(1−p(s))⋅αs(8)

其中, s s s是激活函數 f ( ⋅ ) f(\cdot) f(⋅)的輸入, p ( s ) = I ( s > 0 ) p(s)=I(s>0) p(s)=I(s>0)是控制 f ( s ) f(s) f(s)在 f ( s ) = s f(s)=s f(s)=s和 f ( s ) = α s f(s)=\alpha s f(s)=αs進行轉換的訓示函數, α \alpha α是學習的參數。 p ( s ) p(s) p(s)是控制函數。Fig.3的左半部分圖是PReLu。它的左半部分好是硬性為0的點,對于不同分布的資料,該種方式處理可能不太适合。是以,我們重新設計自适應激活函數Dice,

f ( s ) = p ( s ) ⋅ s + ( 1 − p ( s ) ) ⋅ α s , p ( s ) = 1 1 + e − s − E [ s ] Var ⁡ [ s ] + ϵ (9) f(s)=p(s) \cdot s+(1-p(s)) \cdot \alpha s, p(s)=\frac{1}{1+e^{-\frac{s-E[s]}{\sqrt{\operatorname{Var}[s]+\epsilon}}}}\tag{9} f(s)=p(s)⋅s+(1−p(s))⋅αs,p(s)=1+e−Var[s]+ϵ

​s−E[s]​1​(9)

該控制函數如Fig.3的右圖所示。在訓練階段, E [ s ] E[s] E[s]和 V a r [ s ] Var[s] Var[s]表示輸入的每個mini-batch的均值和方差。在測試階段, E [ s ] E[s] E[s]和 V a r [ s ] Var[s] Var[s]會随着資料進行平滑計算, ϵ \epsilon ϵ是一個設定的非常小的常數,我們将它設定為 1 0 − 8 10^{-8} 10−8。

Dice可以認為PReLu的通用形式。Dice的方式随着輸入資料分布的變化自動調整,它的值是輸入資料的均值。除此之外,Dice可以控制在兩個通道之間進行切換。當 E ( s ) = 0 E(s)=0 E(s)=0和 V a r [ s ] = 0 Var[s]=0 Var[s]=0,Dice降級為PReLU。

class Dice(Layer):
    def __init__(self, axis=-1, epsilon=1e-9, **kwargs):
        self.axis = axis
        self.epsilon = epsilon
        super(Dice, self).__init__(**kwargs)

    def build(self, input_shape):
        self.bn = tf.keras.layers.BatchNormalization(
            axis=self.axis, epsilon=self.epsilon, center=False, scale=False)
        self.alphas = self.add_weight(shape=(input_shape[-1],), initializer=Zeros(
        ), dtype=tf.float32, name='dice_alpha')  # name='alpha_'+self.name
        super(Dice, self).build(input_shape)  # Be sure to call this somewhere!
        self.uses_learning_phase = True

    def call(self, inputs, training=None, **kwargs):
        inputs_normed = self.bn(inputs, training=training)
        # tf.layers.batch_normalization(
        # inputs, axis=self.axis, epsilon=self.epsilon, center=False, scale=False)
        x_p = tf.sigmoid(inputs_normed)
        return self.alphas * (1.0 - x_p) * inputs + x_p * inputs

    def compute_output_shape(self, input_shape):
		pass

    def get_config(self, ):
		pass
           

6 實驗

在本節,我們講述一下實驗過程,包括:資料集、評估名額、實驗設定、模型對比和模型分析。在兩個公開的資料集和阿裡巴巴資料集上,進行相關實驗,模型效果優于目前模型。

6.1 資料集和參數設定

DIN模型Deep Interest Network for Click-Through Rate Prediction

Amazon Dataset

參數設定:

優化器:SGD

decay rate: 0.1

mini-batch: 32

使用特征:商品id, 類别id, 使用者浏覽商品清單,商品id清單,類别id清單。

MovieLens Dataset

電影評分0-5,0-4劃分為負樣本,4-5為正樣本。

使用特征: 電影id,電影類别_id, 使用者的評分,電影id的清單, 電影類别的清單

Alibaba Dataset

MLP設定:192 × 200 × 80 × 2

mini-batch size:5000

optimizer: Adam

learning rate starts: 0.001

decay rate:0.9

6.2 模型對比

  • LR. baseline
  • BaseModel . Embedding&MLP architecture
  • Wide&Deep. 模型包括兩部分:1) 在wide側, 手工進行特征工程,需要專家經驗。在本次測試中主要是使用者行為和侯選集進行特征交叉。2)deep側, 自動進行特征交叉。
  • PNN. PNN能夠捕捉高階的交叉特征,是BaseModel的更新版本。
  • DeepFM. 使用因子分解機替換Wide&Deep中的Wide部分,減少特征工程的工作量。

6.3 度量名額

AUC是常用的衡量廣告和預測CTR之間的評估名額,包括使用者内和使用者間的排序。我們引入對使用者内AUC權重的一種計算方式,這種方式更适合線上的廣告系統,計算形式如下:

A U C = ∑ i = 1 n #  impression  i × A U C i ∑ i = 1 n #  impression  i (10) \mathrm{AUC}=\frac{\sum_{i=1}^{n} \# \text { impression }_{i} \times \mathrm{AUC}_{i}}{\sum_{i=1}^{n} \# \text { impression }_{i}}\tag{10} AUC=∑i=1n​# impression i​∑i=1n​# impression i​×AUCi​​(10)

其中, n n n表示使用者的數量,KaTeX parse error: Expected '}', got '#' at position 7: \text{#̲impression}和 AUC i \text{AUC}_i AUCi​分别表示曝光次數和使用者 i i i 的AUC。

除此之外,我們引入相對AUC提升度計算名額 RelaImpr \text{RelaImpr} RelaImpr:

 RelaImpr  = (  AUC(measured model  ) − 0.5  AUC(base model)  − 0.5 − 1 ) × 100 % (11) \text { RelaImpr }=\left(\frac{\text { AUC(measured model })-0.5}{\text { AUC(base model) }-0.5}-1\right) \times 100 \% \tag{11}  RelaImpr =( AUC(base model) −0.5 AUC(measured model )−0.5​−1)×100%(11)

DIN模型Deep Interest Network for Click-Through Rate Prediction
DIN模型Deep Interest Network for Click-Through Rate Prediction
DIN模型Deep Interest Network for Click-Through Rate Prediction

6.4 基于Amazon Dataset 和 MovieLens Dataset模型效果對比

Table 3 基于兩個資料集重複5次實驗計算平均值。很顯然,深度模型的效果優于機器學習的模型效果。PNN和DeepFM的模型效果好于Wide&Deep。DIN在所有模型中表現最好,這主要得益于設計局部激活單元結果,學習廣告和使用者行為之間的相關性。除此之外,設計資料自适應激活函數也帶來模型效果的進一步提升。

6.5 正則化效果

Amazon Dataset 和 MovieLens Dataset特征次元不高(10萬級别),所有的深度學習模型沒有遇到嚴重的過拟合的情況。如果使用阿裡巴巴資料級,特征的次元高達6億,如果沒有正則化處理,會存在嚴重的過拟合行為,導緻模型效果迅速下降,如Fig.4中的綠線所示。基于這種原因,我們嘗試以下幾種正則化處理。

  • Dropout. 每個樣本随機丢掉50%的特征。
  • Filter. 保留出現高頻次的商品id, 大約2000萬種。
  • Regularization in DiFacto. 模型參數與特征呢個出現的頻次相關正則化方式。
  • MBA. Mini-Batch Aware regularization method

對于DiFacto和MBA 正則化參數 λ \lambda λ設定為0.01.

Fig.4和Table 4給出模型對比結果。相對于不使用商品id特征,使用細粒度的商品id特征在第一輪epoch之後,對模型效果帶來較大的提升。但是,如果不使用正則化下處理,會帶來過拟合情況。Dropout會減少過拟合,但是模型效果收斂過慢。頻次過濾能夠減少過拟合。DiFacto效果不如頻次過濾。MBA的帶來的模型效果最好。

除此之外,使用商品id訓練的模型比沒有使用商品id訓練的模型效果好,這說明其包含豐富的資訊。考慮這種情況,雖然頻次過濾的效果比dropout好,但是它丢掉低頻次商品id會導緻資訊損失。

6.6 基于阿裡巴巴資料集模型效果的對比

DIN模型Deep Interest Network for Click-Through Rate Prediction

如Table 5所示, LR模型效果弱于深度學習模型的效果,DIN模型是所有深度模型中,效果最好的。想對于BaseModel來說,AUC絕對值提升0.0059, 相對提升$6.08% $。這主要得益于設計局部激活單元結構、訓練方式的改進。除此之外,正則化處理使得auc絕對值提升0.0031。Dice相對于PReLU提升0.0015。

使用MBA正則化和Dice相對于基礎模型活得0.0113的絕對提升和 11.65 % 11.65\% 11.65%的相對提升。相對于DeepFM, AUC絕對提升0.009。阿裡巴巴多達上億的流量,0.001的AUC絕對值的提升帶來巨大的價值。

6.7 線上A/B測試

使用2017-05到2017-06的資料進行測試,帶來10%的CTR提升和3.8%RPM(Revenue

Per Mille)提升,目前服務于阿裡的主要流量。

對于上億使用者通路的系統,特征是流量高峰期,每秒對超過100萬使用者提供服務,做到高吞吐、低延遲不是一件容易的事情。對每個使用者來說,100廣告推理時間小于10毫秒,在CPU-GPU架構下,我們采用幾種方式加速計算:1)請求批處理,将來自CPU的請求進行合并,然後利用GPU處理。2)GPU記憶體優化,改善通路方式,減少GPU顯存的互動。3)并發核心計算,利用多個CUDA核心進行矩陣計算。總之,經過這些優化,DIN對外提供服務時,每秒請求處理效率提升2倍。

6.8 DIN可視化

DIN模型Deep Interest Network for Click-Through Rate Prediction

最後,我們利用阿裡資料對DIN内部結構進行相關研究,測試局部激活單元的效果。Fig.5描述了使用者行為和候選廣告之間的關系。正如所料,使用者行為和廣告相關性是非常高的。

以前面提到的年輕媽媽為例,我們選擇9類和每個類别100種商品廣告給她。使用t-SNE聚類,Fig.6對DIN學習embedding向量的進行可視化,我們發現,基本上每個簇屬于一個類别。Fig.6熱力圖展示這位母親對候選廣告的興趣大小。

7 結論

為了解決傳統固定長度向量不能表征多樣的使用者新區,提升模型的表達能力,我們設計一種能夠根據廣告動态捕捉使用者興趣的DIN模型。除此之外,設計兩種訓練技巧,用于提升DIN的表現能力。DIN模型已經應用于阿裡巴巴廣告系統中。

上一篇: ss_loss

繼續閱讀