推荐系统-Part3——深度学习推荐模型

[TOC]

AutoRec 模型

  • AutoRec 是将自编码器的思想和协同过滤结合起来的一种单隐层的神经网络推荐模型。
  • 基本原理:利用协同过滤中的共现矩阵,完成物品向量或者用户向量的自编码,再利用自编码的结果得到用户对物品的预估评分。
  • image-20210927202124750
  • AutoRec 模型由于结构比较简单,表达能力不足,并且往往共现矩阵非常稀疏,更加加大了模型的预测难度。
  • 所以,AutoRec 只是将深度学习思想应用于推荐系统的初步尝试,没有真正的投入到实践。

DeepCrossing 模型

基本思路

输入一般会有类别型特征(如广告id)和数值型特征(如广告预算)两种情况。对于类别型特征,我们需要进行one-hot编码处理,而数值型特征,一般需要进行归一化处理,这样算是把数据进行了一个简单清洗。DeepCrossing 模型就是利用这些特征向量进行CRT预估。

为了完成端到端的训练,DeepCrossing 要在内部网络结构中解决如下问题:

  1. 离散类特征编码后过于稀疏,不利于直接输入神经网络训练,需要解决稀疏特征向量稠密化的问题
  2. 如何解决特征自动交叉组合的问题
  3. 如何在输出层中达成问题设定的优化目标

网络结构

  • DeepCrossing 都是常规的结构,但具有革命意义,因为没有任何人工特征工程的参与。
  • 相比于 FM、FFM 只具备二阶特征交叉能力的模型,DeepCrossing 可以通过调整神经网络的深度进行特征之间的深度交叉,这也是 Deep Crossing 名称的由来。

image-20210927223004876

  1. Embedding 层:
    • Embedding 的目的是将高维稀疏特征转化为低维稠密特征。
    • Feature#1 表示one-hot编码后非常稀疏的类别特征;Feature#2是数值型特征,不需要 embedding,直接进入 Stacking 层。
    • 以字典形式存储每个类别特征域对应的 Embedding 矩阵,可以将 LabelEncoder 编码转化成一个数值型的特征向量。
    • 每个类别特征域对应的 Embedding 矩阵的具体参数需要通过训练获得。
  2. Stacking 层:把不同的Embedding特征和数值型特征拼接在一起,形成新的包含全部特征的特征向量,该层通常也称为连接层
  3. Multiple Residual Units 层:采用了多层残差网络的多层感知机。这样对特征向量各个维度进行充分的交叉组合,使得模型能够抓取更多的非线性特征和组合特征信息。
  4. Scoring 层:输出层。对于 CTR 预估二分类问题,采用逻辑回归;对于多分类,采用 Softmax 模型。

NeuralCF 模型

推荐算法中的两个根本性思路

  • 用户和物品的表征:即如何更好地把用户特征和物品特征信息表示出来。隐语义模型(MF),使用了 embedding 的思路去表示用户和物品,从而用向量的乘积表示用户对物品的喜好程度。

  • 特征交叉:即考虑特征之间的交互信息以丰富数据的表达能力。因子分解机(FM)系列,就将特征两两交叉。

image-20210928101611434

存在问题

  1. 矩阵分解算法:试图在协同过滤共现矩阵的基础上,使用更稠密的隐向量表示用户和物品,挖掘用户和物品的隐含兴趣和隐含特征,在一定程度上弥补了协同过滤模型处理稀疏矩阵能力不足的问题。
  2. 隐向量的学习过程,在深度学习中就可以看成是一个简单的神经网络表示;用户向量和物品向量可以看成 embedding 方法。而最终的评分值(预测值),就是用户向量和物品向量内积后的相似度。
  3. 而问题就在相似度计算上:相似度计算一般采用余弦相似度。其中必然包含两个向量做内积的过程,用向量之间的夹角大小来衡量相似度。
  4. 按理说相似用户,其隐向量也应该相似。但是研究表明单靠夹角衡量相似度不一定可靠。

这是因为,隐向量内积获得夹角关系,是降维至二维的操作。这一步造成了不可逆的信息损失。

image-20210928101521711

原始 NeuralCF

Neural CF 模型是从传统的协同过滤方法(MF)的基础上进行的改进:

  1. 把MF里面用户向量和物品向量的点积操作换成了多层神经网络,使得两个向量可以做更充分的交叉,得到更多有价值的特征组合信息;
  2. 另外一个就是神经网络的激活函数可以引入更多的非线性,让模型的表达能力更强。

image-20210928102102351

GMF 广义矩阵分解

  • 原始的矩阵分解:

    1. 用户向量与物品向量进行内积。
  • GMF 广义矩阵分解:

    1. 用户向量与物品向量进行元素积。
    2. 神经网络拟合互操作结果。
  • GMF 步骤:

    1. 将 NeuralCF 的 Neural CF Layers 替换成 user 和 item 的 Embedding 做点积(对应元素相乘),得到一个和 Embedding 等长的向量
    2. 隐形量进行对应元素相乘之后,给每个元素分配权重(也就是各个隐向量维度的重要性不一定相同),等价于一个 Linear 层。(如果 h 是一个全1向量的话,那模型实际上就是 MF 了。)
    3. 使用 sigmoid 预测分数。
  • GMF 评价:虽然赋予了权重,但依然没有摆脱降维带来的信息损失。

NeuralCF 混合模型(MLP + GMF)

image-20210928111455990

  • 混合了 MLP 和 GMF,需要注意的是两个墨西哥的 embedding 是分开的。
  • 无论是 MLP 还是 GMF,都采用 Embedding 的方式生成隐向量,而不是传统的矩阵分解 MF。
  • 根据评分矩阵生成的隐向量(User 和 Item 的 Embedding 向量),其中每一个维度都可以看做是一种抽象特征,而特征交叉就是针对 Embedding 向量的每个维度进行交叉。
  • 特征交叉的方式:
    1. GMF:线性方式——向量点积
    2. MLP:非线性方式——多层神经网络
    3. NeuralCF :混合上述两种方式

PNN 模型

基本原理

  • NeuralCF 不足:只用到了用户向量和物品向量,可以看成一个MF的加强版,但是没有考虑其他特征信息,这无疑是一种浪费。
  • Product-based Neural Network(PNN):在加入多组特征的基础上研究的特征交叉,这个模型和 Deep Crossing 模型的架构类似,只不过把 Deep Crossing 的 stacking 层换成了 Product 层,也就是不同特征的 embedding 向量不再是简单的堆叠,而是两两交互,更有针对性的获取特征之间的交叉信息。
  • 在这里面研究了两两特征之间的内积和外积两种交叉方式,提出了具体的两种模型 IPNN 和 OPNN。

网络结构

image-20210928135958913

  1. 输入层:模型输入由 N 个特征域(Field)组成,都是离散稀疏的分类特征。数值型特征要在类别性特征交叉完之后再合并。
  2. Embedding 层:和 DeepCrossing 一样,对每一个离散稀疏的 Field 特征域进行 Embedding 操作,参数是通过神经网络的反向传播进行学习。
  3. Product 层:
    • 线性操作部分和乘积操作部分。丰富了特征交叉的能力。
    • z 区域表示单独特征,是单个特征与参数 w 的运算;p 区域表示交叉特征,是特征两两内积后的特征与参数 w 的计算。
    • p 部分又分为内积(IPNN)和外积(OPNN)
  4. L1、L2 层:两层全连接,输入包含了离散型特征 lp 和 lz 以及数值型特征。
  5. 输出层:二分类预测问题,使用 sigmoid 激活输出。

Wide&Deep模型

记忆能力和泛化能力

  • 记忆能力:

    • 模型直接学习并利用历史数据中物品和特征的“共现频率”的能力。
    • 记住了历史数据的分布特点,由原始数据直接影响结果。
  • 泛化能力:

    • 模型传递特征的相关性,以及发掘稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。
    • 让数据稀少的用户或者物品也能生成隐性特征,获得全局数据的泛化支撑,深度发掘数据中的潜在模式。

背景介绍

  • 在CTR预估任务中,利用手工构造的交叉组合特征来使线性模型具有“记忆性”,使模型记住共现频率较高的特征组合,往往能达到一个不错的baseline,且可解释性强。但这种方式有较为明显的缺点:1. 特征工程需要耗费太多精力。2. 对于未曾出现过的特征组合,权重系数为0,无法进行泛化。
  • 为了加强模型的泛化能力,研究者引入了DNN结构、将高维稀疏特征编码为低维稠密的 Embedding vector,有效提高模型的泛化能力。但是,基于 Embedding 的方式遇到高度稀疏且高秩的共现矩阵时,长尾的一些特征值无法被充分学习,即使两者没有任何关系,也会由于 dense embedding 导致预测值非0,这便会造成模型泛化过度。
  • 因此,现在主要的两种模型:
    1. 协同过滤、逻辑回归等:能够从历史数据中学习到高频共现的特征组合能力,但是泛化能力不足;
    2. 矩阵分解、深度学习等:能够利用相关性的传递去探索历史数据中未出现的特征组合,挖掘数据潜在的关联模式,但是对于特定的场景(数据分布长尾,共现矩阵稀疏高秩)很难有效学习低纬度的表示,造成推荐的过渡泛化。
  • Wide&Deep 模型,将线性模型与 DNN 结合起来,在提高模型泛化能力的同时,兼顾模型的记忆性。
  • Wide&Deep 后来成为推荐领域的经典模式,奠定了后面深度学习模型的基础。这个是一个里程碑式的改变,模型架构并没有多复杂,重点在于思想。

网络结构

image-20210928143913425

W&D 模型把单输入层的 Wide 部分和 Embedding + 多层全连接的部分连接起来,一起输入最终的输出层得到预测结果。单层的 wide 层善于处理大量的稀疏的 id 类特征,Deep 部分利用深层的特征交叉,挖掘在特征背后的数据模式。

Wide

Wide 部分是一个广义的线性模型,用来处理神经网络并不擅长的离散特征。

  • 特征转换:cross-product transformation(原始特征的交互特征),如果两个特征同时为1的时候,这个特征就是1,否则就是0,这是一种特征组合。
  • 优化器:带 L1 正则的 FTRL 算法(Follow-the-regularized-leader),该算法非常注重模型稀疏性质,可以使特征更加稀疏,即大部分参数都为0,就大大压缩了模型权重及特征向量的维度。

Wide 部分模型训练完之后留下来的特征都是非常重要的,那么模型的“记忆能力”就可以理解为发现”直接的”,“暴力的”,“显然的”关联规则的能力。

Deep

Deep 部分是 Embedding+MLP 的神经网络模型,用来挖掘藏在特征背后的数据模式。

输入的特征有两类:1. 数值型特征;2. 类别型特征(会经过 embedding)。

大规模稀疏特征通过 Embedding 转化为低维密集型特征。

DNN 模型随着层数的增加,中间的特征就越抽象,也就提高了模型的泛化能力。

谷歌推荐系统的工业经验

Wide&Deep 模型本身的结构非常简单,但如何根据自己的场景去选择哪些特征放在 Wide 部分,哪些特征放在 Deep 部分是用好该模型的前提。

image-20210928150837339

Google Pay 通过检索来实现推荐的召回,将大规模的 App 应用缩小到小规模(例如100)的相关应用。然后在通过用户特征、上下文特征、用户行为特征等来建立推荐模型,估计用户点击每个 App 的概率分数进行排序,推荐 Top K 个 App。

image-20210928151001327

  1. Deep部分:全量的特征向量,包括用户年龄(age)、已安装应用数量(#app installs)、设备类型(device class)、已安装应用(installed app)、曝光应用impression app)等特征。其中,已安装应用,曝光应用等类别型特征,需要经过embedding层输入连接层,而数值型的特征和前面的特征拼接起来直接输入连接层,经过3层的Relu全连接层。
  2. Wide部分:输入仅仅是已安装应用和曝光应用两类特征。其中已安装应用代表用户的历史行为,而曝光应用代表当前待推荐应用。选择这两部分是想发现当前曝光 APP 和用户已安装 APP 之间的关联,以充分发挥Wide的记忆能力,影响最终的得分。这部分是 L1 正则化的 FTRL 优化器,可能是因为这两个 id 类特征向量组合,在维度爆炸的同时,会让原本已经非常稀疏的 multihot 特征向量变得更加稀疏。因此采用FTRL过滤掉那些稀疏特征是非常好的工程经验。
  3. 两者结合:最后将两部分的特征再进行一个拼接,输出到 logistics Loss 层进行输出。

Deep&Cross 模型

基本思路

  • 针对问题:Wide 部分有一个不足就是需要人工进行特征的组合筛选,过程繁琐且需要经验;2阶的FM模型在线性的时间复杂度中自动进行特征交互,但是这些特征交互的表现能力并不够,并且随着阶数的上升,模型复杂度会大幅度提高。
  • 改进方向:用一个 Cross Network 替换掉 Wide 部分,来自动进行特征之间的交叉,并且网络的时间和空间复杂度都是线性的。

网络结构

image-20210928152058933

  1. Embedding and stacking layer:作用依然是把稀疏离散的类别型特征变成低维密集型。
  2. Cross Network:目的是增加特征之间的交互力度。
    • image-20210928154001138
    • 交叉层的操作的二阶部分非常类似 PNN 提到的外积操作。
    • 思想上类似于残差连接。
    • x1 中包含了所有的 x0 的 1、2 阶特征的交互,x2 包含了所有的 x1、x0 的 1、2、3 阶特征的交互。因此,交叉网络层的叉乘阶数是有限的。第 l 层特征对应的最高叉乘阶数为 l+1。
    • 每一层特征权重共享。
    • 交叉网络的时间和空间复杂度是线性的。因为每一层都只有w和b,没有激活函数的存在,相对于深度学习网络,交叉网络的复杂性可以忽略不计。
    • Cross网络是FM的泛化形式
    • 当两个稀疏特征不全为 1 时,就不会训练权重,也就不会进行交互。
  3. Deep Network:与 D&W 相同。
  4. 组合层:将两个网络的输出拼接,并且 Logistics 回归

FNN 模型

基本思路

  • FNN 是在 W&D 之前提出的

  • 针对问题:1. Embedding 层收敛速度过慢;2. FM 虽然考虑了二阶交叉,但无法延伸到高阶交叉信息的学习。

  • Embedding 层收敛速度慢的原因:1. 输入极端稀疏化,众多的 0 导致 w 无法更新;2. 参数量往往占整个神经网络的大半以上。

  • 解决方案:

    1. 提前预训练好一个 FM 模型,该模型可以用来得到各特征隐向量。
    2. 然后用 FM 训练好的特征隐向量对正式训练的模型进行 Embedding 层的权重初始化。

网络结构与训练细节

image-20210928181946861

  • 类似于 Deep Crossing 模型的经典深度神经网络,从稀疏输入向量到稠密向量的转换依然是embedding结构。
  • FNN 模型针对 Embedding 层收敛速度慢的问题,用 FM 模型替换了下面的 Embedding 层,并且在模型的正式训练之前,先提前训练好 FM,然后用 FM 训练好的特征隐向量对正式训练的模型进行 Embedding 层的初始化操作。
  • 采用两阶段训练方式,是为了将 FM 作为有价值先验知识加入到模型中。防止因为数据稀疏带来的歧义造成模型参数偏差、加速模型收敛、充分利用 FM 的特征表达。
  • 类似于迁移学习。

优缺点

  • 优点:
    • 采用预训练的方式
    • 采用了组合模型的思想,引入 DNN,可以进行特征的高阶组合,减少特征工程。
  • 缺点:
    • 两阶段的训练模型,应用过程不方便,且模型能力受限于 FM 表征能力的上限。
    • 只关注于高阶特征的组合交叉,容易丢失记忆能力。
    • 全连接层将向量的所有元素加权求和,不会对Field进行区分,本质又回到了 Deep Crossing 的问题。
    • 特征的学习没有针对性。
    • 两阶段的训练方式给神经网络调参带来难题。

DeepFM 模型

基本思路

  • 存在问题:
    • 简单的线性模型虽然简单,同样这样是它的不足,就是限制了模型的表达能力,随着数据的大且复杂,这种模型并不能充分挖掘数据中的隐含信息,且忽略了特征间的交互,如果想交互,需要复杂的特征工程。
    • FM模型考虑了特征的二阶交叉,但是这种交叉仅停留在了二阶层次,虽然说能够进行高阶,但是计算量和复杂性一下子随着阶数的增加一下子就上来了。所以二阶是最常见的情况,会忽略高阶特征交叉的信息
    • DNN,适合天然的高阶交叉信息的学习,但是低阶的交叉会忽略掉
    • W&D 把简单的LR模型和DNN模型进行了组合,使得模型既能够学习高阶组合特征,又能够学习低阶的特征模式。但是W&D的wide部分是用了LR模型,这一块依然是需要一些经验性的特征工程,且 Wide 部分和 Deep 部分需要两种不同的输入模式,这个在具体实际应用中需要很强的业务经验。

网络结构

image-20210928185114897

  • DeepFM 也是两部分组成,左边的 FM + 右边的 DNN。
  • 与 W&D 和 DCN 相比,DNN 部分是相同的,区别在于 Wide 部分:1. W&D 采用的是 LR;2. Deep&Cross 采用 Cross 交叉网络;3. DeepFM 采用了 FM。后两者都是针对于 W&D 的 wide 不具备自动特征组合能力的缺陷进行改进的。
  • Input、Embedding:与 Wide&Deep 不同的是,DeepFM 中的 Wide 部分与 Deep 部分共享了输入特征,即 Embedding 向量。
  • FM:与 FNN 不同,FM 的隐向量参数也是当做学习参数一块学习的,以端到端方式训练整个网络。作者发现,通过高阶和低阶交互特征一块来进行反向传播更新参数反而会使得模型表现更佳,当然这也依赖于共享Embedding输入的策略。
  • Deep:与 Wide 使用相同的特征 Embedding。

论文细节

  • 特征交互本质:

    • 二阶特征交互:通过对主流应用市场的研究,我们发现人们经常在用餐时间下载送餐的应用程序,这就表明应用类别和时间戳之间的(阶数-2)交互作用是 CTR 预测的一个信号。
    • 三阶或者高阶特征交互:我们还发现男性青少年喜欢射击游戏和 RPG 游戏,这意味着应用类别、用户性别和年龄的(阶数-3)交互是 CTR 的另一个信号。
    • 同时考虑低阶和高阶的交互特征,比单独考虑其中之一有更多的提升。
  • 人工特征工程的挑战性:

    • 一些特征工程比较容易理解,就比如上面提到的那两个,这时候往往我们都能很容易的设计或者组合那样的特征。 然而,其他大部分特征交互都隐藏在数据中,难以先验识别(比如经典的关联规则”尿布和啤酒“就是从数据中挖掘出来的,而不是由专家发现的),只能由机器学习自动捕捉。即使是对于容易理解的交互,专家们似乎也不可能详尽地对它们进行建模,特别是当特征的数量很大的时候。
    • 所以,尽量的避免人工特征工程,构建端到端的推荐系统时作者研究该篇论文的另一动机所在(改进了W&D)
  • image-20210928192807353
  • FNN、PNN、W&D 比较:

    • FNN 模型:预训练的方式增加了开销,模型能力受限于 FM 表征能力的上限,且只考虑了高阶交互
    • PNN 模型:IPNN 的内积计算非常复杂,OPNN 的外积近似计算损失了很多信息,结果不稳定,且同样忽视了低阶交互
    • W&D 模型:虽然是考虑到了低阶和高阶交互,兼顾了模型的泛化和记忆,但是 Wide 部分输入需要专业的特征工程经验,作者这里还举了个例子,比如用户安装应用和应用推荐中曝光应用的交叉,这个需要一些强的业务经验。

NFM 模型

基本思路

  • NFM(Neural Factorization Machines)
  • FM 的问题:真实世界中的数据往往是非线性且内部结构复杂,而 FM 还是个线性模型,且交互仅仅限于二阶交互,所以作者认为 FM 在处理真实数据的时候,表达能力并不好。
  • 改进方向:用一个表达能力更强的函数(神经网络)来替代原 FM 中二阶隐向量内积的部分。
  • image-20210928213549920

网络结构

image-20210928213748093

类似于 PNN,由 product_layer 换成了 Bi-Interaction Pooling,这个也是NFM的核心结构了。

  • Input、Embedding、DNN、Output 层:同之前。
  • Bi-Interaction Pooling layer:在 Embedding 和 DNN 之间加入的特征交叉池化层。
    • image-20210928214540185
    • 可以认为是特征域和特征域之间做交叉

总结

  • NFM 相比较于其他模型的核心创新点是特征交叉池化层,实现了 FM 和 DNN 的无缝连接,NN 可以在 low level 就学习到包含更多信息的组合特征。集合了 FM 二阶交叉线性和 DNN 高阶交叉非线性的优势,非常适合处理稀疏数据的场景任务
  • 在特征交叉层和隐藏层加入 dropout 技术,有利于缓解过拟合,dropout也是线性隐向量模型过拟合的策略
  • 在 NFM 中,使用 BN+Dropout 的组合会使得学习的稳定性下降, 具体使用的时候要注意
  • 特征交叉池化层能够较好的对二阶特征信息的交互进行学习编码,这时候,就会减少 DNN 的很多负担,只需要很少的隐藏层就可以学习到高阶特征信息,也就是 NFM 相比之前的 DNN,模型结构更浅,更简单,但是性能更好,训练和调参更容易
  • NFM 对参数初始化相对不敏感,也就是不会过度依赖于预训练,模型的鲁棒性较强
  • 深度学习模型的层数不总是越深越好,太深了会产生过拟合的问题,且优化起来也会困难

AFM 模型

基本思路

  • AFM(Attentional Factorization Machines)
  • 针对问题:NFM 的特征交叉池化层对于各个交叉特征向量进行加和,没有考虑不同特征对结果的影响程度。这可能会影响最后的预测效果,因为不是所有的交互特征都能够对最后的预测起作,而没有用的交互特征就可能会产生噪声。
  • 改进方向:引入注意力机制,学习不同交叉特征对于结果的不同影响程度。

网络结构

image-20210928220446143

  • Input、embedding、Output 层:同之前。

  • Pair-wise Interaction Layer:和 NFM 是一样的,采用的也是每对 Embedding 向量进行各个元素对应相乘(element-wise product)交互。

  • Attention based Pooling layer:在 Pair-wise Interaction Layer 和 Output layer 中间加入的 Attention 注意力网络。

    • image-20210928221437267

    • 主要思路:不同的特征交互向量在将它们压缩为单个表示时,根据对预测结果的影响程度给其加上不同权重。

    • 其中aij表示vi⊙vj对的注意力分数,表示该交互特征对于预测目标的重要性程度。这个注意力分数可以作为参数然后通过最小化预测损失来进行学习,但是对于从未在训练数据中共同出现的特征,就无法估计其交互作用的注意力得分。所以为了解决泛化问题,这里才使用了一个多层感知器(MLP)将注意力得分参数化,就是上面的那个 Attention Net。

    • 该注意力网络的结构是一个简单的单全连接层加 softmax 输出层的结构

    • image-20210928221953070

DIN 模型

基本介绍

  • Deep Interest Network(DIN) 模型非常重要,是基于业务的观察,从实际应用的角度进行的模型改进,完全符合以需求为导向的创新原则。
  • DIN 的论文写得非常精彩,建议读原文,里面不仅提出了DIN模型,并基于真实场景下大规模数据集的模型训练问题,提出了两种重要的训练技术。
  • DIN 模型的创新点或者解决的问题就是使用了注意力机制来对用户的兴趣动态模拟,非常注重用户的历史行为特征(历史购买过的商品或者类别信息)。

背景

  • 拥有大量的用户历史行为信息。
  • 用户兴趣多种多样,并且变化多端。
  • 用户的兴趣往往蕴含在历史行为当中。
  • 用户是否点击商品,很大程度上依赖于他的历史行为。
  • 广告推荐两个主要的阶段:召回和排序。
    • 召回(matching stage): 通过协同过滤等方法生成与访问用户相关的候选广告列表
    • 排序:就是通过排序模型来预测用户对于候选广告的点击概率,根据概率生成推荐列表
  • 大部分的推荐场景下都会有这两大步骤, 而商品广告推荐和一些其他推荐有些区别的是很注重用户的历史行为,因为这个直接与用户的兴趣相关, 而用户兴趣又反过来和商品挂钩。

基本思路

  • Embeding&MLP 模型的存在问题:1. 无法表达用户广泛的兴趣;2. 并不是用户所有的历史行为特征都会对某个商品广告点击预测起到作用。
  • 改进方向:1. 应该考虑到用户的历史行为商品与当前商品广告的一个关联性(局部兴趣),模拟出用户对商品的兴趣程度(注意力得分)。

特征表示

image-20210928231725615

工业上的CTR预测数据集一般都是 multi-group categorial form 的形式,就是类别型特征最为常见。

网络结构

image-20210929082029917

base 模型:

  1. Embedding layer:把高维稀疏的输入转成低维稠密向量。multi-hot 编码会得到一个 embedding 向量的列表。
  2. pooling layer:pooling 层的作用是将用户的历史行为,即不定长的 embedding 向量,最终变成一个定长的向量。
  3. Concat layer:把所有特征 embedding 向量,从特征维度拼接,作为MLP的输入。
  4. MLP:普通全连接。
  5. Loss:二分类的问题。image-20210929080649441

存在问题:

  1. 用户的历史行为特征和当前的候选广告特征拼接之前,一点交互过程都没有。
  2. 拼接之后给 MLP,虽然有交互,但是既丢失了部分信息,也引入了部分噪声
    • 丢失信息:已经无法看出到底用户历史行为中的哪个商品与当前商品比较相关。
    • 引入噪声:因为当前候选广告商品交互的是池化之后的历史特征 embedding,其包含了所有的历史商品信息。

改进思路:

  1. 对于给定的候选广告,DIN 通过考虑历史行为与其相关性,自适应地计算用户兴趣的表示向量,该向量随不同广告而变化。
image-20210928231838285

DIN 模型的 Activation Unit:

  • 位于 embedding 和 pooling 层之间。
  • 用于计算用户历史行为商品和当前候选商品之间的相关性,即每个历史商品的权重。
  • 不进行 softmax,目的是为了保留用户的兴趣强度。否则可能会因为过长的序列和 0-1 映射,使得权重差距不明显。

论文细节

  1. Mini-batch Aware Regularization:为了防止模型过拟合,一般会加入正则化,而L2正则化加入的时候,是对于所有的参数都会起作用。像这种真实数据集中,每个mini-batch的样本特征是非常稀疏的,这种情况下根本就没有必要考虑所有的参数进去,这个复杂度会非常大。仅约束那些在当前 mini-batch 样本中出现的特征(不为0的那些特征) embedding 就可以了。

  2. Data Adaptive Activation Function:随着数据分布而动态调整的自适应激活函数。

    • image-20210929084620252
    • image-20210929084636564
    • 这里的 E(s) 和 Var(s) 是每个 mini-batch 里面样本的均值和方差,当然这是训练集部分,测试集的时候采用的是在数据上平滑的均值和方差。由于把均值和方差考虑进去了,那么这个函数的调整就可以根据数据的分布进行自适应,这样会更加的灵活且合理。
  3. 衡量模型改进程度的评价标准 RelaImpr:

    • image-20210929084951620
    • 基于 base model 评价模型的提高程度
    • image-20210929085036339
    • #inpressiongi 和 AUCi 分别是 i 用户的喜好和 AUC。
    • AUC = P(P正样本 > P负样本)

DIEN 模型

基本思路

  1. DIN有两点不足:

    • 直接将用户过去的历史行为当做了用户的兴趣,缺乏对具体行为背后的潜在兴趣进行专门的建模。只计算了当前候选广告与过去历史行为的相关性,根据这个做出推荐,但历史行为之间的依赖关系并没有很好的模拟出来。历史行为其实也是一个随时间排序的序列,既然是时间相关的序列,就一定存在或深或浅的前后依赖关系,而这样的序列信息或者说依赖关系对推荐过程是非常有价值的(能够反映用户背后的潜在兴趣变化),大量研究发现这种信息能够用于构建更丰富的用户模型并发现附加的行为模式,而DIN模型包括之前的MLP系列模型都无法学习到这样的序列依赖关系。
    • DIN 模型没法捕捉到用户的兴趣变化过程,作者在论文中用到了一个词叫做”兴趣漂移”,即在相邻的访问中,用户的意图可能非常不同,用户的一个行为可能依赖于很久以前的行为。而一个用户对不同目标项的点击行为受到不同兴趣部分的影响,如果没法学习用户的兴趣演化,就很容易基于用户所有购买历史行为综合推荐,而不是针对“下一次购买”推荐,DIN虽然是能够更加注重与当前候选物品相关的历史行为,但是这些行为并不能表示出用户的兴趣变化过程,所以序列信息是非常之重要的。
    • 总结:DIN 忽略了序列信息,容易基于历史行为综合推荐,而不是针对下一次购买进行推荐。
  2. 序列的重要性:

    例如:上周一位用户在挑选一双篮球鞋,这位用户上周的行为序列都会集中在篮球鞋这个品类的商品上,但是完成购买之后,本周的购物兴趣可能变成买机械键盘。

    • 加强了最近行为对下次行为预测的影响。比如上面的例子,用户近期购买机械键盘的概率会明显高于再买篮球鞋的概率。
    • 序列模型能够学习到购买趋势的信息。这个感觉就是在建模用户的兴趣演化,在上面例子中,序列模型能在一定程度上建立“篮球鞋”到“机械键盘”的转移概率,如果这个转移概率在全局统计意义上足够高,那么用户购买篮球鞋时,推荐机械键盘也会是一个不错的选项。直观上,两者的用户群体很有可能一致。
  3. 兴趣的实际状况:

    • 同一时刻下,可能会拥有多种不同的兴趣,应该用兴趣状态描述
    • 兴趣是动态变化的,拥有各自的演化过程
    • 兴趣发展是有一定前因后果的
    • 当前时刻的兴趣,都有可能由上个时刻的兴趣概率转移
  4. 改进方向:将 DIN 的 embedding 到 concat 之间的部分替换成兴趣进化网络。

网络结构

image-20210929091931368

  1. 行为序列层(Behavior Layer):主要作用是把原始的 id 类行为序列转成 Embedding 行为序列, 和 DIN 下面的 Embedding 层一样。
  2. 兴趣抽取层(Interest Extractor Layer): 主要作用是通过模拟用户的兴趣迁移过程,挖掘提取用户行为背后潜藏的状态,DIN 模型没有这个东西。这个也就是 DIN 的不足①的改进,能够学习到历史序列行为之间的序列依赖关系。
    • auxiliary loss:帮助监督更新这一层的 GRU 参数。让当前时刻输出的隐藏状态 ht 尽量的与下一个时刻用户点击的行为 embedding 相似,与下一个时刻里面用户没有点击过的行为 embedding 越远。
    • 原来的 GRU 是只在最后一个时间步进行输出,然后与真实 label 进行了一个交叉熵的计算,而改进的这个核心点是每个时间步都会有一个输出,然后都会与一个 label 进行一个交叉熵计算,所以这里就会多出了时间步 t 维度上的加和损失,还有点不同就是 label 这里,当前时间步用的 label 是下一个时间步的输入值。
    • 引入 auxiliary loss 的原因:目标商品的点击行为是由最后的兴趣触发,而 label 只能监督最后的兴趣,对隐藏层的状态不能有效监督。
  3. 兴趣进化层(Interest Evolving Layer):主要作用是通过兴趣抽取层在兴趣抽取层的基础上加入注意力机制,模拟与目标广告相关的兴趣进化过程。这个和 DIN 引入注意力的思路其实是一脉相承的, 注意力的计算得分都是一致的。只不过这里这里不是把这个注意力计算的得分与兴趣抽取层的 h 简单加权组合了,而是把这个注意力操作嵌入到了 GRU 更新门里面去,形成了一个 AUGRU 的结构,用这个层来更有针对性的模拟与目标广告相关的兴趣进化路径。