首先我们先介绍一下传统的推荐模型
下面是传统推荐模型的表格图与结构图
首先就是基础的协同过滤算法,协同过滤算法体现出了物以类聚,人以群分的思想。
基本的协同过滤推荐算法基于以下假设:
“跟你喜好相似的人喜欢的东西你也很有可能喜欢” :基于用户的协同过滤推荐(User-based CF)
“跟你喜欢的东西相似的东西你也很有可能喜欢 ”:基于物品的协同过滤推荐(Item-based CF)
实现协同过滤推荐有以下几个步骤:
找出最相似的人或物品:TOP-N相似的人或物品
通过计算两两的相似度来进行排序,即可找出TOP-N相似的人或物品
根据相似的人或物品产生推荐结果
利用TOP-N结果生成初始推荐结果,然后过滤掉用户已经有过记录的物品或明确表示不感兴趣的物品
这就是基础的协同过滤思想
相似度的计算方法
数据分类
实数值(物品评分情况)
布尔值(用户的行为 是否点击 是否收藏)
欧氏距离, 是一个欧式空间下度量距离的方法. 两个物体, 都在同一个空间下表示为两个点, 假如叫做p,q, 分别都是n个坐标, 那么欧式距离就是衡量这两个点之间的距离. 欧氏距离不适用于布尔向量之间
欧氏距离的值是一个非负数, 最大值正无穷, 通常计算相似度的结果希望是[-1,1]或[0,1]之间,一般可以使用
如下转化公式:
杰卡德相似度&余弦相似度&皮尔逊相关系数
余弦相似度
度量的是两个向量之间的夹角, 用夹角的余弦值来度量相似的情况
两个向量的夹角为0是,余弦值为1, 当夹角为90度是余弦值为0,为180度是余弦值为-1
余弦相似度在度量文本相似度, 用户相似度 物品相似度的时候较为常用
余弦相似度的特点, 与向量长度无关,余弦相似度计算要对向量长度归一化, 两个向量只要方向一致,无论程度强弱, 都可以视为'相似'
皮尔逊相关系数Pearson
实际上也是一种余弦相似度, 不过先对向量做了中心化, 向量a b 各自减去向量的均值后, 再计算余弦相似度
皮尔逊相似度计算结果在-1,1之间 -1表示负相关, 1表示正相关
度量两个变量是不是同增同减
皮尔逊相关系数度量的是两个变量的变化趋势是否一致, 不适合计算布尔值向量之间的相关度
杰卡德相似度 Jaccard
两个集合的交集元素个数在并集中所占的比例, 非常适用于布尔向量表示
分子是两个布尔向量做点积计算, 得到的就是交集元素的个数
分母是两个布尔向量做或运算, 再求元素和
余弦相似度适合用户评分数据(实数值), 杰卡德相似度适用于隐式反馈数据(0,1布尔值)(是否收藏,是否点击,是否加购物车)
但是在实际应用中,协同过滤算法经常会面对一些问题,例如用户评分矩阵稀疏,系统无法获取到足够多的用户数据,从而无法计算到足够多的相似度 。
因此我们引出了MF矩阵分解模型
MF矩阵分解模型包括SVD(奇异值分解),FunkSVD,FM(Factorization Machine)
这里我们简单介绍一下LFM(latent factor model)隐语义模型如下图:
P矩阵是User-LF矩阵,即用户和隐含特征矩阵。LF有三个,表示共总有三个隐含特征。
Q矩阵是LF-Item矩阵,即隐含特征和物品的矩阵
R矩阵是User-Item矩阵,有P*Q得来
能处理稀疏评分矩阵
利用矩阵分解技术,将原始User-Item的评分矩阵(稠密/稀疏)分解为P和Q矩阵,然后利用P*Q还原出User-Item评分矩阵R。整个过程相当于降维处理,其中:
矩阵值P_{11}表示用户1对隐含特征1的权重值
矩阵值Q_{11}表示隐含特征1在物品1上的权重值
矩阵值R{11}就表示预测的用户1对物品1的评分,且R{11}={P{1,k}}{Q{k,1}}
这样就能实现对稀疏矩阵中缺失值的填补。
之后我们来介绍一下LR模型:
LR模型就是一种逻辑回归模型,我们将商品推荐给用户的问题看成是一个回归问题,我们通过逻辑回归函数来对用户特征进行处理,随后便可以得到其对用户ctr(点击率)的预测。
其中x为输入的用户和商品特征。
这种方法通过运用逻辑回归的运用,使得我们在处理推荐问题时非常的方便,只需要将用户的信息传入逻辑回归中就行。
但是这种方法无法进行特征交叉和特征筛选,无法有效利用已有的特征。
总上,单纯的LR模型性能可能不算太好,需要进行特征工程。但是特征工程费时费力,所以LR模型算是一个基本模型。可以加入很多优化。
上面我们提到了特征交叉,什么是特征交叉呢
特征交叉是算法工程师把领域知识融入模型的一种方式。比如说女性特征+双十一的时间特征组合(女性,双11)这一特征,可能就是一个极好的预测购买的特征。通过这种交叉过的特征可以更好的表达出用户的购买偏好。
FM模型:
这种方法虽然初步解决了特征两两组合的问题,但对于样本中未出现的交叉特征,无法对其参数进行估计,模型泛化能力差。这在大规模稀疏场景下是无法接受的,还需要进一步优化模型。
这里需要注意 公式中的W矩阵可以将n*n维压缩成k*n维的矩阵内做运算,大大降低了维度
FM模型也采用了相同的思路解决二阶特性稀疏的问题,对于每个一维特征x赋予一个相对应的隐向量v,交叉特征的权重则由相对应的两个隐向量v的内积表示。本质上都是对特征进行embedding化表征,将0/1这种二值硬匹配转换为向量软匹配,使得样本中未出现的值也能通过向量计算出来,具备良好的泛化性。
这种方法类似于MF矩阵分解方法中所用的方式相似。
接下来我们来说一下FFM模型:
FFM在FM的基础上进一步改进,在模型中引入特征域的概念,即field。将同一个field的特征单独进行one-hot,因此在FFM中,每一维特征都会针对其他特征的每个field,分别学习一个隐变量,该隐变量不仅与特征相关,也与field相关。
假设样本的n个特征属于f个field,那么FFM的二次项有nf个隐向量。而在FM模型中,每一维特征的隐向量只有一个。FM可以看做FFM的特例,把所有特征都归属到一个field的FFM模型。其模型方程为:
如果隐向量的长度为k,那么FFM的二次参数有nfk个,远多于FM模型的nk个。
FFM模型更好的反应的特征和特征之间的关系
GBDT+LR模型:
这个模型是特征功能的开端
上面我们说到的FM和FFM的特征交叉特点,但是这两个模型的特征交叉都是两两交叉。从而会造成许多相关联不大的特征被关联了起来。
GBDT算法的特点正好可以用来发掘有区分度的特征、特征组合,减少特征工程中人力成本。
之后将经过GDBT算法处理过的特征放入LR中进行训练,这种方法处理后的CTR预测效果非常的好
LS-PLM/MLR算法:
这也是阿里巴巴曾经的主流推荐模型
(1)LR不能捕捉非线性
(2)GBDT+LR虽然能够产生非线性特征组合,但是树模型不适用于超高维稀疏数据
(3)FM利用二阶信息来产生变量之间的相关性,但是无法适应多阶模式
LS-PLM采用了分治的思想,先分成几个局部再用线性模型拟合,这两部都采用监督学习的方式,来优化总体的预测误差,总的来说有以下优势:
MLR就像它的名字一样,由很多个LR模型组合而成。用分片线性模式来拟合高维空间的非线性模式,形式化表述如下:
给定样本x,模型的预测p(y|x)分为两部分:首先根据 分割特征空间为m部分,其中m为给定的超参数,然后对于各部分计算 作为各部分的预测。函数g(⋅)确保了我们的模型满足概率函数的定义。当我们将softmax函数作为分割函数σ(x),将sigmoid函数作为拟合函数η(x)的时候,该模型为:
可以看出这个公式前面是一个softmax分类器,后面是一个逻辑回归
同时MLR还引入了结构化先验、分组稀疏、线性偏置、模型级联、增量训练、Common Feature Trick来提升模型性能。
论文中一个直观的例子,如下图,LR不能拟合非线性数据,MLR可以拟合非线性数据,因为划分-训练模式。