一、MLP based Recommender System

1. Deep Crossing模型

Deep Crossing模型完整的解决了从特征工程、稀疏向量稠密化、多层神经网络进行优化目标拟合等一系列深度学习在推荐系统中的应用问题。

为完成端到端的训练Deep Crossing模型要在其内部解决如下问题:

  • 离散类特征编码后过于稀疏,不利于直接输入神经网络进行训练,如何解决稀疏特征向量稠密化的问题
  • 如何解决特征自动交叉的问题
  • 如何在输出层中打成问题设定的优化目标

请添加图片描述

通过加入embedding层将稀疏特征转化为低维稠密特征,用stacking layer,或者叫做concat layer将分段的特征向量连接起来,再通过多层神经网络完成特征的组合、转换,最终用scoring layer完成CTR的计算。跟经典DNN有所不同的是,Deep crossing采用的multilayer perceptron是由残差网络组成的。

Embedding层:将稀疏的类别性特征转换成稠密的Embedding向量,以经典的全连接层结构为主。通常,Embedding向量的维度应该远小于原始稀疏特征向量。这里Feature #2世纪代表了数值型特征,可以看到,数值型特征不需要经过Embedding层,直接进入了Stacking层。

Stacking层:Stacking层(堆叠层)的作用比较简单,是把不同的Embedding特征和数值型特征拼接在一起,也被称为连接(concatenate)层。

Multiple Residual Units层:主要结构时多层感知机,相比标准的多层感知机为基本单元的神经网络,Deep Crossing模型采用了多层残差网络(Multi-Layer Residual Network)作为MLP的具体实现。通过多层残差网络对特征向量各个维度进行充分的 交叉组合。

Scoring层:Scoring层作为输出层,就是为了拟合优化目标,对CTR预估这类二分类问题,Scoring层往往使用的是逻辑回归模型,对于图像等多分类问题,Scoring层往往采用softmax模型。

2. Neural Collaborative Filtering

请添加图片描述

2.1 基础NCF模型

若将矩阵分解层的用户隐向量和物品隐向量看作是一种Embedding方法,最终的“Scoring层”就是将用户隐向量和物品隐向量进行内积操作后得到的“相似度”,这里的相似度就是对评分的预测。在实际应用中,往往发现模型容易欠拟合,主要原因是MF的模型结构相对简单,尤其“Scoring层”,无法对优化目标进行有效的拟合。

NeuralCF用“多层神经网络+输出层”的结构替代了MF中简单的内积操作,优点如下:1、让用户向量和物品向量左更充分的交叉;2、引入更多的非线性特征。

事实上,用户向量和物品向量的互操作层可以被任意的互操作形式所替代,即所谓的广义矩阵分解模型(Generalized Matrix Factorization)。为了让向量在各维度上进行更充分的交叉,可以通过“元素积”(element-wise product,长度相同的两个向量按元素乘得到新的同维度的向量)进行交互,再通过逻辑回归等输出层拟合最终预测目标。

2.2 NCF混合模型

再进一步,可以把通过不同互操作网络得到的特征向量拼接起来,交由输出层进行目标拟合。
请添加图片描述

2.3 CCCFNet

再进一步来说,还可以使用Cross Domain跨领域推荐——假设跨领域存在一些一致的模式(如不同的domain共享user-side sub-network),因此可以从相对密集的辅助领域获取知识,如:CCCFNet (Cross-domain Content-boosted Collaborative Filtering neural Network)
其框架图如下:
请添加图片描述

总的来说,NCF的优点是对于用户向量和物品向量这俩Embedding层可以自由的选择不同互操作层的拼接。但是也有缺点——基于协同过滤的思想,没有引入更多其他类型的特征。

3. PNN模型

PNN模型的框架为:
请添加图片描述

与Deep Crossing模型相比,PNN模型在输入、Embedding层、多层神经网络,以及最终的输出层部分并没有结构上的不同。唯一的区别在于PNN模型用乘积层(Product Layer)代替了Deep Crossing模型中的Stacking层,即不同特征的Embedding向量不再是简单的拼接,而是利用Product操作进行两两交互。

另外,相比于NeuralCF,PNN模型的输入不仅包括用户和物品信息,还可以有更多不同形式、不同来源的特征,通过embedding层的编码生成同样长度的稠密特征embedding向量。

PNN 模型对于深度学习结构的创新主要在于乘积层的引入。具体地说,PNN 模型的乘积层由线性内积操作部分(图中乘积层的 z 部分,对各特征向量进行线性拼接)和乘积外积(outer product) 操作部分(图中乘积层的 p 部分)组成。其中,乘积特征交叉部分又分为内积操作和还是外积操作,使用内积操作的PNN模型被称为IPNN(Inner Product-based Neural Network),使用外积操作的PNN被称为OPNN(Outer Product-based Neural Network)。

无论是内积操作还是外积操作,都是对不同的特征embedding向量进行两两组合。为保证乘积操作能够顺利进行,各embedding向量的维度必须相同。

内积操作就是经典的向量内积运算: g i n n e r ( f i , f j ) = < f i , f j > g_{inner}(f_i,f_j)=<f_i, f_j> ginner(fi,fj)=<fi,fj>

外积操作是对输入特征向量 f i , f j f_i,f_j fi,fj的各维度进行两两交叉,生成特征交叉矩阵: g o u t e r ( f i , f j ) = f i f j T > g_{outer}(f_i,f_j)=f_i f_j^T> gouter(fi,fj)=fifjT>

外积互操作生成的是特征向量 f i , f j f_i,f_j fi,fj各维度两两交叉而成的一个MxM的方形矩阵。这样的外积操作无疑会直接将问题的复杂度从原来的M提升到 M 2 M^2 M2,为了在一定程度上减小模型训练的负担,PNN模型的论文中介绍了一种降维的方法,就是把所有两两特征embedding向量外积互操作的结果叠加,形成一个叠加外积互操作矩阵p:
p = ∑ i = 1 N ∑ j = 1 N g o u t e r ( f i , f j ) = ∑ i = 1 N ∑ j = 1 N f i f j T = ∑ i = 1 N f i ∑ j = 1 N f j T = f Σ f Σ T p=\sum_{i=1}^{N}\sum_{j=1}^{N}g_{outer}(f_i,f_j)=\sum_{i=1}^{N}\sum_{j=1}^{N}f_if_j^T=\sum_{i=1}^{N}f_i\sum_{j=1}^{N}f_j^T=f_{\Sigma} f_{\Sigma}^T p=i=1Nj=1Ngouter(fi,fj)=i=1Nj=1NfifjT=i=1Nfij=1NfjT=fΣfΣT
其中, f Σ = ∑ i = 1 N f i f_{\Sigma}=\sum_{i=1}^{N}f_i fΣ=i=1Nfi

叠加矩阵p的最终形式类似于让所有特征embedding向量通过一个平均池化层后,在进行外积互操作。

在实际应用中,还应对平均池化操作谨慎对待。因为把不同特征对应维度进行平均,实际上是假设不同特征的对应维度有类似的含义。很显然,如果一个特征是年龄,一个特征是地域,那么这两个特征在经过各自的embedding层后,二者的embedding向量不在一个向量空间中,显然不具备任何可比性。这时,把二者平均起来,会模糊很多有价值的信息。平均池化的操作经常发生在同类embedding上,例如,将用户浏览过的多个物品的embedding进行平均。因此,PNN模型额外积池化操作也需要谨慎,在训练效率和模型效果上进行权衡。

优点:特征Embedding向量之间的交叉方式是多样的

缺点:实践中,会对外积操作做一系列简化;对所有特征无差别的交叉忽略了原始特征向量中包含的有价值的信息。

4. Wide & Deep Learning

4.1 Wide & Deep

Wide部分主要作用是让模型具备较强的“记忆能力”;Deep部分的主要作用是让模型具有“泛化能力”。正是这样的结构特点,使模型兼具了逻辑回归和深度神经网络的优点——能够快速处理并记忆大量历史行为特征,并且具有强大的表达能力。

“记忆能力”:模型直接学习并利用历史数据中的物品或者强特征的“共现频率”的能力。一般来说,协同过滤、逻辑回归等简单模型具有较强的“记忆能力”。这类模型结构简单,没有过多的特征交叉,原始数据往往可以直接影响推荐结果,产生类似于”若点击过A则推荐B“这类规则式的推荐,相当于模型直接记住了历史数据的分布特点,并利用这些记忆进行推荐。多层神经网络特征会被多层处理,不断与其他特征交叉,使得模型对原始强特征的记忆反而不如简单模型。像逻辑回归这类简单模型,如果发现这样的“强特征”,则其相应的权重就会在模型训练过程中被调整得非常大,这样就实现了对这个特征的直接记忆。相反,对于多层神经网络来说,特征会被多层处理,不断与其它特征进行交叉,因此模型对这个强特征的记忆反而没有简单模型深刻。

“泛化能力”:模型传递特征的相关性,以及发觉稀疏甚至从未出现过的稀有特征与最终标签相关性的能力。矩阵分解比协同过滤的泛化能力强,因为MF引入了隐向量,使得数据稀少的用户或者物品也能生成隐向量,从而获得由数据支撑的推荐得分,这就是典型的将全局数据传递到稀有物品上,从而提高泛化能力。再如,深度神经网络通过特征次组合,可以发掘数据中潜在的模式,即使非常稀疏的特征向量输入,也能得到较稳定平滑的推荐概率。

请添加图片描述
单层的Wide部分擅长处理大量稀疏的id类特征;Deep部分利用神经网络强大的表达能力,进行深层的特征交叉,挖掘藏在特征背后的数据模式。

请添加图片描述
上图是Google Play的推荐模型,Deep部分的输入是全量的特征向量,包括用户年龄、已安装应用数量、设备类型、已安装应用、曝光应用等特征。已安装应用、曝光应用等类别型特征,需要经过Embedding层输入连接层,拼接成1200维的Embedding向量,再依次经过3层ReLU全连接层,最终输入LogLoss输出层。

Wide部分的输入仅仅是已安装应用和曝光应用两类特征,其中已安装应用代表用户的历史行为,而曝光应用代表当前的待推荐应用。选择这两类特征的原因是充分发挥Wide部分“记忆能力”强的优势。

Wide部分组合“已安装应用”和“曝光应用”两个特征的函数被称为交叉积变换:
请添加图片描述
c k i c_{ki} cki是一个布尔变量,当第i个特征属于第k个组合特征时, c k i c_{ki} cki的值为1,否则为0; x i x_i xi是第i个特征的值。例如,对于"AND(user_installed_app=netflix, impression_app=pandora)"这个组合特征来说,只有当user_installed_app=netflix和impression_app=pandora这两个特征同时为1时,其对应的交叉积变换层的结果才为1,否则为0。

在通过交叉积变换层操作完成特征组合之后,Wide部分将组合特征输入最终的LogLoss层,与Deep部分的输出一同参与最后的目标拟合。
请添加图片描述

4.2 Deep & Cross

Wide & Deep模型可以进化为 Deep & Cross模型,Deep&Cross模型主要思路是使用Cross网络代替了原来的Wide部分。Cross部分是为了增加特征之间的交互力度,使用多层交叉层对输入向量进行特征交叉,设第l层交叉层的输出向量是 x l x_l xl,则第l+1层的输出向量为:
请添加图片描述

请添加图片描述
可以看出特征交叉的感觉,但是交叉层在增加参数方面还是比较克制的,每一层仅增加了一个n维(输入向量的维度)的权重向量 w l w_l wl,并且每一层均保留了原始输入向量,所以输出与输入之间的变化不会太明显。

5. FM与深度学习模型的结合

5.1 FNN——用FM的隐向量完成embedding层初始化

FNN 的模型结构初步看是一个类似 Deep Crossing 模型的经典深度神经网络,从稀疏输入向量到稠密向量的转换过程也是经典的 Embedding 层的结构。
请添加图片描述

FNN 模型到底在哪里与 FM 模型进行了结合呢?问题的关键还在于 Embedding 层的改进。在神经网络的参数初始化过程中,往往采用随机初始化这种不包含任何先验信息的初始化方法。由于 Embedding 层的输入极端稀疏化,导致 Embedding 层的收敛速度非常缓慢。再加上 Embedding 层的参数数量往往占整个神经网络参数数量的大半以上,因此模型的收敛速度往往受限于 Embedding 层。

针对 Embedding 层收敛速度的难题,FNN 模型的解决思路是用 FM 模型训练好的各特征隐向量初始化 Embedding 层的参数,相当于在初始化神经网络参数时,已经引入了有价值的先验信息。也就是说,神经网络训练的起点更接近目标最优店,自然加速了整个神经网络的收敛过程。

FM的数学形式为:
请添加图片描述

下面用图示的方法显示 FM 各参数和 FNN 中 Embedding 层各参数的对应关系 (在 FNN 模型中,特征被分成了不同特征域, 因此每个特征域具有对应的 Embedding 层,并且每个特征域 Embedding 的维度都应与 FM 隐向量维度保持一致。
请添加图片描述

5.2 DeepFM —— 用 FM 代替 Wide 部分

DeepFM 用 FM 替换了 Wide&Deep 模型原来的 Wide 部分,加强了浅层网络部分特征组合的能力。如下图所示,左边的 FM 部分与右边的深度神经网络部分共享相同的 Embedding 层。左侧的 FM 部分对不同的特征域的 Embedding 进行了两两交叉, 也就是将 Embedding 向量当作原 FM 中的特征隐向量。最后将 FM 的输出与 Deep 部分的输出一同输入最后的输出层,参与最后的目标拟合

请添加图片描述
与Wide&Deep模型相比,DeepFM模型的改进主要是针对Wide部分不具备自动的特征组合能力的缺陷进行的。

5.3 NFM —— FM的神经网络化尝试

无论是FM,还是其改进模型FFM,归根结底是一个二阶特征交叉的模型。受组合爆炸问题的困扰,FM几乎不可能扩展到三阶以上,这就不可避免的限制了FM模型的表达能力。
NFM 利用深度神经网络更强的表达能力改进 FM 模型,用一个表达能力更强的函数替代原 FM 中二阶隐向量内积的部分:
请添加图片描述

在进入深度学习时代后,由于深度学习网络理论上有拟合任何复杂函数的能力,f(x)的构造工作可以交由某个深度学习网络来完成,并通过梯度反向传播来学习。
请添加图片描述
上面的 NFM 架构图省略了其一阶部分。如果把 NFM 的一阶部分视为一个线性模型,那么 NFM 的架构也可以视为 Wide&Deep 模型的进化。相比原始的 Wide&Deep 模型,NFM 模型对其 Deep 部分加人了特征交叉池化层,加强了特征交叉。这是理解 NFM 模型的另一个角度。

沿着特征工程自动化的思路, 深度学习模型从 PNN 一路走来, 经过了 Wide&Deep、Deep&Cross、FNN、DeepFM、NFM 等模型,进行了大量的、基于不同特征互操作思路的尝试。但特征工程的思路走到这里几乎已经穷尽了可能的尝试,模型进一步提升的空间非常小,这也是这类模型的局限性所在。

从这之后,越来越多的深度学习推荐模型开始探索更多 “结构” 上的尝试,诸如注意力机制、序列模型、强化学习等在其他领域大放异彩的模型结构也逐渐进入推荐系统领域,并且在推荐模型的效果提升上成果显著。

6. 注意力机制在推荐模型中的应用

6.1 AFM—— 引入注意力机制的 FM

AFM 模型可以被认为是 NFM 模型的延续。在 NFM 模型中,不同域的特征 Embedding 向量经过特征交叉池化层的交叉,将各交叉特征向量进行 “加和”,输入最后由多层神经网络组成的输出层。问题的关键在于加和池化操作,它相当于 “一视同仁” 地对待所有交叉特征,不考虑不同特征对结果的影响程度,事实上消解了大量有价值的信息。

这里 “注意力机制” 就派上了用场,它基于假设 – 不同的交叉特征对于结果的影响程度不同,以更直观的业务场景为例,用户对不同交叉特征的关注程度应是不同的。举例来说,如果应用场景是预测一位男性用户是否购买一款键盘的可能性,那么 “性别=男且购买历史包含鼠标” 这一交叉特征,很可能比 “性别=男且用户年龄=30” 这一交叉特征更重要,模型投入了更多的 “注意力” 在前面的特征上。

具体地说,AFM模型引入注意力及知识通过在特征交叉层和最终的输出层之间加入注意力网络实现的,注意力网络的作用是为每一个交叉特征提供权重。

请添加图片描述

6.2 DIN – 引入注意力机制的深度学习网络

相比于之前很多 “学术风” 的深度学习模型,阿里巴巴提出的 DIN 模型显然更具业务气息。它的应用场景是阿里巴巴的电商广告推荐,因此在计算一个用户是否点击一个广告 a 时,模型的输入特征自然分为两大部分:一部分是用户 u 的特征组,另一部分是候选广告 a 的特征组。无论是用户还是广告,都含有两个非常重要的特征:商品 id (good_id) 和商铺 id (shop_id)。用户特征里的商品 id 是一个序列,代表用户曾经点击过的商品集合,商铺 id 同理;而广告特征里的商品 id 和商铺 id 就是广告对应的商品 id 和商铺 id。

在原来的基础模型中,用户特征组中的商品序列和商铺序列经过简单的平均池化操作后就进入上层神经网络进行下一步训练,序列中的商品既没有区分重要程度,也和广告特征中的商品 id 没有关系。
请添加图片描述

然而事实上,广告特征和用户特征的关联程度是非常强的。假设广告中的商品是键盘,用户的点击商品序列中有几个不同的商品 id 分别是鼠标、T 恤和洗面奶。从常识出发,“鼠标” 这个历史商品 id 对预测 “键盘” 广告的点击率的重要程度应大于后两者。从模型的角度来说,在建模过程中投给不同特征的 “注意力” 理应有所不同,而且 “注意力得分” 的计算理应与广告特征有相关性。

将上述注意力的思想反映到模型中也是直观的,利用候选商品和历史行为商品之间的相关性计算出一个权重,这个权重就到表了注意力的强弱:
V u = f ( V a ) = ∑ i = 1 N w i ⋅ V i = ∑ i = 1 N g ( V i , V a ) ⋅ V i V_u=f(V_a)=\sum_{i=1}^{N}w_i\cdot V_i=\sum_{i=1}^Ng(V_i,V_a)\cdot V_i Vu=f(Va)=i=1NwiVi=i=1Ng(Vi,Va)Vi

其中, V u V_u Vu是用户的embedding向量, V a V_a Va
是候选广告商品的embedding向量, V i V_i Vi是用户u的第i次行为的embedding向量。
请添加图片描述

7. DIEN——序列模型与推荐系统的结合

无论是电商购买行为,还是视频网站的观看行为,或是新闻应用的阅读行为,特定用户的历史行为都是一个随时间排序的序列。既然是时间相关的序列,就一定存在或深或浅的前后依赖关系,这样的序列信息对于推荐过程无疑是有价值的。

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

  1. 它加强了最近行为对下次行为预测的影响。在这个例子中,用户近期购买机械键盘的概率会明显高于再买一双篮球鞋或购买其他商品的概率。
  2. 序列模型能够学习到购买趋势的信息。在这个例子中,序列模型能够在一定程度上建立 “篮球鞋” 到 “机械键盘” 的转移概率。如果这个转移概率在全局统计意义上是足够高的,那么在用户购买篮球鞋时,推荐机械键盘也会成为一个不错的选项。直观上,二者的用户群体很有可能是一致的。

请添加图片描述

兴趣进化网络分为三层,从下至上依次是:

  1. 行为序列层 (Behavior Layer, 浅绿色部分):其主要作用是把原始的 id 类行为序列转换成 Embedding 行为序列。
  2. 兴趣抽取层 (Interest Extractor Layer, 米黄色部分):其主要作用是通过模拟用户兴趣迁移过程,抽取用户兴趣。兴趣抽取层的基本结构是 GRU (Gated Recurrent Unit, 门循环单元) 网络。过由 GRU 组成的兴趣抽取层后,用户的行为向量被进一步抽象化,形成了兴趣状态向量。
  3. 兴趣进化层 (Interest Evolving Layer, 浅红色部分):其主要作用是通过在兴趣抽取层基础上加入注意力机制,模拟与当前目标广告相关的兴趣进化过程。DIEN 兴趣进化层相比兴趣抽取层最大的特点是加入了注意力机制,其中 Attention Score 的生成过程与 DIN 完全一致, 都是当前状态向量与目标广告向量进行互作用的结果,因此在兴趣抽取层之上再加上兴趣进化层就是为了更有针对性地模拟与目标广告相关的兴趣进化路径。由于阿里巴巴这类综合电商的特点,用户非常有可能同时购买多品类商品,例如在购买 “机械键盘” 的同时还在查看 “衣服” 品类下的商品,那么这时注意力机制就显得格外重要了。当目标广告是某个电子产品时,用户购买 “机械键盘” 相关的兴趣演化路径显然比购买“衣服” 的演化路径重要,这样的筛选功能兴趣抽取层没有。

8. 强化学习与推荐系统的结合

请添加图片描述

  • 智能体:推荐系统本身,它包括基于深度学习的推荐模型、探索 (explore) 策略,以及相关的数据存储
  • 环境:由新闻网站或 App、用户组成的整个推荐系统外部环境。在环境中,用户接收推荐的结果并做出相应反馈
  • 行动:对一个新闻推荐系统来说,“行动” 指的就是推荐系统进行新闻排序后推送给用户的动作
  • 反馈:用户收到推荐结果后,进行正向的或负向的反馈。例如,点击行为被认为是一个典型的正反馈,曝光未点击则是负反馈的信号。此外,用户的活跃程度,用户打开应用的间隔时间也被认为是有价值的反馈信号
  • 状态:状态指的是对环境及自身当前所处具体情况的刻画。在新闻推荐场景中,状态可以被看作已收到所有行动和反馈,以及用户和新闻的所有相关信息的特征向量表示。站在传统机器学习的角度,“状态” 可以被看作已收到的、可用于训练的所有数据的集合

在这样的强化学习框架下,模型的学习过程可以不断地迭代,迭代过程主要有如下几步:

  1. 初始化推荐系统 (智能体)
  2. 推荐系统基于当前已收集的数据 (状态) 进行新闻排序 (行动),并推送到网站或 App (环境) 中
  3. 用户收到推荐列表,点击或者忽略 (反馈) 某推荐结果
  4. 推荐系统收到反馈,更新当前状态或通过模型训练更新模型
  5. 重复第 2 步

在 DRN 框架中,智能体部分中扮演 “大脑” 角色的是 DQN (Deep Q-Network),网络结构如下图所示,在特征工程中套用强化学习状态向量和行动向量的概念,把用户特征 (user features) 和环境特征 (context features) 归为状态向量,因为它们与具体的行动无关;把用户-新闻交叉特征和新闻特征归为行动特征,因为其与推荐新闻这一行动相关。
请添加图片描述
请添加图片描述

按照从左至右的时间顺序,依次描绘 DRN 学习过程中的重要步骤:

  1. 在离线部分,根据历史数据训练好 DQN 模型,作为智能体的初始化模型
  2. 在 t1 → t2 阶段,利用初始化模型进行一段时间的推送 (push) 服务,积累反馈 (feedback) 数据
  3. 在 t2 时间点,利用 t1 → t2 阶段积累的用户点击数据,进行模型微更新 (minor update) (竞争梯度下降算法, Dueling Bandit Gradient Descent Algorithm)
  4. 在 t4 时间点,利用 t1 → t4 阶段的用户点击数据及用户活跃度数据进行模型的主更新 (major update)。模型主更新操作可以理解为利用历史数据的重新训练,用训练好的模型替代现有模型
  5. 重复第 2~4 步

DRN的在线学习方法——竞争梯度下降算法的流程如图所示:
请添加图片描述

请添加图片描述

9. 基于规则和MLP的推荐

《DLTSR: A Deep Learning Framework for Recommendation of Long-tail Web Services》这篇论文提出了一种基于MLP的推荐模型。这项工作使用两个相同的MLP,分别为labeled examples和专家规则建模。通过最小化两个网络输出之间的差异,同时更新这两个网络的参数,它展示了在MLP框架中采用专家知识指导推荐学习过程的有效性,虽然专业知识的获取需要大量的人力参与,但它是非常精确的。

二、AutoEncoder based Recommender System

将自编码器应用于推荐系统有两种方法:

  1. 使用自编码器在bottleneck层学习低维特征表示;
  2. 直接在重建层中填充评级矩阵的空白

1. AutoRec

AutoRec模型是一个标准的自编码器,它的基本原理是利用协同过滤中的共现矩阵,完成物品向量或者用户向量的自编码。再利用自编码的结果得到用户对物品的预估评分,进而进行推荐排序。

请添加图片描述
AutoRec解决的问题是构建一个重建函数 h ( r ; θ ) h(r; θ) h(r;θ),是所有该重建函数生成的评分向量与原评分向量的平方残差和最小,如(1)式所示,此后还要经过评分预估和排序的过程才能得到最终的推荐列表。

假设有m个用户,n个物品,用户会对n个物品中的一个或几个进行评分,未评分的物品分值可用默认值或平均分值表示,则所有m个用户对物品的评分可以形成一个mxn维的评分矩阵,也就是协同过滤中的共现矩阵。

对一个物品i来说,所有m个用户对它的评分可形成一个m维的向量 r ( i ) = ( R 1 i , . . . , R m i ) T r^{(i)}=(R_{1i}, ..., R_{mi})^T r(i)=(R1i,...,Rmi)T,AutoRec要解决的问题是构建一个重建函数 h ( r ; θ ) h(r; θ) h(r;θ),使所有该重建函数生成的评分向量与原评分向量的平方残差和最小。

AutoRec模型的结构为:
请添加图片描述

当输入物品i的评分向量 r ( i ) r^{(i)} r(i)时,模型的输出向量 h ( r ( i ) ; θ ) h(r^{(i)}; \theta) h(r(i);θ)就是所有用户对物品i的评分预测,其中第u维就是用户u对物品i的预测 R ^ u i \hat{R}_{ui} R^ui:
请添加图片描述
通过遍历输入物品向量就可以得到用户u对所有物品的评分预测,进而依据评分预测进行排序得到推荐列表。

同协同过滤,AutoRec也分为基于物品的AutoRec(I-AutoRec)和基于用户的AutoRec(U-AutoRec),U-AutoRec是将用户的评分向量作为输入数据,在生成推荐列表的时候,U-AutoRec相比I-AutoRec优点是只需要输入一次目标用户的用户向量,而I-AutoRec需要遍历整个物品评分向量;缺点是用户向量的稀疏性可能会影响模型效果。

2. Collaborative Denoising Auto-Encoder (CDAE)

【推荐算法论文阅读】Collaborative Filtering with Stacked Denoising AutoEncoders and Sparse Inputs

亮点:

  1. 使用自编码器利用sparse rating matrix重建dense rating matrix;
  2. 使用降噪自编码器,通过引入高斯噪声/masking noise/椒盐噪声来提高鲁棒性;
  3. 巧妙地通过损失函数的设计来平衡去噪和重构的损失

损失函数设计如下:
请添加图片描述
它基于两个主要的超参数 α、β,平衡了网络是专注于去噪输入还是重建输入。

三、CNN based Recommender System

1. Attention based CNN

【推荐算法论文阅读】Hashtag Recommendation Using Attention-Based Convolutional Neural Network

【背景】
在微博上,用户用有限数量的字去记录生活或者表达感情。因此,微博被广泛用于舆情分析,预测等许多其他的应用。微博包含一种元数据标签形式(metadata tag, hashtag),hashtag是一串前缀为#的字符串。在微博内,Hashtags被当做关键字或者话题,有着广泛的应用,比如微博检索(microblog retrieval),查询展开(query expansion),情感分析(sentiment analysis)。

可是,只有很少的用户才会为微博打上hashtags,因此,自动推荐hashtags的任务变成了很重要的研究课题,最近几年受到了很大的关注。针对这一任务,研究人员使用了多个模型的特征进行建模,协同过滤(collaborative filtering),生成式模型(generativemodels),深度神经网络等。

大多数方法通常基于词汇级特征,如BoW等,有研究表明word trigger的有效性。这意味着一个给定句子的实质内容可以通过其中的一些重要词语来实现。

【亮点】
为了使用word trigger机制,本文提出了一种新的基于注意力的CNN结构,该结构结合了local attention channel 和 global attention channel。

在全局通道中,所有单词都将被编码;而在局部注意通道中,只编码几个触发单词,这取决于gate score。

【模型具体结构】
在这里插入图片描述

1.1 局部注意通道

首先在第i步,会对第i个词在文本上下文的重要程度进行计算,这里的window size设为5:
请添加图片描述
并且设置一个阈值,达到该阈值的词会被视为触发词(trigger words)。局部注意层使得提取微博中最重要的单词成为可能。接下来的计算就只会考虑到触发词。
请添加图片描述
请添加图片描述
接下来是一个折叠层,目的在于提取触发词的特征。z依旧是word embedding的维度。
请添加图片描述

1.2. 全局通道

在全局通道里,捕获的是文本全局的特征表示,z是对l个单词word embedding的卷积:
请添加图片描述
请添加图片描述
为了获得多个特征,我们在模型中使用具有不同窗口大小的多个过滤器。本文设置的是1、2、3,对于每种window size,feature map的数量设为100。

然后使用池化操作,可以为每个特征映射提取最重要的特征,并可以处理不同长度的微博。

1.3. 分类层

在局部注意通道和全局注意通道后,我们使用具有多个特征映射的卷积层来组合局部注意通道和全局注意通道的输出:
请添加图片描述
最后是分类器:
请添加图片描述
根据全连接层输出的分数,我们可以对每个微博的标签进行排名,并向用户推荐排名靠前的标签。

2. Personalized CNN Tag Recommendation

请添加图片描述
利用卷积和最大池化操作从图像中获取视觉特征,注入用户信息以生成个性化推荐。

3. Deep Cooperative Neural Network (DeepCoNN)

请添加图片描述
采用两个并行的卷积神经网络对用户行为和item属性进行建模。在最后一层,应用因子分解机捕获它们之间的交互作用,以进行评级预测。

四、RNN based Recommender System

1. Session-based recommendation with RNN

【推荐算法论文阅读】Session-based recommendations with recurrent neural networks

【背景】
基于会话的推荐方法,主要有基于物品的协同过滤和基于马尔可夫决策过程的方法。

基于物品的协同过滤,需要维护一张物品的相似度矩阵,当用户在一个session中点击了某一个物品时,基于相似度矩阵得到相似的物品推荐给用户。这种方法简单有效,并被广泛应用,但是这种方法只把用户上一次的点击考虑进去,而没有把前面多次的点击都考虑进去。

基于马尔可夫决策过程的推荐方法,也就是强化学习方法,其主要学习的是状态转移概率,即点击了物品A之后,下一次点击的物品是B的概率,并基于这个状态转移概率进行推荐。这样的缺陷主要是随着物品的增加,建模所有的可能的点击序列是十分困难的。

【亮点】

  1. 使用RNN建模基于会话的推荐系统,建模多次点击序列;
  2. 使用ranking loss来训练模型
  3. 为了提高训练的效率,采用mini-batch并行训练和负采样的策略

【模型具体结构】
在这里插入图片描述

请添加图片描述

【ranking loss】
本文使用ranking loss,ranking可以是逐点(pointwise)、成对(pairwise)或列表(listwise):

  • 逐点排名独立地估计item的得分或排名,损失的定义方式应确保相关item的排名较低。
  • 成对排名比较一个positive item和negative item的得分或成对排名,损失的定义方式应确保positive item的排名低于negative item的排名。
  • 列表排名使用所有item的得分或排名,并将其与perfect ordering进行比较。由于它包括排序,因此通常计算成本更高,因此不经常使用。

本文中,作者发现逐点排名不稳定,而成对排名的损失表现良好。

  1. 贝叶斯个性化排名(Beyesian Personalized Ranking,BPR)
    请添加图片描述
  2. 本文使用的ranking loss
    请添加图片描述
    r s , j r_{s,j} rs,j是负样本的点击概率, r s , i r_{s,i} rs,i是正样本的点击概率,若 r s , j r_{s,j} rs,j< r s , i r_{s,i} rs,i,则 L s L_s Ls会比较小。加入正则项是为了稳定性,由于正样本也会被用作负样本。

【mini-batch并行化训练】
为了更好的并行计算,论文采用了 mini-batch 的处理,即把不同的session拼接起来:
请添加图片描述
可以看到,Session1的长度为4,Session2的长度为2,Session3的长度为6,Session4的长度为2,Session5的长度为3。假设Batch-Size为3,那么我们首先用前三个Session进行训练,不过当训练到第三个物品时,Session2已经结束了,那么我们便将Session4来接替上,不过这里要注意将GRU中的状态重新初化。

【负采样】
物品数量如果过多的话,模型输出的维度过多,计算量会十分庞大,因此在实践中一般采取负采样的方法。

对user-item matrix中任意缺失event的自然解释是:用户不知道该项的存在,因此没有交互。但是,由于用户不喜欢该项目,因此用户知道该项目并选择不进行交互的可能性很低。

item越受欢迎,user越有可能知道它,因此丢失的event越有可能表示不喜欢。在本文中,作者没有为每个训练实例生成单独的负样本,而是使用mini-batch中其他训练实例中的item作为负样本。这种方法的好处是:我们可以通过跳过采样进一步减少计算时间。同时,这种方法也是基于受欢迎程度的抽样,因为一个item出现在mini-batch的其它训练实例中的可能性与其受欢迎程度成正比。

2. Contextual Sequence Modeling for Recommendation with RNN

【推荐算法论文阅读】Contextual Sequence Modeling for Recommendation with Recurrent Neural Networks

【背景】
当前的RNN建模方法仅通过考虑用户在过去与之交互的item序列来总结用户状态,而不考虑其他必要类型的上下文信息,例如相关的user-item交互类型,事件之间的时间间隔和每个交互的时间间隔。如:
请添加图片描述
在过去item ID的相同序列上,事件类型的差异导致最有可能的下一个item出现较大差异。最上面的未标记序列代表表示标准RNN可用的信息,导致下面两种可能结果之间的平均预测。在下面的标记序列中,我们观察到用户在上一次活动中购买了手机,因此最有可能访问的下一个项目是补充item,如耳机。在底部标记的序列中,用户将手机添加到购物车中,因此下一个最有可能的事件是用户购买手机。
请添加图片描述
在过去的项目ID的相同序列上,时间间隔的差异导致最有可能的下一个项目出现较大差异。这一次知道最后一个事件与之前的其他事件之间有很大的差距,导致可能性发生很大的变化。

为了解决这个问题,本文提出了一类新的上下文递归推荐神经网络(CRNNs),它可以考虑输入层和输出层的上下文信息,并通过将上下文嵌入与item嵌入相结合来修改RNN的行为,更明确地说,在动态模型中,通过将hidden单元参数化转换为上下文信息的函数。

【亮点】
本文研究了在序列模型中引入上下文的两种方法:

  1. 上下文相关的输入/输出模型,其中item表示通过一系列非线性变换与上下文相结合;
  2. 上下文相关的动态模型,其中上下文用于参数化隐藏状态转换的dynamics

【模型具体结构】
给定输入序列 X = { ( x t , c t ) , t = 1 , . . . , T } X=\{(x_t,c_t), t=1,...,T\} X={(xt,ct),t=1,...,T}
其中, x t ∈ R V x x_t∈R^{V_x} xtRVx,是t时刻的item id的one-hot编码
c t ∈ R V c c_t∈R^{V_c} ctRVc,是t时刻的上下文向量

为此定义了序列P(X)上的概率分布,联合概率P(X)可以使用链式规则分解为条件概率的乘积:
请添加图片描述
因此,我们的任务简化为在给定当前上下文以及item和上下文的历史的情况下建模下一个item的概率。

整个模型由输入模块、循环结构模块、输出模块组成,模型架构为:
请添加图片描述

2.1. 输入模块

输入模块是把稀疏的原始输入数据转化成密集的输入数据。
请添加图片描述

2.2. 循环结构模块

用当前输入和上一个输入更新隐藏状态向量,即:
请添加图片描述

2.3. 输出模块

基于更新的状态向量和下一个上下文向量返回item的概率分布:
请添加图片描述
最终基于输出向量 o t o_t ot的softmax给出item的概率分布:
请添加图片描述

优化目标为:
请添加图片描述

【上下文条件的应用】
A. 上下文相关的输入/输出表示请添加图片描述
concatenation假设补充信息对输入表示没有影响。而乘法交互为item表示提供了更紧密的上下文绑定,比如能捕获相似性。

B. 上下文相关的隐藏动态
大多数循环结构共享同样的计算block:
请添加图片描述
通过修改这个计算块来引入上下文相关的转换
请添加图片描述
对于GRU cell,计算块修改为:
请添加图片描述

3. Recurrent Recommender Networks (RRN)

【推荐算法论文阅读】Recurrent Recommender Networks

【背景】
推荐系统传统的解决方案对数据的时间效应和因果属性缺乏处理,典型情景如:

  1. 用户对电影的看法是随时间变化的,这种变化会使得一些垃圾电影变为流行电影
  2. 季节时令性:浪漫喜剧,圣诞电影,夏日大片等类型的movie的季节性尤其突出。
  3. 用户兴趣:这个变化因素就更多了,通常很难显式建模。

【亮点】

  1. 使用两个LSTM网络来建模动态的user state和item state
  2. 同时,考虑到用户长期兴趣和item静态特征等固定属性,还使用矩阵分解建模用户和item的静态潜在属性
  3. 由于每个评分 r i j r_{ij} rij都取决于user state RNN和item state RNN,但是通过2个序列的反向传播在计算上是禁止的。因此本文提出了一种交替子空间下降策略。

【模型具体结构】
请添加图片描述
以用户序列为例,给定M部电影, x t ∈ R M x_t ∈ R^M xtRM 表示用户在t时刻的rating vector,其中,如果用户在时间步t用分数k评价项目j,则 x t j = k x_{tj}=k xtj=k,否则 x t j = 0 x_{tj}=0 xtj=0。此外,使用 τ t τ_t τt τ t − 1 τ_{t−1} τt1表示在t及t-1时刻的状态,并使用 1 n e w b i e = 1 1_newbie=1 1newbie=1表示用户是新用户。
用户LSTM模型的输入为:
请添加图片描述
每一步LSTM为:
请添加图片描述请添加图片描述

即使用户和item状态可能是time-varying,但是仍然应该有一些固定的组件编码固定的属性,例如个人资料、用户的长期偏好或item属性类型等。为了实现这一点,我们分别用stationary向量 u i , m j u_i, m_j ui,mj来补充time-varying向量 u i t , m j t u_{it}, m_{jt} uit,mjt。则:
请添加图片描述
其中, u i , m j u_i, m_j ui,mj是矩阵分解得到的结果,而 u i t , m j t u_{it}, m_{jt} uit,mjt是LSTM建模得到的结果。

【交替子空间下降策略】
由于每个评分 r i j r_{ij} rij都取决于user state RNN和item state RNN,但是通过2个序列的反向传播在计算上是禁止的。因此本文提出了一种交替子空间下降策略。也就是说,仍然一次反向传播用户所有ratings的梯度以及更新用户序列参数,但是假设item状态是固定的,因此不需要将梯度传播到这些item序列中。然后在更新用户序列和item序列之间进行交替。

五、Deep Semantic Similarity based Recommender System

Deep Semantic Similarity Model(DSSM) 将不同的实体投影到一个公共低维空间,并使用余弦函数计算他们的相似性:
请添加图片描述

参考资料

  1. 浪潮之巅-深度学习在推荐系统中的应用(深度学习推荐系统学习笔记)
  2. 深度学习推荐系统 王喆编著 中国工信出版集团
  3. Deep Learning based Recommender System: A Survey and New Perspectives
  4. 推荐系统 (三): 浪潮之巅 – 深度学习在推荐系统中的应用
  5. 基于CNN和attention的标签推荐(IJCAI 2016)
  6. 论文笔记:Hashtag Recommendation for Multimodal Microblog Using Co-Attention Network
  7. 推荐系统遇上深度学习(四十)-SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS
  8. 论文阅读——《Contextual Sequence Modeling for Recommendation with Recurrent Neural Networks》
  9. 论文阅读笔记:Recurrent recommender networks
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐