NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Transformer 在推荐模型中的应用总结

  • 2019-11-29
  • 本文字数:2535 字

    阅读完需:约 8 分钟

Transformer在推荐模型中的应用总结

最近基于 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 正则项:


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

  2. 亮点:结合使用预训练的 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


本文转载自 Alex-zhai 知乎账号。


原文链接:https://zhuanlan.zhihu.com/p/85825460


公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2019-11-29 08:002757

评论

发布
暂无评论
发现更多内容

在线MySQL,SQL Server建表语句生成JSON测试数据工具

入门小站

工具

iuap助力澳洋集团打造主数据管理平台

用友BIP

用友 用友iuap

ICT的圣杯(二):数字生活的另类想象

脑极体

确保数据中心物理安全的五种方法

Ethereal

如何设计良好的技术项目文档结构

老张

项目管理 交付质量

如何捕获和分析 JavaScript Error

喀拉峻

前端

终端常用快捷键

刁架构

终端 快捷键 iterm2

如何在 Python 中反转字符串?

Ethereal

使用基于 WebRTC 的 JavaScript API 在浏览器环境里调用本机摄像头

Jerry Wang

JavaScript 前端 WebRTC 摄像头 3月月更

图解|从根儿上理解MySQL的索引

蝉沐风

MySQL 索引 B+树

实用机器学习笔记二十八:迁移学习

打工人!

学习笔记 迁移学习 机器学习算法 3月月更

写给后端开发工程师的H5前端开发知识

得物技术

前端 Web 可视化 后端开发 交互

无影云电脑支持企业快速实现居家办公

阿里云弹性计算

远程办公 数据安全 无影云电脑

Java基础重要面试题(二)

逆锋起笔

java面试 java基础 3月月更

Nacos源码分析(一)之线程池的巧妙设计,可以薅到自己的项目里

刘祥

SpringCloud Alibaba

CVE-2022-22947 远程代码执行漏洞复现分析

网络安全学海

黑客 网络安全 信息安全 渗透测试 WEB安全

Python 递归函数返回值为 None 的解决办法

AlwaysBeta

Python 递归

持续集成容器篇:Docker与自动化打包

Docker 架构 持续集成 jenkins 持续交付

创建 Node.js 视频流应用之后端

devpoint

node.js Video Express 3月月更

WMS系统与ERP仓储管理的差异

源字节1号

开源 后端 前端开发 WMS系统 ERP系统

手绘流程图,教你WSL2与Docker容器无缝互相迁移

华为云开发者联盟

Docker 容器 WSL2 迁移

一文详解Redis键过期策略

华为云开发者联盟

redis key 惰性删除 定期删除 键过期

对微博系统中“微博评论”的高性能高可用计算架构的一点思考

晨亮

「架构实战营」

智能问答机器人

DS小龙哥

智能问答机器人 3月月更 智能对话机器人

融云 IM +RTC 重磅优惠上线!15 天免费体验,1 年服务买一赠一

融云 RongCloud

聊聊 Pulsar:编译 Pulsar 源码并搭建源码环境

老周聊架构

云原生 Apache Pulsar 3月月更

千字带你了解什么是 RPC 协议

踏雪痕

RPC 3月程序媛福利 3月月更

融云获 CSDN 技术影响力之星评选「年度技术品牌奖」

融云 RongCloud

兴业+民生上岸面试经验分享

暖蓝笔记

3月程序媛福利 3月月更

网络协议之:socket协议详解之Unix domain Socket

程序那些事

socket Netty 程序那些事 3月月更

欧拉的奇异之旅·共赴开源时代

白洞计划

Transformer在推荐模型中的应用总结_语言 & 开发_Alex-zhai_InfoQ精选文章