【每周一篇】常用推荐算法总结
本文主要来源:阿里云天池技术圈常用推荐算法(50页干货)
部分进行总结和详细解释(原文属于比较精炼没有侧重点的提纲)
适合和我一样的推荐算法小白和入门者
主要内容
一.推荐系统简介
- 信息过载
从海量信息中过滤出用户需要的信息。 - 信息过滤三种方法:
1.类目导航(如:搜狗,用户按类目逐层查找)
2.搜索(如:谷歌,用户提供意图明确的query)
3.推荐(如:头条,系统主动给提供用户选择) - 推荐系统的发展史(略)
- 推荐系统的应用和价值(略)
- 推荐系统的评价标注(重要):
1.用户满意度:调研、用户反馈,点击率、转化率等
2.准确性:prediction/recall/F-score三个参数的具体解释
3.覆盖率:照顾到尾部物品和用户
4.多样性:两两之间不相似
5.新颖性:没听过,没见过的物品
6.惊喜性:。。?
7.用户信任度/可解释性:推荐理由
8.鲁棒性/健壮性:哈利波特现象1,抗攻击、反作弊
9.实时性:新加入的物品;新的用户行为(实时意图)
10.商业目标:一个用户带来的盈利
- 推荐系统的核心问题:
如何评价一个用户(user)对一个物品(item)的评分(喜欢程度)
- 影响推荐效果的因素
1.用户交互界面(用户对推荐系统第一感知)
2.数据
数据收集:有效性(真实、准确)、全面性(是否有偏)
数据处理:清洗、挖掘
3.领域知识(产品定位、具体推荐需求的理解)
4.算法迭代(锦上添花) - 推荐算法的两个阶段
二.传统的推荐算法
- 非个性化推荐:热度排行
- 协同过滤:
- Memory-based(aka neighborhood-based)方法:Item-based/user-based CF
- Model-based方法:频繁项挖掘/聚类/分类/回归/矩阵分解/RBM/图模型
- 基于内容/知识的推荐(Content-based/Knowledge-based)
- 混合方法(Hybird Approaches)
热度排行
- 不同的排行榜算法:
- 单一维度的投票(旧版的Delicious)
- 多个维度综合打分
- 加入时间因素:引入衰减权重(半衰期、冷却定律) (Hacker News)
- 考虑反馈信息:如Reddit算法
- 考虑置信度:如威尔逊区间
- 防止马太效应:如MAB算法等
(我在这里还专门百度了一下马太效应hhh)
- 评价
- 容易实现
- 更新慢,难以推新
- 排行榜更多是业务问题而不是算法问题
协同过滤(Collaborative Filtering)
- 思想来源(略)
- 基本组成元素:
- N个用户,M个物品
- 评分矩阵:用户对物品的评分(显式)或用户对物品的行为(隐式)
- 相似性度量:物品与物品(人与人) 之间的相似性
Memory-based
将用户的所有数据读入内存中进行运算,所以被称为Memory-based
User-based CF
算法步骤
- Step1 协同(在线)
计算目标用户的(前k个)相似用户(neighborhood)- 相似性度量:Pearson相关系数、Jaccard距离、cosine相似性
- Step2 找出相似用户喜欢的物品,并预测目标用户对这些物品的评分
- 预测模型:KNN,regression
- Step3 过滤(离线)
过滤掉目标用户已经消费过的物品- 消费:购买商品,浏览新闻等
- Step4 将剩余物品按照预测评分排序,并返回前N个物品
Item-based CF
- 2001年,Sarwar等人提出了item-based的CF
- 2003年,Amazon介绍了其Item-to-item算法
- 基本思想:计算item之间两两的相似性,目标用户对某个item的评分可以根据其对相似的items的评分来预测,选取用户预测评分最高的前N个商品进行推荐
- 电商推荐中成为主流的原因:
- 降低实时计算复杂性
- 解决用户的冷启动问题
User-based VS Item-based
- Item-based:准确性好,表现稳定可控,便于离线计算;但是推荐结果多样性会差一些,一般不会有惊喜感
- User-based:帮助用户发现新的商品,但是需要复杂的在线计算,需要处理新用户的问题。
- Item之间的相似性比较单纯,是静态的;而User之间的相似性比较复杂,而且是动态的,用时需要注意
协同过滤的优缺点
- 优点
- 需要很少的领域知识,模型通用性强
- 工程上实现简单,效果很好
- 缺点
- 冷启动问题(new users/items)
- 数据稀疏性问题
- 假定"过去的行为决定现在",没有考虑具体情况的差异
- 热门倾向性(Popularity Bias):很难推荐出小众偏好
最近邻算法
领域大小的选择:
- 太小不具有代表性
- 太大噪音数据
最近邻的查找:Locality-senseitive-Hashing
- Locality-sensitive:相似的item哈希后仍保持较大概率相似,这样在计算相似性时可以只关注少量的候选集,从而大大加快相似项的查找速度。
- 利用适当的hash将原来(高维)空间的数据哈希到一个新的(低纬)空间,得到签名矩阵(Signature Matrix),然后利用签名矩阵计算原空间的相似性。
- hash函数的选择跟相似性度量选取有关,例如相似性度量是Jaccard距离,hash函数通常选用MinHash/SimHash(可证,MinHash的hash值相等的概率等于其原空间的Jaccard相似度)
MinHash例子
SimHash例子
(感觉这个有点难,后面会重点看)
整个过程可以分为以下几步:
1.选择Simhash的位数(比如32位),并将各位初始化为0
2.提取原始文本中的特征及其权重
3.计算各个word的hashcode
4.对各word的hashcode的每一位,如果该位为1,则在Simhash的相应位加它的权重;否则在Simhash的相应位减去它的权重。
5.对最后得到的32位的SimHash,如果该位大于1,则设为1,否则设为0
(这一部分我还没太搞懂,后面应该会专门找一个代码实践一下= =)
Mode-based CF
- 关联规则,如Apriori,FP-Growth
- 聚类
- 分类/回归模型
- 隐语义模型,如LSA/pLSA/LDA
- SVD,SVD++
- RBM
- 图模型,如SimRank,MDP
关联规则(Associate Rule)
- 基本思想:基于物品之间的共现性挖掘频繁项
- 一般应用场景:看了又看,买了又买,商品搭配
- 算法:A-priori、FP-Growth
- 支持度(support)
- 置信度(confidence)
- 支持度(support)
- 评价
- 实现简单,通用性较强,适合“推荐跟已经购买的商品搭配的商品”等场景
- 相似商品的推荐效果往往不如协同过滤好
- 解释变量之间的关联时要特别小心,很可能受一些隐含因素的影响,得出完全相反的结论(辛普森悖论)
辛普森悖论(Simpson’s Paradox)
如图所示的一个例子:
- 英国统计学家辛普森在1951年提出来的,两组数据分别讨论时都会满足某种性质,可是一旦合并考虑,却可能导致相反的结论。
- 产生辛普森悖论的主要原因是数据的不同分组之间基数差异很大(一个组相对于其他组来说数量占绝对优势)
- 数学解释
- 结论:分析数据时合理的将数据分组(分层)很重要
基于统计的相似性
- OddsRatio
OddsRatio(item1,item2)
= Odds(item2|item1)/Odds(item2|!item1)
= (N11N22)/(N12N21)
解释:OddsRatio 值表示“看了item1的用户中看了item2的用户数与没看item2的用户数的比例N11/N12”与“没看item1的用户中看了item2的用户数与item2的用户数的比例N21/N22”的比值。该比值大于1表明看了item1的用户更倾向于看item2,并且OddsRatio值越大,说明item1到item2的关系越紧密。
(这段话引号部分我读了三遍才绕过来= =真是绝了)
平滑:LogOddsRatio(item1,item2)=logN11+logN22-logN12-logN21
聚类(Clustering)
- 用户分群:同好人群
- 有时可以带给用户惊喜感,但个性化稍差(人群vs个体)
- 商品聚类:相似商品
- 精确性较高,但推荐的商品对用户大多无新鲜感
- 常用算法
- K-means,层次聚类(HC)
- Louvain(2008),基于密度的聚类方法(2014)
- 评价
- 聚类可以一定程度解决数据稀疏性问题,捕捉到一些隐(扩展)
相似性 - 聚类的精准度往往不如协同过滤好
- 聚类可以一定程度解决数据稀疏性问题,捕捉到一些隐(扩展)
分类/回归
- 基本思想:把评分预测看做一个多分类(回归)问题
- 常用分类器:LR,Naive Bayes
- 输入:通常是item的特征向量
- 评价:
- 比较通用,可以跟其他方法组合,提高预测的准确性
- 需要大量训练数据,防止过拟合现象
矩阵分-SVD分解
- 数学上的SVD
- 传统SVD应用到推荐中的挑战
- SVD要求矩阵必须是稠密矩阵,而评分矩阵非常稀疏
- SVD计算复杂度很高,在稠密大规模矩阵上运行速度很慢
↓↓↓ 下面部分公式因为太难打了都是使用的截图。。。。。
FunkSVD
- 2006nian ,Simon Funk公布了算法(FunkSVD)
- 思想:评分矩阵R分解为两个低秩矩阵的乘积
,则用户u对物品i的评分为
,利用RMSE为目标去学习P、Q,并且学习过程中不关心缺失值
BiasSVD
- 思想(基本假设)
- 评分系统有一些跟用户和物品无关的固有属性
- 用户有一些跟物品无关的固有属性
- 商品有一些跟用户无关的固有属性
SVD++
- 思想:考虑用户的隐式反馈(提供额外的用户偏好信息)
Item的向量化
- 为什么进行向量化
- 知识、概念的表示
- 为智能推荐系统的设计提供了强有力的工具
- 向量化的常用方法
- pLSA(Thomas Hofmann,1999)
- LDA(David M. Blei,2003)
- Word2Vec(Mikolov,2013)
- 实际应用的问题
- 向量化时大多基于行为数据,行为少的item向量化效果不好
限制玻尔兹曼机(RBM)
Boltzmann机
- 两层神经网络(无输出层)
- 对称、全连接
- 随机:每个神经元只有两种状态(激活/未激活),通常用0/1表示,但是某一时刻处于哪种状态是随机的,由一定的概率确定
受限Boltzmann机
- 受限:层内无连接(大大简化计算)
- 受限:层内无连接(大大简化计算)
RBM中隐藏层的作用
- 图像去噪和重构的例子
- 问题:N个用户,M个电泳,评分等级1-k,如何建模?(RBM的结构)
- 如何处理缺失值?
一个用户一个RBM
共享隐层,共享权重w,共享偏置b
RBM进行评分预测
算法步骤(预测用户u对电影i的评分):
选择预测评分最高的电影进行推荐
在Netflix Prize中,RBM是单个算法中表现最好的
基于图的相似性
- 多用于社交网络人与人的关系挖掘
图模型
- SIMRank(Jeh&Widom,2002)
基本思想:被相似的对象引用的两个对象也具有某种相似性
- SimRank++(Ioannis Antonellis,2007)
- 改进1:引入evidence系数(两个节点的共同节点越多越相似)
- 改进2:考虑的边的权重
- Markov模型(n-gram)
- Markov Decision Process
- 图模型的评价
- 借助图的结构的传到辛,可以发现CF发现不了的弱相似性,给推荐带来一定的惊喜性;但是图模型也面临着数据稀疏性问题和冷启动问题。
基于内容/知识的推荐
- 什么是内容
- 文本描述:NLP技术挖掘关键词
- Item的属性,如电影的主题、衣服的材质等
- Item的特征,例如语音信号表示、图像向量表示等
- 基本组成
- item特征向量,如文本的TF-IDF向量
- 用户profile向量:通常通过用户偏好的item来提取
- 匹配分:直接计算cosine,分类/回归模型
- 基于内容推荐的评价:
- 优点
- 能够推荐出用户独有的小众偏好
- 可以一定程度解决数据稀疏问题和item的冷启动问题
- 通常具有较好的可解释性
- 不足
- 对于很多推荐问题,提取有意义的特征不容易
- 很难将不同的item特征组合在一起(邻域思想)
- 很难带给用户惊喜性
- 如果用户的profile挖掘不准,推荐效果往往很差
- 优点
混合方法(Hybird Approaches)
- 模型融合方法
- 加权(weighted)组合
- 切换(switching)组合:确定一个合理的切换跳进
- 混合(Mixed)
- 特征组合(feature combination):不同模型特征组合到一起
- 特征扩展(feature augmentation):一个模型的输出作为另一个的特征
- 级联(Cascade):粗排->精排
- 评价
- 通常比单个算法表现好
- 需要在不同算法之间、理论效果和实际可行性之间仔细权衡
三.推荐算法的最新研究
Leaning to Rank
- 大多数推荐结果是一个列表,因此推荐结果的排序也很重要。
- L2R:将排序看做一个ML问题
- 推荐的评价准则:
- Normalized Discounted Cumulative Gain(NDCG)
- Mean Reciprocal Rank(MRR)
- 问题:难以直接利用这些指标指导学习过程
- 常用算法
- Pointwise:LR,GBDT,SVM
- Pairwise:RankSVM,RankBoost,RankNet,LambdaRank…
- Listwise:AdaRankmLambdaRank/LambdaMart,ListMLE
页面整体优化
- 用户注意力建模
参见:
情景(Context-aware)推荐
- 什么是情景:
- 看电影:工作日,周末
- 订餐:餐厅距离
- 网购:用户心情
- 母婴:孩子年龄
- 三种实现方式
情景推荐算法
- 张量分解(Tensor Factorization)
- 参见A Kararzoglou,2010
- 参见A Kararzoglou,2010
- 分解机(Factorization Machine)
- 矩阵(张量)分解跟线性(逻辑)回归融合的一种推广
- 参见Rendle,2010
- 矩阵(张量)分解跟线性(逻辑)回归融合的一种推广
- Factorization Machine效果更好
深度学习算法
- 卷积神经网络(CNN)
- 循环神经网络(RNN)
深度学习在推荐上的应用
- Spotity将CNN用于音乐推荐
- 利用CNN从歌曲音频提取隐特征向量解决冷启动问题
- 考拉将RNN用于电商推荐
- 传统i2i:基于最后一个行为
- RNN:基于用户整个session行为(序列数据)
- 评价
- 利用DL有希望开发出更加智能的推荐系统
- RNN可用于捕捉用户实时意图,但是仅仅利用行为数据的RNN可能效果有限
- (可能的改进点:1.将图像、文本、行为数据综合起来
2.压缩状态空间
3.巧妙构造训练数据)
四.总结
推荐算法需要深入理解推荐需求、业务目标、对数据的理解和处理、对用户的理解。
多个模型融合可以提高预测准确新,但是需要权衡成本
多个指标综合评价一个推荐系统
哈利波特现象:即热门商品往往与其他商品的相似性都很高,而热门商品之间的相似性更高。回顾在UCF中,热门商品也往往将两个无关的人划分为具有相同兴趣的人。如何消除热门商品所带来的影响?基本思路是降低热门商品的权重,在离线测试中,会降低准确率、召回率,但会提高覆盖率。
[2]: http://www.360doc.com/content/17/0527/14/21659794_657712245.shtml
[3]:
[4]: ↩︎
【每周一篇】常用推荐算法总结相关推荐
- 【每周一篇】推荐算法之威尔逊区间法
简单阐述一下自己的学习计划: [每周一篇]更侧重于理论,希望尽量能够形成一个体系或者完整的脉络 当然,也不排除因为业务或者紧急需求,突然跳到某个领域的可能~ [每周代码]更侧重于代码实践,可能是for ...
- 算法笔记(1)-常用推荐算法总结
常用推荐算法包括以下几种 1.协同过滤算法 1)基于用户的协同过滤算法 2)基于项的协同过滤算法 2.基于矩阵分解的推荐算法 矩阵分解是将一个矩阵分解成两个或多个矩阵的乘积.基于矩阵分解的推荐算法分为 ...
- 初识推荐算法---算法背景、算法概念介绍、推荐信息选取、常用推荐算法简介
初识推荐算法 算法背景 推荐系统的基本概念 哪些信息可以用于推荐 常用的推荐系统算法 算法背景 推荐系统是根据用户的浏览习惯,确定用户的兴趣,通过发掘用户的行为,将合适的信息推荐给用户,满足用户的个性 ...
- 想要成为推荐算法工程师,都要准备哪些东西
作者在<推荐算法工程师的成长之道>这篇文章中讲到推荐算法工程师是一个好的职业选择,并且讲解了职业发展路径及定位.怎么成长等话题(还没看的可以看起来). 如果大家认可我讲的并且也愿意将来从事 ...
- 推荐算法工程师学习路线及工作指南
干货!推荐算法工程师学习路线及工作指南 以下文章来源于大数据与人工智能 ,作者gongyouliu 本文从我自己的学习成长经历.如何判断自己是否适合从事推荐算法.推荐算法工程师需要的知识储备.怎么找一 ...
- 岗位推荐 | 腾讯音乐娱乐招聘推荐算法工程师、推荐后台工程师
PaperWeekly 致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁. 如果你需要我们来帮助你推广实习机会或全职岗位,请添加微信号「pwbot02」. 腾讯音乐娱 ...
- 推荐算法python数据集_推荐系统常用数据集
ps:对原文有所删减 在这篇博客中,作者介绍了九个数据集,其中一些是推荐系统中常用到的标准数据集,也有一些是非传统意义上的数据集(non-traditional datasets),作者相信,这些非传 ...
- 常用的基于内容的推荐算法实现原理
这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文会从什么是基于内容的推荐算法.算法基本原理.应用场景.基于内容的推荐算法的优缺点.算法落地需要 ...
- AI:人工智能实践六大场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)及其对应常用机器学习算法经验总结(不断更新)
AI:人工智能实践六大场景(金融信用违约.反欺诈模型.客户偏好洞察.智能推荐.精准营销.客户流失管理)及其对应常用机器学习算法经验总结(不断更新) 目录
最新文章
- 车辆行人检测数据集_开源 | 相机和激光雷达融合的行人车辆检测跟踪
- linux切换到顶层命令,一些在Linux下提高工作效率的常用命令
- 企业文件服务器资源管理方案
- IEWebBrowser组件的execWB方法
- 转载:Redis 应用场景
- 一文带你理解Java中Lock的实现原理
- 15 位健在的牛叉程序员,你知道哪几位?
- NLP 《隐式马尔科夫链》
- python创意爱情代码大全-王牌花色-题解(Python代码)
- python PyQt5初级教程hello world
- 机器人车间气管_大开眼界!机器人焊装车间火力全开
- android多申请内存,Android内存等信息
- Datawhale编程学习之数组和链表(1)
- ARM CHI总线笔记
- 系统交易---战术资产配置 (Tactical Asset Allocation TAA)介绍
- python数据分析实战:DCM模型设计及实现(以波音公司用户选择为例)
- notify()和 notifyAll()有什么区别
- C++/C语言中十进制转二进制的常见方法
- 开发常用英语单词表格
- signature=1c1223d10236c18f125cb9f7a490588e,Microscaled proteogenomic methods for precision oncology