推荐系统中的用户兴趣建模(二):NLP方法的迁移

前面说到的DIN提供了用户兴趣建模的一个很好的思路,本身算法是基于对实际业务的理解,而DIN本身却是一个很简单的模型,这也为后续的很多优化提供了一个基线。归根到底,用户兴趣建模还是属于序列建模,所以,nlp中的很多序列学习方法可以无缝衔接到这里来,比如LSTM,GRU,Transformer,Bert等,这里介绍几个较为出名的工作。(笔者认同奥科姆剃刀原则,如果DIN本身达到的效果足够好,大可不必将序列建模工作做的过于复杂,因为这还需要团队具有很强的工程能力,以及模型用到的建模方式并不会适用所有的业务场景)

1.DIEN(AAAI’19):GRU+Attention

DIEN使用GRU来捕捉用户的兴趣表达和兴趣演化的表达,其主要动机是电商推荐场景中存在用户对于同一个类目商品的兴趣偏好存在兴趣变化的业务现象,而捕捉这种序列依赖最常用的就是RNN系的模型,DIEN采用了GRU,一种既能像LSTM一样缓解远距离梯度消失,又具有比LSTM更快计算速度的方法。
在这里插入图片描述

总体来说DIEN分两部分:
兴趣抽取模块:简单来说就是用GRU对用户行为的依赖关系建模,使用GRU的隐层输出h作为用户兴趣抽取模块的embedding表达。
此外,由于当前的兴趣和下次的点击行为相关性较强,即每一步的兴趣状态导致连续的用户行为,所以考虑用t+1步的用户行为来监督学习当前t步的兴趣状态h_t,(类似于YoutubeDNN) 建立损失函数:
在这里插入图片描述
辅助loss的好处在于:
1)帮助GRU的隐状态 更好的表达用户兴趣;
2)对于GRU而言,对于长序列,在进行梯度反向传播的情况下并不能很好的作用到头部行为,如果在每一个部分引入一个辅助损失,可降低优化难度;
3)辅助loss可以给embedding层的学习带来更多语义信息,学习到item对应的更好的embedding;
4)类似引入多目标,增加辅助函数只增加了线下训练的成本,但并没增加线上serving时间。

兴趣演化模块:随着外部环境和内部认知的变化,用户兴趣也不断变化。用户对不同商品的点击行为受不同兴趣的影响,以用户对衣服的爱好作为例子,随着流行度和用户品味的变换,这个进化过程会直接影响ctr的预估效果因此,我们认为,每个兴趣都有它自己的演化进程,同时,用户在不同项目上的点击行为受不同兴趣的影响,我们对与target item相关的兴趣演化轨迹进行建模。
具体的,这里使用了第2个GRU。将target item的embedding向量与第1个GRU的输出隐向量发生交互,生成attention分数,并将attention乘在GRU的门控上,以控制GRU的隐层输出,这也是文中提到的AUGRU:
在这里插入图片描述
需要注意的是,与DIN不同,这里的attention分数采用softmax做了归一化。
在这里插入图片描述
关于DIEN的一点想法

  1. DIEN的工程实现,GRU是串行计算结构,要按照时间步一步一步进行计算。DIEN有两个GRU,第2个GRU还要基于第1个GRU的结果来做attention,所以第2个GRU必须要等到第1个GRU全部计算完成才能开始计算,两个GRU单元无法并行计算,所以可能存在时延大的问题,序列越长,时延可能就越长。所以这需要团队具有较强的工程优化的实力。
  2. 个人感觉DIEN的第一个GRU也就是兴趣抽取层可能没有存在的必要,直接用AUGRU应该也能取得好的效果,具体的应该多加实验。而辅助loss可以作为一个不错的trick或者提升模型学习表达的方式用到其他场景中,比如DMR(AAAI 2020)

2.BST(DLP-KDD’19):加入Transformer

Transformer在NLP中已经得到广泛的使用了,BST将应用Transformer 用于提取用户行为序列背后的隐藏信息,同时考虑序列的前后顺序,能够更好的表达用户兴趣。
在这里插入图片描述
BST的模型结构十分简单,就是用Transformer学习用户的行为序列,输入层与其他网络类似,主要输入特征有Item Feature、用户画像、上下文特征、交叉特征经过Embedding 层后concat 在一起。用户行为序列包含Item ID类特征及对应的position 信息,进行Embedding 处理后输入到Transformer 层捕获用户历史行为与Target Item 之间的相互关系得到用户行为兴趣表达,与其他特征embedding 向量concat 在一起,经过三层MLP层计算得到预测的点击率。值得注意的一点是,受到DIN的启发,BST将target item也作为一个行为输入到transformer中,这样self-attention也可以作为一种target attention的方式。

3.BERT4REC(CIKM’19)

在这里插入图片描述

BERT4REC其实就是拿BERT在NLP中的做法迁移到推荐中的用户序列中,其实做法和BST是很类似的,也就是拿BERT去换BST中的Transformer,但是,两者的不同点在于:
BST有target item 输入,是二分类的CTR模型。而BERT4REC是将最后一个Token MASK掉来预测,这有点类似于YoutubeDNN的方式。其是一个多分类模型,那么如何在训练阶段学习到这种mask信息呢?区别于YoutubeDNN,这里作者借鉴了BERT中的Masked Language Model的训练方式,随机的把输入序列的一部分掩盖(即变为[mask]标记),让模型来预测这部分盖住地方对应的物品,提升了模型的泛化性。
在这里插入图片描述
和普通序列推荐中那样,将与 [mask] 相对应的最终隐向量送softmax,最终,损失为每个被mask的输入的负对数似然:
在这里插入图片描述
在预测阶段我们将masked附加到用户行为序列的末尾,然后根据该masked的最终隐藏表示来预测下一项。为了更好地匹配序列推荐任务(即,预测最后一项),在训练过程中我们还生成了只mask输入序列中最后一项的样本。这个工作就像对序列推荐的微调一样,可以进一步提高推荐性能。

参考:
1.https://zhuanlan.zhihu.com/p/352427059
2.https://zhuanlan.zhihu.com/p/416350009
3.https://zhuanlan.zhihu.com/p/151403447

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值