推荐系统的进化之路

  推荐系统的发展:协同过滤(Collaboration Filtering, CF)、逻辑回归(LR)、因子分解机(Factorization Machine)、梯度提升树(GBDT)。

协同过滤

  定义:协同大家的反馈、评价和意见一起对海量的信息进行过滤,从中筛选出目标用户可能感兴趣的信息的推荐过程

  用户相似度计算:这是算法中的关键一步。可以使用(1)余弦相似度(2)皮尔逊相关系数等来计算两个向量之间的相似度。

  ItemCF:基于物品相似度进行推荐的协同过滤算法。具体步骤:(1)基于历史数据,构建以用户为行坐标、物品位列坐标的共现矩阵。(2)计算共现矩阵的相似性。(3)获得用户历史行为数据中心正反馈物品列表。(4)找出top k个物品,组成集合。(5)生成最终的推荐系统。

  协同过滤的泛化性能不强。推荐系统的头部效应明显,处理稀疏向量的能力差。矩阵分解技术被提出。

矩阵分解算法——协同过滤的进化

  在“矩阵分解”的算法框架下,用户和物品隐向量是通过分解协同过滤生成的共现矩阵得到的。将 m × n m\times n m×n维的矩阵分解为 m × k m\times k m×k k × n k\times n k×n维的矩阵,分别表示用户和商品。方法有:特征值分解奇异值分解(SVD)梯度下降

  矩阵分解的优点:(1)泛化能力强。解决数据稀疏问题。(2)空间复杂度降低。(3)更好的扩展性和灵活性

逻辑回归——融合多种特征的推荐模型

  逻辑回归将推荐问题看成一个分类问题,通过预测正样本的概率对物品进行排序。逻辑回归模型将推荐问题转换成了一个点击率(CTR)问题

  过程:

  • 用户属性和物品属性等特征转换成数值型特征向量。
  • 确定逻辑回归模型的优化目标(点击率),利用已有样本对逻辑回归模型进行训练,确定内部参数。
  • 利用模型得到用户点击概率。
  • 利用点击率对物品进行排序,得到推荐列表。

  数学形式:

  特征向量作为输入: x = ( x 1 , x 2 , . . . , x n ) T x=(x_1, x_2, ... , x_n)^T x=(x1,x2,...,xn)T输入。对每一个特征向量赋予权重 w = ( w 1 , w 2 , . . , w n ) T w=(w_1,w_2,..,w_n)^T w=(w1,w2,..,wn)T,将各个特征进行加权求和 x T w x^Tw xTw

  sigmoid函数形式:
f ( x ) = 1 1 + e − ( w ⋅ x + b ) . f(x)=\frac{1}{1+e^{-(\mathbf{w}\cdot \mathbf{x}+b)}}. f(x)=1+e(wx+b)1.

sigmoid函数值在0-1之间。

  逻辑回归的优势:数学概念的支撑、可解释强、工程化需求。

  逻辑回归的局限性:表达能力不强,无法进行特征交叉,特征筛选等一系列高级的操作。

POLY2模型——特征交叉的开始

  数学形式:

POLY2 ( w , x ) = ∑ j i = 1 n − 1 ∑ j 2 = j 1 + 1 n w h ( j 1 , j 2 ) x j 1 x j 2 \text{POLY2}(w,x)=\sum_{j_i=1}^{n-1}\sum_{j_2=j_1+1}^nw_{h(j_1,j_2)}x_{j_1}x_{j_2} POLY2(w,x)=ji=1n1j2=j1+1nwh(j1,j2)xj1xj2

  对所有特征进行两两交叉,对所有特征组合赋予权重。本质上是特征的暴力组合,在一定程度上解决了特征组合的问题。

  缺陷:(1)采用one-hot编码的方法处理类别型数据,使得特征向量极度稀疏,无法收敛。
(2)增加训练复杂度。

  one-hot编码试将类别特征转换成向量的一种编码方式。
  例如:
  [Weekday=Tuesday, Gender=Male, City=London] 转化为:[0,1,0,0,0,0,0],[0,1],[0,0,1,0,...,0,0]

  one-hot编码会造成大量的特征向量的稀疏,一亿维特征向量只有一个非0,所以会导致模型特征向量的稀疏。

FM模型——隐向量特征交叉

FM ( w , x ) = ∑ j 1 = 1 n ∑ j 2 = j 1 + 1 n ( w j 1 ⋅ w j 2 ) x j 1 x j 2 \text{FM}(w,x)=\sum_{j_1=1}^n\sum_{j_2=j_1+1}^n(w_{j_1}\cdot{w_{j_2}})x_{j_1}x_{j_2} FM(w,x)=j1=1nj2=j1+1n(wj1wj2)xj1xj2

  上式使用两个向量的内积取代单一权重系数。FM为每个特征向量学习了一个隐权重向量。在特征交叉,使用两个特征隐向量的内积作为交叉特性的权重。降低时间复杂度,能很好的解决数据稀疏性的问题,泛化能力提高。

FFM——引入特征域的概念

  引入了特征域的概念,使得模型的表达能力更强。每个特征对应的不是唯一一个隐向量,而是一组隐向量。

GBDT+LR——特征工程模块化的开端

  先使用GBDT构建特征工程,自动进行特征筛选和组合,进而生成新的离散特征向量。再把这些特征向量当做是LR模型的输入。这两步是独立训练的。

GBDT模型

  GBDT基本结构是决策树组成的树林,学习方式是梯度提升,是集成模型,预测方式是把所有子树的结果加起来。

D ( x ) = d t r e e 1 ( x ) + d t r e e 2 ( x ) + . . . . + d t r e e n ( x ) D(x)=d_{tree1}(x) + d_{tree2}(x) +....+d_{treen}(x) D(x)=dtree1(x)+dtree2(x)+....+dtreen(x)

  GBDT通过逐一生成决策子树的方式生成整个森林,生成新子树的过程是利用样本标签$$值与当前树林预测值之间的残差,构建洗的子树。

  假设构建第4个子树时:

D ( x ) + d t r e e 4 ( x ) = f ( x ) D(x)+d_{tree4}(x)=f(x) D(x)+dtree4(x)=f(x)

  新的子树的生成的过程是以拟合函数和已有树林预测结果的残差 R ( x ) R(x) R(x)为目标的:

R ( x ) = f ( x ) − D ( x ) R(x)=f(x)-D(x) R(x)=f(x)D(x)

GBDT进行特征转换的过程

  一个训练样本在输入GBDT的某一个子树后,会根据每个结点的规则最终落到某一个叶子结点。把该叶子结点置1,其余置0。所有的叶子结点组成的向量即为该棵树的特征向量,把GBDT的所有子树的特征向量连接起来,就形成了后序LR模型输入的离散型特征向量。

  决策树的深度决定了特征交叉的阶数。但GBDT容易产生过拟合。GBDT的特征转换实际上丢失了大量特征的数值信息。

总结

协同过滤

  根据用户行为历史生成用户-物品共现矩阵,利用用户相似性和物品相似性进行推荐。

  特点:泛化性能差,处理系数矩阵能力差,推荐结果的头部效应明显。

矩阵分解

  将协同过滤算法中的共现矩阵分解为用户矩阵和物品矩阵,利用用户隐向量和物品隐向量的内积进行排序推荐。

  特点:泛化性能稍有增强,对稀疏矩阵的处理能力稍有增强。只能利用用户的历史数据,难以利用其他特征。

逻辑回归

  将推荐问题转化为CTR(用户点击率)预估计的二分类问题,将用户、物品
上下文等不同的特征转化为特征向量,输入到逻辑归回模型后得到CTR,最后按照CTR对商品进行排序。

  特点:模型不具备特征交叉能力,表达能力较差。

FM(因子分解机)

  在模型中加入二阶特征交叉部分,为每一维特征训练得到相应特征隐向量,通过隐向量之间的内积运算得到交叉特征权重。

  特点:具备二阶特征交叉能力,模型的表达能力增强。训练开销较大。

GBDT+LR

  利用GBDT进行自动特征组合。将原始特征向量转化成离散特征向量,输入到逻辑回归模型,进行最终的CTR估计。

  特点:模型具备了更高阶特征组合的能力。无法进行并行训练,更新所需时间较长。

你可能感兴趣的:(推荐系统)