《深度学习推荐系统》(第2章)阅读笔记

《深度学习推荐系统》,作者王喆,2020年3月第1版,第2章《推荐系统的进化之路》。

概述

传统推荐模型可以分为:

协同过滤类:物品协同过滤ItemCF、用户协同过滤UserCF、矩阵分解MF;

Logistic回归类:LR、大规模分片线性模型LS-PLM;

因子分解机FM类:POLY2、FM、域感知因子分解机FFM;

组合模型类:GBDT+LR。

一、协同过滤

协同用户们的评价一起对海量物品进行过滤,从中筛选出目标用户可能感兴趣的物品的推荐过程就叫协同过滤。

1、朴素协同过滤

现有共现矩阵(用户-物品矩阵),协同过滤有UserCF和ItemCF两种。

UserCF

由用户向量计算用户之间的相似度,朴素协同过滤的用户向量是用户-物品矩阵中该用户这一行的数据构成的向量;

对要推荐的用户得到与其最相近的topk个用户,然后利用用户相似度和相似用户对物品评价的加权平均来预测该用户对物品的评分。

ItemCF

由物品向量计算物品之间的相似度,朴素协同过滤的物品向量可以是用户-物品矩阵中该物品这一列的数据构成的向量;

找出与该物品相似的topk个正反馈物品,组成相似物品集合,然后利用物品相似度和用户对相似物品评价的加权平均来预测用户对该物品的评分。

UserCF和ItemCF的应用场景

UserCF的缺点:因为需要维护用户相似度矩阵,而用户的增长会导致存储开销过大;用户历史数据向量非常稀疏,找到的相似用户准确度低,不适用于正反馈较难获取的场景。

UserCF具备较强的社交特性,可以通过相似兴趣的人将以前不在自己兴趣范围内的热点更新到推荐列表中,适用于新闻推荐场景,擅长发现和跟踪热点。

ItemCF适用于兴趣变化较为稳定的应用,例如电商、影视推荐。

朴素协同过滤的优缺点

优点:直观、可解释性强;

缺点:泛化能力弱,推荐结果的头部效应明显(处理稀疏向量的能力弱)(通过矩阵分解解决);无法引入用户特征、物品特征、上下文特征(通过Logistic回归解决)。

2、矩阵分解协同过滤

引入隐向量表示用户和物品向量,即将共现矩阵$R_{m \times n}$分解为用户矩阵$U_{m \times k}$和物品矩阵$V_{k \times n}$相乘的形式,其中,$m$是用户数量,$n$是物品数量,$k$是隐向量维度。

$k$越小,隐向量表达能力越弱,模型泛化程度越高;反之反是;$k$的取值是推荐效果和工程开销的平衡点。

用户$u$对物品$i$的评分为对应用户隐向量和物品隐向量的内积。

梯度下降矩阵分解

特征值分解只适用于方阵,SVD分解适用于稠密矩阵且计算复杂度高,所以一般采用梯度下降法进行矩阵分解:

\[Loss = \Sigma_{(u, i) \in K} (r_{ui} - q_i^Tp_u) ^ 2\]

其中,$K$为所有用户评分样本集合,$r_{ui}$为用户$u$对物品$i$评分,$q_i$为物品$i$隐向量,$p_u$为用户$u$隐向量。

为了减少过拟合,可以加入正则化项:

\[Loss = \Sigma_{(u, i) \in K} [(r_{ui} - q_i^Tp_u) ^ 2 + \lambda (\left \| q_i \right \| ^ 2 + \left \| p_u \right \| ^ 2)]\]

然后对损失函数求偏导,按照学习率更新隐向量$q_i$和$p_u$,直到迭代次数达到上限或者损失低于阈值。

消除打分偏差

引入全局偏差常数$\mu$、物品偏差参数$b_i$(可用物品收到的所有评分均值)、用户偏差参数$b_u$(可用用户给出的所有评分均值):

\[Loss = \Sigma_{(u, i) \in K} [(r_{ui} - \mu - b_u - b_i - q_i^Tp_u) ^ 2 + \lambda (\left \| q_i \right \| ^ 2 + \left \| p_u \right \| ^ 2 + b_u^2 + b_i^2)]\]

然后求偏导,更新隐向量$q_i$、$p_u$和参数$b_u$、$b_i$。

矩阵分解协同过滤优缺点

优点:泛化能力强,一定程度解决数据稀疏问题;隐向量维数低,空间复杂度低;扩展性更好,矩阵分解结果可以和其他特征组合拼接,与DNN无缝衔接。

缺点:无法引入用户特征、物品特征、上下文特征。

二、Logistic回归

Logistic回归可以利用用户特征、物品特征、上下文特征,将推荐问题看作分类问题(点击率CTR预估问题),通过预测正样本的概率对物品排序。

推荐流程

将用户特征、物品特征、上下文特征转换为数值型特征向量;确定label和训练样本,模型训练;模型服务,输入特征向量得到用户点击概率;利用点击概率对物品排序,得到推荐列表。

数学形式&训练方法

输入为$(x_1, x_2, …, x_n)^T$,$logits = w_1 * x_1 + w_2 * x_2 + … + w_n * x_n + w_{n+1}$,然后再过一个$sigmoid$函数将$logits$转换为其为正样本的概率,然后作极大似然估计得到损失函数。

训练时使用梯度下降法更新参数。

Logistic回归优缺点

优点:伯努利实验假设,建模点击率,可解释性强;模型简单,易于并行,训练开销小。

缺点:表达能力不强,无法进行特征交叉、特征筛选。

LS-PLM

大规模分片线性模型

三、因子分解机FM

POLY2

在Logistic回归基础上,将所有特征二阶交叉(在输入特征向量中,加入两个特征是否同时出现的组合特征)。

缺点:特征向量变得更加稀疏;参数数量变多(由$n$变为$n^2$)。

FM

为每个特征引入隐向量,交叉特征的权重参数为两个特征的隐向量的内积。即为每个特征不仅初始化一个自身权重(用于一阶特征),而且初始化一个$k$维参数向量,在特征交叉时使用两隐向量的内积作为权重,模型学习时更新自身权重和隐向量。

相比POLY2,特征数量由$n^2$下降为$n\cdot k$;可以解决数据稀疏问题,虽然丢失了某些具体特征组合的精确记忆能力,但是泛化能力提升,某个特征出现在别的特征组合也可以更新其隐向量,进而达到更新交叉特征的权重的效果(POLY2只有在两个特征同时出现时才能更新交叉特征的权重)。

FFM

引入特征域,使得模型表达能力更强。将$n$个特征划分为$f$个特征域(若干相同性质的特征组成一个域),为每个特征引入$f$个隐向量,对应$f$个域,要与某个域中特征交叉时,则用相应隐向量去作内积成为权重。

相比FM特征数量上升为$n\cdot f\cdot k$。

FM类算法缺点

只能做到二阶特征交叉,三阶特征交叉特征组合数量会爆炸。

四、组合模型GBDT+LR

模型结构

先利用GBDT构建特征工程;再利用LR预估CTR;两步独立训练(LR的梯度不需要回传到GBDT)。

利用GBDT构建特征工程

将训练样本输入GBDT的一个决策子树后,会落入一个叶子结点中,将该叶子结点置为1,其他叶子结点置为0得到一个向量;将GBDT所有子树的向量concat起来形成最终的特征向量;GBDT决策子树的深度就是特征交叉的阶数。

GBDT特征工程优缺点

优点:特征组合能力强;实现端到端训练,不需要人工特征工程。

缺点:容易过拟合;会丢失特征的数值信息。