用户行为序列建模(篇九)-【阿里】BERT4Rec
知识框架
简介
BERT4Rec(Sequential Recommendation with Bidirectional Encoder Representations from Transformer)是阿里巴巴于2019年提出的序列推荐模型。
序列推荐模型
有以下几类:
(1)基于马尔可夫链;
(2)基于RNN;
(3)其余类型的DNN,如STAMP
已有工作的不足
以往基于用户行为序列按照从左到右建模得到的单向模型是局部最优的。体现在两点:
(1)单向的模型结构限制了用户行为序列的隐式表征;
(2)假定序列是严格有序的,是不符合实际的
解决方案
使用双向模型-bert设计序列推荐模型。为了避免信息泄漏,有效训练双向模型,我们在序列推荐中引入Cloze。
Cloze:
(1)方式:通过根据当天的左、右上下文,预测序列中随机masked的item
(2)优点:可以产生更多的样本来训练出一个更有效的模型
(3)缺点:和最终序列推荐的目标不一致。解决方案:通过在序列中需要预测的item处用【mask】代替,表明这是需要被预测的item,然后基于最终的隐式表征推荐
模型结构和Loss设计
模型结构
整体结构如下:
对比SASRec、RNN的单向结构,Bert4Rec是双向的,可以更充分地学习用户表征;对比基于CNN的模型,可以扩大感受野
可以将上述结构分为三部分:Embedding Layer、Transformer Layer、Output Layer
Embedding Layer
由两部分组成:vi、pi。vi是item i的embedding,pi是位置i的embedding。其中,在构建item序列的时候,我们按照时间远近截断最近的N个item。
位置向量:相比于“Attention Is All Your Need”论文中用固定形式表示位置,这里学习一个位置向量,在数据集上取得了更好的效果
Transformer Layer
结构见上图,各个Transformer Layer叠加在一起
激活函数:采用了GELU代替ReLU
LN(Layer Normalization):保证模型训练可收敛,加速训练
说明:隐藏层维度d越大较好,但是不能过大,过大导致“过拟合”
Output Layer
模型训练
为了提升训练模型的速度,应用了“Mask Language Model”的目标(Cloze task)
Mask Language Model:随机mask 所有item中占比为a%的item(将item用[mask]代替,预测mask的item)。mask率不能过大,也不能过小,都影响效果。而且,对于不同的数据集,效果较好时对应的mask率是不同的
损失函数:交叉熵损失,如下所示:
BERT4Rec VS BERT
区别在于:
(1)对于不同的序列推荐数据集,需要重新训练BERTRec;而对于BERT,应用在NLP的预训练中,因为各个任务共享想用的知识
(2)不使用the next sentence loss 和segment embeddings
模型效果
Baseline
有如下8个模型:
(1)POP:热门
(2)BPR-MF:基于pairwise loss的矩阵分解
(3)NCF
(4)FPMC:结合MF、一阶马尔可夫链
(5)GRU4Rec:基于session、GRU的序列推荐
(6)GRU4Rec+:相比(5),更改了loss、采样方式
(7)Caser:基于CNN、高阶马尔可夫链的序列推荐
(8)SASRec:基于Transformer的单向序列推荐
评估
根据上述8个模型的最优结果进行对比
离线:HR@K、NDCG@K
负采样:为了让采样更置信、更具有代表性,根据item的流行度采样top100的item作为副样本。从而可以将评价指标更改为:对于每个用户预测的负样本的list-wise loss
数据集
都是公开数据集
数据集 | 说明 | 数据集网址 |
Amazon Beauty | 从Amazon数据集中筛选出“Beauty”类别的商品数据 | http://jmcauley.ucsd.edu/data/amazon/ |
Steam | 来自于Steam平台的数据 | https://cseweb.ucsd.edu/~jmcauley/datasets.html#steam_data |
MovieLens 1m | \ | https://grouplens.org/datasets/movielens/1m/ |
MovieLens 20m | \ | https://grouplens.org/datasets/movielens/20m/ |
离线效果
结论:
(1)在上述4个数据集,BERT4Rec的效果均是最佳;
(2)考虑用户行为的序列信息、结合self-attention机制,有助于提升序列推荐效果
具体效果如下所示:
效果说明
1、针对长序列
序列长度越长,越容易引入异常信息、噪声。但是,BertRec可以对长序列进行较好的建模,这个得益于“双向”的transformer-layer
2、计算量
BERTRec的不足:计算量比较大,可以弥补的一点:可以并行计算self-attention
3、Transformer的h设置
h较大比较好:可以捕捉multi-head self-attention中的“长依赖”关系
代码实现
- NCF开源代码
- GRU4Rec开源代码
- Caser开源代码
- SASRec开源代码
- BERT4Rec开源代码
结尾
亲爱的读者朋友:感谢您在繁忙中驻足阅读本期内容!您的到来是对我们最大的支持❤️
正如古语所言:"当局者迷,旁观者清"。您独到的见解与客观评价,恰似一盏明灯💡,能帮助我们照亮内容盲区,让未来的创作更加贴近您的需求。
若此文给您带来启发或收获,不妨通过以下方式为彼此搭建一座桥梁: ✨ 点击右上角【点赞】图标,让好内容被更多人看见 ✨ 滑动屏幕【收藏】本篇,便于随时查阅回味 ✨ 在评论区留下您的真知灼见,让我们共同碰撞思维的火花
我始终秉持匠心精神,以键盘为犁铧深耕知识沃土💻,用每一次敲击传递专业价值,不断优化内容呈现形式,力求为您打造沉浸式的阅读盛宴📚。
有任何疑问或建议?评论区就是我们的连心桥!您的每一条留言我都将认真研读,并在24小时内回复解答📝。
愿我们携手同行,在知识的雨林中茁壮成长🌳,共享思想绽放的甘甜果实。下期相遇时,期待看到您智慧的评论与闪亮的点赞身影✨!
万分感谢🙏🙏您的点赞👍👍、收藏⭐🌟、评论💬🗯️、关注❤️💚~
自我介绍:一线互联网大厂资深算法研发(工作6年+),4年以上招聘面试官经验(一二面面试官,面试候选人400+),深谙岗位专业知识、技能雷达图,已累计辅导15+求职者顺利入职大中型互联网公司。熟练掌握大模型、NLP、搜索、推荐、数据挖掘算法和优化,提供面试辅导、专业知识入门到进阶辅导等定制化需求等服务,助力您顺利完成学习和求职之旅(有需要者可私信联系)
友友们,自己的知乎账号为“快乐星球”,定期更新技术文章,敬请关注!