温故而知新!前面的四十八篇文章中,单单是阿里的文章咱们就写了九篇了。今天就来简单回顾一下!
相关论文咱也不一一贴地址了,关注公众号“小小挖掘机”后台回复“阿里推荐”,打包下载所有的论文。
业界常用的推荐系统主要分为两个阶段,召回阶段和精排阶段,当然有时候在最后还会接一些打散或者探索的规则,这点咱们就不考虑了。
前面九篇文章中,有三篇是召回阶段的文章,六篇是排序阶段的文章。在召回阶段,主要是基于item的embedding来做的,因此前两篇我们介绍一下大规模商品集下的embedding策略。第三篇将介绍一下深度树匹配召回模型。在排序阶段,主要是进行CTR或者CVR的预估,我们先来介绍一下MLR模型,然后介绍一下主要基于用户历史行为来做推荐的DIN、DIEN、DSIN和BST模型。最后介绍一下多任务模型ESMM。
本文主要简单介绍一下论文中提出的模型的内容,以及为什么要这么做。至于详细的内容,可以通过给出的文章链接以及论文进行进一步的学习。
1、Billion-scale Commodity Embedding for E-commerce Recommendation in Alibaba
这篇文章中,使用图嵌入(Graph Embedding)的方法来学习十亿级商品的Embedding。基本的过程如下:
首先,将用户的历史行为切割为不同的Session,每个Session表示一个行为序列;随后,将这些行为序列表示为有向带权图,图中的权重代表所有行为序列中两个物品的行为转移次数;然后,基于随机游走的方式,从图中得到更多的行为序列;最后,通过Skip-Gram的方式,学习每个物品的Embedding。
为了更好的解决冷启动问题,在学习物品Embedding时,进一步加入辅助信息Side-Information。这样,一个物品可表示为[w0,w1,..,wn],其中w0代表物品本身的Embedding,w1,..,wn代表n中side-information对应的Embedding。这样,聚合后的物品aggregated embeddings计算有两种方式,直接平均和加权平均:
直接平均的方式称为Graph Embedding with Side information (GES),加权平均的方式称为 Enhanced Graph Embedding with Side information (EGES)。二者的流程如下:
在加入了side-information之后,新加入的物品的embedding可以通过其side-information对应的embedding的平均值来表示了。一般来说新的物品都有对应的side-information。同时embedding基本会按天进行更新。
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/229b686535f1
2、Learning and Transferring IDs Representation in E-commerce
本文提到的方法,大体的过程跟上一篇文章是类似的。但是行为序列直接使用用户日志中的行为序列,没有通过随机游走的方式从构造的图中产生。
在得到行为序列之后,同样通过Skip-Gram来学习物品的Embedding。每一个物品对应多组Embedding:
这里,id1(itemi)代表物品本身,id2(itemi)代表产品ID,id3(item3)代表店铺ID等等。
此时计算物品之间共现概率的公式如下:
。
与第一篇文章通过平均把物品本身的Embedding和Side-Information对应的Embedding进行聚合的方式不同。这里分别计算了两个物品自身的Embedding和Side-Information对应的Embedding之间的相似性,随后进行求和作为两个物品的共现概率。第一种方式中,每个Embedding的长度必须一致,但是在后一种方式中,每种embedding的长度则无须一致。
而权重也是定义好的,并非像第一篇文章一样通过模型学习得到。权重定义如下:
上面的D是整个商品集,举个例子来说明一下上面的流程,假设当前是计算品牌这个side-information的权重,商品i的品牌是阿迪达斯,遍历所有的商品集D,发现共有10个品牌是阿迪达斯的物品,那么此时的Vik=10,wik=1/10 。而wi1=1是确定的,因为第i个物品在商品集中是唯一出现的。
除了上面计算的item之间的共现概率外,我们还希望,属性ID和itemID之间也要满足一定的关系,简单理解就是希望itemID和其对应的属性ID关系越近越好,于是定义:
由于每种Embedding长度不同,使用Mk来进行线性变换为一样的长度。
于是,我们期望最大化的式子为:
此时,对于新的物品,同样通过其side-information来表示其embedding:
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/285978e29458
3、TDM:Learning Tree-based Deep Model for Recommender Systems
推荐系统中的召回策略主要有协同过滤、向量化召回。使用协同过滤进行召回的时候,并不能真正的面向全量商品库来做检索,如itemCF方法,系统只能在用户历史行为过的商品里面找到侯选的相似商品来做召回,使得整个推荐结果的多样性和发现性比较差。向量化召回是目前推荐召回核心发展的一代技术,但是它对模型结构做了很大的限制,必须要求模型围绕着用户和向量的embedding展开,同时在顶层进行内积运算得到相似性。
基于上面的缺点,阿里提出了深度树匹配的召回策略。深度树匹配的核心是构造一棵兴趣树,其叶子结点是全量的物品,每一层代表一种细分的兴趣:
接下来,我们主要介绍三个方面的内容:
1)怎么基于树来实现高效的检索
2)怎么在树上面做兴趣建模
3)兴趣树是怎么构建的
3.1 怎么基于树来实现高效的检索
在这里,假设已经得到深度树的情况下,高效检索采用的是Beam-Search的方式:
3.2 怎么在树上面做兴趣建模
在已经得到深度树的情况下,一个新来的用户,我们怎么知道他对哪个分支的兴趣更大呢?我们首先需要将树建立为一棵最大堆树。
在实践中,构造最大堆树可以举个简单的例子,假设用户对叶子层 ITEM6 这样一个节点是感兴趣的,那么可以认为它的兴趣是 1,同层其他的节点兴趣为 0,从而也就可以认为 ITEM6 的这个节点上述的路径的父节点兴趣都为 1,那么这一层就是 SN3 的兴趣为 1,其他的为 0,这层就是 LN2 的兴趣为 1,其他为 0。如下图所示:
当建立起如上的树之后,我们就可以在每一层构建一定的正负样本,通过构建模型来学习用户对于每一层节点的兴趣偏好。注意的是,每层的偏好都要学习,也就是说每层都要构建一个模型。同时,模型只需要关心是否足够拟合样本就可以了,并没有要求模型一定要把用户特征和 item 特征转换为顶层向量内积的形式,这样就给了模型很大的自由度,只要去拟合好足够的样本,那么任意的模型都是 OK 的。下面是一个模型的示例:
3.3 兴趣树是怎么构建的
前面两个问题,都是在给定树结构的情况下来介绍的,那么怎么来构建一棵兴趣树呢?每层是怎么分叉的呢?
树的叶节点对应具体的 item,目标是构建一个好的树结构来优化我们的检索效果。通过前面的分析知道,在进行兴趣建模时,对于叶子层的样本我们通过用户行为反馈得到,而中间层的样本则通过树结构采样得到。所以树结构决定了中间层的样本。
在进行快速检索时,采用从顶向下的检索策略,利用的是对每一层节点兴趣建模进行快速剪枝。要保证最终的检索效果,就需要每一层的兴趣判别模型能力足够强。由于树结构负责我们中间层的样本生成,所以我们的思路是通过优化树结构影响样本生成进而提升模型能力。具体来说,通过树结构优化降低中间层的样本混淆度,让中间层样本尽可能可分。
所以,整个树结构的生成创建和优化的过程,实际上是围绕着怎么来生成更好的样本、帮助模型学习的视角进行的,而不是只是考虑相似、聚类这样的模式。那么这里的核心方案是什么呢?
image方案总结来说,就是最小化用户行为序列中相近的item-pair在树上的距离。假设用户的行为序列为A-》B-》D-》C,那么我们希望(A,B),(B,D),(D,C)在树上的距离越近越好。两个叶子结点的距离通过其最近的公共祖先确定。
好了,到这里,对深度树匹配模型做一个简单的总结:
image关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/ef3caa5672c8
4、Learning Piece-wise Linear Models from Large Scale Data for Ad Click Prediction
这篇文章介绍的方法就是我们所熟知的MLR(mixed logistic regression)算法。MLR可以看做是对LR的一个自然推广,它采用分而治之的思路,用分片线性的模式来拟合高维空间的非线性分类面,其形式化表达如下:
其中u是聚类参数,决定了空间的划分,w是分类参数,决定空间内的预测。这里面超参数分片数m可以较好地平衡模型的拟合与推广能力。当m=1时MLR就退化为普通的LR,m越大模型的拟合能力越强,但是模型参数规模随m线性增长,相应所需的训练样本也随之增长。因此实际应用中m需要根据实际情况进行选择。例如,在阿里的场景中,m一般选择为12。下图中MLR模型用4个分片可以完美地拟合出数据中的菱形分类面。
在实际中,MLR算法常用的形式如下,使用softmax作为分片函数:
关于损失函数的设计,采用了logloss以及L1,L2正则,形式如下:
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/627fc0d755b2
5、Deep Interest Network for Click-Through Rate Prediction
阿里相关人员通过观察收集到的线上数据,发现了电商领域用户行为数据中两个很重要的特性,分别是Diversity和Local activation。Diversity指用户在浏览电商网站的过程中显示出的兴趣是十分多样性的;Local activation指由于用户兴趣的多样性,只有部分历史数据会影响到当次推荐的物品是否被点击,而不是所有的历史记录。
针对上面提到的用户行为中存在的两种特性,阿里将其运用于自身的推荐系统中,推出了深度兴趣网路DIN,其架构如下:
DIN模型结构相对还是简单的,用户历史行为序列中每一个物品都对应着物品ID和店铺ID,目标物品(广告)也有物品ID和店铺ID,物品ID和店铺ID都会转换为对应的Embedding。随后,行为序列中物品ID对应的Embedding会分别与目标物品ID的Embedding计算attention score,并根据attention score求加权平均;行为序列中物品对应店铺ID的Embedding会分别与目标物品对应店铺ID的Embedding计算attention score,并根据attention score求加权平均。最后,所有的向量拼接后,通过全连接神经网络得到最终的输出。
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/73b6f5d00f46
6、Deep Interest Evolution Network for Click-Through Rate Prediction
DIN中存在两个缺点,首先用户的兴趣是不断进化的,而DIN抽取的用户兴趣之间是独立无关联的,没有捕获到兴趣的动态进化性,其次是通过用户的显式的行为来表达用户隐含的兴趣,这一准确性无法得到保证。
基于以上两点,阿里提出了深度兴趣演化网络DIEN来CTR预估的性能,其模型结构如下:
DIENDIEN中包含Embedding层、兴趣抽取层Interest Extractor Layer、兴趣进化层Interest Evolution Layer和全连接层。
兴趣抽取层Interest Extractor Layer的主要目标是从embedding数据中提取出interest。但一个用户在某一时间的interest不仅与当前的behavior有关,也与之前的behavior相关,所以作者们使用GRU单元来提取interest。在兴趣抽取层,为了判定兴趣是否表示的合理,文中别出心裁的增加了一个辅助loss,来提升兴趣表达的准确性:
这里,作者设计了一个二分类模型来计算兴趣抽取的准确性,我们将用户下一时刻真实的行为e(t+1)作为正例,负采样得到的行为作为负例e(t+1)',分别与抽取出的兴趣h(t)结合输入到设计的辅助网络中,得到预测结果,并通过logloss计算一个辅助的损失。
兴趣进化层Interest Evolution Layer的主要目标是刻画用户兴趣的进化过程。用户的兴趣在变化过程中遵循如下规律:1)interest drift:用户在某一段时间的interest会有一定的集中性。比如用户可能在一段时间内不断买书,在另一段时间内不断买衣服。2)interest individual:一种interest有自己的发展趋势,不同种类的interest之间很少相互影响,例如买书和买衣服的interest基本互不相关。为了利用这两个时序特征,这里通过attention机制以找到与target AD相关的interest。同时把attention score加入到GRU单元中。
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/6742d10b89a8
7、Deep Session Interest Network for Click-Through Rate Prediction
从用户行为中呢,我们发现,在每个会话中的行为是相近的,而在不同会话之间差别是很大的。为了刻画这种与行为密切相关的行为表现,阿里提出了深度会话兴趣网络Deep Session Interest Network。其模型结构如下:
DSIN在全连接层之前,分成了两部分,左边的那一部分,将用户特征和物品特征转换对应的向量表示,这部分主要是一个embedding层。右边的那一部分主要是对用户行为序列进行处理,从下到上分为四层:
1)序列切分层session division layer
2)会话兴趣抽取层session interest extractor layer
3)会话间兴趣交互层session interest interacting layer
4)会话兴趣激活层session interest acti- vating layer
Session Division Layer这一层将用户的行文进行切分,首先将用户的点击行为按照时间排序,判断每两个行为之间的时间间隔,前后的时间间隔大于30min,就进行切分。切分后,我们可以将用户的行为序列S转换成会话序列Q。第k个会话Qk=[b1;b2;...;bi;...;bT],其中,T是会话的长度,bi是会话中第i个行为,是一个d维的embedding向量。所以Qk是T * d的。而Q,则是K * T * d的
在Session Interest Extractor Layer,使用transformer对每个会话的行为进行处理。同时在Transformer中,对输入的序列会进行Positional Encoding。经过Transformer处理之后,经过一个avg pooling操作,将每个session兴趣转换成一个d维向量。
在Session Interest Interacting Layer,通过一个双向LSTM(bi-LSTM)来获取用户的会话兴趣,得到的隐藏层状态Ht,我们可以认为是混合了上下文信息的会话兴趣。
在Session Interest Activating Layer,通过注意力机制来刻画用户的会话兴趣与目标物品的相关性,attention分成了两个部分,分别是目标物品与原始会话兴趣的相关性(没有通过bi-LSTM前的会话向量)以及目标物品与混合了上下文信息的会话兴趣(通过bi-LSTM后得到的隐藏层向量)的相关性。
最后的话,就是把四部分的向量:用户特征向量、待推荐物品向量、会话兴趣加权向量UI、带上下文信息的会话兴趣加权向量UH进行横向拼接,输入到全连接层中,得到输出。
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/82ccb10f9ede
8、Behavior Sequence Transformer for E-commerce Recommendation in Alibaba
为了能够将用户行为序列以及序列中商品与待推荐商品之间的相关性等因素加入到模型中,阿里尝试用NLP领域中大放异彩的Transformer模型来做推荐任务,提出了Behavior Sequence Transformer,简称BST模型,其整体的架构如下:
模型分为Embedding Layer、Transformer Layer和MLP Layer。
为了将行为序列信息加入到模型中,在Embedding Layer中,加入了位置特征的Embedding,第i个位置的位置特征计算方式为pos(vi)=t(vt)-t(vi),其中,t(vt) 表示推荐的时间戳,t(vi) 表示用户点击商品vi时的时间戳。至于如何将一个时间戳转化为低维向量,可能是进行离散化后再转化为embedding。
在Transformer Layer,并不是只有行为序列中商品来做multi-head attention,待推荐的商品也会加入其中,这样其实就包含了行为序列中商品与待推荐商品之间的相关性。
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/caa2d87cb78c
9、Entire Space Multi-Task Model: An E ective Approach for Estimating Post-Click Conversion Rate
本文介绍的是一个Multi-Task的方法,称为ESMM。其关注的焦点是CVR预估,CVR代表从点击到购买的转化。不过传统的CVR预估问题存在着两个主要的问题:样本选择偏差和稀疏数据。如下图:
样本选择偏差(sample selection bias,SSB)指训练模型仅通过有点击行为的样本空间即途中灰色椭圆部分来进行,但训练好的模型是在整个样本空间X去做推断的。数据稀疏(data sparsity,DS)指点击行为的样本空间相对于整个样本空间来说是很小的。
ESMM模型借鉴了多任务学习的思路,引入了两个辅助的学习任务,分别用来拟合pCTR和pCTCVR,从而同时消除了上文提到的两个挑战。ESMM模型能够充分利用用户行为的顺序性模式,其模型架构下图所示:
可以看到,ESMM模型由两个子网络组成,左边的子网络用来拟合pCVR,右边的子网络用来拟合pCTR,同时,两个子网络的输出相乘之后可以得到pCTCVR。因此,该网络结构共有三个子任务,分别用于输出pCTR、pCVR和pCTCVR。
假设我们用x表示feature(即impression),y表示点击,z表示转化,那么根据pCTCVR = pCTR * pCVR,可以得到:
将乘法转化为除法,我们可以得到pCVR的计算:
由上面提到的等式可以看出,pCVR是可以通过pCTR和pCTCVR的预估推导出来的。因此,我们只需要关注pCTR和pCTCVR两个任务即可。为什么是这两个任务呢?其实就是为了消除样本选择偏差嘛,因为CVR是从click到conversion,而CTCVR是从impression到conversion,CTR是从impression到conversion,所以CTR和CTCVR都可以从整个样本空间进行训练,一定程度的消除了样本选择偏差。
关于该方法更多的介绍,参考文章:https://www.jianshu.com/p/35f00299c059
关注小编的公众号,后台回复“进群”,一起来交流学习吧!
最后,再提醒一遍,后台回复“阿里推荐”,打包下载所有的论文。
网友评论