最近基于transformer的一些NLP模型很火(比如BERT,GPT-2等),因此将transformer模型引入到推荐算法中是近期的一个潮流。transformer比起传统的LSTM、GRU等模型,可以更好地建模用户的行为序列。本文主要整理transformer在推荐模型中的一些应用。
1. Self-Attentive Sequential Recommendation

模型结构:

b68d167ca5f3fd1b762102a575f006f3.png

方法:

符号定义:

bbf514716eae11087b5c04ec929eca8d.png

问题定义:模型输入是用户u的一个历史交互序列:
, 其期望的输出是该交互序列一个时间刻的偏移:

Embedding层

将输入序列
转化成固定长度的序列
。意思是如果序列长度超过n,则使用最近n个行为。如果不足n,则从左侧做padding直到长度为n。

位置embedding: 因为self-attention并不包含RNN或CNN模块,因此它不能感知到之前item的位置。本文输入embedding中也结合了位置Embedding P信息,并且位置embedding是可学习的:

88a49e6f5a2397121f40bc4b632b86c2.png

Self-Attention层

Transformer中Attention的定义为:

ebb1d1aded975da5a64ae3cdb8ee4d07.png

本文中,self-attention以embedding层的输出作为输入,通过线性投影将它转为3个矩阵,然后输入attention层:

e5827b29d27ff661d67de456c8ca431f.png

为了避免在预测i时刻的item时用到后续时刻的信息,本文将符合(j > i)条件的

之间的连接forbidding掉,这是因为self-attention每个时刻的输出会包含所有时刻的信息。

Point-wise前馈网络

尽管self-attention能够用自适应权重并且聚焦之前所有的item,但最终它仍是个线性模型。可用一个两层的point-wise前馈网络去增加非线性同时考虑不同隐式维度之间的交互:

9d68557c325b40e6c036e05dd24e2ca0.png

Self-Attention layer的堆叠

97fa9a0a2be4c1b8c8c2ce1d847ca6a2.png

预测层

最后采用MF层来预测相关的item i:

152e3d24967040bf42b1df494ca73434.png

其中
是给定t个item,下一个item i的相关性。N是item embedding矩阵。

为了减少模型尺寸及避免过拟合,共用一个item embedding:

923ca9226999eff8b5d042d59524cbe2.png

显式用户建模

为了提供个性化推荐,当前主要有两种方法:学习显式的用户embedding表示用户偏好(MF,FPMC,Caser);考虑用户之前的行为,通过访问过的item的embedding推测隐式的用户embedding。本文采用第二种方式,同时额外在最后一层插入显式用户embedding
,例如通过加法实现:

ca6e889eba09f9cdad5f38d703be3f21.png

但是通过实验发现增加显式用户embedding并没有提升效果。

网络训练

定义时间步t的输出为:

6d65ac05a7c7314292123f2e4504016c.png

用二元交叉熵损失作为目标函数:

edafb2d874f9eefb324c37746b9d660e.png
2. Next Item Recommendation with Self-Attention

模型:

5c19c79ea3e53156b602cc9cecc10846.png

本文亮点是同时建模用户短期兴趣(由self-attention结构提取)和用户长期兴趣。其短期兴趣建模过程如下:

假定使用用户最近的L条行为记录来计算短期兴趣。可使用X表示整个物品集合的embedding,那么,用户u在t时刻的前L条交互记录所对应的embedding表示如下:

822ee337baf47f27c551d45bbdfe6a13.png

其中每个item的embedding维度为d,将
作为transformer中一个block的输入:

f271b685067930d9728835ffd7347862.png

0c2fa5c7f93fce32423fcff205ff8392.png

这里需要注意和传统transformer的不同点:

计算softmax前先掩掉
    矩阵的对角线值,因为对角线其实是item与本身的一个内积值,容易给该位置分配过大的权重。
    没有将输入
    乘以
    得到
    ,而是直接将输入
    乘以softmax算出来的score。
    直接将embedding在序列维度求平均,作为用户短期兴趣向量。

另外加入了时间信号:

a512bf74741283b9d904fbdf947025b5.png

self-attention模块只使用用户最近的L个交互商品作为用户短期的兴趣。那么怎么建模用户的长期兴趣呢?可认为用户和物品同属于一个兴趣空间,用户的长期兴趣可表示成空间中的一个向量,而某物品也可表示为成该兴趣空间中的一个向量。那如果一个用户对一个物品的评分比较高,说明这两个兴趣是相近的,那么它们对应的向量在兴趣空间中距离就应该较近。这个距离可用平方距离表示:

abda35ce09a19796b223ed1570d5f737.png
其中U是用户的兴趣向量,V是物品的兴趣向量

综合短期兴趣和长期兴趣,可得到用户对于某个物品的推荐分,推荐分越低,代表用户和物品越相近,用户越可能与该物品进行交互:

40695262baf1b001624bf3475335fd17.png

模型采用pair-wise的方法训练,即输入一个正例和一个负例,希望负例的得分至少比正例高γ,否则就发生损失,并在损失函数加入L2正则项:

e81226f53ab3412c01187ff985738ef0.png
3. BERT4Rec: Sequential Recommendation with Bidirectional Encoder Representations from Transformer

亮点:结合使用预训练的BERT模型

模型架构:

127af5053b550e8f1894464ae5e69c2f.png

Embedding Layer

模型的输入是用户历史交互序列,对交互序列中的每一个物品i,其Embedding包含两部分,一部分是物品的Embedding,用vi表示,另一部分是位置信息的Embedding,用pi表示。这里的pi是可学习的。

Transformer Layer

主要包括Multi-Head Self-Attention层和Position-Wise Feed-Forward Network,其中Multi-Head Self-Attention计算过程如下:

e4f526e02ed6a9efcd84cc1eba128257.png

d0b11485121a03a87d7e2557b33ffed6.png

Position-Wise Feed-Forward Network的作用是将每个位置(也可理解为每个时间刻t)上的输入分别输入到前向神经网络中:

d938fd265ef00646235b98bec8412774.png

Stacking Transformer Layer

使用了类似于resnet的skip连接结构:

496daaf424fa07dbe724dd4d38badfcc.png

Output Layer

d09e549d8b3ebdd9589728b39db057e7.png

模型训练

因为在BERT4Rec中,输入历史序列[v1,v2,...,vt-1],输出的是包含上下文信息的向量[h1,h2,...,ht-1],这里每个向量ht都包含了整个序列的信息。如果要预测用户t时刻的交互物品vt,如果直接把vt作为输入,那么其余每个物品在Transformer Layer中会看到目标物品vt的信息,造成一定程度的信息泄漏。因此可把对应位置的输入变成[mask]标记。打标记的方式和BERT一样,随机把输入序列的一部分遮盖住,然后让模型来预测这部分对应的商品:

45fedf5aca9c9ddb7c7f10ba68ef25b0.png

最终的loss函数为:

b1db698f7df5b4da8f9f84f94989e517.png
4. Behavior Sequence Transformer

f4d85a2d160dee5983916c7ff7eb3801.png

这里就不详细介绍了,可参考我之前的一篇文章:https://zhuanlan.zhihu.com/p/72018969
总结

transformer结构可用于对用户短期内的行为序列进行建模(比如最近的n次行为序列),比起传统的RNN、CNN模型,transformer的优势在于它在每个时刻t求得的隐藏向量ht都包含整个序列的信息(这其实就是self-attention结构的优势,可建模出任意一个时刻item和所有时刻item的相关性)。因此可将transformer结构用于用户的短期兴趣embedding建模,然后再将该embedding向量用于召回或者ranking阶段。

参考文献:

https://arxiv.org/pdf/1808.09781.pdf
    https://arxiv.org/pdf/1808.06414.pdf
    https://arxiv.org/pdf/1904.06690.pdf
    https://arxiv.org/pdf/1905.06874.pdf
————————————————
版权声明:本文为CSDN博主「weixin_39686192」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_39686192/article/details/112469156

transformer预测过程_Transformer在推荐模型中的应用总结相关推荐

  1. transformer中attention计算方式_Transformer在推荐模型中的应用总结

    最近基于transformer的一些NLP模型很火(比如BERT,GPT-2等),因此将transformer模型引入到推荐算法中是近期的一个潮流.transformer比起传统的LSTM.GRU等模 ...

  2. transformer预测过程_2019最新进展 | Transformer在深度推荐系统中的应用

    作者 | Alex-zhai 来源 | 深度传送门(ID:deep_deliver) [导读]最近基于Transformer的一些NLP模型很火(比如BERT,GPT-2等),因此将Transform ...

  3. 注意力机制在推荐模型中的应用——AFM、DIN、DIEN

    "注意力机制"来源于人类最自然的选择性注意的习惯.最典型的例子是用户在浏览网页时,会选择性地注意页面的特定区域,忽视其他区域.正是基于这样的现象,在建模过程中考虑注意力机制对预测结 ...

  4. 一文讲述如何将预测范式引入到机器学习模型中

    作者 | Filip Piekniewski 编译 |ziqi zhang 随着人工智能的持续深入,深度学习技术在多智能体学习.推理系统和推荐系统上取得了很大进展. 对于多智能体来说,预测能力有着关键 ...

  5. 深度学习核心技术精讲100篇(二十二)-深度解析数学建模核心知识之搜索与推荐模型中用户建模原理

    前言 用户建模是搜索与推荐模型的核心技术.其实很多人对用户模型的概念比较模糊,用户模型更多是在产品生命周期中起关键作用,其结合数据.反馈.行为三个方面的信息总结概括出产品用户模型. 01 背景与意义 ...

  6. 自己写的推荐模型中的简单排序总结

    最近被别人问到推荐算法,他们公司想做推荐算法,然后我懂一些相关的东西,就简单写了一些东西,仅作为记录. 内容如下: 某个人喜欢看电影:[007,邦德,飓风营救,变形金刚,钢铁侠,独行月球] 使用算法计 ...

  7. 注意力机制在推荐模型中的应用——DIN

    DIN 模型的应用场景是阿里最典型的电商广告推荐, DIN 模型本质上是一个点击率预估模型. Base Model 下图是 DIN 的基础模型 Base Model.我们可以看到,Base Model ...

  8. WWW 2022 | 弯道超车:基于纯MLP架构的序列推荐模型

    ©作者 | 于辉,周昆 来源 | RUC AI Box 本文主要提出了一个基于纯 MLP 架构的序列化推荐模型,其通过可学习滤波器对用户序列进行编码,在 8 个序列化推荐数据集上超越了 Transfo ...

  9. 性能超越最新序列推荐模型,华为诺亚方舟提出记忆增强的图神经网络

    作者 | Chen Ma, Liheng Ma等 译者 | Rachel 出品 | AI科技大本营(ID:rgznai100) 用户-商品交互的时间顺序可以揭示出推荐系统中用户行为随时间演进的序列性特 ...

最新文章

  1. 由浅入深CIL系列:6.For和Foreach的CIL结构组成以及运行效率
  2. 北京大学 AdaMod优化器 孙栩
  3. 华为交换机一次性进入多个接口_华为交换机端口的批量配置命令
  4. Tomcat - Tomcat 网络通信模型剖析 并发参数解读
  5. 华字后面配什么字比较好_涟字女孩取名字含义 带涟好名推荐
  6. GC和JVM调优实战
  7. 微信小程序tabBar导航栏页和其他页执行onLoad与onShow时机;tabBar页获取不到参数问题;navigateTo跳转无效问题;onShow执行两次问题;
  8. jQuery插件scrollToTop 4行代码实现网站回到顶部
  9. Linux仿真运算集群,fluent DPM Linux计算集群运行报错 - 计算模拟 - 小木虫 - 学术 科研 互动社区...
  10. 使用hierarchyid查询分层数据
  11. mysql 查看索引
  12. 比特币算法——SHA256算法介绍
  13. ARM汇编中值滤波实验
  14. Python的lambda, filter, reduce 和 map简介
  15. gcc编译与vc编译器区别
  16. HenCoder Android 自定义 View 1-8 硬件加速
  17. 计算机几大管理器,电脑里的任务管理器的快捷键是按哪几个键?
  18. 使用腾讯云 SCF 云函数压缩 COS 对象存储文件
  19. ibm最早的个人计算机,个人计算机竞争者分析:IBM.pdf
  20. 第一期vue项目实践问题与收获总结

热门文章

  1. JWT框架简单测评,哪款是你的菜
  2. 七、ES对象(二) -- 正则表达式
  3. 如何设置工业相机中的“自动增益控制”功能?
  4. 停摆的卡拉VS疯狂的摩拜,共享单车大洗牌时代来临
  5. stm32中用到的实时系统_基于STM32平台的实时操作系统
  6. SIFT介绍与matlab+VL_feat实现
  7. 基于注入式木马病毒(浏览器绑架)实现及防御方法的研究
  8. KDD CUP99数据集预处理(Python实现)
  9. Excel打开CSV格式,大数字乱码情况
  10. 英国电信收入大增 收购EE效应初步显现