SIM(Search-based user interest modeling)

2024-09-06 05:48

本文主要是介绍SIM(Search-based user interest modeling),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

导读

我们对电商场景兴趣建模的理解愈发清晰:1. 通过预估目标item的信息对用户过去的行为做search提取和item相关的信息是一个很核心有效的技术。2. 更长的用户行为序列信息对CTR建模是非常有效且珍贵的。从用户的角度思考,我们也希望能关注用户长期的兴趣。但是当前的search方法无论是DIN和DIEN都不允许我们在线对一个超长的行为序列比如1000以上做有效搜索。所以我们的目标就比较明确了,研发一个可以根据预估目标item信息对用户全生命周期行为进行search,获取该item相关信息的方法 

方法

直接用类似DIN或者DIEN的方案对全行为序列search无疑是在线计算时无法接受的,因此我们想到了能否把搜索解开来,在文中我们提出了两阶段的search模式:general search 和 exact search。从精度角度我们将搜索拆解为一个相对粗糙普适的搜索和一个更为具体精确的搜索。从计算过程角度我们希望general search的大部分计算可以离线完成,并且将历史行为的数量缩小到几百的量级,给exact search部分的建模保留充足的计算复杂度空间。

exact seatch部分我们没有投入太多的精力,可以把它看做是一个短序列建模问题,用DIN/DIEN或者一些其他的类似结构皆可行。当然在长序列建模里,我们发现以前尝试不那么有效的时间信息影响变大了,因此在exact search这部分引入了时间信息,具体的做法可以看披露的论文SIM。核心的难点还是在general search部分,研发过程中有两种思路:1. 用参数化的方式,我们通过对用户的行为和item进行向量化,然后用基于内积的近似最近邻检索出Top_K个相关的行为,比如这篇文章Maximum Inner Product Search (MIPS)[5]。在线计算CTR时,通过向量对每个用户的历史行为构建一个基于内积距离的近似近邻层次索引,每个item可以高效的检索与其相关的行为。具体此方法的在线和离线实现可以看看论文,这里不详细介绍。2. 在实践过程中,我们发现电商数据天然的账户体系或者结构性让general search有更简单的实现方式。电商场景用户行为大部分交互对象也是item,item有其固有的类目信息category,我们可以对每个用户的历史行为基于category构建一层索引,类目相关的行为可以离线进行挂载。整体用户的行为数据会被构建为一个 key1-key2-value 的结构,一级索引 [公式]为user,二级索引 [公式] 为类目category,value为该类目下的行为序列,或者也可以进一步扩展为类目相关的行为序列。在线的时候根据用户信息以及每个预估目标商品的类目进行general search,得到一个和当前item相关的子序列。general search后的结果根据我们的数据特性大致会从几万的原始行为量级降低到几百,这个量级就可以轻松的完成在线通信、实时的exact search计算以及CTR的计算。需要注意的是无论是索引结构存放的数据和general search后的结果,都是用户的行为序列原始信息,可以是原始的ID序列。这样保障了我们对信息仅仅做了general search这一步选择维度的过滤,没有类似embedding这样的信息压缩,最大程度的保留了原始信息。

当然了这种简化的general search在我们的离线实验中表现的效果还是弱于基于向量检索的方式,但是其实现成本非常低,只需要有一个支持key-key-value存储的data base就能轻松的实现。同时在线计算部分只增加了exact search的计算开销,能比较轻松的在线服务。并且其对未来的进一步模型迭代也未增加太多成本。综合下来我们选择了这个简化版本的SIM。用category或者其他粒度合适的item描述信息作为一个固定的索引结构,新增的行为可以增量的更新这个索引,训练的时候索引部分是非参的,不会在训练过程中变化。因此可以用最新的检索结果可以对所有的参数进行端到端的训练,相当的轻便,非常适合在实际工业场景中部署。当然所处的数据环境如果没有对行为数据进行类似category这样的结构化处理,那么就得想办法构建其他的索引结构了。

SIM在我们看来更大的贡献是提供了一个思路以及具体的两种实现方式。我们目前在线采用的是非参数化的general search。对general search部分进行参数化,比如我们文中提出的使用向量的方式,可以进一步提升效果和扩大该模块未来的迭代空间。如何去对构建的索引做建模,如何进一步的提升general search的精度和效率,都是未来可以进一步迭代的。但是值得一提的是general search部分的参数化会带来额外的系统迭代负担,这部分参数日常学习与更新,学习的遗忘,学习结果的存储都是较大的挑战。当然这也给大家留下了探索和研究的空间。

模型结构

图片

上图左侧是第一个阶段,即初步筛选。这里分为两个策略,第一个是soft search, 第二个是hard search。soft search是用候选item的embedding去和用户行为序列中的每一项的embedding去做点积,然后去top-K。这里可以使用的是一些高效方法是ALSH和MIPS的,都是已有的方法,咱们在基于Delaunay图的快速最大内积搜索算法中介绍过MIPS的方法。hard search是利用item的一些元信息,比如商品类别,在用户的行为序列中进行选择,这个方法是无参的。两种策略公式如下图:

实验表明,hard search虽然结果会稍微差一些,但是会快很多。

无论是soft search还是hard search,在获取序列后都是用前面所提到的DIN或者DIEN进行处理,得到点击率预估的值。

特别注意一点,那就是虽然在serving的时候分了两步,但是在训练的时候,是同时训练的。之所以这样,是因为第一步和第二步所需要的用户序列是不一样的,第一步是用户的全部序列,第二步是选择后的序列,所以,想要在第一步中的序列的embedding效果好,需要在第一步中添加一个Auxulary loss。

第一步被称之为General Search Unit, 简称GSU。第二步被称为Exact Search Unit,简称ESU。

GSU做完后,就得到了用户行为序列中相对于候选item的序列子集,然后对于序列子集中的每个item,提取了两种特征,第一种是item的embedding,第二种是item相对于候选item的时间差,即时间信息。这两种信息拼接起来,得到的embedding去做DIEN。

线上实现

实现要求,每个请求需要在30ms内响应,峰值用户数是1M。实现图如下,包含两个关键模块,计算节点和Real-time预测服务器。

注意到,soft-search往往和hard-search的结果类似,因为相似的item往往是同品牌,同类别的。所以,为了latency考虑,线上使用了hard-search。

为了快速索引,建立了一个树结构,Key-Key-Value结构,对用户的行为序列进行存储,第一个key是用户id,第二个key是类别,value则是具体的item。这个树结构足有22TB,放在分布式系统上。

实验

在线下实验中的industrial 数据集上结果如下:

图片

可以看到,hard和soft-search的差别挺小,但相对于之前的系统,都有较为明显的提升。

在线上则是带来的7.1%的CTR提升和4.4%的RPM提升。

作者写的论文思想,值得一读

Life-long兴趣建模视角CTR预估模型:Search-based Interest Model - 知乎写在前面: 最近正好也花了一些成块的时间来梳理和总结过去的一系列工作,进入了一部分写作状态。乘兴而行,给我们最新的工作写一篇中文解读,介绍我们如何在工业界实现对 10000级别的行为序列建模,并将其应用到C…https://zhuanlan.zhihu.com/p/148416488

SIM: 阿里定向广告--基于搜索的超长用户行为序列 ctr 模型用户的历史行为序列中蕴藏着丰富的用户”兴趣点“,用户的行为序列有巨大的价值https://mp.weixin.qq.com/s/CendW4XAgaL2NCX2jYQtMQSIM: 基于搜索的超长行为序列上的用户兴趣建模在DIN: 阿里点击率预估之深度兴趣网络和DIEN: 阿里点击率预估之深度兴趣进化网络中,我们介绍了阿里淘宝https://mp.weixin.qq.com/s/2NBeM-WKYaKQY-lpkm5SDw

这篇关于SIM(Search-based user interest modeling)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141170

相关文章

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

UML- 统一建模语言(Unified Modeling Language)创建项目的序列图及类图

陈科肇 ============= 1.主要模型 在UML系统开发中有三个主要的模型: 功能模型:从用户的角度展示系统的功能,包括用例图。 对象模型:采用对象、属性、操作、关联等概念展示系统的结构和基础,包括类图、对象图、包图。 动态模型:展现系统的内部行为。 包括序列图、活动图、状态图。 因为要创建个人空间项目并不是一个很大的项目,我这里只须关注两种图的创建就可以了,而在开始创建UML图

JavaScript正则表达式六大利器:`test`、`exec`、`match`、`matchAll`、`search`与`replace`详解及对比

在JavaScript中,正则表达式(Regular Expression)是一种用于文本搜索、替换、匹配和验证的强大工具。本文将深入解析与正则表达式相关的几个主要执行方法:test、exec、match、matchAll、search和replace,并对它们进行对比,帮助开发者更好地理解这些方法的使用场景和差异。 正则表达式基础 在深入解析方法之前,先简要回顾一下正则表达式的基础知识。正则

插件maven-search:Maven导入依赖时,使用插件maven-search拷贝需要的依赖的GAV

然后粘贴: <dependency>    <groupId>mysql</groupId>    <artifactId>mysql-connector-java</artifactId>    <version>8.0.26</version> </dependency>

某城user_dun,js逆向分析

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关。 本文章未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,若有侵权,请联系作者立即删除! 前言 这次会简单的讲解某城ly headers中参数userdun的逆向分析流程以及简单的补环境,如果有疑问可以在评论区交流讨论,我看到会及时回复的,另外,有

user is not in the sudoers file

出现这种情况是因为用户user没有sudo权限。解决办法自然是将当前用户添加到sudo成员中。  1.以root身份登录。 2.更改文件权限:  # chmod u+w /etc/sudoers  3.在/etc/sudoers文件中,root ALL=(ALL)ALL下方添加: user ALL=(ALL)ALL 保存退出。 4.还原文件权限:  # chmod u-w /etc

广度优先搜索Breadth-First-Search

目录  1.问题 2.算法 3.代码 4.参考文献  1.问题         广度优先搜索,稍微学过算法的人都知道,网上也一大堆资料,这里就不做过多介绍了。直接看问题,还是从下图招到一条从城市Arad到Bucharest的路径。  该图是连通图,所以必然存在一条路径,只是如何找到最短路径。 2.算法 还是贴一个算法的伪代码吧: 1 procedu

MACS bdgdiff: Differential peak detection based on paired four bedGraph files.

参考原文地址:[http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html](http://manpages.ubuntu.com/manpages/xenial/man1/macs2_bdgdiff.1.html) 文章目录 一、MACS bdgdiff 简介DESCRIPTION 二、用法

Neighborhood Homophily-based Graph Convolutional Network

#paper/ccfB 推荐指数: #paper/⭐ #pp/图结构学习 流程 重定义同配性指标: N H i k = ∣ N ( i , k , c m a x ) ∣ ∣ N ( i , k ) ∣ with c m a x = arg ⁡ max ⁡ c ∈ [ 1 , C ] ∣ N ( i , k , c ) ∣ NH_i^k=\frac{|\mathcal{N}(i,k,c_{