日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線(xiàn)咨詢(xún)客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

介紹

工業(yè)界通用推薦系統(tǒng)包括兩個(gè)階段的流程,匹配(match)和排序(rank)。在匹配的過(guò)程中主要是根據(jù)用戶(hù)的一些興趣點(diǎn),找到可能感興趣的潛在商品集。由于整個(gè)商品集的海量性,對(duì)實(shí)時(shí)訪(fǎng)問(wèn)的用戶(hù)去計(jì)算他對(duì)全部商品的感興趣程度是不實(shí)際的,所以需要預(yù)先根據(jù)一些興趣、特征策略等來(lái)尋找用戶(hù)可能感興趣的潛在商品集,在此基礎(chǔ)上,再根據(jù)特定的模型算法來(lái)進(jìn)行商品集興趣分深層排序,效果指標(biāo)往往通過(guò)點(diǎn)擊率(Click Trough Rate)、轉(zhuǎn)化率、時(shí)長(zhǎng)等來(lái)量化,所以 rank 階段的主要目的就在于預(yù)測(cè)一個(gè)用戶(hù)在他感興趣的商品中的 CTR 等,并且根據(jù)預(yù)測(cè)分值的大小進(jìn)行排序,最終返回排序作為推薦系統(tǒng)的推薦結(jié)果。

本文將介紹三篇重點(diǎn)分別在 ranking,matching 和 feature enginerring 上的文章,借此來(lái)展示業(yè)界推薦系統(tǒng)方面的一些最新工作進(jìn)展。

1. Ranking:

Behavior Sequence Transformer for E-commerce Recommendation in Alibaba

這篇文章主要關(guān)注在 rank 階段的改進(jìn)。以往在預(yù)測(cè) CTR 場(chǎng)景下常見(jiàn)的深度學(xué)習(xí)方法是基于嵌入層與多層前饋神經(jīng)網(wǎng)絡(luò)的結(jié)合,將大量的低階原始特征通過(guò)簡(jiǎn)單地嵌入層進(jìn)行降維,然后降維后的低維特征再作為全連接網(wǎng)絡(luò)的輸入,最終通過(guò)網(wǎng)絡(luò)輸出對(duì) CTR 點(diǎn)擊率的概率預(yù)測(cè)(由于輸出結(jié)果是一個(gè)點(diǎn)擊概率,所以取值范圍落在區(qū)間[0,1]上)。具有代表性的工作參考 WDL(wide and deep learning by google)和 DIN(Deep Interest Neworks by Alibaba)。

但是上述方法存在一個(gè)比較明顯的問(wèn)題,直接輸入原始特征實(shí)際上缺失了很多高階的特征信息,比如高階的交互項(xiàng)、序列信息等。這類(lèi)特征在推薦場(chǎng)景下往往比較重要,比如年齡特征與性別特征的交互項(xiàng)可以刻畫(huà)不同年齡層與不同性別的購(gòu)買(mǎi)需求差異性。另一點(diǎn),一個(gè)客戶(hù)在購(gòu)買(mǎi)了手機(jī)后很有可能會(huì)繼續(xù)瀏覽手機(jī)配件等商品,就需要一些行為序列特征去捕捉這些信息。因此,從這些實(shí)例中可以獲知,高階的特征在進(jìn)行點(diǎn)擊率預(yù)測(cè)的任務(wù)十分重要。對(duì)比前面提到的兩種方法,WDL 僅僅是簡(jiǎn)單地拼接 raw features,DIN 考慮了通過(guò)注意力機(jī)制來(lái)刻畫(huà)商品與用戶(hù)的歷史興趣的多峰表征,二者都沒(méi)有考慮行為的序列特征。

為了解決這方面的問(wèn)題,作者參考了在 NLP 領(lǐng)域機(jī)器翻譯任務(wù) transformer 模塊。由于在機(jī)器翻譯中,語(yǔ)言的序列信息是十分關(guān)鍵的,而 transformer 可以取得很好的效果,所以認(rèn)為如果把客戶(hù)的購(gòu)買(mǎi)歷史看做是一串文字,那么每種商品之間的序列相關(guān)性的信息也可以通過(guò) transformer 捕捉到。

該論文整體網(wǎng)絡(luò)結(jié)構(gòu)如下,主要包含三個(gè)部分:嵌入層,轉(zhuǎn)換層,前饋網(wǎng)絡(luò)層。

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

嵌入層的主要目的僅僅在于將高維的特征映射到相對(duì)低維的空間中,通過(guò)一個(gè)嵌入矩陣

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

,其中

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

就是嵌入空間的維度。需要輸入到嵌入層的特征主要有一下幾個(gè)部分:包含序列信息的 item 特征和其他特征。其他特征的內(nèi)容如下表格所示:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

序列信息的 item 特征作者又分為了兩個(gè)部分,分別是 Sequence Item Features 和 Position Features。其中 Sequence Item Features 主要是商品的 item_id 和 category_id 這兩個(gè)可以表征商品信息的特征,原因是考慮到提取序列信息的計(jì)算復(fù)雜性,輸入全部的 item 特征效率很低。Position Feature 實(shí)際上是通過(guò) postional embedding 的變換來(lái)獲取的,在"Attention is all your need"中有提及。本文中考慮一個(gè)客戶(hù)的瀏覽歷史,時(shí)間間隔最能夠體現(xiàn)瀏覽歷史中的位置信息。

因此本文定義如下 position embedding:pos(v_i) = t(v_t) - t(v_i),其中 t(v_t) 代表的是推薦系統(tǒng)的推薦時(shí)間點(diǎn),t(v_i)代表用戶(hù)點(diǎn)擊第 i 件商品的時(shí)間點(diǎn)。構(gòu)造序列特征之后,通過(guò)

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

進(jìn)行序列特征的嵌入,

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

代表瀏覽歷史的長(zhǎng)度,

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

是嵌入空間的維度。

轉(zhuǎn)換層:

Multi-Head Self-Attention(多頭注意力模型)是 Transformer 的核心單元,理解 MH Attention 機(jī)制對(duì)于 Transformer 層原理掌握特別重要,并且在 Encoder 和 Decoder 中都有用到。MH Self-attention 最新應(yīng)用可以替代一些基于 RNN 行為序列模型在推薦場(chǎng)景落地。另外在下文即將介紹的 AutoInt 中也是引入了 Multi-head Self-attention 核心思想,所以這里花一定篇幅對(duì)此進(jìn)行原理講解。

先從一個(gè)機(jī)器翻譯的小例子來(lái)看:

”The animal didn't cross the street because it was too tired”

單詞"it"表示什么呢,是"animal"還是"street",對(duì)機(jī)器算法來(lái)說(shuō)識(shí)別這個(gè)不是一件簡(jiǎn)單的事情,算法在處理每個(gè)詞的時(shí)候需要知道上下文信息。

較早一代 NLP 算法中 RNN、LSTM、SRU 等序列模型可以處理這種場(chǎng)景,基本做法是將句子分詞,然后每個(gè)詞轉(zhuǎn)化為對(duì)應(yīng)的詞向量序列,經(jīng)過(guò) RNN 算法來(lái)處理詞序列信息,在翻譯這種場(chǎng)景僅用 RNN 很難做到高水準(zhǔn),這樣出現(xiàn)了 RNN 的變種:Encoder-Decoder,也叫 Seq2Seq。如下圖所示,在 Encoder 階段,輸入數(shù)據(jù)編碼成一個(gè)上下文語(yǔ)義向量 c(語(yǔ)義向量 c 可以有多種表達(dá)方式,最簡(jiǎn)單的方法就是把 Encoder 的最后一個(gè)隱狀態(tài)賦值給 c),Encoder 是一個(gè) RNN。Decoder 是同樣的 RNN(也可以不一樣的結(jié)構(gòu)),拿到 c 之后,對(duì)其進(jìn)行解碼操作,c 當(dāng)做之前的初始狀態(tài) h0 輸入到 Decoder 中,每一次得到一個(gè)最有可能的翻譯結(jié)果,然后讓所有單詞的 cross entropy 達(dá)到最小。

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

RNN、LSTM 這種類(lèi)型算法自然可以很好的處理序列信息,結(jié)構(gòu)相對(duì)比較簡(jiǎn)單,本質(zhì)上都是遞歸處理結(jié)構(gòu),缺點(diǎn)是無(wú)法做到并行,訓(xùn)練速度比較慢,另外它也是一種馬爾科夫決策過(guò)程,無(wú)法很好的學(xué)習(xí)全局結(jié)構(gòu)信息。那有沒(méi)有改進(jìn)的算法呢?Attention,對(duì)"Attention is All you need",這也是谷歌 17 年的一篇經(jīng)典論文,后面在此基礎(chǔ)上也誕生了各種優(yōu)秀論文。

接著看上面翻譯的小例子,這里的"it"表示"animal"還是"street"呢,聯(lián)系上下文,就知道 it 很大概率指的是 animal。

下圖直觀地展示了 self-attention 機(jī)制,計(jì)算每個(gè)單詞與其他單詞之間的關(guān)聯(lián),這里用 attention score 來(lái)表示關(guān)聯(lián)度,處理"it"時(shí)"the"、"animal"就有比較高的 attention score。這些 score 在 self-attention 中就是權(quán)重的概念,對(duì)輸入 vector 加權(quán)然后喂入前饋神經(jīng)網(wǎng)絡(luò)中,得到新的表示,這樣可以很好的獲取上下文信息。

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

Self-attention layer:一般的注意力層定義如下:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 


微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

attention 計(jì)算:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

Q 是查詢(xún),K 是鍵,V 是數(shù)值。光從上面圖中理解起來(lái)比較抽象,結(jié)合原論文以及代碼,就比較容易理解了,先看看核心部分代碼:

def scaled_dot_product_attention(q, k, v, mask):
 """
 參數(shù):
 q: 請(qǐng)求的形狀 == (..., seq_len_q, depth)
 k: 主鍵的形狀 == (..., seq_len_k, depth)
 v: 數(shù)值的形狀 == (..., seq_len_v, depth_v)
 (..., seq_len_q, seq_len_k)。默認(rèn)為None。
 返回值:
 輸出,注意力權(quán)重
 """
 matmul_qk = tf.matmul(q, k, transpose_b=True) # (..., seq_len_q, seq_len_k)
 # 縮放 matmul_qk
 dk = tf.cast(tf.shape(k)[-1], tf.float32)
 scaled_attention_logits = matmul_qk / tf.math.sqrt(dk)

 # softmax 在最后一個(gè)軸(seq_len_k)上歸一化,因此分?jǐn)?shù)
 # 相加等于1。
 attention_weights = tf.nn.softmax(scaled_attention_logits, axis=-1) # (..., seq_len_q, seq_len_k)
 output = tf.matmul(attention_weights, v) # (..., seq_len_q, depth_v)
 return output, attention_weights

class MultiHeadAttention(tf.keras.layers.Layer):
 def __init__(self, d_model, num_heads):
 super(MultiHeadAttention, self).__init__()
 self.num_heads = num_heads
 self.d_model = d_model
 assert d_model % self.num_heads == 0

 self.depth = d_model // self.num_heads
 self.wq = tf.keras.layers.Dense(d_model)
 self.wk = tf.keras.layers.Dense(d_model)
 self.wv = tf.keras.layers.Dense(d_model)
 self.dense = tf.keras.layers.Dense(d_model)

 def split_heads(self, x, batch_size):
 """分拆最后一個(gè)維度到 (num_heads, depth).
 轉(zhuǎn)置結(jié)果使得形狀為 (batch_size, num_heads, seq_len, depth)
 """
 x = tf.reshape(x, (batch_size, -1, self.num_heads, self.depth))
 return tf.transpose(x, perm=[0, 2, 1, 3])

 def call(self, v, k, q, mask):
 batch_size = tf.shape(q)[0]
 q = self.wq(q) # (batch_size, seq_len, d_model)
 k = self.wk(k) # (batch_size, seq_len, d_model)
 v = self.wv(v) # (batch_size, seq_len, d_model)
 q = self.split_heads(q, batch_size) # (batch_size, num_heads, seq_len_q, depth)
 k = self.split_heads(k, batch_size) # (batch_size, num_heads, seq_len_k, depth)
 v = self.split_heads(v, batch_size) # (batch_size, num_heads, seq_len_v, depth)
 # scaled_attention.shape == (batch_size, num_heads, seq_len_q, depth)
 # attention_weights.shape == (batch_size, num_heads, seq_len_q, seq_len_k)
 scaled_attention, attention_weights = scaled_dot_product_attention(
 q, k, v, mask)

 scaled_attention = tf.transpose(scaled_attention, perm=[0, 2, 1, 3]) # (batch_size, seq_len_q, num_heads, depth)

 concat_attention = tf.reshape(scaled_attention,
 (batch_size, -1, self.d_model)) # (batch_size, seq_len_q, d_model)

 output = self.dense(concat_attention) # (batch_size, seq_len_q, d_model)

 return output, attention_weights

代碼是 Multi-head attention 類(lèi)的構(gòu)建方式,下面會(huì)提到 Multi-head attention 是什么,這里先介紹 self-attention 中的 attention score 怎么計(jì)算的,Q、K、V 怎么來(lái)的。其實(shí)是從輸入 embeding 經(jīng)過(guò)線(xiàn)性層變換得到了,有三個(gè)權(quán)重矩陣,WQ、WK、WV,輸入 X 與這三個(gè)權(quán)重矩陣相乘得到,其實(shí)表示的意義大致相同,只是生成了不同的表達(dá)形式,也是神經(jīng)網(wǎng)絡(luò)里面一些思想,很難去說(shuō)清楚為什么要這樣做。WQ、WK、WV 這三個(gè)權(quán)重矩陣其實(shí)也是模型需要訓(xùn)練的參數(shù)矩陣。Attention score 生成大概可以分為以下幾個(gè)步驟:

1、輸入詞生成 embedding 向量,經(jīng)過(guò)線(xiàn)性層變換得到對(duì)應(yīng) Q、K、V 向量。

2、計(jì)算輸入詞 Query Vector 與其他相關(guān)詞 Key Vector 點(diǎn)積,再對(duì) score 進(jìn)行歸一化,再通過(guò) softmax 來(lái)獲取權(quán)重(attention_weights = tf.nn.softmax(scaled_attention_logits, axis=-1) )。

3、將 softmax 結(jié)果與 Value Vector 相乘得到加權(quán)的權(quán)重向量 attention score(output = tf.matmul(attention_weights, v))

投影矩陣

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

是一個(gè)共用的嵌入矩陣。再結(jié)合一層全連接神經(jīng)網(wǎng)絡(luò)

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

的映射來(lái)加強(qiáng)非線(xiàn)性形式,最終的 self_attention 模塊的形式為:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 


微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

再來(lái)看看 multi-head attention:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 


微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

簡(jiǎn)單來(lái)說(shuō),multi-head attention 就是多個(gè) self-attention 的集成,為什么要這么做呢,論文中說(shuō)是將模型分為多個(gè)頭,形成多個(gè)子空間,這樣可以讓模型從不同角度去學(xué)習(xí)多方面不同的信息,再去融合,具體是不是真的可以讓模型學(xué)習(xí)"不同子空間的特征",這里還沒(méi)有深入作研究。其實(shí)通過(guò)增加模型 layer 是不是也可以學(xué)習(xí)到更多信息,當(dāng)然相對(duì) multi-head 來(lái)說(shuō)性能肯定比不上,因?yàn)?multi-head 是并行的,這也是論文中提到的一個(gè)優(yōu)勢(shì),那論文里面提到的 multi-head 其他優(yōu)點(diǎn)可以增加網(wǎng)絡(luò)空間,怎么去考量,其實(shí)也存在一定玄學(xué)在里面。

前饋網(wǎng)絡(luò)層:

將其他特征與轉(zhuǎn)換器的輸出拼接后輸入三層前饋神經(jīng)網(wǎng)絡(luò),目的是為了處理其他特征的有效信息。由于 CTR 問(wèn)題是一個(gè)預(yù)測(cè)點(diǎn)擊概率的問(wèn)題,所以作者選擇一個(gè) sigmoid 函數(shù)作為輸出層,損失函數(shù)的選擇也是標(biāo)準(zhǔn)的交叉熵?fù)p失:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

模型評(píng)估:

本文選擇 WDL 和 DIN 作為對(duì)比模型,構(gòu)建了一個(gè) WDL+seq 的基準(zhǔn)模型,基準(zhǔn)模型的序列信息是通過(guò)簡(jiǎn)單地將歷史信息直接進(jìn)行嵌入得到的。本文的網(wǎng)絡(luò)結(jié)構(gòu)和 WDL 的區(qū)別在于轉(zhuǎn)換層的搭建,與 DIN 區(qū)別則是在處理序列信息上思路不同。

作者選擇 AUC 來(lái)作為模型評(píng)估的度量,并且也考量了 A/B 測(cè)試的 CTR 結(jié)果和推薦系統(tǒng)的響應(yīng)時(shí)間(RT response time)。

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

從上述的結(jié)果可以看出,文章提出的 BST 網(wǎng)絡(luò)具有更好的效果。

BST 的主要工作在于改進(jìn) raw feature 的重新組合問(wèn)題以及進(jìn)行高階特征提取,在推薦系統(tǒng)中針對(duì)特征工程的工作也有很多。有一類(lèi)基于 WDL 的工作,主要考慮在于將 item 的特征或者用戶(hù)的特征進(jìn)行交互項(xiàng)的構(gòu)建,比如 DeepFM, Cross networks 等,大多借鑒了 Factorization machines。這類(lèi)方法的問(wèn)題主要在于特征的構(gòu)建效率比較低,而且高階交互項(xiàng)沒(méi)有辦法提取。

因此另一類(lèi)基于深度學(xué)習(xí)的方法通過(guò)復(fù)雜網(wǎng)絡(luò)結(jié)構(gòu)來(lái)提取高階特征,這類(lèi)方法的問(wèn)題在于獲取到的特征解釋性較差,一些任務(wù)場(chǎng)景中需要特征的解釋性與實(shí)際意義來(lái)提升工作效率。同時(shí)考慮了特征的解釋性與高階復(fù)雜性的結(jié)果,AutoInt 有相對(duì)較好的效果,但是也受制于任務(wù)種類(lèi)和應(yīng)用場(chǎng)景。AutoInt 也是基于 multihear self-attention 機(jī)制,重點(diǎn)考慮對(duì)于用戶(hù)信息、商品信息這類(lèi)原始特征的處理(下文有介紹),AutoInt 實(shí)際上可以作用在"other features"中,來(lái)得到更高質(zhì)量的信息。

但本文依舊是選擇手動(dòng)來(lái)構(gòu)建"other features"中的 cross features 交互部分。AutoInt 的缺陷在于無(wú)法提取序列信息。DIN 確實(shí)也考慮利用用戶(hù)行為序列的信息,但是處理辦法與本文不同,DIN 是通過(guò)注意力機(jī)制來(lái)刻畫(huà)當(dāng)前推薦商品與歷史商品之間的多峰表征,而本文則是利用注意力機(jī)制構(gòu)建轉(zhuǎn)換器將序列數(shù)據(jù)進(jìn)行提取與嵌入。

總而言之,本文通過(guò)對(duì)序列數(shù)據(jù)特征的合理構(gòu)建與利用,可以明顯地提升推薦效果,淘寶將其投入在實(shí)際的生產(chǎn)場(chǎng)景中,也取得了較好的線(xiàn)上效果。

2. Matching:

Multi-Interest Network with Dynamic Routing for Recommendation at Tmall

本工作的主要目的在于在 matching 階段進(jìn)行特征工程的工作,實(shí)現(xiàn)提取更加結(jié)構(gòu)化,使模型能夠得到更多信息增益的特征。獲取更高質(zhì)量的特征就可以進(jìn)而促進(jìn)整個(gè)推薦系統(tǒng)的效果改善。

Matching 階段需要獲取客戶(hù)感興趣的商品,或者客戶(hù)對(duì)某種商品感興趣的概率。所以在這個(gè)階段,如何量化客戶(hù)的“興趣”更重要。多數(shù)文章的做法一般是把用戶(hù)的一些 profile 特征或者 history 信息簡(jiǎn)單地作為一個(gè)單向量輸入。這種做法忽略了存在多種興趣的可能性:首先,有未利用的信息,在對(duì)整個(gè)模型而言會(huì)帶來(lái)相應(yīng)的信息損失;其次,用一個(gè)向量來(lái)代表所有不同興趣本身就比較難,等價(jià)于把每個(gè)用戶(hù)所有不同的興趣壓縮在一起,因此將用戶(hù)的所有興趣信息混合在一起會(huì)導(dǎo)致在 matching 階段匹配到不準(zhǔn)確的商品類(lèi)型或者商品個(gè)體。而且文中選擇對(duì)用戶(hù)的每個(gè)不同類(lèi)型興趣都會(huì)獨(dú)立計(jì)算,這樣能夠保證 matching 階段的待推薦商品的準(zhǔn)確度。

文中提出了先利用類(lèi)似聚類(lèi)的思想,先在用戶(hù)的歷史信息中分析提取客戶(hù)的多興趣的形式,并且每個(gè)用戶(hù)的總興趣數(shù)允許是不同的。通過(guò)構(gòu)建的多興趣網(wǎng)絡(luò)(MIND)可以實(shí)現(xiàn)這個(gè)目標(biāo),利用膠囊網(wǎng)絡(luò)對(duì)用戶(hù)行為的 embeded features 再提取就可以得到較好的興趣類(lèi)。基于這些興趣類(lèi),就可以在整個(gè)商品池中通過(guò)近似最近鄰查找的方式找出該客戶(hù)最可能感興趣的 N 個(gè)商品作為 candidates,隨后放入 ranking 階段進(jìn)行推薦方面的預(yù)測(cè)。

網(wǎng)絡(luò)結(jié)構(gòu)如下圖所示:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

整體網(wǎng)絡(luò)結(jié)構(gòu)就是通過(guò)將商品集合中的特征通過(guò)嵌入,映射到低維的特征空間,再將不同商品的嵌入特征連接起來(lái)輸入到多興趣提取層,通過(guò)學(xué)習(xí)膠囊網(wǎng)絡(luò)中的參數(shù),得到較好的模型后,再將膠囊網(wǎng)絡(luò)提取的用戶(hù)行為信息與用戶(hù)的畫(huà)像信息進(jìn)行連接輸入給全連接層作為最后的特征整合。

在訓(xùn)練階段,有幾個(gè)主要的與其他工作不同之處:

  1. 通過(guò)構(gòu)建合適的 label-attention 層來(lái)加強(qiáng) capsules 網(wǎng)絡(luò)的類(lèi)內(nèi)聚合性,原因是利用了商品類(lèi)別作為查詢(xún),興趣膠囊作為鍵值,如下圖所示。輸出的形式如下:
微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

其中當(dāng) p 為 0 是,代表 capsule 選擇最均勻的特征信息;如果 p 逐漸增大,那么 capsule 會(huì)選擇相似度高的信息。如果 p 無(wú)窮大,那么最終就會(huì)變?yōu)橐粋€(gè)最大 Attention 方法,并且會(huì)忽略其他的值。文中就是選擇這種最大 attention 的方法。

  1. 在訓(xùn)練過(guò)程中的模型參數(shù)初始化過(guò)程中,為了防止每個(gè) capsules 的訓(xùn)練出很類(lèi)似的效果,在動(dòng)態(tài)路由算法的基礎(chǔ)上,做了小量的修改和調(diào)整。本文中,作者選擇希望訓(xùn)練得到的膠囊落在同一個(gè)向量空間中,但是希望不同的 bilinear mApping 能夠?qū)⑴d趣映射到不同的向量空間中,所以選擇 routing logit 為:
微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

代表商品 i 的嵌入特征,

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

代表興趣的向量。

  1. 由于 Bilinear 矩陣是在各對(duì)膠囊之間共享的,為了避免矩陣訓(xùn)練得到單一結(jié)果,所以應(yīng)該避免直接將所有權(quán)重初始化為 0,而應(yīng)該從一個(gè)隨機(jī)分布中抽樣產(chǎn)生。本文選擇從正態(tài)分布中產(chǎn)生這些隨機(jī)初始值。
  2. 因?yàn)椴煌脩?hù)所用的興趣膠囊個(gè)數(shù)可能是不同的,所以文中允許了動(dòng)態(tài)的興趣個(gè)數(shù)來(lái)提高網(wǎng)絡(luò)的可塑性與準(zhǔn)確性。
微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

,由于多數(shù)人們的興趣膠囊比較少量,這種可變個(gè)數(shù)的興趣膠囊設(shè)定可以節(jié)省很多資源。

整個(gè) B2I Dynamic Routing 偽代碼如下:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

在模型最終訓(xùn)練完成之后,整個(gè) MIND 網(wǎng)絡(luò)拿掉 label-aware 層就可以當(dāng)做一個(gè)用戶(hù)行為的表征映射。在運(yùn)行階段,用戶(hù)的行為序列以及用戶(hù)的畫(huà)像特征全部輸入到

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

中,就可以得到多個(gè)向量特征。這些特征進(jìn)一步用來(lái)選出前 N 個(gè)備選商品,用于推薦系統(tǒng)的下一階段的 ranking 工作。

與其他工作的聯(lián)系與區(qū)別:

  1. YouTube DNN:兩種方法都采用了 deep learning 的優(yōu)勢(shì),通過(guò)深度學(xué)習(xí)可以獲取較好的高階特征表示。但是 YouTube 僅僅使用一個(gè)向量來(lái)表示用戶(hù)行為,本文中的 MIND 使用多個(gè)向量來(lái)表示一個(gè)用戶(hù)。所以 MIND 可以看做 DNN 的一種泛化模型。
  2. DIN:二者都利用到了用戶(hù)的不同的性卻特征。DIN 僅僅使用了商品層面上的注意力機(jī)制,簡(jiǎn)單來(lái)說(shuō)就是對(duì)商品 ID 的一些相似度計(jì)算;而本文利用了動(dòng)態(tài)路由算法產(chǎn)生的興趣網(wǎng)絡(luò)來(lái)提取興趣層面的信息。DIN 將 ranking 階段融合在一起,而 MIND 實(shí)際上不是端到端的,他通過(guò)將兩部分拆解開(kāi)來(lái),為整個(gè)系統(tǒng)提供了更好的穩(wěn)健性。

模型評(píng)估:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

CTR 預(yù)測(cè):

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

膠囊網(wǎng)絡(luò)的興趣提取示例:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

從第一個(gè)表格我們可以看出,所有與 Multi-interest 結(jié)合的模型對(duì)比起原始模型或者其他模型都得到了更好的效果。利用多興趣網(wǎng)絡(luò)確實(shí)可以得到不同客戶(hù)的多種興趣表征,能夠篩選出更加有效的待推薦商品,從而提升推薦系統(tǒng)的準(zhǔn)確度。在天貓的數(shù)據(jù)上,這種提升更加明顯,因?yàn)榇蠖鄶?shù)的人在購(gòu)物時(shí)候的興趣是由多種類(lèi)型的。對(duì)于不同數(shù)據(jù)之間客戶(hù)群體興趣類(lèi)別個(gè)數(shù)的比較,可以根據(jù)每個(gè)數(shù)據(jù)最好的超參數(shù) K 的比較結(jié)果來(lái)確定。

在 CTR 預(yù)測(cè)上,MIND 也有明顯的效果提升。

對(duì)于多興趣特征的提取有效性,可以從圖 5,圖 6 中分析。圖 5 中,上下兩塊代表了兩個(gè) user,每一行代表針對(duì)每個(gè) user 訓(xùn)練得到的 interest,橫軸上代表的是 user 的挑選商品行為,可以很明顯的看出每種 Interest 所關(guān)聯(lián)的商品類(lèi)型是高度相近的,這反映了 interest capsules 得到的 multiple interest 都具有較好的聚合性。圖 6 則表示在系統(tǒng)服務(wù)階段,根據(jù)第一個(gè) user 的 interest 來(lái)進(jìn)行待推薦商品的選擇。可以看到其中的商品相似度是很高的,最后一行代表的是 Youtube DNN 的商品相似度,對(duì)比發(fā)現(xiàn),multi-interest 分出的多種興趣效果十分明顯。

3. Feature Engineering:

AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks

在整個(gè)推薦系統(tǒng)中,特征工程方面最常遇到兩個(gè)問(wèn)題:

  1. 輸入特征的維度過(guò)高而且稀疏性很強(qiáng);
  2. 有效的點(diǎn)擊率預(yù)測(cè)都要基于高度準(zhǔn)確的交叉特征,人為地構(gòu)造交叉特征是一件十分耗時(shí)耗力的操作。

因此,尋找一種高效的特征提取方法是提升推薦系統(tǒng)表現(xiàn)效果的關(guān)鍵步驟。本文利用了深度學(xué)習(xí)的抽象特征提取的優(yōu)勢(shì),通過(guò) Multi-head attention 層進(jìn)行高階的特征組合。這種方法對(duì)于數(shù)值型特征與分類(lèi)特征都很適用。

之前的工作也有考慮過(guò)交叉特征的文章,有的將全部的特征進(jìn)行外積展開(kāi)得到一組非常高稀疏性的特征,這類(lèi)特征在進(jìn)行模型訓(xùn)練的過(guò)程中十分容易造成過(guò)擬合的現(xiàn)象。尋找有意義的高階交叉特征一般都是需要有經(jīng)驗(yàn)的人進(jìn)行人為構(gòu)建,但是窮舉出所有潛在的可能性是很難的,所以需要借助深度學(xué)習(xí)類(lèi)的方法來(lái)進(jìn)行有效的特征的低維表示學(xué)習(xí)。

深度學(xué)習(xí)類(lèi)的方法雖然可以提取出高階的特征,但是也有很大的局限性:

  1. 全連接神經(jīng)網(wǎng)絡(luò)已經(jīng)被證實(shí)過(guò)在學(xué)習(xí)交互特征的過(guò)程中效率很低;
  2. 對(duì)提取出來(lái)的特征很難具有解釋性;

本文提出的這種 AutoInt 方法就是針對(duì)上述兩個(gè)問(wèn)題對(duì)深度學(xué)習(xí)網(wǎng)絡(luò)進(jìn)行調(diào)整加以改進(jìn)。

首先將數(shù)值變量與分類(lèi)變量都進(jìn)行低維嵌入,得到一個(gè)低維空間的向量表達(dá),也是為了解決分類(lèi)變量與數(shù)值變量之間沒(méi)有良定義的內(nèi)積這類(lèi)算子的問(wèn)題。隨后將低維嵌入的特征向量輸入到本文提出的 Interacting Layer,目的是為了得到具有交互性的新的特征。在每一層的 Interacting Layer 里,每一個(gè)特征都會(huì)通過(guò) multi-head attention 機(jī)制和其他特征進(jìn)行變換組合,這就是產(chǎn)生交叉特征的原理。而且由于 multi-head attention 可以把一個(gè)特征向量映射到多個(gè)不同的空間中,因此在經(jīng)過(guò) multi-head attention 變換后的特征的組合方式也是具有多種形式的。在經(jīng)過(guò)一層的 Interacting Lyaer,特征經(jīng)過(guò)了一階的交叉組合,多次疊加 Interacting Layer 就可以得到高階復(fù)雜的特征交叉組合。對(duì)于特征的解釋性,由于注意力機(jī)制模塊主要是利用變量之間的相似度,因此高度相似的特征進(jìn)行組合時(shí)很容易得到較好的解釋。

整個(gè)網(wǎng)絡(luò)的結(jié)構(gòu)如下:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

本文主要的核心模塊 Interacting Layer 的結(jié)構(gòu)如下:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

實(shí)際上是以關(guān)注的某個(gè)特征作為 query,其他的特征向量作為 key, value,并且允許多種不同類(lèi)型的相似度計(jì)算從而得到不同的 attention value,這也是 multi-head 的主要特點(diǎn)。

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

最后把所有的

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

向量拼接起來(lái)作為學(xué)習(xí)到的組合特征,最后經(jīng)過(guò)一個(gè) ReLU 變換與之前的 feature 重新結(jié)合即可得到 Interacting Layer 的輸出:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

最終的預(yù)測(cè)輸出為:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 


微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

由于本文的主要貢獻(xiàn)在于,更加快速有效的高階特征提取工作以及特征的可解釋性,所以從這兩個(gè)角度來(lái)看本文方法的效果。

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

通過(guò)表格可以看出 AutoInt 在大多數(shù)場(chǎng)景下都有更好的效果,對(duì)于 Interacting Layer 的層數(shù)選取也是依據(jù)實(shí)驗(yàn)結(jié)果得到的啟發(fā)式結(jié)論:

微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

當(dāng) Interacting Layer 過(guò)多的時(shí)候不僅會(huì)增加模型復(fù)雜度,模型的預(yù)測(cè)效果也會(huì)受到影響。最后是模型的特征解釋?zhuān)?/p>微信開(kāi)發(fā)工程師帶你一文了解推薦領(lǐng)域最新工作

 

在這個(gè)數(shù)據(jù)任務(wù)當(dāng)中,Interacting Layer 確實(shí)捕捉到了有意義的組合特征:,左圖中紅色方框部分。右圖我們給出了數(shù)據(jù)本身的相關(guān)性的熱力圖,從中可以發(fā)現(xiàn),注意力機(jī)制基本能夠?qū)⒏叨认嚓P(guān)的特征進(jìn)行組合并且給以較高的權(quán)重,這樣的話(huà)一層 Interacting Layer 之后輸出的特征實(shí)際上就具有了較好的解釋性。

總結(jié)

以上這些是今年來(lái)在推薦系統(tǒng)方面比較有意義的工作,任何模型的效果都強(qiáng)依賴(lài)數(shù)據(jù)、特征、樣本質(zhì)量。論文思想實(shí)際上也是來(lái)源于人的本身行為習(xí)慣生活經(jīng)驗(yàn)等,例如購(gòu)物時(shí)候行為序列的重要性等。通過(guò)思考如何讓計(jì)算機(jī)模擬或者關(guān)注人們?cè)谌粘P袨榈囊恍╆P(guān)鍵模式,得到特征的有效轉(zhuǎn)變和映射,讓整個(gè)模型能夠有更好的表現(xiàn)。所謂網(wǎng)絡(luò)的構(gòu)建不同也無(wú)非在于不同應(yīng)用場(chǎng)景,特征的利用方式不同。

另外推薦領(lǐng)域一些最新論文其實(shí)也是參考了 NLP 一些新的思路,例如上面介紹的 BST、autoint 都引入了 Transformer 的核心模塊 Multi-head Self-attention,在此基礎(chǔ)上做各種變換,實(shí)現(xiàn)各種玩法。看懂論文需要先徹底熟悉 Multi-head Self-attention 的原理,可以結(jié)合源論文與代碼去看,用開(kāi)源數(shù)據(jù)集去跑流程,打印中間結(jié)構(gòu),熟悉論文思想的同時(shí)也可以提升工程實(shí)現(xiàn)能力。

從各自的出發(fā)點(diǎn)來(lái)看,三篇文章都可以相互彌補(bǔ):

對(duì)于 MIND 而言,雖然已經(jīng)考量了顧客在瀏覽商品的時(shí)候會(huì)有固定類(lèi)別的興趣偏好,但是僅僅考慮了歷史行為中的聚類(lèi)信息而沒(méi)有利用行為的序列或者趨勢(shì)信息,這種序列信息往往在下一步的對(duì)未來(lái)行為的推薦中會(huì)更有作用。另外文中也提及了,這種聚類(lèi)的方式還有待改進(jìn),通過(guò)結(jié)合其他方法能夠提升類(lèi)別的聚合性,進(jìn)一步提升類(lèi)別的準(zhǔn)確程度。而 BST 本身恰恰就是利用原始特征在 ranking 模塊通過(guò)網(wǎng)絡(luò)結(jié)構(gòu)來(lái)獲取序列行為信息。但 BST 本身的劣勢(shì)在于,如果原始特征維度很大,人工的構(gòu)建交叉特征很不現(xiàn)實(shí)。

此時(shí),AutoInt 就可以出面幫助解決對(duì)于 raw features,如何快速高效構(gòu)建 cross features 的問(wèn)題。通過(guò) AutoInt 構(gòu)建出來(lái)的特征是否在其他的分類(lèi)器或者模型上依舊能夠帶來(lái)提升,這是有待進(jìn)一步實(shí)驗(yàn)研究的問(wèn)題。另外,如何針對(duì)推薦系統(tǒng)的冷啟動(dòng)問(wèn)題或者不同客戶(hù)群體進(jìn)行推薦的策略也可以基于以上工作加以改進(jìn)。最后,這些光鮮亮麗的論文思想聽(tīng)上去很是高大上,在實(shí)際場(chǎng)景下真正復(fù)現(xiàn)論文里面的效果還是比較難的,需要結(jié)合數(shù)據(jù)場(chǎng)景作各種優(yōu)化,模型結(jié)構(gòu)優(yōu)化,還要具備生產(chǎn)環(huán)境下復(fù)雜模型上線(xiàn)的能力,這些都是需要努力去攻克的。

參考

AutoInt: Automatic Feature Interaction Learning via Self-Attentive Neural Networks

Multi-Interest Network with Dynamic Routing for Recommendation at Tmall

Behavior Sequence Transformer for E-commerce Recommendation in Alibaba, Alibaba

Deep Interest Network for Click-Through Rate Prediction

Deep Neural Network for YouTube Recommendation

分享到:
標(biāo)簽:開(kāi)發(fā)
用戶(hù)無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過(guò)答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定