论文:
论文题目:《User Behavior Retrieval for Click-Through Rate Prediction》
论文地址:https://arxiv.org/pdf/2005.14171.pdf
之前我们讲过一篇阿里妈妈关于如何从长序列中选取跟target 最相关的item的子序列的方法,今天我们就来讲一下另一篇论文UBR4CTR中是如何使用这种search based method方法的。
一 、背景
以前的ctr预估模型都是用最近用户点击过的N个行为去预估用户的下一次点击,但是这会过于依赖用户最近的N次点击来,也就必然的忽略用户的长期兴趣。用户的点击兴趣可能来源于更长期的兴趣或者一些更周期的行为习惯。那么,我们是不是可以利用超长的序列去建模呢,比如我们也对长度超过一千的序列去做self-attention?答案是不行的,不仅由于资源和计算瓶颈问题,还因为长序列中会夹杂着很多噪声,这会对模型的建模带来很大的负面效果。比如说,用户的query是连衣裙,这个用户的长序列中却都是一些跟电子数码产品的item,这时候,我们是不能直接使用这个超长序列的。之前在sim论文中,作者是通过类目来进行筛选,这是在推荐广告场景下的做法,如果把其他特征组信息假如一起检索呢?
本篇论文就是在推荐/广告场景下的ctr预估模型,让我们一起看一下吧。
可以看到整个检索分为两部,第一步是从target user,target item,context中选取query,第二部是根据query从用户的超长序列中选取最相关的行为特征,选出来的行为会组成一个序列送到mlp中去做后续的ctr预估任务。
二 、method
可以看到UBR4CTR主要由两部分组成,第一部分是用户行为检索模块,第二个部分是ctr预估模块。
我们先来介绍下用户行为检索模块,用户的行为检索分为三个部分,特征选择,搜索引擎,构建历史序列
2.1 特征选择模型
特征选择模型(这部分主要针对predicted target里面含有的比如user gender, location, item的category, brand以及context里面的time, scenario等特征,每次特征选择仅考虑其中的部分特征作为检索的query)
这里,我们从简介绍,具体的公式细节就不贴出来了。
首先,明确一点,我们特征选择的输入来源于三个部分,user,item和context三部分,我们需要对这三组特征的所有特征进行特征选择,输出是这些特征的采样概率。
具体而言,
输入,除了user_id之外的所有特征经过embedding后concate,然后经过multi-head attention后在经过mlp后经过sigmoid激活,输出每个特征的采样概率。而user_id的采样概率为1,是一定会被采样到的特征。
到这里,我们就为每个特征都打上了一个采样概率,这个采样概率是动态计算的,所以在线上infer的时候也会去动态的使用不同的特征。
2.2 搜索引擎
这里使用倒排索引,使用inverted index检索所有与query相关的历史行为:
使用特征的value作为倒排索引的key,value是具体的用户行为。
使用到的特征为:
这些特征中,user_id是固定使用的,其余特征会通过之前计算到的采样概率进行筛选。
我们使用以上的特征作为query跟item(doc D)用bm25算法计算相似度,然后选取序列中最相关的S个行为:
其中IDF计算如下:
ps:bm25算法可以自己去了解一下,这里只介绍思想。
2.3 Predicted module
这里就跟din一样了,我们直接看模型图就好:
把我们在之前检索到到序列,用target item做attention后进行weigh pooling后一起concat起来送到mlp中进行ctr预估。
损失函数为:
加上l2正则后:
三、实验结果
总结一下:整篇论文的核心在于用三组特征,target user,target item,context三组特征,动态的计算每个特征的采样概率,然后根据这个采样概率采样出每次我们用来作为query的特征,从用户的序列中根据bm25算法选出最相关的行为。只有后面的类din部分,就跟一般的排序模型一样了。