美团用户序列建模SDIM

news2024/11/15 4:34:47

Dimension Relation Modeling for Click-Through Rate Prediction

摘要

对于长期用户序列行为建模,采用两阶段方法,第一阶段检索出相关子序列,第二阶段应用注意力机制建模相关子序列和目标物料关系。基于检索的方式是次优的,可能会丢失信息,而且很难平衡检索算法的性能和有效性。

本文提出的SDIM(Sampling-based Deep Interest Modeling),基于采样的端到端的方法来建模长期用户行为序列。从多个hash函数中采样产生候选物料和用户序列行为的hash签名,然后直接聚合具有和候选物料相同的hash签名的行为序列,得到用户的长期序列兴趣向量。

1. 简介

针对建模用户的兴趣,提出了各种模型。DIN通过考虑给定一个目标项目的历史行为的相关性,自适应地计算用户的兴趣。DIN引入了一种新的注意力机制,其中目标物料作为查询Q,历史用户行为作为关键K和值v。由于其优越的性能,基于DIN的方法近年来已成为用户兴趣建模的主流解决方案。但是,对在线服务时间的严格要求限制了可以使用的用户行为序列的长度。因此,大多数工业系统截断了用户行为序列,只提供最近的50个行为用于用户兴趣建模,从而导致信息丢失。随着互联网的快速发展,用户在电子商务平台上积累了越来越多的行为数据。以淘宝为例,他们报告说23%的用户在六个月内在淘宝APP上有超过1000种行为。在美团APP中,有超过60%的用户至少有1000种行为,超过10%的用户在一年内至少有5000种行为。如何有效地利用更多的用户行为来进行更准确的用户兴趣估计,在工业系统中变得越来越重要。

最近,人们提出了一些方法来从长行为序列中模拟用户的长期兴趣[3,10-12]。MIMN [10]通过设计一个单独的用户兴趣中心(UIC)模块,将用户兴趣建模与整个模型解耦。虽然UIC可以节省大量的在线服务时间,但它使得CTR模型不可能利用来自目标项目的信息,这已被证明对用户感兴趣的建模[3]至关重要。因此,MIMN只能模拟较浅的用户兴趣。SIM [11]和UBR4CTR [12]采用了两阶段的框架来处理长期的用户行为。他们从序列中检索top-𝑘相似的项目,然后将这些项目输入后续的注意模块[18]。正如[3]所指出的,这些方法的检索目标与CTR模型的目标是不同的,并且预先训练的离线反向索引嵌入不适合在线学习系统。为了提高检索算法的质量,ETA [3]提出了一种基于LSH的方法,以端到端的方式从用户行为中检索top-𝑘相似项。他们使用局部敏感哈希(LSH)将项目转换为哈希签名,然后根据它们与候选项目的汉明距离检索top-k相似项目。LSH的使用大大降低了计算项目间相似性的成本,ETA比SIM和UBR4CTR获得了更好的结果。

SIM、UBR4CTR和ETA都是基于检索的方法。基于重试的方法存在以下缺点:从整个序列中检索top-k项是次优的,会对用户的长期利益产生有偏的估计。在用户具有丰富的行为的情况下,检索到的top-k项可能都与候选项相似,并且估计的用户兴趣表示将是不准确的。此外,检索算法的有效性和效率也难以达到平衡。以SIM(hard)为例,使用了简单的检索算法,其性能不如其他方法。相比之下,UBR4CTR在复杂检索模块的帮助下取得了显著的改进,但其推理速度变慢了4×的[12],这阻止了UBR4CTR在线部署,特别是对于长期用户行为建模。

在本文中,我们提出了一种简单的基于哈希抽样的方法来建模长期用户行为。首先,我们从多个哈希函数中进行采样,以生成目标项和用户行为序列中的每个项的哈希签名。我们没有使用特定的度量来检索top-𝑘相似的项,而是直接从整个序列中收集与目标项共享相同哈希签名的行为项,以形成用户的兴趣。我们的方法的内在思想是用LSH碰撞概率近似用户兴趣的软最大分布。我们从理论上证明,这种简单的基于抽样的方法产生了与基于软tmax的目标注意非常相似的注意模式,并实现了一致的模型性能,同时更有效。因此,我们的方法的行为就像直接在原始的长序列上计算注意力,而没有信息丢失。我们将该方法命名为SDIM(即基于采样的深度兴趣建模)。

我们还介绍了我们关于在线部署SDIM的实际实践。具体来说,我们将我们的框架解耦为两部分: (1)行为序列哈希(BSE)服务器,和(2) CTR服务器,其中这两个部分是分别部署的。行为序列哈希是整个算法中最耗时的部分,而这部分的解耦大大减少了服务时间。更多的细节将在第4.4节中介绍。

我们在公共和工业数据集上都进行了实验。实验结果表明,SDIM取得了与基于注意的标准方法一致的结果,并且在对长期用户行为的建模方面优于所有竞争基线,并具有相当大的速度。SDIM已部署在中国最大的生活方式服务电子商务平台美团2的搜索系统中,带来了2.98%的CTR和2.69%的VBR提升,这对我们的业务非常重要。综上所述,本文的主要贡献总结如下:

我们提出了SDIM,一个基于哈希采样的框架,用于建模CTR预测的长期用户行为。我们证明了这种简单的基于抽样的策略产生了与目标注意非常相似的注意模式。
我们详细介绍了我们关于在线部署SDIM的实际实践。我们相信这项工作将有助于推进社区,特别是在建模长期用户行为方面。
在公共和工业数据集上进行了大量的实验,结果证明了SDIM在效率和有效性方面的优越性。SDIM已部署在美团的搜索系统中,对业务有了重大改善。

2. 相关工作

长期用户序列建模

用户行为建模在工业应用中表现出了良好的性能。在CTR模型中探索更丰富的用户行为已经引起了广泛的关注。然而,长期的用户行为建模面临着一些挑战,如复杂的模型部署和系统延迟。在MIMN [10]中,提出了具有基于内存的架构设计的用户兴趣中心(UIC)块来解决这一挑战。该块由用户行为事件更新,并且只需要存储有限的用户兴趣内存。MIMN很难建模用户行为序列和目标项目之间的交互,这在CTR建模中被证明是重要的。在SIM [11]中,提出了一种两阶段的方法来建模长期的用户行为序列。首先,利用通用搜索单元(GSU)提取与目标项目相关的相关行为。其次,提出了一个精确的搜索单元来端到端建模相关行为。UBR4CTR [12]使用了与SIM [11]类似的基于搜索的方法来面对挑战。最近,ETA [3]提出了一种端到端目标注意方法来建模长期用户行为序列。他们应用局部敏感哈希(LSH)来减少训练和推理的时间成本。除了上述在CTR预测领域的相关工作外,在自然语言处理(NLP)领域也有大量旨在提高自我注意[6,15,16,19]效率的工作。这些方法可以降低自注意从𝑂(𝐿2)到𝑂(𝐿log(𝐿))的时间复杂度,其中𝐿为序列长度,但不能用于降低目标注意的𝑂(𝐿)时间复杂度。

3. 模型方法

我们将介绍在系统中实现SDIM的框架。在下图中可以看到一个抽象的概述。该框架由两个独立的服务器组成:行为序列编码(BSE)服务器和CTR服务器,这将在后面详细介绍。

3.1 User Behavior Modeling via Hash-Based Sampling

Hash Sampling-Based Attention 和ETA一样,我们从多个hash函数中采样生成用户序列行为和候选物料的hash签名。ETA选择用hash签名的汉明距离来近似用户的兴趣,选择topK相关的用户子序列,这里SDIM剔除一个更有用及有效的方法来预估用户的兴趣。

由于局部保留属性(locality-preserving),相似的向量以高概率落在同一哈希桶中,因此用户行为项和候选物料之间的相似性可以用它们具有相同哈希码(签名)的频率或碰撞概率来近似。这使得我们假设哈希碰撞的概率可以是用户兴趣的有效估计器。

在此基础上,我们提出了一种利用LSH获取用户兴趣的新方法。在哈希之后,我们通过将与具有相同签名的候选项q相关联的行为项s𝑗相加,直接形成用户的兴趣。在单个哈希函数r中,所提出的估计用户兴趣的方法可以通过以下方法来计算。

输入的行为embedding向量为 x ∈ R d \mathbf x \in R^d xRd,hash函数向量为 r ∈ R d \mathbf r \in R^d rRd,其中 r i ∼ N ( 0 , 1 ) r_i \sim N(0, 1) riN(0,1),hash计算过程如下
h ( x , r ) = s i g n ( r T x ) = ± 1 h(\mathbf x, \mathbf r) = sign (\mathbf r^T \mathbf x) = \pm 1 h(x,r)=sign(rTx)=±1
如果输入向量 x 1 \mathbf x_1 x1和向量 x 2 \mathbf x_2 x2相似,那么他们的hash码相同
P ( r ) = 1 h ( x 1 , r ) = h ( x 2 , r ) P^{(r)} = 1_{h(\mathbf x_1, \mathbf r) = h(\mathbf x_2, \mathbf r)} P(r)=1h(x1,r)=h(x2,r)

上面hash是对每个维度使用一个hash函数,实际应用中每个维度使用多个hash函数,能有效降低碰撞概率,假设采用 m m m个hash函数,则有hash函数矩阵 R ∈ R m × d \mathbf R \in R^{m \times d} RRm×d

h ( x , R ) = s i g n ( R x ) ∈ R m h(\mathbf x, \mathbf R) = sign(\mathbf R \mathbf x) \in R^{m} h(x,R)=sign(Rx)Rm

这样就得到了输入向量的hash签名(长度为 m m m),然后再将hash签名分隔成 τ \tau τ组,每组视作一个hash桶,用这个hash桶作为索引,保存落入到这个hash桶的输入embedding列表,并对每个embedding使用L2归一化。

下图是 m = 4 m=4 m=4 τ = 2 \tau =2 τ=2,将每个序列行为embedding hash成4个bit,然后这4个bit分成2组(黄色和绿色2组),然后每组的签名值作为key建立索引,保存对应的经过L2归一化的embedding。

在这里插入图片描述

对于序列行为 s j \mathbf s_j sj,候选物料为 q \mathbf q q,那么根据用户序列可以得到用户行为向量
l 2 ( P ( r ) S ) = l 2 ( ∑ j = 1 L p j ( r ) s j ) l_2(\mathbf P^{(\mathbf r)} \mathbf S)=l_2(\sum_{j=1}^L\mathbf p_j^{(\mathbf r)} \mathbf s_j) l2(P(r)S)=l2(j=1Lpj(r)sj)

其中 S \mathbf S S为用户序列Embedding, p j r = { 0 , 1 } \mathbf p_j^{r}=\{0, 1\} pjr={0,1},当序列 s j \mathbf s_j sj和候选物料 q \mathbf q q在hash函数向量 r \mathbf r r下的签名一样时为1,否则为0。
q j ( r ) = 1 h ( s j , r ) = h ( q , r ) \mathbf q^{(r)}_j=1_{ h(\mathbf s_j, \mathbf r) = h(\mathbf q, \mathbf r)} qj(r)=1h(sj,r)=h(q,r)

用户兴趣表示为和候选物料签名一致的序列向量的attention值
A t t e n t i o n ( q , S ) = 1 m / τ ∑ i = 1 m / τ l 2 ( P ( r i ) S ) = 1 m / τ ∑ i = 1 m / τ l 2 ( ∑ j = 1 L p j ( r i ) s j ) Attention(\mathbf q, \mathbf S)=\frac{1}{ {m}/ {\tau} } \sum_{i=1}^{m/ \tau} l_2(\mathbf P^{(\mathbf r_i)} \mathbf S) = \frac{1}{ {m}/ {\tau} } \sum_{i=1}^{m/ \tau} l_2( \sum_{j=1}^L \mathbf p^{(\mathbf r_i)}_j \mathbf s_j) Attention(q,S)=m/τ1i=1m/τl2(P(ri)S)=m/τ1i=1m/τl2(j=1Lpj(ri)sj)

相当于直接在用户长期序列上面做attention操作,具体证明如下:
在这里插入图片描述
attention权重和 τ \tau τ的关系
在这里插入图片描述

在这里插入图片描述

3.2 复杂度分析

序列长度为 L L L,Embedding维度为 d d d,候选物料数量为 B B B,DIN使用attention的时间复杂度为 O ( L ∗ B ∗ d ) O(L*B*d) O(LBd)。当模型训练好之后,用户的兴趣向量就固定了,与infer时具体的候选物料就无关了,因此每次请求只需要计算一次用户序列的hash转换,在时间复杂度上相当于将 B B B降为1,这相比标准的attention计算要快非常多。SDIM最耗时的地方在于计算用户序列的hash转换,将 L L L d d d维序列向量转为 m m m维的hash编码向量,时间复杂度为 O ( L ∗ m ∗ d ) O(L*m*d) O(Lmd),可以通过 Approximating Random Projection algorithm近似算法降低到 O ( L ∗ m ∗ log ⁡ ( d ) ) O(L*m*\log(d)) O(Lmlog(d)),因为 m ≪ L m \ll L mL,且 d ≪ log ⁡ ( d ) d \ll \log(d) dlog(d),因此速度有很大提升,在美团场景有10-20倍的提升。

4. 部署

将系统分为2部分 Behavior Sequence Encoding (BSE) server 和 CTR Server
在这里插入图片描述
CTR模型结构如下图

在这里插入图片描述

5. 实验

在taobao数据集上面的AUC及速度提升
在这里插入图片描述
在工业数据集上面的AUC及速度提升
在这里插入图片描述
T=256 for Taobao and T=1024 for industrial dataset

超参数分析

hash函数数量 m m m,当 m > 48 m>48 m>48时几乎不变,线上取48.
在这里插入图片描述

hash签名的宽度 τ \tau τ

在这里插入图片描述
短期用户兴趣建模上的表现,SDIM也要好些,而且速度有2倍提升。
在这里插入图片描述

总结

通过使用hash函数签名的方式处理长期用户序列建模,摒弃了一贯使用的attention方式,开创了新的用户序列提取方式,在效果及效率上有显著提升。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/823541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MPDIoU: A Loss for Efficient and Accurate Bounding BoxRegression--论文学习笔记

超越GIoU/DIoU/CIoU/EIoU MPDIoU让YOLOv7和YOLACT双双涨点 目标检测上的指标对比: 论文地址: [2307.07662] MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression (arxiv.org) 摘要 边界框回归(Bounding Box Regression&am…

JSP项目国际化词条统计

国际化字条匹配并导出为excel格式 需求 将jsp页面里的key值&#xff0c;就是<spring:message code"gsyezer_Single_crystal"/>里的gsyezer_Single_crystal。和对应的字条对应上&#xff0c;并以excel表格形式输出。 jsp页面key值示例 <label for"&…

Redis 搭建主从集群

文章目录 1. 主从集群架构1.1 准备实例和配置1.2 启动1.3 开启主从关系1.4 测试 2. 主从同步原理2.1 全量同步2.2 增量同步repl_backlog原理 2.3 主从同步优化小结 单节点的 Redis 并发能力有限&#xff0c;要进一步提高 Redis 的并发能力&#xff0c;就需要搭建主从集群&#…

Eureka 学习笔记5:InstanceRegistry

版本 awsVersion ‘1.11.277’ LeaseManager 接口管理实例的租约信息&#xff0c;提供以下功能&#xff1a; 注册实例取消注册实例实例续约剔除过期实例 public interface LeaseManager<T> {/** 注册实例并续约*/void register(T r, int leaseDuration, boolean isRep…

8.1day02苍穹外卖开发

今天完善的功能是新增员工的功能&#xff1b; 新增员工需要添加的数据和员工表中的字段存在差异&#xff0c;用DTO封装传入进来的数据&#xff0c;将DTO实体的数据拷贝给employ类中去&#xff0c;采用的方式是用 BeanUtils.copyProperties(employeeDTO,employee); //前面是数据…

lodop学习

lodop 前提&#xff1a;为满足js调用打印机功能&#xff0c;浏览器自带的打印会弹出一个预览框&#xff0c;实际在应用场景上不需要这个预览弹窗&#xff0c;点击页面打印要直接根据预设好的参数直接打印&#xff0c;这个时候看到了lodop这个插件。 步骤1&#xff1a;官网下载…

一文搞懂Redis架构演化之路

目录 从最简单的开始&#xff1a;单机版 Redis 数据持久化&#xff1a;有备无患 主从复制&#xff1a;多副本 哨兵&#xff1a;故障自动切换 分片集群&#xff1a;横向扩展 总结 这篇文章我想和你聊一聊 Redis 的架构演化之路。 现如今 Redis 变得越来越流行&#xff0c;…

C++ ——stack、queue容器模拟实现及deque容器底层介绍

deque文档 stack文档 deque文档 文章目录 &#x1f345;1. deque容器&#x1f352;deque底层&#x1f352;deque的优势&#x1f352;deque的劣势 &#x1fad0;2. stack模拟实现&#x1f95d;3. queue模拟实现 &#x1f345;1. deque容器 查看文档可发现&#xff0c;栈和队列都…

前中后序迭代统一格式遍历法(最好理解)js版本

说实话,有关二叉树遍历这块,特别是迭代版本,网上好多写的糊里糊涂的,尤其是将三种遍历统一风格的,基本都是看到一头雾水,我想了个比较直观点(自认为) 首先,以下图二叉树为例, 使用迭代法,无论哪种遍历顺序都要首先要开一个栈,同时还需要一个指针cur用于控制当前 接…

Java三大特征之继承【超详细】

文章目录 一、继承概念二、继承的语法三、父类成员访问3.1子类中访问父类的成员变量3.2子类和父类成员变量同名3.3子类中访问父类的成员方法 四、super关键字五、子类构造方法六、super和this七、再谈初始化八、protected 关键字九、继承方式十、final 关键字十一、继承与组合 …

RK DWC3 gadget模块 分析

1. dw3 core代码分析 文件&#xff1a;[drivers/usb/dwc3/core.c] dwc3_probe 函数主要申请dwc3_vendor 参数内存&#xff08;dwc3_vendor的dwc成员即是 struct dwc3结构体参数&#xff09;&#xff0c;对dwc3 通过设备树 以及寄存器信息对 dwc3的成员进行初始化&#xff0c;…

cloudstack平台host加入后,显示CPU speed为0GHz

一、环境说明 操作系统&#xff1a;openEuler 22.03CPU&#xff1a;Kunpeng-920&#xff0c;arm v8cloudstack&#xff1a;4.18libvirtd&#xff1a;6.2.0 二、问题描述 cloudstack平台初始化完成后&#xff0c;第一次加入host&#xff0c;系统虚拟机一直无法正常创建&#…

瑞吉外卖项目----(2)缓存优化

1 缓存优化 1.0 问题说明 1.1 环境搭建 将项目推送到远程仓库里&#xff0c;教程在git 提交远程仓库前建议取消代码检查 创建新的分支v1.0&#xff08;用于实现缓存优化&#xff09;并推送到远程仓库 1.1.1 maven坐标 导入spring-data-redis的maven坐标&#xff1a; &l…

PyTorch代码实战入门

人这辈子千万不要马虎两件事 一是找对爱人、二是选对事业 因为太阳升起时要投身事业 太阳落山时要与爱人相拥 一、准备数据集 蚂蚁蜜蜂数据集 蚂蚁蜜蜂的图片&#xff0c;文件名就是数据的label 二、使用Dataset加载数据 打开pycharm&#xff0c;选择Anaconda创建的pytorch环…

FTP Server

简介 FTP&#xff1a;File Transfer Protocol 文件传输协议&#xff1b;它工作在 OSI 模型的第七层&#xff0c; TCP 模型的第四层&#xff0c; 即应用层&#xff0c; 使用 TCP 传输而不是 UDP&#xff0c; 客户在和服务器建立连接前要经过一个“三次握手”的过程&#xff0c;…

捷码低代码|FreeContainer 自由布局组件详解

背景知识&#xff1a; 1、布局组件&#xff1a; 布局组件是一种用于在用户界面中安排和组织其他组件的组件。它们提供了一种简单的方法来控制和管理页面上组件的位置、大小和层次结构。布局组件可以是容器&#xff0c;可以包含其他组件&#xff0c;并确定它们在界面上的显示方式…

【MyBatis】 框架原理

目录 10.3【MyBatis】 框架原理 10.3.1 【MyBatis】 整体架构 10.3.2 【MyBatis】 运行原理 10.4 【MyBatis】 核心组件的生命周期 10.4.1 SqlSessionFactoryBuilder 10.4.2 SqlSessionFactory 10.4.3 SqlSession 10.4.4 Mapper Instances 与 Hibernate 框架相比&#…

深入理解MVVM架构模式

MVVM原理 MVVM是一种用于构建用户界面的软件架构模式&#xff0c;它的名称代表着三个组成部分&#xff1a;Model&#xff08;模型&#xff09;、View&#xff08;视图&#xff09;和ViewModel&#xff08;视图模型&#xff09;。MVVM的主要目标是将应用程序的UI与其底层数据模…

SERDES关键技术

目录 一、SERDES介绍 二、SERDES关键技术 2.1 多重相位技术 2.2 线路编解码技术 2.2.1 8B/10B编解码 2.2.2 控制字符&#xff08;Control Characters&#xff09; 2.2.3 Comma检测 2.2.4 扰码&#xff08;Scrambling&#xff09; 2.2.5 4B/5B与64B/66B编解码技术 2.3 包传…

Halcon学习之一维测量实战之测量矩形(一)

一、采集图像 (1)测量充电器 测量充电器的引脚,然后每次旋转充电器,让测量矩形都跟着它转,这就是定位+测量, (2)测量钥匙 (3)测量瓶盖 我们后面还会涉及到拟合的问