聊天機器人之 BERT4Rec, 使用Bert進行序列推薦
目錄
0. 本文概覽
今天給大家介紹一篇BERT用於推薦系統的文章,題目是《BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer》,文章作者都是出自阿里。
- 引用:Sun F, Liu J, Wu J, et al. BERT4Rec: Sequential recommendation with bidirectional encoder representations from transformer[C]//Proceedings of the 28th ACM International Conference on Information and Knowledge Management. 2019: 1441-1450.
- 論文下載地址:https://arxiv.org/pdf/1904.06690.pdf
1. BERT4Rec簡介
根據使用者歷史的行為,對使用者動態的偏好進行建模,對於推薦系統來說是有挑戰的和重要的。之前的演算法使用序列神經網路從左向右地編碼使用者的歷史互動資訊為隱含表示,進而進行推薦,因此只利用了單向的資訊進行建模。儘管它們是有效的,但由於存在以下限制,我們認為這種從左到右的單向模型是次優的:
- 單向結構限制了使用者行為序列中隱藏表示的能力;
- 之前的序列神經網路經常採用嚴格有序的序列,這並不總是可行的;
為了解決這些限制,我們提出了一個稱為BERT4Rec的序列推薦模型,該模型採用深層的雙向自注意力來對使用者行為序列進行建模。為了避免資訊洩漏並有效地訓練雙向模型,我們採用Cloze目標進行序列推薦,通過聯合item左右的上下文來預測序列中隨機masked item。用這種方式,我們學習了雙向表示模型,允許使用者歷史行為中的每個item融合左右兩側的資訊來作出推薦。在四個基準資料集上進行的大量實驗表明,我們的模型始終優於各種最新的序列模型。
2. 背景
精確地捕捉使用者的興趣,是推薦系統的核心問題。在許多實際應用中,使用者當前的興趣本質上是動態變化的,受其歷史行為的影響。例如,儘管在正常情況下不會購買遊戲機配件,但在購買Nintendo Switch之後,你可能會很快購買配件(例如Joy-Con控制器)。
為了捕捉使用者的偏好的動態變化,提出了許多根據使用者歷史互動資訊的序列推薦演算法,最早使用馬爾科夫對使用者序列進行建模,其中一些方法的強假設破壞了推薦系統的準確性。近期,一些序列神經網路在序列推薦問題中取得了不俗的效果。最基本的思想就是將使用者的歷史序列自左向右編碼成一個向量,然後基於這個向量進行推薦。
儘管它們具有普遍性和有效性,但我們認為這樣從左到右的單向模型不足以學習使用者行為序列的最佳表示。主要因為這種單向模型限制了歷史序列中items的隱藏表示的功能,其中每個item只能編碼來自先前item的資訊。另一個限制是,先前的單向模型最初是針對具有自然順序的序列資料(例如,文字和時間序列資料)引入的。他們經常對資料採用嚴格的順序排列,這對於現實應用程式中的使用者行為並不總是正確的。實際上,由於各種不可觀察的外部因素,使用者的歷史互動中的item選擇可能不會遵循嚴格的順序假設。在這種情況下,至關重要的是將兩個方向的上下文合併到使用者行為序列建模中。
為了解決上述限制,本篇文章的創新點:
- 提出了一種基於雙向self-attention和Cloze task的使用者行為序列建模方法。據我們所知,這是第一個將深度序列模型和Cloze task引入推薦系統的研究。
- 將我們的模型與最先進的方法進行了比較,並通過對四個基準資料集的定量分析,證明了本文演算法的有效性。
- 我們進行了一項消融分析,分析了模型中關鍵部件的貢獻。
3. BERT4Rec模型介紹
3.1 問題定義
定義, U = { u 1 , u 2 , … , u ∣ U ∣ } U = \{ u_1, u_2, \dots, u_{|U|} \} U={u1,u2,…,u∣U∣} 為使用者集合, V = { v 1 , v 2 , … , v ∣ V ∣ } V=\{v_1,v_2, \dots, v_{|V|}\} V={v1,v2,…,v∣V∣} 為物品集合, S u = [ v 1 ( u ) , … , v t ( u ) , … , v n u ( u ) ] S_u = [ v^{(u)}_1, \dots, v^{(u)}_t, \dots, v^{(u)}_{n_u}] Su=[v1(u),…,vt(u),…,vnu(u)]為使用者歷史行為序列。我們的目標是預測下一時刻使用者與每個候選物品互動的概率:
p ( v n u + 1 ( u ) = v ∣ S u ) p(v^{(u)}_{n_u + 1} = v | S_u) p(vnu+1(u)=v∣Su)
3.2 模型結構
如下圖(b)所示,含有L層的Transformer,每一層利用前一層所有的資訊。相比於圖(d)基於RNN的推薦模型,self-attention可以捕獲任意位置的資訊。相比於基於CNN的推薦模型,可以捕獲整個field的資訊。相比於圖(c)和圖(d)的模型(都是left-to-right的單向模型),本文提出的雙向模型可以解決現有模型的問題。
3.3 Transformer層
如圖(a)所示,Transformer由兩部分組成Multi-Head Self-Attention和Position-wise Feed-Forward network部分。
(1)Multi-Head Self-Attention
對於模型框架中的第 層Transformer,輸入為
H
l
H^l
Hl,首先是Multi-Head Self-Attention過程:
其次是Dropout和Add & Norm過程,這裡的Add就是Skip Connection操作,目的是反向傳播時防止梯度消失的問題;而Norm是Layer Norm操作。
(2)Position-wise Feed-Forward Network
由於只有線性對映,為了使得模型具有非線性的性質,所以採用了Position-wise Feed-Forward Network。Position-wise的意思是說,每個位置上的向量分別輸入到前向神經網路中,計算方式如下:
這裡採用的啟用函式是 Gaussian Error Linear Unit (GELU) ,而非RELU,其出自論文《Gaussian error linear units (gelus)》。GELU在RELU的基礎上加入了統計的特性,在論文中提到的多個深度學習任務中都取得了較好的實驗結果。
如果讀者對Transformer或BERT的原理不熟悉,可以看一下我之前對於這些模型的詳細解析:
3.4 Embedding層
在沒有任何RNN或CNN模組的情況下,Transformer不知道輸入序列的順序。為了利用輸入的順序資訊,我們在Transformer的Embedding層加入了位置嵌入,本文的位置向量是學到的,不是transformer中的正弦。位置向量矩陣可以給定任意位置的向量,但是要明確最大的長度,因此需要對輸入序列進行截斷。
對於給定的物品 v i v_i vi ,其輸入表示 h i 0 h^0_i hi0 是通過將相應的物品和位置Embedding求和來構造的:
h i 0 = v i + p i h^0_i = v_i + p_i hi0=vi+pi
3.5 Output層
經過層的資訊交換之後,我們得到輸入序列中所有items的最終輸出
H
L
=
{
h
1
L
,
…
,
h
t
−
1
L
,
h
t
L
}
H^L=\{h^L_1, \dots, h^{L}_{t-1}, h^L_{t}\}
HL={h1L,…,ht−1L,htL}。如上圖(b)所示,我們在第 t 步掩蓋掉物品
v
t
v_t
vt ,然後基於
h
t
L
h^L_t
htL 預測被掩蓋的物品
v
t
v_t
vt 。這裡使用兩層帶有GELU啟用函式的前饋網路得到最終的輸出:
這裡需要注意,輸出層的公式是推薦場景特有的,因此我來詳細解釋一下。 W p W^p Wp 是前饋網路的權重矩陣; 和 是偏置項; 是item集合的embedding矩陣。BERT4Rec模型在輸入層和輸出層用了共享的物品embedding矩陣,目的是減輕過擬合和減少模型大小。
3.6 模型訓練和預測
我們的目的是預測使用者下一個要互動的物品 v t + 1 v_{t+1} vt+1 ,對於傳統的序列推薦模型,如上圖(d)中的RNN模型,輸入是 [ v 1 , v 2 , … , v t ] [v_1,v_2,\dots,v_{t}] [v1,v2,…,vt] ,轉換為對應的輸出為 [ v 2 , v 3 , … , v t + 1 ] [v_2,v_3,\dots,v_{t+1}] [v2,v3,…,vt+1],那麼我們自然可以拿最後一個時刻輸出的物品進行推薦。而在BERT4Rec中,由於是雙向模型,每一個item的最終輸出表示都包含了要預測物品的資訊,這樣就造成了一定程度的資訊洩漏。因此採用Cloze taske,也就是將輸入序列中的p%的物品進行masked,然後根據上下文資訊預測masked的物品。
在訓練階段,為了提升模型的泛化能力,讓模型訓練到更多的東西,同時也能夠創造更多的樣本,借鑑了BERT中的Masked Language Model的訓練方式,隨機的把輸入序列的一部分掩蓋(即變為[mask]標記),讓模型來預測這部分蓋住地方對應的物品:
採用這種訓練方式,最終的損失函式為:
如上所述,我們在訓練過程和最終的序列預測推薦任務之間是不匹配的。因為Cloze task的目的是預測當前被masked的物品,而序列預測推薦的目的是預測未來。為了解決這個問題,在預測階段我們將masked附加到使用者行為序列的末尾,然後根據該masked的最終隱藏表示來預測下一項。
為了更好地匹配序列推薦任務(即,預測最後一項),在訓練過程中我們還生成了只mask輸入序列中最後一項的樣本。這個工作就像對序列推薦的微調一樣,可以進一步提高推薦效能。
4. 實驗
本論文的程式碼已開源,地址:https://github.com/FeiSun/BERT4Rec 。讀者一定要親自把論文讀一遍,復現一下論文中的實驗。我把實驗部分總結如下:
-
首先,論文對比了BERT4Rec模型和一些Base模型在4個數據集上的表現,發現BERT4Rec模型相比於Base模型,其效能都有較大的提升。
-
其次,是對Embedding的長度、訓練時mask物品的比例和序列的最大長度等引數的對比。結論為:Embedding長度越長,模型的效果更好;對於不同的資料集,最佳mask的比例並不相同;對於不同的訓練集,最佳的序列長度也不相同。
-
最後,是對模型結構的一些對比實驗,主要有是否使用PE(positional embedding),是否使用PFFN(position-wise feed-forward network),是否使用LN(layer normalization),是否使用RC(即Add操作,residual connection),是否使用Dropout,以及Transformer Layer的層數和Multi-head Attention中head的個數。
5. 個人感悟
總之,BERT4Rec就是把BERT用在推薦系統中,知道使用者的播放(購買、點選、…)序列 item1, item2, item3,預測下一個播放的item問題。訓練的時候使用Mask LM任務使用海量使用者行為序列進行訓練,模型評估時將序列的最後一個item進行masked,預測的時候在序列的最後插入一個“[mask]”,然後用“[mask]”增強後的embedding預測使用者接下來會觀看哪個item。整體來說,該篇論文為BERT在推薦系統領域的工業界落地提供了強有力的指導說明,但在推薦系統領域的學術界來說創新性就顯得不是很大。
BERT4Rec對於實際工作,可以成為一個思路上的參考,對於具體的演算法落地我提出兩點思考:
- BERT的訓練和預測耗時耗資源,如何提高BERT的線上服務能力?這裡騰訊開源了一個叫TurboTransformers的工具,對Transformer推理過程起到了加速作用,讓線上推理引擎變得更加強大。開源地址:
https://github.com/Tencent/TurboTransformers
- 論文中沒有使用物品、使用者屬性和場景的資訊,只使用了行為資訊,如何把額外的資訊加入模型是值得重點探索的。
6. Reference
【1】Sun F, Liu J, Wu J, et al. BERT4Rec: Sequential recommendation with bidirectional encoder representations from transformer[C]//Proceedings of the 28th ACM International Conference on Information and Knowledge Management. 2019: 1441-1450.
【2】Hendrycks D, Gimpel K. Gaussian error linear units (gelus)[J]. arXiv preprint arXiv:1606.08415, 2016.
【3】RS Meet DL(六十一)-[阿里]使用Bert來進行序列推薦,https://mp.weixin.qq.com/s/y23s_Y8Der12NMVw9y2NEA
【4】BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer,https://blog.csdn.net/luoxiaolin_love/article/details/93192601
【5】BERT4REC:使用Bert進行推薦 - 魏晉的文章 - 知乎 https://zhuanlan.zhihu.com/p/97123417
【6】BERT在美團搜尋核心排序的探索和實踐,https://mp.weixin.qq.com/s/mFRhp9pJRa9yHwqc98FMbg
【7】微信也在用的Transformer加速推理工具 | 騰訊第100個對外開源專案,地址:https://mp.weixin.qq.com/s/3QBTccXceUhK47TlMcCllg
以下文章來源於Microstrong ,作者Microstrong
BERT4Rec:使用Bert進行序列推薦