今天給大家介紹一篇BERT用于推薦系統(tǒng)的文章,題目是《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簡(jiǎn)介
根據(jù)用戶歷史的行為,對(duì)用戶動(dòng)態(tài)的偏好進(jìn)行建模,對(duì)于推薦系統(tǒng)來(lái)說(shuō)是有挑戰(zhàn)的和重要的。之前的算法使用序列神經(jīng)網(wǎng)絡(luò)從左向右地編碼用戶的歷史交互信息為隱含表示,進(jìn)而進(jìn)行推薦,因此只利用了單向的信息進(jìn)行建模。盡管它們是有效的,但由于存在以下限制,我們認(rèn)為這種從左到右的單向模型是次優(yōu)的:
單向結(jié)構(gòu)限制了用戶行為序列中隱藏表示的能力;
之前的序列神經(jīng)網(wǎng)絡(luò)經(jīng)常采用嚴(yán)格有序的序列,這并不總是可行的;
為了解決這些限制,我們提出了一個(gè)稱(chēng)為BERT4Rec的序列推薦模型,該模型采用深層的雙向自注意力來(lái)對(duì)用戶行為序列進(jìn)行建模。為了避免信息泄漏并有效地訓(xùn)練雙向模型,我們采用Cloze目標(biāo)進(jìn)行序列推薦,通過(guò)聯(lián)合item左右的上下文來(lái)預(yù)測(cè)序列中隨機(jī)masked item。用這種方式,我們學(xué)習(xí)了雙向表示模型,允許用戶歷史行為中的每個(gè)item融合左右兩側(cè)的信息來(lái)作出推薦。在四個(gè)基準(zhǔn)數(shù)據(jù)集上進(jìn)行的大量實(shí)驗(yàn)表明,我們的模型始終優(yōu)于各種最新的序列模型。
2. 背景
精確地捕捉用戶的興趣,是推薦系統(tǒng)的核心問(wèn)題。在許多實(shí)際應(yīng)用中,用戶當(dāng)前的興趣本質(zhì)上是動(dòng)態(tài)變化的,受其歷史行為的影響。例如,盡管在正常情況下不會(huì)購(gòu)買(mǎi)游戲機(jī)配件,但在購(gòu)買(mǎi)Nintendo Switch之后,你可能會(huì)很快購(gòu)買(mǎi)配件(例如Joy-Con控制器)。
為了捕捉用戶的偏好的動(dòng)態(tài)變化,提出了許多根據(jù)用戶歷史交互信息的序列推薦算法,最早使用馬爾科夫?qū)τ脩粜蛄羞M(jìn)行建模,其中一些方法的強(qiáng)假設(shè)破壞了推薦系統(tǒng)的準(zhǔn)確性。近期,一些序列神經(jīng)網(wǎng)絡(luò)在序列推薦問(wèn)題中取得了不俗的效果。最基本的思想就是將用戶的歷史序列自左向右編碼成一個(gè)向量,然后基于這個(gè)向量進(jìn)行推薦。
盡管它們具有普遍性和有效性,但我們認(rèn)為這樣從左到右的單向模型不足以學(xué)習(xí)用戶行為序列的最佳表示。主要因?yàn)檫@種單向模型限制了歷史序列中items的隱藏表示的功能,其中每個(gè)item只能編碼來(lái)自先前item的信息。另一個(gè)限制是,先前的單向模型最初是針對(duì)具有自然順序的序列數(shù)據(jù)(例如,文本和時(shí)間序列數(shù)據(jù))引入的。他們經(jīng)常對(duì)數(shù)據(jù)采用嚴(yán)格的順序排列,這對(duì)于現(xiàn)實(shí)應(yīng)用程序中的用戶行為并不總是正確的。實(shí)際上,由于各種不可觀察的外部因素,用戶的歷史交互中的item選擇可能不會(huì)遵循嚴(yán)格的順序假設(shè)。在這種情況下,至關(guān)重要的是將兩個(gè)方向的上下文合并到用戶行為序列建模中。
為了解決上述限制,本篇文章的創(chuàng)新點(diǎn):
提出了一種基于雙向self-attention和Cloze task的用戶行為序列建模方法。據(jù)我們所知,這是第一個(gè)將深度序列模型和Cloze task引入推薦系統(tǒng)的研究。
將我們的模型與最先進(jìn)的方法進(jìn)行了比較,并通過(guò)對(duì)四個(gè)基準(zhǔn)數(shù)據(jù)集的定量分析,證明了本文算法的有效性。
我們進(jìn)行了一項(xiàng)消融分析,分析了模型中關(guān)鍵部件的貢獻(xiàn)。
3. BERT4Rec模型介紹
3.1 問(wèn)題定義
定義, 為用戶集合, 為物品集合,為用戶歷史行為序列。我們的目標(biāo)是預(yù)測(cè)下一時(shí)刻用戶與每個(gè)候選物品交互的概率:
3.2 模型結(jié)構(gòu)
如下圖(b)所示,含有L層的Transformer,每一層利用前一層所有的信息。相比于圖(d)基于RNN的推薦模型,self-attention可以捕獲任意位置的信息。相比于基于CNN的推薦模型,可以捕獲整個(gè)field的信息。相比于圖(c)和圖(d)的模型(都是left-to-right的單向模型),本文提出的雙向模型可以解決現(xiàn)有模型的問(wèn)題。
3.3 Transformer層
如圖(a)所示,Transformer由兩部分組成Multi-Head Self-Attention和Position-wise Feed-Forward network部分。
(1)Multi-Head Self-Attention
對(duì)于模型框架中的第 層Transformer,輸入為 ,首先是Multi-Head Self-Attention過(guò)程:
其次是Dropout和Add & Norm過(guò)程,這里的Add就是Skip Connection操作,目的是反向傳播時(shí)防止梯度消失的問(wèn)題;而Norm是Layer Norm操作。
(2)Position-wise Feed-Forward Network
由于只有線性映射,為了使得模型具有非線性的性質(zhì),所以采用了Position-wise Feed-Forward Network。Position-wise的意思是說(shuō),每個(gè)位置上的向量分別輸入到前向神經(jīng)網(wǎng)絡(luò)中,計(jì)算方式如下:
這里采用的激活函數(shù)是 Gaussian Error Linear Unit (GELU) ,而非RELU,其出自論文《Gaussian error linear units (gelus)》。GELU在RELU的基礎(chǔ)上加入了統(tǒng)計(jì)的特性,在論文中提到的多個(gè)深度學(xué)習(xí)任務(wù)中都取得了較好的實(shí)驗(yàn)結(jié)果。
如果讀者對(duì)Transformer或BERT的原理不熟悉,可以看一下我之前對(duì)于這些模型的詳細(xì)解析:
Self-Attention與Transformer
從Transformer到BERT模型
BERT模型精講
3.4 Embedding層
在沒(méi)有任何RNN或CNN模塊的情況下,Transformer不知道輸入序列的順序。為了利用輸入的順序信息,我們?cè)赥ransformer的Embedding層加入了位置嵌入,本文的位置向量是學(xué)到的,不是transformer中的正弦。位置向量矩陣可以給定任意位置的向量,但是要明確最大的長(zhǎng)度,因此需要對(duì)輸入序列進(jìn)行截?cái)唷?/p>
對(duì)于給定的物品 ,其輸入表示 是通過(guò)將相應(yīng)的物品和位置Embedding求和來(lái)構(gòu)造的:
3.5 Output層
經(jīng)過(guò)層的信息交換之后,我們得到輸入序列中所有items的最終輸出。如上圖(b)所示,我們?cè)诘?步掩蓋掉物品 ,然后基于 預(yù)測(cè)被掩蓋的物品 。這里使用兩層帶有GELU激活函數(shù)的前饋網(wǎng)絡(luò)得到最終的輸出:
這里需要注意,輸出層的公式是推薦場(chǎng)景特有的,因此我來(lái)詳細(xì)解釋一下。是前饋網(wǎng)絡(luò)的權(quán)重矩陣; 和 是偏置項(xiàng); 是item集合的embedding矩陣。BERT4Rec模型在輸入層和輸出層用了共享的物品embedding矩陣,目的是減輕過(guò)擬合和減少模型大小。
3.6 模型訓(xùn)練和預(yù)測(cè)
我們的目的是預(yù)測(cè)用戶下一個(gè)要交互的物品 ,對(duì)于傳統(tǒng)的序列推薦模型,如上圖(d)中的RNN模型,輸入是 ,轉(zhuǎn)換為對(duì)應(yīng)的輸出為 ,那么我們自然可以拿最后一個(gè)時(shí)刻輸出的物品進(jìn)行推薦。而在BERT4Rec中,由于是雙向模型,每一個(gè)item的最終輸出表示都包含了要預(yù)測(cè)物品的信息,這樣就造成了一定程度的信息泄漏。因此采用Cloze taske,也就是將輸入序列中的p%的物品進(jìn)行masked,然后根據(jù)上下文信息預(yù)測(cè)masked的物品。
在訓(xùn)練階段,為了提升模型的泛化能力,讓模型訓(xùn)練到更多的東西,同時(shí)也能夠創(chuàng)造更多的樣本,借鑒了BERT中的Masked Language Model的訓(xùn)練方式,隨機(jī)的把輸入序列的一部分掩蓋(即變?yōu)閇mask]標(biāo)記),讓模型來(lái)預(yù)測(cè)這部分蓋住地方對(duì)應(yīng)的物品:
采用這種訓(xùn)練方式,最終的損失函數(shù)為:
如上所述,我們?cè)谟?xùn)練過(guò)程和最終的序列預(yù)測(cè)推薦任務(wù)之間是不匹配的。因?yàn)镃loze task的目的是預(yù)測(cè)當(dāng)前被masked的物品,而序列預(yù)測(cè)推薦的目的是預(yù)測(cè)未來(lái)。為了解決這個(gè)問(wèn)題,在預(yù)測(cè)階段我們將masked附加到用戶行為序列的末尾,然后根據(jù)該masked的最終隱藏表示來(lái)預(yù)測(cè)下一項(xiàng)。
為了更好地匹配序列推薦任務(wù)(即,預(yù)測(cè)最后一項(xiàng)),在訓(xùn)練過(guò)程中我們還生成了只mask輸入序列中最后一項(xiàng)的樣本。這個(gè)工作就像對(duì)序列推薦的微調(diào)一樣,可以進(jìn)一步提高推薦性能。
4. 實(shí)驗(yàn)
本論文的代碼已開(kāi)源,地址:https://github.com/FeiSun/BERT4Rec 。讀者一定要親自把論文讀一遍,復(fù)現(xiàn)一下論文中的實(shí)驗(yàn)。我把實(shí)驗(yàn)部分總結(jié)如下:
首先,論文對(duì)比了BERT4Rec模型和一些Base模型在4個(gè)數(shù)據(jù)集上的表現(xiàn),發(fā)現(xiàn)BERT4Rec模型相比于Base模型,其性能都有較大的提升。
其次,是對(duì)Embedding的長(zhǎng)度、訓(xùn)練時(shí)mask物品的比例和序列的最大長(zhǎng)度等參數(shù)的對(duì)比。結(jié)論為:Embedding長(zhǎng)度越長(zhǎng),模型的效果更好;對(duì)于不同的數(shù)據(jù)集,最佳mask的比例并不相同;對(duì)于不同的訓(xùn)練集,最佳的序列長(zhǎng)度也不相同。
最后,是對(duì)模型結(jié)構(gòu)的一些對(duì)比實(shí)驗(yàn),主要有是否使用PE(positional embedding),是否使用PFFN(position-wise feed-forward network),是否使用LN(layer normalization),是否使用RC(即Add操作,residual connection),是否使用Dropout,以及Transformer Layer的層數(shù)和Multi-head Attention中head的個(gè)數(shù)。
5. 個(gè)人感悟
總之,BERT4Rec就是把BERT用在推薦系統(tǒng)中,知道用戶的播放(購(gòu)買(mǎi)、點(diǎn)擊、...)序列 item1, item2, item3,預(yù)測(cè)下一個(gè)播放的item問(wèn)題。訓(xùn)練的時(shí)候使用Mask LM任務(wù)使用海量用戶行為序列進(jìn)行訓(xùn)練,模型評(píng)估時(shí)將序列的最后一個(gè)item進(jìn)行masked,預(yù)測(cè)的時(shí)候在序列的最后插入一個(gè)“[mask]”,然后用“[mask]”增強(qiáng)后的embedding預(yù)測(cè)用戶接下來(lái)會(huì)觀看哪個(gè)item。整體來(lái)說(shuō),該篇論文為BERT在推薦系統(tǒng)領(lǐng)域的工業(yè)界落地提供了強(qiáng)有力的指導(dǎo)說(shuō)明,但在推薦系統(tǒng)領(lǐng)域的學(xué)術(shù)界來(lái)說(shuō)創(chuàng)新性就顯得不是很大。
BERT4Rec對(duì)于實(shí)際工作,可以成為一個(gè)思路上的參考,對(duì)于具體的算法落地我提出兩點(diǎn)思考:
BERT的訓(xùn)練和預(yù)測(cè)耗時(shí)耗資源,如何提高BERT的在線服務(wù)能力?這里騰訊開(kāi)源了一個(gè)叫TurboTransformers的工具,對(duì)Transformer推理過(guò)程起到了加速作用,讓線上推理引擎變得更加強(qiáng)大。開(kāi)源地址:https://github.com/Tencent/TurboTransformers
論文中沒(méi)有使用物品、用戶屬性和場(chǎng)景的信息,只使用了行為信息,如何把額外的信息加入模型是值得重點(diǎn)探索的。
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來(lái)進(jìn)行序列推薦,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進(jìn)行推薦 - 魏晉的文章 - 知乎 https://zhuanlan.zhihu.com/p/97123417
【6】BERT在美團(tuán)搜索核心排序的探索和實(shí)踐,https://mp.weixin.qq.com/s/mFRhp9pJRa9yHwqc98FMbg
【7】微信也在用的Transformer加速推理工具 | 騰訊第100個(gè)對(duì)外開(kāi)源項(xiàng)目,地址:https://mp.weixin.qq.com/s/3QBTccXceUhK47TlMcCllg
責(zé)任編輯:xj
原文標(biāo)題:【推薦系統(tǒng)】BERT4Rec:使用Bert進(jìn)行序列推薦
文章出處:【微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
序列
+關(guān)注
關(guān)注
0文章
70瀏覽量
19554 -
推薦系統(tǒng)
+關(guān)注
關(guān)注
1文章
43瀏覽量
10075 -
自然語(yǔ)言
+關(guān)注
關(guān)注
1文章
287瀏覽量
13346
原文標(biāo)題:【推薦系統(tǒng)】BERT4Rec:使用Bert進(jìn)行序列推薦
文章出處:【微信號(hào):zenRRan,微信公眾號(hào):深度學(xué)習(xí)自然語(yǔ)言處理】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論