【FCon上海】与行业领袖共话AI大模型、数字化风控等前沿技术。 了解详情
写点什么

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

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

    阅读完需:约 8 分钟

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

AI 大模型超全落地场景&金融应用实践,8 月 16 - 19 日 FCon x AICon 大会联诀来袭、干货翻倍!

最近基于 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


公众号推荐:

AIGC 技术正以惊人的速度重塑着创新的边界,InfoQ 首期《大模型领航者AIGC实践案例集锦》电子书,深度对话 30 位国内顶尖大模型专家,洞悉大模型技术前沿与未来趋势,精选 10 余个行业一线实践案例,全面展示大模型在多个垂直行业的应用成果,同时,揭秘全球热门大模型效果,为创业者、开发者提供决策支持和选型参考。关注「AI前线」,回复「领航者」免费获取电子书。

2019-11-29 08:002866

评论

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

Refit — 让Http请求变得更简单

青柚1943

微服务 REST API NET6 Refit

功能强大的数据库管理工具:DBeaverEE 激活版

真大的脸盆

Mac 数据库管理工具 数据库管理 Mac 软件 数据库分析

家电类投诉高居榜首,拿什么拯救“投诉了个寂寞”的消费者?

Openlab_cosmoplat

工业互联网 开源社区 家电

2023年浸没液冷智算产业发展高峰论坛:OPPO发布两项白皮书

安第斯智能云

创新 OPPO 论坛 高新技术

跟清华大佬用18个要点带你一步步学习springboot2微服务项目实战

Java你猿哥

Spring Boot 面经 校招 春招 java

Sugar BI 增强分析能力全场景解析

Baidu AICLOUD

BI

为什么CMS和G1都改用三色标记法,是可达性分析不香吗?

Java全栈架构师

Java 程序员 后端 JVM 架构师

办公要有新享法,「MIAOYUN生活梦想家」焕新升级!

MIAOYUN

搬迁公告 乔迁 办公升级

从企业数据产品的演进,看指标平台发展趋势

Kyligence

数据分析 指标平台

实践Pytorch中的模型剪枝方法

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜

2023主流系统 固资管理助力转型升级一步到位

加入高科技仿生人

低代码 企业数字化转型 资产管理

倒计时2天:百度“文心一言”即将上线!

引迈信息

人工智能 低代码 AIGC ChatGPT 文心一言

量化交易(机器人)开发系统现货合约策略

薇電13242772558

量化策略

2023 MacBook Pro 与2021 Macbook Pro有哪些差别

互联网搬砖工作者

MacBook M1芯片 MacBook Pro M2芯片

Spring Boot 集成 Liquibase,数据库也能做版本控制!

Java你猿哥

Java spring Spring Boot java 编程

【云原生】k8s 环境快速部署(一小时以内部署完)

Java你猿哥

Java 学习 k8s Spring Boot ssm

低代码平台的流程引擎设计指南

Baidu AICLOUD

低代码 爱速搭

报名开启!KunlunBase今年首场线下MeetUP,期待与您的见面!

KunlunBase昆仑数据库

Meetup kunlunbase 内核技术

Tapdata Cloud 基础课:新功能详解之「授权系统自动分析」,一键定位任务报错原因,快速获取修复建议

tapdata

大数据

DBA必备的Mysql知识点:数据类型和运算符

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

Seata-go 1.1.0 发布,补齐 AT 模式支持

SOFAStack

开源 互联网 开发者 开发 Seata框架

CTO问我如何规避MyBatis使用过程中带来的全表更新风险

Java永远的神

Java 程序员 面试 后端 mybatis

请求响应--MQTT 5.0新特性

EMQ映云科技

物联网 IoT mqtt 订阅 企业号 3 月 PK 榜

关于服务器数据迁移,介绍在服务器数据迁移计划中的7个步骤

镭速

3d建筑软件:Vectorworks 2023激活版

真大的脸盆

Mac Mac 软件 3D建筑动画

2023年3月中国数据库排行榜:开源OTO揽获前三,传统达梦、GBase触机便发

墨天轮

数据库 opengauss TiDB oceanbase 国产数据库

MySQL创建用户与授权

源字节1号

软件开发 前端开发 后端开发 小程序开发

低代码平台怎么选?5大通用要素可以参考

这我可不懂

低代码 低代码平台 JNPF

DSC:数仓SQL脚本迁移的神奇工具

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 3 月 PK 榜

我在京东做研发第五期:京东云自研服务器,如何将开发成本降低 60% 的同时还更低碳环保?

京东科技开发者

cpu 服务器 环保 节能 企业号 3 月 PK 榜

AREX-携程无代码侵入的自动化回归测试平台

AREX 中文社区

开源 自动化测试 回归测试

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