前几天还跟同事开玩笑说,DIN上面接一层Transformer,然后加一个Positional Encoding,然后再加Attention层,效果可能会好些。结果,今天就看到淘宝已经发出了相关的论文了,有一些地方还是没有想到的,咱们来一起看下。
本文的论文名称为:《Behavior Sequence Transformer for E-commerce Recommendation in Alibaba》
论文地址为:https://arxiv.org/pdf/1905.06874.pdf
淘宝的推荐系统总体上也分为匹配和精排阶段,匹配阶段,我们刚刚在第四十六篇文章中介绍了其针对十亿级商品的embedding方案,感兴趣的同学可以看下前面的文章。
在精排阶段,主要基于Wide & Deep和深度兴趣网络DIN来构建精排模型,这两种模型都存在一定的问题。
Wide & Deep:使用商品的类别和品牌特征、商品的统计特征、用户画像特征,通过Wide 和Deep两个部分来预测。离散特征使用常用的embedding来降维。这一框架效果还算不错,但是实践中忽略了用户历史的行为序列特征。
DIN:该模型使用注意力机制来捕获目标商品与用户先前行为序列中商品之间的相似性,但未考虑用户行为序列背后的序列性质。
因此,本文尝试将NLP领域中大放异彩的Transformer模型来做推荐任务,我们一起来看下模型的整体框架。
本文提出的模型称为Behavior Sequence Transformer,简称BST,其整体的架构如下:
接下来,我们来详细介绍下。
所有的other feature分为四个部分,用户特征、商品特征、上下文特征、交叉特征,特征示例如下:
特征通过Embedding Layer来转换为对应的embedding。这里的交叉特征,有部分是基于业务经验提取出的,并非完全通过网络学习得到。
此外,我们还获得了行为序列中每个商品以及目标 商品的嵌入特征。每一个商品通过两部分来表示,“序列 item 特征”(红色部分)和“位置特征”(深蓝色)。其中,“序列 item 特征”包括 item_id 和 category_id。
这里,我们重点讲一下位置特征。在《Attention is all you need》论文中,作者提出了一种Positional Encoding来捕获句子中的顺序信息。同样,顺序也存在于用户的行为序列中。因此,我们添加“位置”作为 bottom layer 中每个 item 的输入特征,然后将其投射为低维向量。第i个位置的位置特征计算方式为pos(vi)=t(vt)-t(vi),其中,t(vt) 表示推荐的时间戳,t(vi) 表示用户点击商品vi时的时间戳。采用这种方式,其效果优于原论文中使用的 sin 和 cos 函数。
至于如何将一个时间戳转化为低维向量,论文里也没有明确说明,可能是进行离散化后转化为embedding吧,如果有更好的想法的小伙伴,欢迎在留言区留言。
感觉Transformer层没有做太多的优化,基本和原论文是一样的:
有关Transfromer的内容,我们就不再详细介绍了,大家可以参考下面的文章,讲的比较通俗易懂:
https://mp.weixin.qq.com/s/RLxWevVWHXgX-UcoxDS70w
这里所做的改进主要在于,在block中的Feed Forward时,使用了leakyRelu,如下图所示:
在上面的两步之后,我们得到的输出中已经有序列信息在里面了,首先我们把时间戳信息作为位置特征进行了输入,其次,transformer本身也类似于一个双向的循环神经网络(我个人感觉是这样的,masked-self attention相当于单向的rnn,不加mask相当于双向的rnn)。
接下来,将所有的embedding进行拼接,输入到三层的神经网络中,并最终通过sigmoid函数转换为0-1之间的值,代表用户点击目标商品的概率。
模型通过logloss进行训练:
BST的参数设置如下:
这里,主要使用了三个对比模型,分别是Wide & Deep、DIN和Wide & Deep(+Seq)。最后一个模型中,将用户历史行为序列中item对应的embedding的平均值加入到模型中。
对比试验结果如下
Transformer的block是可以进行堆叠的,论文里实验了1层、2层和3层的效果,最终1层的效果最好:
关注小编的公众号,后台回复“进群”,一起来交流学习吧!