微信看一看的精选文章推荐(见下面图1)大家应该都用过,微信团队在今年发表了一篇文章来专门介绍精选推荐的算法实现细节(Real-time Attention based Look-alike Model,简称RALM算法),这就是我们这篇文章要讲解的内容。基于这篇文章(见参考文献1)的描述,再结合自己的理解,我来带大家一起解读一下这篇基于look-alike模型的实时推荐算法的核心亮点。
在本篇文章中,我会从RALM算法背景介绍、RALM模型架构和工程实践、RALM算法原理介绍等三个部分来介绍RALM算法,希望我的解读可以帮助大家更好地理解这篇论文,进而学习到一些做实时个性化推荐的思路和方法。
一、RALM算法背景介绍
在本节我们先简单介绍一下look-alike模型,再说明传统的look-alike模型应用于推荐系统(特别是微信的文章推荐)中存在的问题,最后来介绍RALM模型的核心思想及该模型是怎么很好地解决传统look-alike模型存在的问题的。
1.look-alike模型相关介绍
look-alike模型是一种流行的受众拓展(audience extension)技术(见参考文献2),大量应用于在线广告行业。对于一个待投放的广告(对于微信文章推荐,就是文章),点击过该广告的用户就是种子用户,look-alike方法就是基于一定的算法原理,找出候选用户集合(目标用户)中与种子用户相似的用户,将广告投放给这些相似用户的过程(见下面图2)。
图2:look-alike模型原理
将受众拓展应用于微信文章推荐,是从文章的角度来描述推荐过程:我们怎么更好地将文章推荐给喜欢该文章的人,而不是基于传统的推荐系统从人的角度来考虑的:怎么为某个人推荐喜欢的文章。受众拓展目前的研究主要关注用户表示和look-alike算法,即用合适的数据结构(一般是向量)来描述用户的偏好特征,再基于look-alike算法找到一批相似的用户。
用户表示基于用户特征,最简单的方式是用一个特征向量来表示每个用户,一般的表示方法向量维度很大并且很稀疏(比如文章数量为N,可以用N维向量表示用户,某一维为1表示用户看过该文章,否则为0),这类表示不是高效的,有了用户的向量表示后,就可以用向量相似的方法计算相似度了。另外一种可行的获取相似用户的方法是采用LSH或者Kmeans对用户聚类,这样同一类的用户就是相似的用户,这种方法比较粗糙,容易丢失信息。
从关于look-alike模型的相关文献可以发现,当前look-alike模型主流的算法主要有两类:基于相似性的方法和基于回归的方法,下面分别简单介绍。
相似性方法,计算出用户的嵌入向量表示,基于某种距离测量方法(如consine余弦、欧氏距离、内积等)计算种子用户和目标用户之间的相似性。某个目标用户跟一组种子用户的相似性可以取该用户与种子用户相似性的平均值,通过这种方式,只有跟平均值相似的候选用户才能够被选中,而只跟种子用户集中某个或者某些种子用户很相似的候选用户将不会被选中。换句话说,部分种子用户所包含的信息将会丢失。
基于回归的方法,将look-alike问题看成是回归问题。最简单的方式是对每个item(即微信文章)训练一个LR模型,种子用户看成是正样本,通过抽样部分非种子用户作为负样本。这时,与种子用户相似的用户会获得较高的得分(LR预测值)。另外,FM和MLP等方法都曾用于受众拓展问题。所有这些回归类方法本质上都是基于用户特征最大化观察到的种子用户的行为,这类方法最大的问题是需要花费较长的时间针对每个item训练离线模型,另一方面,回归列方法需要积累足够多种子用户作为模型的正样本(对于新的item就无能为力了),同时当新用户加入时需要重新训练。当频繁有新用户加入时,回归类方法就力不从心了,因此回归类方法不太适合实时的受众拓展场景。
雅虎16年提出了一个结合相似性和回归两种方法的受众拓展方案(见参考文献3),首先,对用户进行聚类,对某篇文章,生成待推荐的用户候选集(看过该文章的用户所在聚类的并集就是候选集)。其次,基于LR或者简单的特征选择方法过滤掉不相关的用户。该方法可以解决雅虎海量数据集及大规模受众拓展的问题,虽然该算法可以做实时的look-alike,但该算法相对简称粗暴,精度不够。
2.传统受众拓展模型应用于推荐系统存在的问题
不同于广告,将受众拓展技术(look-alike)应用于微信文章推荐,需要考虑如下三个方面的问题,这3点即是微信文章推荐对受众拓展技术提出的要求。
(1) 实时性
被推荐的文章是实时产生并加入到微信的文章推荐池中的,由于文章具备时效性,因此,希望推荐算法可以实时地将文章分发出去。对于文章的推荐,这个是一个硬性要求。
(2) 有效性(effective)
受众扩展方法与主流的基于CTR预估的推荐方法不太一样,是CTR预估的补充策略,我们必须提高受众拓展预测的有效性,并尽最大努力保持预估的性能。同时,实时文章推荐对用户兴趣表示和种子特征表示的准确性和多样性提出了更高的要求。
(3) 性能
对于某一篇待推荐文章,有上百万的种子用户,有成千上万的候选用户可作为受众拓展的对象。受众拓展方法必须实时地对上万计的候选用户打分,因此look-alike模型必须足够简单,能够在极短的时间计算出得分并确定最终推荐的用户。
对于微信文章推荐,“马太效应”明显,头部内容越来越受欢迎,而高质量的长尾内容得不到足够的曝光和关注,这个问题严重影响推荐系统的推荐质量和多样性。为了解决该问题,look-alike算法是一种比较好的将高质量的长尾内容拓展到新用户的方法。但是基于前面的介绍,广泛用于在线广告的传统look-alike算法不太适合推荐系统,主要是因为推荐系统对实时性和有效性有较高要求。
一般来说,实时的look-alike模型需要实时计算种子用户与目标用户的相似性,由于种子用户和目标用户表示的低效,最终的效果不尽人意。主要的困难在于:
(1) 用户表示
为了提高用户兴趣的多样性,需要将尽可能多的用户特征用于用户表示学习,这正是深度学习算法擅长的。
深度学习模型虽然可以建模多维度特征,深度学习模型具备学习特征之间的高阶交互和隐含信息的能力,通过深度学习模型我们可以获得用户的稠密嵌入表示,但对于包含强相关和弱相关的多域(multi-fields feature)特征,深度学习的拼接层效果不够理想,对于强相关特征(比如兴趣标签)容易过拟合,对于弱相关特征(比如购买特征)会欠拟合。
(2) 种子表示
推荐系统中的种子用户是逐步累积的,包含大量用户,并且可能包含“噪音”用户,怎么表示种子用户是面临的一个有挑战的问题。首先,为了提升鲁棒性,每个种子用户对种子群(后面会提到RALM算法会对种子用户聚类,每一类就是一个种子群)的贡献应该不一样。另一方面,由于种子用户中包含大量用户,目标用户一般只跟种子用户中很少的用户有相似性,因此,我们需要建模局部信息获得适应性。
总结一下,对于推荐业务,由于长尾内容包含的内容特征稀少,look-alike方法是一个很好的解决方案,它只依赖于种子用户(点击过该内容的用户)作为输入,而不在意内容本身的特征多少,问题的挑战就变为,怎么选择种子用户以及怎样通过种子用户拓展到更多的其他用户中。
3.RALM算法简介
为了解决推荐系统对实时性和有效性的要求,参考文献1提出了实时注意力look-alike模型(RALM)。RALM是一个基于相似性的look-alike模型,包含用户表示学习和look-alike模型学习。
对于用户表示学习,不是用传统的拼接层(concatenation layer)而是用基于注意融合层(attention merge layer),这种方法对于多维度(multi-fields)特征有很好的表现。为了优化种子用户的表示学习,look-alike模型基于全局和局部注意单元分别学习种子用户的全局和局部表示。并且使用异步在线训练种子用户聚类的方法减少种子用户规模和注意单元在线预测的时间。这篇论文的主要贡献有如下3点:
(1) 提升了用户表示学习的有效性
对于多域用户兴趣表示学习,论文设计了一种引入了注意融合层的深度兴趣网络,这种注意力融合层解决了由强相关特征和弱相关特征分别带来的过拟合和噪音问题。通过在线实验,证明了注意融合层相比拼接层能够更加有效地捕获用户各种不同的兴趣偏好。
(2) 提升了种子用户表示学习的鲁棒性和适应性
利用全局注意单元来学习种子用户的全局表示,全局注意单元对单个用户的表示进行加权,并且惩罚噪音用户,这比所有用户权重一样更具有鲁棒性。利用局部注意单元来学习种子用户的局部表示,它对种子用户与目标用户的相关性进行加权。局部注意单元动态地基于目标用户来学习种子用户的表示,对于不同的目标用户,学习到的种子用户表示也不一样,这极大地提升了种子用户表示的表达能力。
(3) 实现了一个实时的、高性能的look-alike模型
为了更新最近的种子用户信息,种子用户的局部和全局表示的学习过程必须做到实时。考虑到注意力单元计算的复杂性,论文利用kmeans聚类将种子用户聚为k类。这种处理方法在保证种子用户信息损失最小的情况下,极大地降低了look-alike模型计算的复杂性。同时,当种子用户的向量表示在模型学习过程中微调时,聚类结果也会随着变化。论文引入了种子用户聚类和深度学习look-alike模型迭代训练的方法。基于种子用户到目标用户的的look-alike模型,只需种子用户和目标用户的向量表示灌入预测模型,候选的文章就可以被推荐出来。
二、RALM模型架构及工程实践
第一部分对look-alike模型的背景、传统look-alike模型应用于推荐中存在的问题及RALM的特性进行了简单介绍。在本节,我们从更高层面的视角来介绍RALM受众拓展算法的工程实现。
1.概览
在微信“看一看精选”中(见图1),有好几种类型的候选文章集供受众拓展,比如最新的新闻、人工打标签的高质量文章、长尾有意思的内容等,所有这些内容都是实时产生的,并注入到推荐池中。一般同时又成千上万的候选文章集供受众拓展,对每个候选文章,推荐系统收集点击过候选集的种子用户并实时更新种子用户的聚类结果。
用户向量通过用户表示学习算法离线生成,种子用户的全局和局部向量表示基于种子聚类和离线look-alike模型在线实时计算出。当用户点击精选推荐时,推荐系统的后端服务模型首先获取当前用户的向量表示,然后对每个推荐候选文章迭代计算该用户跟该候选文章的种子用户的look-alike相似性,从而计算出候选推荐文章的得分。
整个推荐过程可以分为三个部分:离线训练、在线异步处理及在线服务,下面分别介绍。整个算法流程见下面图3。
图3:基于RALM算法的受众拓展系统架构
2离线训练
受众拓展的在线服务依赖用户嵌入表示和种子嵌入模型。我们分两个步骤离线训练look-alike受众拓展模型,分别是用户表示学习和look-alike学习。
(1) 用户表示学习
用户表示学习基于深度学习模型构建,利用用户的所有特征作为模型输入,用户在微信的行为作为训练样本,包括读文章、播放视频、购物、播放音乐、订阅等等。用户表示学习模型的输出就是用户的嵌入向量表示,该表示包含了用户多域特征。
(2) look-alike学习
look-alike学习基于注意力模型和聚类算法,l利用上面(1)中获得的用户一致表示作为模型输入,利用受众拓展活动样本作为训练样本,获得look-alike嵌入表示,最终用于look-alike相似性预测。在这一过程中构建全局和局部种子嵌入表示的注意力模型,用于预测种子用户的嵌入表示。
3.在线异步处理
在线异步处理的主要目的是实时更新种子的嵌入表示。在受众拓展模型提供服务过程中,种子用户的数量是一直累积的,应用kmeans聚类将所有种子聚为k类。异步处理的工作流分为2步:
(1) 用户反馈行为监控
受众拓展系统通过监控微信用户的实时点击行为来更新候选推荐文章的种子集。种子用户数量的爆发增长会影响聚类的性能,因此该算法只保留最新的3百万点击用户作为某个待推荐文章的种子用户。
(2) 种子聚类
虽然种子是实时更新的,当有新种子加入时,聚类过程不必每次都更新。该系统每隔五分钟运行一次种子聚类过程,将新加入的种子聚类。聚类中心的嵌入表示作为类中种子的初始表示存入数据库中,将会用于在线预测种子的嵌入表示。所有种子的嵌入表示定义为
其中,
是第i个聚类的嵌入表示。
4.在线服务
首先,受众拓展系统获取当前用户的look-alike嵌入表示,其次,对每个候选推荐文章,取该文章的种子用户的聚类中心嵌入表示作为look-alike模型的输入,look-alike模型通过全局注意单元预测种子的全局嵌入表示、通过局部注意单元预测种子的局部嵌入表示。最后,在线服务模块计算look-alike模型的全局和局部相似性(即当前用户与种子用户的全局和局部相似性)得分。对于用户 u 和 种子 s ,look-alike模型的得分为
这里,
是种子的全局嵌入表示,
是种子的局部嵌入表示,
和
是权重因子。对微信精选取
,
。look-alike模型的得分将被用于ctr预估工作流的权重因子。
由于RALM基于相似性计算,并且只通过获取高阶(high-level)的嵌入作为输入,在线look-alike服务是简单高效的。
三、 RALM算法原理介绍
第二部分我们介绍了RALM算法的工程实现相关的知识,在本节,我们来介绍一下RALM算法核心模块的具体实现。主要包括用户表示学习、look-alike相似性模型。在讲解之前,先来介绍微信文章推荐中用于模型训练的特征有哪些。
1特征
有很多种特征可以描述用户的兴趣,主要包括类别特征和连续特征两大类。类别特征包括单一的(如性别、地理位置等)和多样的(如用户感兴趣的关键词)特征。对于代表分类特征的值或者一组值,该特征称为特征域 。对于像年龄这些连续特征,预训练好的特征向量先标准化并缩放到0到1之间。在微信中可用特征包括性别、年龄、地理位置、兴趣标签、感兴趣的类别、APP是否登录、媒体id、账号订阅、购物兴趣偏好、搜素兴趣偏好、社交网络关系等。
2用户表示学习
用户的兴趣一般会非常复杂和广泛,用户的年龄、国别、用户读过的文章决定了用户下一篇要读的内容。因此,我们设计一个深度学习模型来学习用户多样的特征,构建用户对内容兴趣的综合表示。该模型是非常巧妙的,包含抽样、模型结构、注意力融合层 ,下面分别介绍。
(1) 抽样
我们将用户表示学习看成一个多分类问题:从百万级待推荐文章中选择用户感兴趣的。在计算loss时,为了提升训练速度,采用负采样技术而不是传统的softmax。显然,如果我们随机挑选样本作为负样本,抽样分布将偏离真实情况。借鉴word2vec中NCE负采样的思路(见参考文献4),为了获得无偏分布,先将候选推荐item集合按照被点击的次数降序排列,然后计算每个item的概率,该概率依赖刚于讲到的item排序,具体计算公式如下:
这里
是第i个item,k是第i个item 的排序,D代表所有item的最大排序。
代表将item i 选为负样本的概率。由于活跃用户行为决定了最终训练损失,我们限制每个用户选择的样本个数,每个用户最多选择不超过50个正样本,并且抽样使得正负样本比例保持在 1/10。然后利用softmax函数来计算某一次选择c在用户特征为U及item i特征为
情况下选择出item i的概率
上式中u是用户的嵌入向量,
是item j的嵌入向量。
整个训练过程同时利用用户的显式和隐式反馈行为,更多的训练数据可以增强推荐结果的多样性。用户在所有类型内容(文章、视频、网站等)上的行为都会用来作为训练样本,确保囊括了用户的所有兴趣点。
(2) 模型结构
我们用YouTube DNN(见参考文献5)作为模型的基础骨架,该模型包含嵌入层、拼接层、MLP层。在嵌入层,将同一field(比如用户点击行为、用户购买行为、年龄、性别等都是不同的field)的所有特征嵌入到固定长度的向量中,然后输入到平均池化层中。当所有field的特征都嵌入后,将它们拼接起来形成稠密向量,再灌入MLP层。最后一层的输出就是用户的嵌入向量表示。item的嵌入是随机初始化的,在训练过程中不断更新。该模型方便整合异质多域特征。
对于用户嵌入 u 和 item i 的嵌入表示
,我们计算
和交叉熵损失
这里
是label,我们利用Adam优化器来训练,求最小值。当loss收敛时,最后一层的输出就是用户的嵌入向量表示。
(3) 注意力融合层
在基础模型中,不同特征域是拼接起来的,类似
这样。然而,通过观察网络参数的训练过程,我们发现优化过程总是对与用户兴趣很相关的特征(比如兴趣标签)产生过拟合,导致推荐结果由少量的强相关的field决定。弱相关的field(比如购物偏好),总是欠拟合的,但它们对推荐也至关重要。最终导致的结果就是模型不能完全学习到多域特征,推荐结果缺乏多样性。
为了解决该问题,我们在模型中用注意力融合层而不是拼接层。在基础模型中,拼接让所有用户的兴趣服从同一概率分布。这样,少量对大多数用户产生影响的强相关的field,它们的权重很大,导致出现高维稀疏权重矩阵。注意力单元可以根据用户的上下文特征学习权重的个性化分布,对不同field可以激活神经元的不同部分,在训练过程中强相关和弱相关的field都可以起作用,因此我们采用注意层来学习用户相关的多域权重。
图4:用户表示学习的模型结构:右边是用户表示学习模型,左边是look-alike模型
上面图4右边是用户表示学习模型,n个field被嵌入到维度为m的向量
,我们将它们按照第二个维度拼接起来形成矩阵
,我们按照如下公式计算权重向量:
这里
、
是权重矩阵,k 是注意单元的size。
是field 的激活单元,
是field的权重。最后,我们计算融合向量
:
,这个值作为MLP的输入,获得了一致的用户嵌入表示。注意融合层相比拼接层,在学习多域特征上有极大的优势。
3look-alike模型学习
通过上面2中用户表示算法的介绍,我们获得了一致的用户嵌入表示,现在我们需要学习种子用户和目标用户之间的相似关系。该学习任务也是基于用户对item行为的监督学习过程,只不过该学习过程聚焦于特定的活动,在该活动中用户只展示部分兴趣。下面我们将介绍look-alike学习过程,我们会从模型结构、变换矩阵、局部注意单元、全局注意单元、迭代训练、损失等6个维度来介绍。
(1) 模型结构
look-alike模型由两个塔构成(见上面图4左边),左边的塔称为种子塔,将n个种子用户的嵌入(
)作为模型输入,这里m是用户嵌入向量的维数,后面跟着全连接层,作为第一层,它将
输入矩阵变换为
矩阵,这里h是变换后嵌入向量的维数。之后,一个自我注意单元(self attension unit)和一个一般注意单元(general attention unit)用于池化嵌入向量,最终生成一个h维的向量。右边的塔称为目标塔,将m维向量变换为h维向量。在这两个塔的上面,两个塔输出向量的内积被计算出来,代表种子用户和目标用户的相似性。对于推荐系统来说,相似性代表的是某个item被目标用户点击的概率。
(2) 变换矩阵
的权重矩阵被用于从一致的用户嵌入空间到look-alike空间的投影。虽然用户嵌入是从用户的多种行为中学习而来,但将预训练的特征作为模型的输入可能会过拟合。为了避免过拟合,我们用双塔结构共享变换矩阵。模型输出非线性特征之前经过ReLU单元变换,变换后,种子用户被表示为n个维度为h的向量。
(3) 局部注意单元
为了计算种子用户和目标用户的相似性,我们需要将所有种子用户池化为一个向量,平均池化是通常采用的做法。然而,平均池化获得的是所有种子向量的均值,这样公共的信息被保留了,而异常值和个性化信息被忽略了。一般来说,在上百万的种子用户中,只有很少用户的兴趣跟目标用户是匹配的。因此,我们引入局部注意单元,用于激活相对于某个目标用户的局部兴趣,同时自适应地学习种子用户相对于目标用户的个性化表示。
这里
是注意力矩阵,
是种子用户,
代表目标用户,
是种子用户的局部嵌入。如果某个item有百万级的种子用户,局部注意单元将会花费
次计算,这里n是百万量级,线上预测肯定会存在问题。为了减少计算的复杂度,我们将种子用户利用Kmeans聚类聚成k类,对于每一类我们计算种子向量的均值作为该类的向量表示,这样我们就获得了k个h维的向量。这时计算复杂度就从
降到
,一般k小于100。
(4) 全局注意单元
对于种子用户的全局信息,我们加入自我注意力单元来模拟每个种子用户的全局表示:
这里,
是注意力矩阵,s是注意力的维数。
代表种子用户
的全局嵌入表示。由自我注意力获得的全局信息与
的兴趣分布相关。有了局部和全局表示
和
,我们就可以按照如下公式计算种子用户和目标用户的相似性了。
(5) 迭代训练
在变换和反向传递之后,用户的嵌入表示会改变,为了保持种子聚类和用户表示两个过程的同步,每个epoch之后重新运行一次聚类。因此,我们提出了一个迭代训练过程,一轮一轮交替地训练look-alike模型和种子聚类两个算法。
(6) 损失
我们利用sigmoid交叉熵损失做为损失函数:
这里D代表训练集大小,x代表用户嵌入,y是label。
是通过sigmoid函数计算出的种子用户和目标用户的相似性得分。
四 总结
这篇论文通过引入RALM算法来解决实时的受众拓展问题,这是一个两阶段的模型,包括用户表示学习和look-like学习。
对于用户表示学习,论文提出了一种基于注意力融合层(attention merge layer)的新的神经网络结构取代经典的拼接层(concatenation layer),该网络结构大大提升了多特征学习的表达能力。在look-alike模型学习中,针对每个目标用户该论文设计了一个全局注意力单元(global attension unit)和局部注意力单元(local attention unit)来学习种子用户的鲁棒性自适应特征表示。最通过引入种子用户聚类方法,不仅减少了注意力模型预测的时间复杂度还减少了种子表示的信息损失。同时,构建了一个包含训练和在线服务的推荐系统,借助异步处理和种子聚类,在线预测才可以做到实时。
通过在线实验,该方法取得了比传统look-alike模型好得多的效果,特别是在推荐多样性和推荐质量上有较大提升。该模型是第一个应用于推荐系统的实时look-alike模型。
参考文献
- [2019] Real-time Attention Based Look-alike Model for Recommender System
- [2011] A feature-pair-based associative classification approach to look-alike modeling for conversion-oriented user- targeting in tail campaigns.
- [2016] ASub-linear,Massive- scale Look-alike Audience Extension System A Massive-scale Look-alike Au- dience Extension
- [2013] Distributed representations of words and phrases and their compositionality
- [2016 YouTube] Deep Neural Networks for YouTube Recommendations