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

1. Self-Attentive Sequential Recommendation

模型结构:

方法:

符号定义:

问题定义:模型输入是用户u的一个历史交互序列:

, 其期望的输出是该交互序列一个时间刻的偏移:
  • Embedding层

将输入序列

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

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

  • Self-Attention层

Transformer中Attention的定义为:

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

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

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

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

  • Self-Attention layer的堆叠
  • 预测层

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

其中

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

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

  • 显式用户建模

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

,例如通过加法实现:

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

  • 网络训练

定义时间步t的输出为:

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

2. Next Item Recommendation with Self-Attention

模型:

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

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

其中每个item的embedding维度为d,将

作为transformer中一个block的输入:

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

  • 计算softmax前先掩掉

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

另外加入了时间信号:

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

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

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

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

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

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

模型架构:

  • Embedding Layer

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

  • Transformer Layer

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

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

  • Stacking Transformer Layer

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

  • Output Layer
  • 模型训练

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

最终的loss函数为:

4. Behavior Sequence Transformer

这里就不详细介绍了,可参考我之前的一篇文章: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

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

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

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

  2. transformer中attention计算方式_Reformer: 局部敏感哈希、可逆残差和分块计算带来的高效...

    最近要开始使用Transformer去做一些事情了,特地把与此相关的知识点记录下来,构建相关的.完整的知识结构体系, 以下是要写的文章,本文是这个系列的第九篇: Transformer:Attenti ...

  3. 你的java程序有没有内存泄露,java进程在linux系统中rss计算方式是什么样的?

    java进程在linux系统中rss计算方式如下: RSS = Heap size + MetaSpace + OffHeap size 其中OffHeap由线程堆栈,直接缓冲区,映射文件(库和jar ...

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

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

  5. 机器学习中的数据泄露是什么?构建模型中如何防止数据泄露?正确的方案是什么?如何使用pipeline防止数据泄露?

    机器学习中的数据泄露是什么?构建模型中如何防止数据泄露?正确的方案是什么?如何使用pipeline防止数据泄露? 目录

  6. bms中soh计算方式_储能电站bms的电池soh估算方法

    储能电站bms的电池soh估算方法 [技术领域] [0001]本发明涉及电池寿命估算方法,尤其涉及一种储能电站BMS的电池SOH估算方法. [背景技术] [0002]现有的储能系统BMS通常只监测管理 ...

  7. bms中soh计算方式_原创丨BMS算法中关于健康状态(SOH)的模型设计

    作为消费者我们使用电池的经验往往是用得越久电池的续航就越少,功率性能就越差,总的来说就是动力电池性能会随着"运行使用"不断"性能衰减".在算法层面一般会将&qu ...

  8. bms中soh计算方式_干货丨BMS算法中关于健康状态(SOH)的模型设计来自IND4汽车人叶磊Ray的分享...

    众所周知动力电池系统经过长期运行性能将不断的衰减,如何有效的评估电池健康度SOH(state of health)不仅是计算SOC.SOP等关键参数的重要依据,同时对评判动力电池系统何时需更换.是否可 ...

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

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

最新文章

  1. 3D人脸识别准确率提升,成未来发展趋势
  2. Redis 哨兵架构基础
  3. PostgreSql入门命令
  4. CTF(Pwn)32位文件 和 64 文件 的 差异
  5. c++桥接模式bridge
  6. [转]查看linux服务器硬盘IO读写负载
  7. KCG-VISION:简介(一款快速开发机器视觉的软件)
  8. oracle的存储过程菜鸟教程,SQL菜鸟入门级教程之存储过程
  9. 数据分析工具urule
  10. 动图怎么分解成静图?教你一键在线分解gif动图?
  11. iOS——结构体指针
  12. JDK自带的命令行工具
  13. 电商扣减库存_经验分享:电商库存体系设计笔记
  14. myChat - 第三方ChatGPT原生客户端,支持win和mac系统
  15. Go语言基础之网络编程
  16. IDEA的使用大全(快捷键、TomCat、Maven......)
  17. E.03.10 Coffee Drinking Tied to Lower Risk of Heart Failure
  18. 使用 iview 实现PC端生成推广海报与二维码并下载的功能,基于iview Modal 对话框 与 Carousel 走马灯组件实现
  19. 2016ACM/ICPC亚洲区大连站-补题
  20. oracle数据库中的虚拟表,Oracle10g中的虚拟专用数据库(VPD)

热门文章

  1. Mac系统下安装webpack,cnpm,vue-cli
  2. 为什么要使用Redis?
  3. phpcms首页如加上用户登录的信息?
  4. saltstack 系列(三)centos7使用saltstack小试牛刀
  5. python包requests使用笔记
  6. 浏览器跨域问题(jsonp)——jsonp详解
  7. kvm虚拟机块对齐问题研究
  8. HDOJ 1227 DP
  9. Netscreen204防火墙配置网络设备的SNMP及Syslog配置
  10. Rust 与 Objective-C 互操作