推荐系统提纲笔记
Posted 小爷毛毛(卓寿杰)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了推荐系统提纲笔记相关的知识,希望对你有一定的参考价值。
重磅推荐专栏: 《Transformers自然语言处理系列教程》
手把手带你深入实践Transformers,轻松构建属于自己的NLP智能应用!
相关图文Xmind、PDF、视频讲解、代码,请参阅语雀地址:https://www.yuque.com/chudi/tzqav9/ny150b
推荐算法
推荐系统的传统匹配模型
基于 Collaborative Filtering 的方法
-
分类
- User-base CF:通过对用户喜欢的 item 进行分析,如果用户 a 和用户 b 喜欢过的 item 差不多,那么用户 a 和 b 是相似的。类似朋友推荐一样,可以将 b 喜欢过但是 a 没有看过的 item 推荐给 a。
- Item-base CF: item A 和 item B 如果被差不多的人喜欢,认为 item A 和 item B 是相似的。用户如果喜欢 item A,那么给用户推荐 item B 大概率也是喜欢的。
- Model-base CF: 也叫基于学习的方法,通过定义一个参数模型来描述用户和物品、用户和用户、物品和物品之间的关系,然后通过已有的用户-物品评分矩阵来优化求解得到参数。例如矩阵分解、隐语义模型 LFM 等。
-
问题本质:矩阵的未知部分如何填充问题 。已知的值是用户已经交互过的 item,如何基于这些已知值填充矩阵剩下的未知值,也就是去预测用户没有交互过的 item 是矩阵填充要解决的问题。
-
SVD ( Singular Value Decomposition )
-
步骤
- 对 M 矩阵的 missing data 填充为0
- 求解 SVD 问题,得到 U 矩阵和 V 矩阵
- 利用 U 和 V 矩阵的低秩 k 维矩阵来估计
-
缺点
- Missing data 和 observe data 权重一样
- 最小化过程没有正则化 ( 只有最小方差 ),容易产生过拟合。
-
-
MF 模型 ( 矩阵分解 )
-
步骤
- 将用户 u 对物品 i 的打分分解成用户的隐向量 vu,以及物品的隐向量 vi;
- 用户 u 和物品 i 的向量点积 ( inner product ) 得到的 value,可以用来代表用户 u 对物品i的喜好程度,分数越高代表该 item 推荐给用户的概率就越大。同时,MF 模型引入了 L2 正则来解决过拟合问题。
-
-
FISM(Factored Item Similarity Model)
- 用户表达不再是独立的隐向量,而是用用户喜欢过的所有 item 的累加求和得到作为 user 的表达;而 item 本身的隐向量 vi 是另一套表示,两者最终同样用向量内积表示。
-
SVD++
- MF 模型可以看成是 user-based 的 CF 模型,直接将用户id映射成隐向量,而 FISM 模型可以看成是 item-based 的 CF 模型,将用户交户过的 item 的集合映射成隐向量。SVD++ 方法正是这两者的结合:每个用户表达分成两个部分,左边 vu 表示用户 id 映射的隐向量 ( user-based CF 思想 ),右边是用户交互过的 item 集合的求和 ( item-based CF 思想 )。User 和 item 的相似度还是用向量点击来表达。
-
-
缺点
- 只是利用了 user 和 item 的交互信息 ( rating data ),而对于大量的 side information 信息没有利用到。例如 user 本身的信息,如年龄,性别、职业;item 本身的 side information,如分类,描述,图文信息;以及 context 上下文信息,如位置,时间,天气等。
Generic feature-based 的方法
-
问题本质:如何利用side information 信息,去构造 feature-based 的model
-
LR
-
公式:
-
缺点
- 未考虑特征进行交叉组合,高质量交叉特征获取成本高
- one-hot编码,具有高度稀疏性,带来维度灾难问题
-
优点
- 简单易上线
- 可解释性强
-
实现
-
-
GBDT
-
boosting tree
- 按照boosting的思想,在算法的每一步,用一棵决策树去拟合当前学习器的残差,获得一个新的弱学习器。将这每一步的决策树组合起来,就得到了一个强学习器。
-
GBDT在本质上还是梯度下降法,每一步通过学习一棵拟合负梯度(也就是所谓“残差”)的树,来使损失函数逐渐减小
-
用于分类
- 二分类:对数几率表达+交叉熵
- 多分类:softmax
-
优点
- 预测阶段的计算速度快,树与树之间可并行化计算。
- 在分布稠密的数据集上,泛化能力和表达能力都很好。
- 采用决策树作为弱分类器使得GBDT模型具有较好的解释性和鲁棒性,能够自动发现特征间的高阶关系,并且也不需要对数据进行特殊的预处理如归一化等。
-
缺点
- GBDT在高维稀疏的数据集上,表现不如支持向量机或者神经网络。
- 训练过程需要串行训练,只能在决策树内部采用一些局部并行的手段提高训练速度
-
AdaBoost V.S. GBDT
- 最主要的区别在于两者如何识别模型的问题。AdaBoost用错分数据点来识别问题,通过调整错分数据点的权重来改进模型。Gradient Boosting通过负梯度来识别问题,通过计算负梯度来改进模型。
-
GBDT V.S. LR
- 从决策边界来说,线性回归的决策边界是一条直线,逻辑回归的决策边界根据是否使用核函数可以是一条直线或者曲线,而GBDT的决策边界可能是很多条线。
- GBDT适合处理连续值特征,而LR,FM,FFM更加适合处理离散化特征。GBDT可以做到一定程度的特征组合,而且GBDT的特征组合是多次组合的,不仅仅是FM与FFM这样的二阶组合而已。同时,GBDT具备一定的特征选择能力(选择最优的特征进行分裂)
- GBDT+LR:先使用GBDT对一些稠密的特征进行特征选择,得到的叶子节点,再拼接离散化特征放进去LR进行训练。在方案可以看成,利用GBDT替代人工实现连续值特征的离散化,而且同时在一定程度组合了特征,可以改善人工离散化中可能出现的边界问题,也减少了人工的工作量。
-
GBDT 与 XGBoost 区别
-
传统GBDT以CART作为基分类器,xgboost还支持线性分类器,这个时候xgboost相当于带L1和L2正则化项的逻辑斯蒂回归(分类问题)或者线性回归(回归问题)。
-
xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。正则项使学习出来的模型更加简单,防止过拟合。
-
传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
-
列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样,不仅能降低过拟合,还能减少计算。
-
xgboost工具支持并行。boosting不是一种串行的结构吗?怎么并行的?注意xgboost的并行不是tree粒度的并行,xgboost也是一次迭代完才能进行下一次迭代的(第t次迭代的代价函数里包含了前面t-1次迭代的预测值)。xgboost的并行是在特征粒度上的。我们知道,决策树的学习最耗时的一个步骤就是对特征的值进行排序(因为要确定最佳分割点),xgboost在训练之前,预先对数据进行了排序,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。这个block结构也使得并行成为了可能,在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行。
-
-
-
FM
-
公式:
-
求解
-
梯度:
- 参数量(k为v向量长度):
- 复杂度:
-
-
实现
-
优点
- FM可以在非常稀疏数据下进行参数估计,而其他模型如SVM却会出现问题
- FM具有线性复杂性,可以在原始条件下进行优化,并且不依赖支持向量(如SVM)
- FM是可以利用任何实值特征向量的一般预测器
-
缺点
- 耗资源
- 可能引入无用特征
- 未对特征进行分组
-
和其他模型的关系
-
假如只使用 userid 和 itemid,我们可以发现其实 FM 退化成加了 bias 的 MF 模型
-
如果输入包含两个变量,① 用户交互过的 item 集合;② itemid 本身,那么,此时的 FM 又将退化成带 bias 的 FISM 模型
-
如果再加上 userid 的隐向量表达,那么 FM 模型将退化成 SVD++ 模型
-
-
-
FFM
-
相较于FM模型,FFM模型引入了域(Field)的概念,可看做是对特征进行分组。例如,对于性别特征而言,通常有两种取值,对值进行one-hot编码之后性别特征会拆分为两个独立的特征。显然,这两个特征具有共同的性质:都属于性别。所以可以将这两个特征归在同一个Field下,即有相同的Field编号。不同域的特征之间,往往具有明显的差异性。对比FM中的做法,每个特征有且仅有一个隐向量,在对特征 xi与其他特征进行交叉时,始终使用同一个隐向量 Vi
-
公式
- 其中 f为域(Field)映射函数,fi表示为xi特征对应的Field编号。将公式对比FM可以发现,二者之间的差异仅在于二阶交叉对应的隐向量。设数据集中Field的数目为 F,那么对于每个特征 xi拥有 F个对应的隐向量,分别应用于与不同域特征进行交叉
-
实现
-
优点
- 在高维稀疏性数据集中表现很好
- 相对FM模型精度更高,特征刻画更精细
-
缺点
- 时间开销大。FFM时间复杂度为 O(kn^2) (F维度=n,每个特征的Field都不相同) ,FM时间复杂度为 O(kn) 。
- 参数多容易过拟合,必须设置正则化方法,以及早停的训练策略。
- FFM比较难应用于纯数值类型的数据集
-
超参数对于模型的影响
- 隐向量维度k对于模型的影响不大
- 正则化系数 λ 如果太大,容易导致模型欠拟合,反之,容易过拟合。
- 全局学习率 η 也是超参数。如果 η 在一个较小的水平,则可以表现最佳。过大,容易导致过拟合。过小,容易欠拟合。
-
-
基于 translation 框架的方法:认为 user 和 item 在新的空间中映射的 vector 可以有 gap,这个 gap 用 relation vector 来表达,也就是让用户的向量加上 relation vector 的向量,尽可能和 item vector 接近
-
transRec 模型
- ri 和 rj 表示的是用户上一个交互的 item i 和下一个交互的 item j,tu 为用户本身的向量表达
- 在实际的推荐系统中,往往存在数据稀疏和用户冷启动问题,因此,作者将用户向量 tu 分解成了两个向量:这里 t 可以认为是全局向量,表示的是所有用户的平均行为,tu 表示用户 u 本身的 bias,例如对于冷启动用户,tu 可以设置为0,用全局用户的表达 t 作为冷启动。
基于 representation learning 的深度匹配模型
基于 Collaborative Filtering 的方法:分别学习用户的 representation 以及 item 的 representation,也就是 user 和 item 各自的 embedding 向量 ( 或者也叫做隐向量 ),然后通过定义 matching score 的函数,一般是简单的向量点击、或者 cosine 距离来得到两者的匹配分数。整个 representation learning 的框架
-
CF 模型 ( collaborative filtering )
-
步骤
- input layer:只有两个,分别是 userid ( one-hot ),itemid ( one-hot )
- representation function:线性 embedding layer
- matching function:向量内积 ( inner product )
-
-
Deep Matrix Factorization
-
步骤
- input layer:由两部分组组成,其中 user 由 user 交互过的 item 集合来表示,是个 multi-hot 的打分表示,如 [0 0 4 0 0 … 1 5 …],在矩阵中用行表示;item 也由交互过的 user 集合来表示,也是个 multi-hot 的表示,如 [5 0 0 3 … 1 3],在矩阵中用列表示。
- representation function:Multi-Layer-Perceptron,也就是经典的全连接网络。
- matching function:用 cosine 点击表示两个向量的匹配分数。
-
-
AutoRec 模型
- Item-based AutoRec:n个item就有n个auto-encoder,输入与需拟合的是user对各个item评分,中间层便是该item的表示
-
CDAE模型(Collaborative Denoising Auto-Encoders)
- 输入为用户id,加了噪音后的用户对各item的评分。如图的 input layer 节点,绿色节点表示每个用户交互过的 item,最下面的红色节点 user node 表示用户本身的偏好,可以认为是 userid 的表达。其中,中间蓝色的隐层节点作为用户表示,其中 Vu 为 input layer 中的 user node 的 representation,针对所有用户 id 会学习一个和 item 无关的 Vu 向量表达,可以认为是用户本身的 bias,例如有些用户打分本身比较严格,再好的 item 打分也不会太高;有些用户打分很宽松,只要 item 别太差都会给高分,加上 Vu 可以更好的刻画用户之间天然的 bias。
-
总结
- ❶ User 或者 item 要么由本身 id 表达,要么由其历史交互过的行为来表达
- ❷ 用历史交互过的行为来作为 user 或者 item 的表达,比用 id 本身表达效果更好,但模型也变得更复杂
- ❸ Auto-encoder 本质上等同于 MLP+MF,MLP 用全连接网络做 user 和 item 的 representation 表达
- ❹ 所有训练数据仅用到 user-item 的交互信息,完全没有引入 user 和 item 的 side info 信息
基于 Collaborative Filtering+ side information 的方法:❶ representation learning:目的是学习到 user 和 item 各自的 representation ( 也叫 latent vector,或者 embedding )。❷ 特征表达:user 侧特征除了用户 id 本身 userid,可以加上其他 side info;item 侧特征除了物品 id 本身 itemid,还有其他文本特征、图文特征、视频帧特征等信息。❸ 模型表达:除了传统的 DNN,其他结构如 Auto-Encoder ( AE ),Denoise-Auto-Encoder ( DAE ),CNN,RNN 等。
-
DCF 模型 ( Deep Collaborative Filtering )
-
和传统的 CF 表示学习不同,这里引入了用户侧特征X例如年龄、性别等;物品侧特征 Y 例如文本、标题、类目等;user 和 item 侧的特征各自通过一个 auto-encoder 来学习,而交互信息 R 矩阵依然做矩阵分解 U,V。
-
损失函数优化
- 需要最小化用户侧特征的 reconstruction 和 item 侧的 encoder 部分,以及交互矩阵和预测矩阵的平方差,还有加上 L2 正则。
其中 W1,表示的用户侧特征 X 在 auto-encoder 过程中的 encode 部分,也就是输入到隐层的重建,P1 表示的是用户特征到交互矩阵 R 的映射;而 W2 表示物品侧特征 Y 在 auto-encoder 过程中的 encode 部分。P2 表示的是物品特征到交互矩阵 R 的映射。可以看出用户侧和物品侧特征都由两项 error 组成,第一项衡量的是 input 和 corrupted input 构建的预估误差,需要保证 W1 和 W2 对于 corrupted 后的 input x 和 y 不能拟合太差;第二项表达的是映射后的隐层特征空间 W1X 和投射到 U 矩阵的误差不能太大。
- 需要最小化用户侧特征的 reconstruction 和 item 侧的 encoder 部分,以及交互矩阵和预测矩阵的平方差,还有加上 L2 正则。
-
-
DUIF 模型 ( Deep User and Image Feature Learning )
- fi 表示原始图片特征,通过 CNN 网络提取的图片特征作为 item 的表达,然后用一个线性映射可以得到 item 的 embedding 表达。通过模型学到的 pu 作为用户的 representation,以及通过 CNN 提取的图片特征作为 item 的 representation,两者通过向量点积得到两者的匹配分数。
-
ACF 模型 ( Attentive Collaborative Filtering )
-
Sigir2017 提出的 Attention CF 方法,在传统的 CF 里引入了 attention 机制。这里的 attention 有两层意思,第一层 attention,认为用户历史交互过的 item 的权重是不一样的;另一个 attention 意思是,用户同一个 item 里到的视觉特征的权重也是不一样的
-
损失函数优化
-
其中 ui 是用户本身的 latent vector,vj 是物品 j 的 latent vector,pl 是物品 l 的辅助 latent vector。这里文章使用了 SVD++ 的方式,用户本身的表达引入了 a(i, l),代表的是用户 i 对其历史交互过的物品 l 的权重。
-
item attention
-
ui 是用户本身的 latent vector,vl 是物品 l 的 latent vector,pl 是物品 l 的辅助 latent vector;xl 是表示component-attention提到的从图文信息提取的特征 latent vector。用户最终的表达是自身 ui 的 latent vector,以及历史行为的 attention 加权的 representation 表示。
-
component attention
- 其中第一个公式表示用户 i 对物品 l 第 m 个 component ( 例如图片特征中的局部区域特征,或者视频中不同帧的特征 ) 的权重;第二个公式 softmax 对 attention 权重归一化。
-
-
-
-
CKB 模型 ( Collaborative Knowledge Base Embedding )
-
CKB 分别在结构化信息、文本信息和视觉信息中提取 item 侧特征作为 item 的 representation
-
representation function
- ① 结构化特征 struct embedding: transR
- ② 文本特征 Textual embedding: stacked denoising auto-encoders ( S-DAE )
- ③ 视觉特征 Visual embedding: stacked convolutional auto-encoders ( SCAE )
-
评价指标
评分预测指标:为了衡量RS结果的准确性,通常使用一些最常见的预测误差指标的计算
- 平均绝对误差(Mean Absolute Error,MAE)
- 标准平均绝对误差(NMAE)
- 均方根误差(Root Mean Squared Error,RMSE)
- 覆盖率:推荐系统能够推荐出来的物品占总物品的比例。覆盖率越高表明模型能够针对更多的item产生推荐,从而促进长尾效应的挖掘。
集合推荐指标:由于数据稀疏和冷启动问题的存在,有时直接预测用户对item的评分是困难的,为此有学者提出了Top-N推荐方法,即不预测用户对item的评分,而是根据user-item的隐式交互(例如点击、收藏)来生成一组用户最有可能喜欢的items集合推荐给用户
- Precision
- Recall
- F1
- ROC
- AUC:为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围一般在0.5和1之间。
- Hit Rate (HR):#users是用户总数,而#hits是测试集中的item出现在Top-N推荐列表中的用户数量
- Average Reciprocal Hit Rank (ARHR):一种加权版本的HR,它衡量一个item被推荐的强度
排名推荐指标
基于 match function learning 的深度匹配模型
CF-based 的深度模型
- NCF:在得到 user vector 和 item vector 后,连接了MLP 网络后,最终拟合输出
- NeuMF 模型 ( Neural Matrix Factorization ):相比NCF多了GMF部分。GMF layer:User 和 item 都通过 one-hot 编码得到稀疏的输入向量,然后通过一个 embedding 层映射为 user vector 和 item vector。这样就获得了 user 和 item 的隐向量,一般可以通过向量点积或者哈达马积 ( element-wide product ) 得到交互,不过在 NeuMF 中多连接了一个连接层
- NNCF 模型 ( Neighbor-based NCF :NCF 方法,最大的不同在于输入除了 user 和 item 的信息,还各自引入了 user 和 item 各自的 neighbor 信息,输入层两侧的 nu 和 ni 是 user 和 item 各自的 neighbor 信息的输入
- ONCF 模型 ( Outer-Product based NCF ):在 embedding layer 之后,模型引入了 interaction map 也就是特征交叉层,对于用户 u 的向量 pu 和物品 i 的向量 qi,引入两者的 outer-product。这里的hidden layer 用了 CNN
基于 translation 框架的方法
-
LRML 模型 ( Latent Relational Metric Learning ):通过引入 memory network 来学习度量距离
-
memory layer
- ① 用户和物品 embedding 融合:Embedding 层得到的 user 和 item 向量 p 和 q 需要先经过交叉合成一个向量后输入到下一层
- ② 用户-物品 key addressing:从第一步得到的向量 s 中,去和 memory 记忆网络模块中的各个 memory vector 挨个计算相似度,相似度可以用内积表达并做归一化。得到的 ai 代表的是当前用户-物品输入对 (p,q) 与 memory-network 中的第 i 个向量的相似度。
- ③ 最终加权表达
-
feature-based 的深度模型
-
FNN:在FM上接入若干全连接层。为了加速模型的收敛,充分利用FM的特征表达能力,FNN采用了两阶段训练方式。首先,针对任务构建FM模型,完成模型参数的学习。然后,将FM的参数作为FNN底层参数的初始值。这种两阶段方式的应用,是为了将FM作为先验知识加入到模型中,防止因为数据稀疏带来的歧义造成模型参数偏差。
-
优点
- 引入DNN对特征进行更高阶组合,减少特征工程,能在一定程度上增强FM的学习能力。这种尝试为后续深度推荐模型的发展提供了新的思路
-
缺点
- 两阶段训练模式,在应用过程中不方便,且模型能力受限于FM表征能力的上限
- FNN专注于高阶组合特征,但是却没有将低阶特征纳入模型
- FM中进行特征组合,使用的是隐向量点积。将FM得到的隐向量移植到DNN中接入全连接层,全连接本质是将输入向量的所有元素进行加权求和,且不会对特征Field进行区分,也就是说FNN中高阶特征组合使用的是全部隐向量元素相加的方式。说到底,在理解特征组合的层面上FNN与FM是存在Gap的
- 在神经网络的调参过程中,参数学习率是很重要的。况且FNN中底层参数是通过FM预训练而来,如果在进行反向传播更新参数的时候学习率过大,很容易将FM得到的信息抹去
-
实现代码
-
-
PNN:PNN同样引入了DNN对低阶特征进行组合,但与FNN不同,PNN并没有单纯使用全连接层来对低阶特征进行组合,而是设计了Product层对特征进行更细致的交叉运算。在不考虑激活函数的前提下,使用全连接的方式对特征进行组合,等价于将所有特征进行加权求和。PNN的作者同样意识到了这个问题,认为“加法”操作并不足以捕获不同Field特征之间的相关性。
-
优点
- 引入Product层,不依赖预训练FM完成特征交叉
-
缺点
- 忽略了低阶特征
-
代码实现
-
-
Wide&Deep:FNN与PNN更多得捕捉高阶交叉特征,而忽略了低阶特征。Wide & Deep分为Wide与Deep两部分,Wide是记忆(Memorization),负责处理低阶特征,一般为人工梳理,且具有一定业务背景的单特征,或者一些显而易见的组合特征。显然,光有Wide就是个LR模型,而Deep的加入是模型具有很好的泛化性能。Deep负责扩展(Generalization),通过Embedding+DNN学习高阶交叉特征,获得更好的泛化性能。
-
优点
- 简单有效。结构简单易于理解,效果优异。目前仍在工业界广泛使用,也证明了该模型的有效性。
- 结构新颖。使用不同于以往的线性模型与DNN串行连接的方式,而将线性模型与DNN并行连接,同时考虑低阶与高阶特征,兼顾模型的Memorization与Generalization。
-
缺点
- Wide侧的特征工程仍无法避免。
-
代码实现
-
-
DeepFM:DeepFM是基于Wide&Deep进行改进,Wide&Deep仍避免不了人工设计特征,DeepFM则将Wide模块替换为FM,FM模型可以抽取低阶特征,DNN可以抽取高阶特征。
-
优点
- 无需预训练FM
- 避免了人工特征
- 同时考虑低阶与高阶特征
-
代码实现
-
-
DCN:由两部分构成,一部分还是基于DNN的Deep network,另一部分是Cross neteork。由此可见,DCN也是W&D的升级版,将Wide模块替换为Cross network
-
Cross network
-
优点
- 以少量的额外参数学习特征交互
- 同时考虑低阶与高阶特征
-
代码实现
-
-
xDeepFM:基于vector-wise的模式提出了新的显式交叉高阶特征的方法。与vector-wise概念相对应的是bit-wise,在最开始的FM模型当中,通过特征隐向量之间的点积来表征特征之间的交叉组合。特征交叉参与运算的最小单位为向量,且同一隐向量内的元素并不会有交叉乘积,这种方式称为vector-wise。
-
CIN
- 根据前一层隐层的状态Xk 和原特征矩阵 X0,计算出一个中间结果 Zk+1,它是一个三维的张量
- 在这个中间结果上,我们用Hk+1 个尺寸为 m*Hk 的卷积核生成下一层隐层的状态
- 对CIN中每层进行sum pooling操作
-
优点
- 向量级特征交叉
-
实现
-
-
AutoInt:通过 Multi-head Self-Attention 机制显示构造高阶特征, 有效提升了CTR预估的准确率
- Self-Attention
- 实现
以上是关于推荐系统提纲笔记的主要内容,如果未能解决你的问题,请参考以下文章