【搜狐】新闻推荐系统的 CTR 预估模型



转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com

AIQ 机器学习大数据 知乎专栏 点击关注

出自 搜狐技术产品 公众号

一简介

在推荐系统的排序环节中,我们经常使用 CTR(Click-Through Rate) 预估的方式来构建排序模型。在业界的实际应用上,如何通过大规模数据提取出有效特征对用户行为建模、泛化一直是研究人员的工作方向,由于在推荐系统的实际应用中,数据通常非常稀疏,如何从大规模的稀疏特征中提取出有效的泛化特征是 CTR 预估模型的一个重大挑战。本文我们首先介绍了 CTR 预估模型的演变历史,并介绍如何使用 DNN 在推荐系统的排序情景进行 CTR 预估,通过特殊的网络结构得到高效的泛化特征提高模型的预测能力。

二 DNN 在推荐系统中的应用

2.1 点击率预估模型

在新闻推荐系统中,想得到用户最可能点击的新闻,给定某用户及新闻的集合,通过提取特征我们可以得到三种特征:

  1. 用户特征(用户兴趣、年龄、性别等)

  2. 上下文特征(机型、网络等)

  3. 待预估新闻特征(类别、标签等)

我们需要计算出用户对待预估新闻的点击率,通过对预估点击率的降序排序得出用户最可能点击的前 K 个新闻。

最开始做点击率预估的模型为 LR(Logistic Regression),将上述特征代入 LR 模型可以得到一个简单的点击率预估模型。然而,在推荐情景中,用户的行为是稀疏的,即一个用户能看到的新闻是有限的,如何从用户有限的浏览中推测出用户可能喜欢的新闻,就是推荐工作的重点,在这里使用 LR 如果只是简单的对上述特征进行建模,是无法得到特别好的效果的,原因是 LR 模型本身无法对特征进行泛化,它只能对某特征直接计算其相应的权重𝔀,如果想使得 LR 具备泛化能力,则需要我们在数据端 "手动泛化",例如:

将用户的兴趣与待估新闻的类别进行组合,得到一个 interact 特征,假如用户喜欢看科比相关的新闻,则待排新闻为体育类别的新闻应该比娱乐类别的新闻的值应该更高,因此我们能构造出特征用户喜欢科比且待排新闻为体育类,并且通过业务理解,我们能知道这个特征一定比用户喜欢科比且待排新闻为娱乐类在 LR 模型中得到的权重高。

则模型收敛后理应可得到:

通过这种特征工程的方法,我们使得 LR 能预测用户对没看过的新闻的偏好程度,即具备了一定的泛化能力,同时由于 LR 模型的简单构造,我们可以由业务理解去判断模型训练是否正确,特征提取是否正确,即提高了我们的 debug 能力。

2.2 更强的泛化能力

从上面的做法中我们不难看出这么做的优势与劣势,优势是我们可以快速调试出可用模型,如果训练不符合预期可以直接从训练得到的权重中看出问题,并通过分析特征权重帮助特征工程做更强的泛化特征。劣势是由于模型本身表达能力有限,我们只能通过人工的特征工程满足泛化能力,而这种特征工程往往需要庞大的精力来调研、分析、实验,每一步都有可能因为不慎或马虎导致结果不符合预期,因此我们希望通过增强模型自身的泛化能力,来减少后期研发人员的做特征工程的复杂度。

2.1.1 FM(Factorization Machine)

逻辑回归的 F(x) 的计算方式只包含线性关系,限制了模型的表达能力,可以通过增加非线性关系来增强模型的表达能力,具体地,FM 模型公式如下:

FM 模型使用了一个矩阵作为隐含特征 ,每个特征𝔁都会对应一个𝓴维的𝓿向,通过计算两两特征的隐含向量𝓿的内积,得到了两个特征间的相关性。如果用户喜欢科比,而新闻标签含有 NBA,则在模型收敛后,这两个特征的隐含向量内积应该比较大。

通过梯度下降方法更新𝙒,𝙑收敛得到模型参数。相比于 LR,增加了一个隐含矩阵来表示特征的两两交叉关系,如果特征有𝙉个,隐含矩阵维度为𝘒,则矩阵空间复杂度为𝙊(𝙉✱𝙆),通过简化计算可知计算的时间复杂度为𝙊(𝓴✱𝓶),其中𝓶为特征非 0 的个数,并没有增加很大的运算量。内积的方式可以使模型具有预测能力:即便有两个特征在训练数据中从未在一个样本中同时出现,我们也可以通过隐含向量知道两个特征的相关性。

FM 模型实际可扩展为高阶,然而只有二阶可以简化计算,三阶及以上计算复杂度过高,实际业界基本不会使用,但 FM 阐述了一个重要思想,通过引入隐含矩阵,以内积的方式表示特征之间的关系,由此提升了模型的泛化能力,鉴于其泛化的思想及模型简洁而有效的能力,FM 模型在实际使用中大受欢迎,而后续发展的 DNN 相关的 ctr 预估模型也有不少借鉴了 FM 的思想。

2.1.2 DNN

随着近年计算能力的提升,DNN 重新回到大众视野,由于 DNN 具备非常强的拟合能力,在各个领域都取得了优秀的性能提升。人们首先通过研究 DNN 在 NLP、图像领域的应用,进而发展到推荐领域,2016 年 Google 提出的Wide & Deep Learning for Recommender Systems⁽¹⁾提供了一种思路,将多层全连接网络定义为Deep Model, 额外增加一个形似 LR 的 Wide Model,利用两者各自的优势得到一个融合模型。

由于 DNN 参数数量庞大,而推荐情景下大部分特征为稀疏特征,如果将原始特征拼接 (concatenate) 起来作为输入层直接输入 DNN,会出现训练参数规模过大而无法训练的问题,因此需要一个嵌入层 (Embedding) 将大规模稀疏特征首先映射到一个低维密集 (dense) 的空间中,再与其他特征拼接到一块作为输入层输入 DNN。

除了 DNN,wide&deep 模型额外添加了一个 wide 模型,实际上就是将上文中 LR 的特征组合过程作为一个独立模块加入模型中,例如上图所示,将用户安装过的 App 与当前曝光展现的 App 做一个组合特征作为 wide model 的其中一个特征,这里又可以结合业务知识去做特征组合,获得一些强泛化能力的特征。

最后将 DNN 的隐含层最后一层与 wide 特征拼接到一块,通过 Logistic 得到一个[0, 1]值,通过梯度更新收敛得到 ctr 预估模型。wide&deep 模型通过 DNN 获得了特征之间高阶的非线性关系,提高了模型的泛化能力,但 DNN 这种结构去学习简单的低阶交叉实际上是比较低效的,通过在 DNN 外加入一个 wide 层,人工引入业务相关的组合特征,可以使模型快速学习到有效的低阶交叉特征,这些特征由于有人们对业务的认识,对业务情景往往具备较强的拟合能力,与 DNN 合并后效果会比单一 DNN 更好。

到这里我们希望能进一步扩展,能否让 DNN 模型像 FM 一样不需要通过人工组合特征,让模型自己学到低阶的交叉特征呢?这就是接下来我们要讲到的Deep & Cross Network所做到的事情。

03

Deep & Cross Network

Deep & Cross Network(DCN)⁽²⁾是由 Google 于 2017 年提出的推荐模型,相比于普通的多层全连接网络,多出一个 Cross Netork,乍一听很唬人,实际是通过矩阵来进行特征交叉,利用残差思想构造深层网络的一个模型模块,通过模型而不是人工组合得到高阶组合特征,下面我们具体介绍 DCN 模型。

3.1 模型结构

DCN 模型结构如上图所示,其基本结构和 wide&deep 网络类似,输入层对稀疏类别型特征采用 Embedding 的方式映射到一个低维密集向量,与数值型特征直接拼接起来作为网络输入特征。由于这是一个 CTR 预估模型,样本是 0/1 的二分类监督问题,所以输出层采用 sigmoid 将输出限定在 [0,1] 之间表示模型预估点击率。

网络中间分为两块:Cross network 与 Deep network。其中 deep 网络就是多层的全连接网络,而 cross 网络则是 cross layer 通过一系列计算输出结果。

3.2 Cross Network

Cross Network 的具体计算公式为:

用图来表示这个公式:

公式中作为列向量,表示 cross 层的第层,第层输出,则函数可以看作拟合第层与第层的残差。

这种特殊的结构可以使得交叉特征的阶 (degree) 随着 cross 层增加,对于第层,交叉特征相对于𝔁₀的阶为。整个 cross 网络的参数量为:𝓭✕𝐿✕2,这里𝓭为输入列向量𝔁₀的维度,𝐿为 cross network 的网络层数,每一层包含一组𝔀,𝙗,因此乘 2。DNN 由于全连接,隐含层的第一层的权重𝔀就需要与输入层做笛卡尔积,而相对于全连接网络,cross 网络引入的参数量非常小,与输入层特征维度呈线性关系。

3.2.1 深入理解 Cross Network

我们可以将 cross 网络理解为每一个 cross 层,都将与𝔁₀了一次 pairwise 交互,然后再通过高效的方式转回输入层的特征维度。分析一下上图的Feature Crossing的过程,令,其中,这个公式实际可以这么看:

我们将原式的前两项相乘,这里面得到的每一个值都可以看作当前 cross 层特征与输入特征做了一次 bit-wise 的乘积,并且我们可以看作得到了一个𝓭²的行向量,再乘以一个块对角矩阵,其中列向量,将结果投影回了维,这个过程做了一次特征交叉,特征维度通过压缩回输入特征的大小𝓭²→𝓭,大大减少了空间复杂度。

3.2.2 DCN 与 FM

FM 模型内每个特征有一个隐含向量,两个特征的交叉关系是通过向量内积得到的;而在 DCN 里,每个特征与标量相关联,特征的关系是集合的乘积,两者都具备特征交叉泛化的能力。

这种参数共享的方式不但能让模型泛化得出一些训练样本未出现过的特征交互,而且能使得模型鲁棒性更强,噪音数据的影响更小。在我们推荐的情景下特征十分稀疏,假如两个特征几乎从未在训练样本里共同出现过,则直接组合特征并不会带来收益,但通过参数共享的方式,我们仍能从参数乘积得到特征组合的效果。

另外,通常我们说的 FM 限制了模型只能得到二阶组合,超过二阶计算量会以次方增长,而 DCN 通过巧妙的设计,将特征交叉从单层变成了多层,获得多阶交互的同时计算量仍为线性增长。

3.2.3 已经最好了吗?

从上文描述的Feature Crossing计算方式,我们看到了一种既能高效计算特征间的高阶交叉,又没有带来庞大计算量的特征交叉方法,那这个方法已经完美了吗,是否还有能够改进完善的地方?首先,在推荐情景中,我们会出现许多稀疏特征,例如用户 id、物品 id 等等,这类稀疏的 id 型特征在 DNN 模型通常都需要通过 embedding 转为低维密集特征,然后我们把各个特征拼接到一起得到了输入特征𝔁₀,即我们的特征𝔁₀内会有好几个都属于用户的 embedding 特征,他们共同表示了一个用户的属性。

回到 cross network 的计算,Feature Crossing可以表示为,即𝔁₀与两个向量内每个元素都做乘积 **(bit-wise),然而我们知道内的 embedding 特征是共同表示一个域 (field)的,则他们内部的乘积组合并没有太大作用,我们更需要的是不同域的 embedding 进行交叉组合,在这一方面,FM 是做的更好的,我们可以将 FM 的隐含向量看作特征的 embedding,两个隐含向量的内积实际就是两个域的 embedding 向量乘积(vector-wise)**,并不会让 embedding 内的元素进行交叉组合。

04

总结

本文主要介绍了推荐系统的关键环节:排序。这里我们讲述了一种业界比较通用的方法:CTR 预估模型。点击率预估模型研究的问题是已知我们当前要推荐的用户、当前所处上下文、待计算的物品,通过模型计算出用户点击该物品的概率,将待排序物品全部计算出预估点击率,再由高至低排序输出。

CTR 预估模型经过多年发展,已经由最初的 LR,升级至 FM,现在又发展到了 DNN 模型,总的来说,这一路发展都是基于一个思路,我们希望减少人工组合特征,增加模型的通用型,从特征泛化走向模型泛化,研究如何让模型的泛化能力更强。

最开始使用 LR,模型本身不具备泛化能力,我们结合业务的理解,通过大量复杂的特征工程使输入 LR 的特征本身具备了泛化能力。随后出现 FM,相比于 LR 每个特征多出了一个𝓴维隐含向量,通过对隐含向量相互求内积,我们使特征在模型内实现了两两组合,由此我们的模型具备了初步的泛化能力,经过训练样本的训练收敛后模型也能推测出从未共同出现的特征间的关系。而后我们开始使用 DNN 来解决点击率预估问题,同样地,为了使模型能快速训练出组合交叉特征的关系,在多层全连接网络外额外增加了一个交叉网络,cross network 以巧妙的设计将特征组合延伸到了多阶,并且计算复杂度呈线性增长,在实践中,我们只需要在已经完成的 DNN 模型直接添加 cross network 即可得到更好的效果,输入层可以不做任何的特征工程,模型可以在 cross network 内部计算出特征间的组合关系。

然而,cross network 虽然能在线性复杂度下获得高阶特征交叉,其模型设计仍有值得改进的地方,由于采用直接矩阵乘积,即元素级别 **(bit-wise)的乘积,在计算过程模型是无法区分向量元素是否属于同一个特征 embedding 的,这样会使计算出现一些无效的特征交叉,如何优化模型结构使模型能在高阶交叉时按照 field 在不同域间计算组合特征(vector-wise)** 也是当前的前沿研究,去年微软提出的 xDeepFM⁽³⁾即实现了这个目标,感兴趣的同学可以参考这篇论文,体会其中的思路。

参考文献:

[1]https://arxiv.org/pdf/1606.07792.pdf

[2]https://arxiv.org/pdf/1708.05123.pdf

[3]https://arxiv.org/pdf/1803.05170.pdf


更多高质资源 尽在AIQ 机器学习大数据 知乎专栏 点击关注

转载请注明 AIQ - 最专业的机器学习大数据社区  http://www.6aiq.com