本文主要是介绍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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!