一篇Netflix在MLSS 2014上的talk,粗略做了一下总结,主要是关于推荐系统的综述知识和一些实际应用例子。虽然有些过时(2014年),但精髓还在。
我主要关注在2、3、4三个部分,也就是推荐方法这一块。
CF
kNN-CF的问题
- 稀疏性问题:矩阵很大,非零元素很少
降维方法:- MF
- 聚类
- PCA
- 可扩展性问题:计算量同时随着用户数和物品数增加,用户/物品量非常大,O(m+n)
聚类方法可能会有帮助
性能
- user-based CF的用户相似度是动态的,预先计算会导致很差的结果。
- item-based CF的物品相速度是静态的,可以预先计算
Model-Based CF
-
Model:
概率(贝叶斯网络)
聚类(聚类用户,基于用户组推荐)
基于规则(关联规则:物品与物品的共同购买行为矩阵)
分类
回归
LDA -
SVD++和RBMS(限制玻尔兹曼机器)
-
LSH局部敏感哈希: 物品高维聚类,主要用在NN
CF的问题
- 冷启动(新用户/新物品)
- 流行偏差
CB
- 推荐建立在单独用户购买的物品的内容上
- 物品内容:显性的属性/特点,文本内容(文本相似度/NLP挖掘特征),物品类型
- 用于推荐基于文本的物品/用户模型多种技术分类
CB优点
- 没有冷启动/稀疏性问题
- 个性化/全面
- 可解释
CB问题
- 需要有意义的特征/有些物品很难找/特征很难找
- 用户的兴趣要可学习
- 难以与其他用户联动
- 过拟合
- 偶然性
Ranking
基于排序学习的推荐
- 从训练数据构建排名模型
- 训练数据为偏序或二值化的数据
- 从得分得到排序结果
- 个性化的关键
- 可以作为一个典型的监督学习问题
指标
- NDCG\MRR\FCP
- 问题:不可导,无法优化模型
- 最近研究点在可以直接优化模型的指标
途径
- Pointwise:单独点的相关性判断,Ordinal regression, Logistic regression, SVM, GBDT, …
- Pairwise:一对点的次序判断,最小化错误次序的数量,二分类问题,RankSVM, RankBoost, RankNet, FRank…
- Listwise:
- 使用间接损失函数:RankCosine、ListNet 对间接损失函数的优化不一定是对IR模型的优化
- 直接优化(不可导时会比较困难)。Genetic Programming遗传编码、Simulated Annealing模拟退火、对目标函数进行平滑化后的GD( CLiMF、TFMAP)、把MAP加入SVM约束(SVM-MAP)、使用 boosting 优化 NDCG(AdaRank)
上下文感知Context-aware
三种途径:pre-filtering/post-filtering/modeling
pre-filtering
- 使用上下文选择最相关的数据交给推荐系统
- 可能导致结果太狭隘、有些情况下上下文的选择没有意义、过滤太多数据导致稀疏性问题
- 总结:
- 多种途径
- 将具体的条件回滚到更高等级
- 使用隐变量方法降维(MF、LDA…)
Post-filtering
- 在最后输出结果时使用上下文信息过滤和排序
- 使用相似性过滤 or 使用社会/协同上下文表现。。。
Modeling
- 多维推荐模型
- 扩充特征的维度,使得R:UxIxD_1xD_2x…xD_n,比如电影推荐的维度:用户、电影、时间、公司、地点等
Tensor Factorization张量分解
-
三维数组以及多位数组,我们称之为张量(tensor)
-
CP分解
如果n阶张量可以被写成n个向量的外积,则此张量为一个秩一张量。
三维为例:分成R个三个一维向量(a_r, b_r, c_r)的乘积。三个方向的向量组成的矩阵称为因子矩阵A,B,C。
表示向量的外积。即:
一个三阶张量的CP分解可以写成展开形式 :
求解方法与MF类似,可用ALS等 -
Tucker分解
一种高阶的主成分分析,它将一个张量表示成一个核心(core)张量沿每一个mode乘上一个矩阵
KaTeX parse error: Expected 'EOF', got '\llbracket' at position 128: …_q \circ c_r = \̲l̲l̲b̲r̲a̲c̲k̲e̲t̲ ̲ ̲G; A,B,C \rrbra…
可拓展为n维张量:
KaTeX parse error: Expected 'EOF', got '\llbracket' at position 73: …es_n A^{(n)} = \̲l̲l̲b̲r̲a̲c̲k̲e̲t̲ ̲ ̲G; A^{(1)},A^{(…
CP分解是Tucker分解的一种特殊形式:如果核心张量是对角的,且P=Q=R,则Tucker分解就退化成了CP分解。- 计算方法:
HOSVD:利用SVD对每个mode做一次Tucker1分解(截断或者不截断)。HOSVD不能保证得到一个较好的近似,但HOSVD的结果可以作为一个其他迭代算法(如HOOI)的很好的初始解。
- 计算方法:
-
在推荐中,三维张量为F=users x item x context,Tucker分解为S(core)、M、U、C。目标函数:R[U,M,C,S] := L(F,Y)+各元素F范数的平方。(Frobenius范数,即矩阵元素绝对值的平方和再开平方。 L(F,Y)为各user和item元素预测(平方/绝对值)误差的和)。使用GD方法迭代。
Factorization Machines因子机
比TF表现更好。
之后拓展
Deep Learning
之后拓展
Similarity相似性
-
很多方面:元数据/标签/用户行为(观看、玩、打分)
-
对每一个方面进行学习然后ensemble
-
基于图的行相似性
SimRank: 如果两个对象被类似对象引用,则它们是相似的。 -
相似性ensemble:
- 学出各个方面相似性的分数
- 组合起来:通过已有回应经过回归学习到的权重/其他MAB探索途径
- 最终对用户投票的相似性做出回应
Social Recommendations
-
基于社交网络和信任机制的推荐
- 并非在社交网络中亲近的用户就是可信任的,信任很复杂,要考虑包括个人背景、互动历史、上下文、相似性、声誉等方面。在社会学定义中包括信念和承诺两个要素,类似于下注。在推荐系统中,信任度描述用户意见的相似度(忽视权威/正确性等)
- 信任机制的任务是推算出一个个体对另一个个体的信任度。
- 主要算法:Advogato/Appleseed/MoleTrust/TidalTrust
- 建立方法:
- 为信任的用户给予更多权重
- CF:在相似性中加入或结合信任因素
- 排序和过滤: 优先考虑来自可信来源的信息
-
其他方法:
- 在CF中使用不同途径使用“朋友关系”(比如将用户相似度用社交关系替代)
- Demographic方法:根据个人属性对用户进行分类,并根据人口统计类别进行推荐。人口统计类别可以根据专家通过市场调查来决定,最终形成人与人的相关性形式。 分类的时候一般人口统计特征会被用到,还可以在已知一些用户分类的情况下使用这些用户的描述来分类其他用户。可以使用任何学习机制来进行学习。
Hybrid Approaches 混合方式
一般多推荐方法组合要比单一推荐方法效果好。推荐方法混合的方式有:
- Weighted加权:几种方法的输出(以分数或投票的形式)结合不同程度的重要性(权重)来提供最终的推荐结果。
- 将不同推荐技术的结果组合成一个推荐列表:分数线性加和或者结果投票
- 建立在这样一个假设上:不同的方法在可能物品推荐空间内的相对取值是均匀的。这一假设在客观上并不一定成立,比如CF在面对评分数很少的物品时的推荐能力是很弱的。
- Switching交换:系统根据情况选取不同的推荐方法,系统的关键点在要建立合适的选取方法的标准。可以一定程度上避免冷启动问题。
- Mixed混合:系统同时使用多种推荐方法给出结果,这些结果都会呈现在推荐列表中。可以解决新物品启动问题,在新用户启动问题上表现不好。
- Feature combination特征组合:不同来源的特征融合后提供给一个单一的方法使用。特征有不同的组合方法,比如:
- 将协同信息(用户和评分)作为与每个示例相关联的附加特征数据,并在该增强数据集上使用基于内容的推荐方法
- 将内容特征视为CF的不同维度(比如将评分看作虚拟专业用户的评分)
- Cascade级联:前一个方法(强)负责输出一个粗略的候选列表,后一个方法(弱)负责改善这一列表。级联方式允许系统在第一个方法已经产生了很好的物品推荐列表时不再使用第二种方法,但关键在于确定方法间有意义且固定的先后次序。
- Feature augmentation特征增强:使用一种方法从某个信息源中得到特征(分类/评分等),进而将得到的特征作为另一种推荐方法输入的一部分
- Meta-level元级/分层:使用一种技术来产生某类模型,进而将获得的模型作为下一种技术的输入。元级混合和特征补充的区别在于,前者是将模型作为输入,而后者是将特征作为下一种技术的输入。然而,并不是任何推荐方法都能够产生适合输入其他方法的模型。