-->

深度学习推荐系统实战_27_20_DeepFM如何让你的模型更好地处理特征交叉

你好,我是王哲。

今天我想和你聊一聊deep FM模型。

前面几节课我们学习了embedding MLP widen、 deep neurroc f这几种不同的模型结构。

那你有没有深入思考过这样一个问题,就是这几种模型都是怎么处理特征交叉这个问题的呢?比如说模型的输入有性别、年龄、电影风格这几个特征。

在训练样本中,我们发现有二十五岁男生喜欢科幻电影的样本。

有三十五岁女生喜欢看恐怖电影的样本,那你觉得模型应该怎么推测?二十五岁的女生喜欢看的电影风格呢?事实上,这类特征组合和特征交叉的问题非常常见,而且在实际应用中,特征的种类还要多得多。

特征交叉的复杂程度也要大得多。

而且这些问题的关键键就是模型对于特征组合和特征交叉的学习能力,因为它决定了模型对于未知特征组合样本的预测能力。

而这对于复杂的推荐问题来说,是决定他们推荐效果的关键点之一。

但无论是巴inlm、 MP还是是run deep其实都没有对特征交叉进行特别的处理,而是直接把独立的特征扔进神经网络,而他们在网络里边进行自由组合。

因算是new CF,也只是在最后才把物品侧和用户侧的特征交叉起来。

那这样的特征交叉方法是高效的吗?深度学习模型有没有更好的处理特征交叉的方法呢?这节课我们就一起来解决这些问题。

同时我还会基于特征交叉的思想,带你学习和实现一种新的深度学习模型。

Deep FM.不过在正式开始今天的课程之前,我还想和你在深入聊一聊为什么深度学习需要加强特征交叉的能力?那我们刚才说明白白ding MRP和完善deep模型,都没有针对性的处理特征交叉的问题。

那有的同学可能会有疑问了,我们之前不是一直说多层神经网络有很强的拟合能力,能够在网络内部任意的组合特征吗?这两个说法是不是矛盾了?那在进入正题之前,我就先带你来扫清这个疑问。

我们之前一直说MRP有拟合任意函数的能力,这没有错。

但这是建立在MRP有任意多层网络以及任意多个神经元的前提下,在训练资源有限、调参时间有限的现实情况下,MRP对于特征交叉的处理其实是比较矛效的。

为什么MRP是通过concaatininate层把所有特征连接在一起,成为一个特征向量的?这里边没有特征,交叉两两特征之间没有发生任何关系。

这个时候在我们有先验知识的情况下,如果对加入一些负责特征交叉的模型结构,如果对提升模型效果非非常帮帮助。

比如说在我们spr RXS项目的训练样本中,其实有两个这样的特征。

一个是用户喜欢的电影风格,一个是电影本身的风格。

这两个特征明显具有很强的相关性。

如果能让模型利用起这样的相关性,肯定会对最后的推荐效果有正向的影响。

既然这样,那我们不如去设计一些特别对提征交叉的结构。

如果这些相关性强的特征交叉组合在一起,一个是深度学习模型,要加强特征交叉能力的原因了。

扫清了这个疑问,接下来我们就要进入具体的深度学习模型的学习了。

不过还是别着急,我想先和你聊一聊传统的机器学习模型是怎么解决特征交叉问题的。

看一看深度学习模型,能不能从中汲取到一些养分。

那说到解决特征交叉问题的传统模型,我就不得不提一下曾经红极一时的机器学习模型因子分解机模型了,我们可以简称它为FM.我把FM的神经网络化结构图放在了文稿里,我们结合它来一起看一看FM的原理。

那首先我们看模型的最下面,它的输入是由类别性特征转换成的。

弯号向量往上就是深度学习的常规操作,也就是把弯号特征通过embedding层。

首先先我密的mbebedding向量看这里,FM跟其他的深度学习模型其实并没有区别,但再往上区别就明显了。

Fm会使用一个独特的FM layer,来专门处理特征之间的交叉问题。

你可以看到FM层中有多个内积操作单元,对不同的特征向量进行两两组合。

这些操作单元会把不同特征的内积操作的结果输入到最后的输入神经元里,以此来完成最后的预测。

这样一来,如果我们有两个特征使用户喜爱的风格和电影本身的风格,通过FM层的两两特征的联合交叉,这两个特征就可以完成充分的组合,不至于像一八零MLP模型一样,还要MLP内部像黑盒子一样进行低效的交叉。

那这个时候问题又来了,FM是一个善于进行特征交叉的模型。

那我们之前也讲过,深度学习模型的拟合能力强呀,它们之间能结合起来吗?那学习过y战d模型的结构之后,我们一定可以快速的给出答案。

我们当然可以把FM跟其他的深度学习模型组合起来,生成一个全新的既有强特征组合能力,又有强拟合能力的模型。

就这样,DEFM模型诞生了。

那DFF是是有哈工大和华为联合提出深度学习模模型。

我把它的构构示图放在了文稿里。

结合模型示意图,我们可以看到了DFF利用了y de deep组合模型的思思,用最f替替换掉了y ddding模型的外置部分。

加强了浅网网络部分特征组合能能力,而的右边部分则和d部分一样,主要还用多层神经网络进行所有的特征的深度处理。

那最后输输出层是FFM部分,输输出和d部分的输出,综合起来产生最后的预预结结果最FDDFM的结构。

接下来让我们再思考一个问题,FM和DFM进行特征交叉的方式都是进行embedding向量的点击操作。

那是不是说特征交叉就只能用点击操作了?答案当然是否定的。

事实上,还有很多向量间的运算方式可以进行特征的交叉。

那比如说模型NFM神经网络因子分子集,它就使用了新的特征交叉方法。

下面我结合文稿中的模型架构图来详细的说一说。

相信看了那么多模型架构图的,你一眼就能看出它跟其他模型的区别。

那就是图中的by interaction puoling层。

那这个加在embedding层和MRP之间的层到底做了什么呢? By interaction pulling layer翻译成中文就是两两特征交叉池化层。

那假设VX是所有特征域的embedding集合,那么特征交叉池化层具体操作的公式就是不同特征,两两之间进行元素积操作,再全部叠加起来。

那其中两个向量的元素积操作指的是长度相同的向量的对应为相乘,得到元素基向量。

那我刚才说的具体的公式都放在了文稿里,你可以去查看一下。

那在进行两两特征、embedding向量的元素集操作后,再求取所有交叉特征向量之和,我们就得到了池化层的输出向量。

接着我们把这个向量输入到上层的MRP中,就得到了最后的预测得分。

那所以我们这里就看到了NFM并没有使用内积操作来进行特征,embedding向量的交叉,而是使用了元素级操作。

那在得到交叉特征向量之后,也没有使用concutdinate操作,把它们连接起来,而是使用的求和的相化操作,把它们叠加起来。

那听到这儿你肯定想问了,那它和点击操作哪个更好呢?那我们还是那句老话,那我希望我们可以尽量多的储存深度学习模型的相关知识,先不去关注哪个方法的效果更好。

至于真实的效果怎么样交给你去在具体的业务场景的实战中去验证。

好了,那接下来又到了TNSOLLW实践的过程了。

那今天我们要实现的是d排放模型,有了之前实现y单d模型的经验,我想你实现起d排放也不会困难,跟前几节课一样。

实践过程中的特征处理、模型训练评估的部分都是相同的,我也就不再重复了。

我们重点看模型定义的部分,我把这部分的代码放在了文稿中,你可以边看边听我的讲解。

那在整个实践的过程中有两个地方需要我们重点注意,一个是FM部分的构建,另一个是FM部分的输出和deep部分输出的链接。

那在构建FM部分的时候,我们先为FM部分选择了四个用于交叉的类别性特征,一别是用户ID电影ID用户喜欢的风格和电影自己的风格。

那接着我们使用dolleer把用户特征和电影特征两两交叉,这就完成了模型部分的构建。

而d部分的实现其实和我们之前实现过的外单d模型中的第一部分完全一样。

只不过最终我们会使用那层去把concogdinf m部分的输出和d部分的输出连接起来,输入到输出单元的sigmoid神经元,从而产生最后的预估分数。

那关于DFM的全部代码,你可以参照啊项目中的DFM点PY文件。

好了,今天的课程讲完了,我们一起来做个总结。

那deep FM模型在解决特征交叉问题上非常有优势,它会使用一个独特的FM层来专门处理特征之间的交叉问题。

具体来说就是使用点击元素积等操作,让不同的特征之间进行两两组合,再把组合后的结果输入到输出神经元中,这会大大加强模型组合特征的能力。

因此,DFM模型相比于in八零MLPY栈,deep的模型往往具有更好的推进效果。

那实现def m模型的过程并不困难,我们主要记入三点就可以了。

第一点,它是由FM和deep两个部分组成的。

第二点,在实现FM部分特征交叉层的时候,我们使用了多个dolt product操作单元来完成不同特征的两两交叉。

那第三点部分则与dey站deep模型一样,负责所有输入特征的深度拟合,提高模型整体的表达能力。

那刚才说的重点知识,我都整理在了文稿中的表格中,你可以看一看。

好了,到今天这节课,我们已经在spirrex项目中实现了四个深度学习模型。

相信你对TNNF flow的carros接口已经十分熟悉了。

我希望你不只满足于读懂,用好我们实现好的模型,而是真的在课后自己去尝试不同的特征,输入不同的模型结构,甚至可以按照自己的理解和思考去改进这些模型。

因为深度学习模型结构并没有一个标准答案。

我们只有清楚不同模型之间的优缺点,重点汲取他们的设计思想,才能在实际的工作中结合自己遇到的问题来优化和改造已有的模型。

也只有这样,你们才能够成为一名真正的能够解决实际问题的算法工程师。

好了,最后我们再来思考一个问题,那你觉得除了点击和元素基这两个操作外,还有没有其他的方法能够处理两个inmbeling向量间的特征交叉呢?那关于深度学习中特征交叉问题的处理方法,你是不是学会了?欢迎把你的思考和疑问写在留言区。

如果你的朋友也对d排m这个模型的实现感兴趣,那也不妨把这节课转发给他。

我们下节课见。