作者 | 知乎博主@青枫拂岸

整理 | NewBeeNLP

阿里的搜索团队在2019 DLP-KDD上发表的《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》[1]

文章的主要内容就是将近几年在NLP领域常用的Transformer模型迁移到推荐领域,利用Transformer处理 用户行为序列信息。模型已部署在淘宝推荐精排阶段,相比于Wide&Deep和DIN模型,CTR有了进一步提升。

1. 介绍

在深度学习时代,淘宝以WDL(Wide&Deep简称,下同)为基础,构建Rank阶段模型。虽然WDL作为推荐领域影响深远的模型,但是现阶段在处理某些特征时却出现了瓶颈,即: 用户行为序列( users’ behavior sequences 简称 UBS) , 即用户的item点击顺序。

该特征是对用户后续行为的点击预测非常重要的特征。近几年,越来越多的公司开始探索如何利用用户行为序列,以此来提高用户CTR,从而带来收益。例如阿里妈妈团队: 经典的 引入Attention机制的DIN[2] 和 GRU结构的DIEN[3] 和 以Capsule network为举出的MIND。序列化推荐的常用建模方式可以参考:https://zhuanlan.zhihu.com/p/272862240

文章同时也指出DIN的缺点:虽然使用Attention获取候item和用户历史点击的item的相似性,但是却并未考虑用户行为的顺序性质。

由于Transformer近几年在NLP领域的大获成功,从而将其引入处理UBS特征(主要是Multi-head Self-attention + Position embedding结构),经过文章的实验证明,BST无论是离线还是在线效果均优于WDL和DIN。

2. 模型

1. 模型结构图

模型结构上并没有十分特别的设计,就是other Feature进行Embedding。User Behavior Sequence 进行Transformer 中的encoder部分操作的过程。这里将其命名为Transformer Layer。

2.Embedding Layer

无需多言,将不同类型的Feature转化为Embedding。

文中利用常规方法将 非用户历史行为特征 分为四类:

  • User侧特征:年龄、性别、所在城市、...

  • Item侧特征:类别id、店铺id、标签、...

  • 上线文特征:匹配类型、展示位置、所在页数、...

  • 交叉特征:上述特征的交叉

上面的四类特征在模型结构图中被归纳为other Feature。

用户历史行为特征 则包含两部分,分别为序列 Item 特征(图中红色) and 位置特征 (图中蓝色),其中序列item特征也和DIN中一样设定,包含item_id和category_id 两部分。文中也提到,一个item包含上百个特征,全做为历史行为特征计算成本过高,只需要找到最能代表的即可,item_id和category_id足够胜任。毕竟直接用id没有任何信息损失。

另外还引入Positional embedding,这个特征由Transformer模型中引入。每个特征向量拼接上特征位置信息。但是计算方法上没有采用Transformer中的方法。文中说是试过,但效果不好。这里采用计算时间差作为Positional值。

其中 代表第i个item被点击的时间戳, 代表候选的目标item。值得注意的一点是并没有采用Transformer中的 Postional Embedding相加,而是采用concat(拼接)。

3.Transformer Layer

Multi-head Self-attention

Transformer最令人印象深刻的非Multi-head Self-attention莫属,在BST中Multi-head Self-attention结构完整的得到保留。Self-Attention 可以用一句话来概括:将输入转化为K、Q、V矩阵,使对应输出不在只包含对应输入信息,也包含了整个序列Session 的信息。Multi-head Self-attention 则是构建多个K、Q、V,多次利用Self-Attention 从不同空间角度,更全面的获取有效信息。

这里只是抛转引入,网上对Self-Attention的解析已经十分全面,推荐看下面这篇博主记录的李宏毅老师对Self-Attention的讲解[4]

给出文中公式:

其中,, 是所有item的embedding, 表示head的个数。

值得注意的是,Self-Attention层的输入和输出必须维度相同,单头attention 的 Q/K/V 的shape和多头attention 的每个头的Qi/Ki/Vi的大小是不一样的,假如单头attention 的 Q/K/V的参数矩阵WQ/WK/WV的shape分别是[512, 512](此处假设encoder的输入和输出是一样的shape),那么多头attention (假设8个头)的每个头的Qi/Ki/Vi的参数矩阵WQi/WKi/WVi大小是[512, 512/8]。

Point-wise Feed-Forward Networks

与Transformer中一致,加入FFN网络增强非线性,加入LayerNorm、ResNet、dropout结构,并将原始的Relu激活函数改为leakyRelu。

这里回顾一下LayerNorm和BatchNorm的区别:

Batch Normalization 的处理对象是对一批样本, Layer Normalization 的处理对象是单个样本。Batch Normalization 是对这批样本的同一维度特征做归一化, Layer Normalization 是对这单个样本的所有维度特征做归一化。

LN不依赖于batch的大小和输入sequence的深度,因此可以用于batchsize为1和RNN中对边长的输入sequence的normalize操作。

目的都是让该层参数稳定下来,避免梯度消失或者梯度爆炸,方便后续的学习。

一般来说,BN更适合特征依赖于不同样本间的统计参数。因为它删除了不同特征之间的大小关系,但是保留了不同样本间的大小关系。所以在CV领域更常用。
而在NLP领域,LN就更加合适。因为它删除不同样本间的大小关系,但保留了一个样本内不同特征之间的大小关系。对于NLP或者序列任务来说,一条样本的不同特征,其实就是时序上字符取值的变化,样本内的特征关系是非常紧密的。(来自BatchNorm与LayerNorm的异同[5])

文中讨论了Transformer层需要重叠几次再输出的问题,Transformer的原始论文中是6层encoder堆叠。经过测试发现一层相比于两层和三层效果更好。个人猜测可能是 用户历史行为信息对比NLP的整句话,包含的信息更少,浅层网络即可获取大部分信息。

4.MLP layers

三层MLP+Sigmod输出。loss取二分类经典交叉熵损失函数。Adagrad为优化器。

3.实验

数据集

使用淘宝App 某连续8天的日志构造数据集,过去7天作为训练,第8天测试。

对比 WDL DIN 与不同数量Transformer Layer下的BST。

实验参数设置

实验结果

离线使用AUC作为评价指标,在线A/Btest则使用RT,即:响应时间(RTI),是为给定查询生成推荐结果的时间成本,即淘宝用户的一个请求。

4.总结和思考

个人有一些疑问:

1.position函数怎么embedding化,文章中没有具体提及,源码论文中没有开源,这个我们不得而知,个人觉得可能进行分桶,如距购买1天内、3天内、7天内等等。如果数值型直接embedding参数会很大。

2.把target item embedding 在Transformer Layer上如何操作,是拼接在原始User Behavior Sequence后进入self-Attention?在self-Attention后拼接?很多细节受限于4页表达并不清晰。

3.论文没有在公有数据集上进行,例如经典的Criteo数据集,只用了内部数据集,那么内部数据集是否在行为特征上具有普适性,具体的数据分布,这里并没有详细去描述。

文章是transformer在推荐领域的迁移,对transformer的关键点Positional Embedding和Multi-head Self-attention进行了复用,如position函数和激活函数的更改。相比于阿里出品的其他论文,稍显寡淡。

随着Transformer和Bert在NLP领域效果上一枝独秀,推荐领域有越来越多的模型开始借鉴、迁移NLP中的优秀技术。如本篇的BST、关注特征交叉的AutoInt、还是下一篇要介绍的BERT4Rec都是典型代表。但是需要注意的是NLP领域更关注于时序这个性质,落地前需要衡量公司在这部分的数据积累是否充足,否则可能会出现事倍功半的效果。

一起交流

想和你一起学习进步!『NewBeeNLP』目前已经建立了多个不同方向交流群(机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 / 等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要备注信息才能通过)

本文参考资料

[1]

《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》: https://link.zhihu.com/?target=https%3A//dl.acm.org/doi/abs/10.1145/3326937.3341261

[2]

引入Attention机制的DIN: https://zhuanlan.zhihu.com/p/425064402

[3]

GRU结构的DIEN: https://zhuanlan.zhihu.com/p/426670720

[4]

李宏毅老师对Self-Attention的讲解: https://zhuanlan.zhihu.com/p/171875438

[5]

BatchNorm与LayerNorm的异同: https://zhuanlan.zhihu.com/p/428620330

BST:Transformer在推荐领域的应用相关推荐

  1. BERT4Rec:当NLP王者BERT进军推荐领域

    作者 | 知乎博主@青枫拂岸 整理 | NewBeeNLP CIKM2019上,阿里发表了<BERT4Rec: Sequential Recommendation with Bidirectio ...

  2. 【NLP+图神经网络+推荐领域】2020年最新综述性文章推荐

    学习永无止境.本期橙子邀请到淘系技术部算法同学分别就「NLP领域」.「图神经网络」.「推荐领域」三个技术模块,结合行业技术发展与研究,重新整理历史经典综述文献与最新文献,去其糟粕,取其精华,最终沉淀出 ...

  3. 替代离线RL?Transformer进军决策领域,「序列建模」成关键

    机器之心报道 机器之心编辑部 Transformer 开始进军决策领域了,它能否替代离线强化学习呢?近日,UC 伯克利.FAIR 和谷歌大脑的研究者提出了一种通过序列建模进行强化学习的 Transfo ...

  4. SENet双塔模型:在推荐领域召回粗排的应用及其它

    前言 目前,双塔结构在推荐领域里已经是个常规方法了,在召回和粗排环节的模型选型中,被广泛采用.其实,不仅仅是在推荐领域,在其它领域,双塔结构也已经被越来越多得用起来了.比如,在当代搜索引擎的召回环节, ...

  5. 深度学习在推荐领域的应用

    深度学习在推荐领域的应用 2017-05-31 20:50youtube/微博/社交 作者: 吴岸城,菱歌科技首席算法科学家,致力于深度学习在文本.图像.预测推荐领域的应用.曾在中兴通讯.亚信(中国) ...

  6. Transformer在图像复原领域的降维打击,ETH提出SwinIR:各项任务全面领先

    作者丨happy 编辑丨极市平台 本文原创首发于极市平台,转载请获得授权并标明出处. 原文链接:https://arxiv.org/abs/2108.10257 code:https://github ...

  7. 深度学习在搜索和推荐领域的应用

    /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 深度学习在搜索和推荐领域的应用 (想更系统地学习深度学习知识?请参考:深度学习枕边书) 大纲: •深度 ...

  8. 动态网络表征学习在推荐领域的创新与实践

    导读:在现实生活中,用户对于一件事物的关注度即关系图往往是会随着时间而改变的.按照静态图的建模方法将不能显示地建模用户在时序上的兴趣变化.动态网络表征学习不仅能学习到当前网络的结构信息,而且也能学习到 ...

  9. 深度学习在推荐领域的应用:Lookalike 算法

    本文主人公 英特 是一名传统的软件工程师,让我们与英特一起来研究如何实现自己的Lookalike算法,并尝试着在新浪微博上应用这一算法. 当2012 年Facebook 在广告领域开始应用定制化受众( ...

最新文章

  1. java包(翻译自Java Tutorials)
  2. 1.4 Matplotlib:绘图
  3. java实现扫地agent_如何实现java agent?分享java agent的使用案例
  4. Boost.MultiIndex 使用 multi_index_container::ctor_args_list 的示例
  5. C++类型萃取之type_traits和type_info
  6. mysql哨兵机制_Sentinel:万字详解微服务的哨兵机制,我跪了
  7. iterator获取当前元素_java集合【5】——— Iterator接口
  8. tensorflow/pytorch 设置GPU的使用
  9. [设计模式之禅读书笔记]006_设计模式六大原则(六):开闭原则
  10. 牛客网c语言笔试题库,【sql】牛客网练习题 (共 61 题)
  11. Python学习,接上篇文章的50道基础入门练习题(附答案)
  12. 【物联网平台篇9】使用MQTT上传图片到OneNET
  13. 3D游戏-作业三-空间与运动
  14. JavaScript(WebAPI) (前端)
  15. python实现猫抓老鼠
  16. 【ArangoDB 介绍】
  17. 面向对象- 类与对象的使用01
  18. 科学等于艺术,艺术等于科学
  19. 天池新人实战赛——阿里移动推荐算法大赛(离线赛与平台赛)
  20. 在8051上的人工智能

热门文章

  1. Kaggle 数据清洗挑战 Day 4 - 字符编码(Character Encoding)处理
  2. T-SQL: Adding More to Our Queries
  3. httpcode状态码
  4. pl/sql实现打印九九乘法表
  5. 深入浅出“跨视图粒度计算”--2、INCLUDE表达式
  6. wamp phpcms部署网站问题
  7. php常用的的字符串转换
  8. No Javascript on this page
  9. 常对象和常函数的关系 const
  10. 解决Gradle DSL method not found: ‘android()’