本文主要来源:阿里云天池技术圈常用推荐算法(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)
  • 评价
    • 实现简单,通用性较强,适合“推荐跟已经购买的商品搭配的商品”等场景
    • 相似商品的推荐效果往往不如协同过滤好
    • 解释变量之间的关联时要特别小心,很可能受一些隐含因素的影响,得出完全相反的结论(辛普森悖论)
辛普森悖论(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
  • 分解机(Factorization Machine)
    • 矩阵(张量)分解跟线性(逻辑)回归融合的一种推广
    • 参见Rendle,2010
  • Factorization Machine效果更好

深度学习算法

  • 卷积神经网络(CNN)
  • 循环神经网络(RNN)

深度学习在推荐上的应用

  • Spotity将CNN用于音乐推荐

    • 利用CNN从歌曲音频提取隐特征向量解决冷启动问题
  • 考拉将RNN用于电商推荐
    • 传统i2i:基于最后一个行为
    • RNN:基于用户整个session行为(序列数据)
  • 评价
    • 利用DL有希望开发出更加智能的推荐系统
    • RNN可用于捕捉用户实时意图,但是仅仅利用行为数据的RNN可能效果有限
    • (可能的改进点:1.将图像、文本、行为数据综合起来
      2.压缩状态空间
      3.巧妙构造训练数据)

四.总结

推荐算法需要深入理解推荐需求、业务目标、对数据的理解和处理、对用户的理解。
多个模型融合可以提高预测准确新,但是需要权衡成本
多个指标综合评价一个推荐系统


  1. 哈利波特现象:即热门商品往往与其他商品的相似性都很高,而热门商品之间的相似性更高。回顾在UCF中,热门商品也往往将两个无关的人划分为具有相同兴趣的人。如何消除热门商品所带来的影响?基本思路是降低热门商品的权重,在离线测试中,会降低准确率、召回率,但会提高覆盖率。
    [2]: http://www.360doc.com/content/17/0527/14/21659794_657712245.shtml
    [3]:
    [4]: ↩︎

【每周一篇】常用推荐算法总结相关推荐

  1. 【每周一篇】推荐算法之威尔逊区间法

    简单阐述一下自己的学习计划: [每周一篇]更侧重于理论,希望尽量能够形成一个体系或者完整的脉络 当然,也不排除因为业务或者紧急需求,突然跳到某个领域的可能~ [每周代码]更侧重于代码实践,可能是for ...

  2. 算法笔记(1)-常用推荐算法总结

    常用推荐算法包括以下几种 1.协同过滤算法 1)基于用户的协同过滤算法 2)基于项的协同过滤算法 2.基于矩阵分解的推荐算法 矩阵分解是将一个矩阵分解成两个或多个矩阵的乘积.基于矩阵分解的推荐算法分为 ...

  3. 初识推荐算法---算法背景、算法概念介绍、推荐信息选取、常用推荐算法简介

    初识推荐算法 算法背景 推荐系统的基本概念 哪些信息可以用于推荐 常用的推荐系统算法 算法背景 推荐系统是根据用户的浏览习惯,确定用户的兴趣,通过发掘用户的行为,将合适的信息推荐给用户,满足用户的个性 ...

  4. 想要成为推荐算法工程师,都要准备哪些东西

    作者在<推荐算法工程师的成长之道>这篇文章中讲到推荐算法工程师是一个好的职业选择,并且讲解了职业发展路径及定位.怎么成长等话题(还没看的可以看起来). 如果大家认可我讲的并且也愿意将来从事 ...

  5. 推荐算法工程师学习路线及工作指南

    干货!推荐算法工程师学习路线及工作指南 以下文章来源于大数据与人工智能 ,作者gongyouliu 本文从我自己的学习成长经历.如何判断自己是否适合从事推荐算法.推荐算法工程师需要的知识储备.怎么找一 ...

  6. 岗位推荐 | 腾讯音乐娱乐招聘推荐算法工程师、推荐后台工程师

    PaperWeekly 致力于推荐最棒的工作机会,精准地为其找到最佳求职者,做连接优质企业和优质人才的桥梁. 如果你需要我们来帮助你推广实习机会或全职岗位,请添加微信号「pwbot02」. 腾讯音乐娱 ...

  7. 推荐算法python数据集_推荐系统常用数据集

    ps:对原文有所删减 在这篇博客中,作者介绍了九个数据集,其中一些是推荐系统中常用到的标准数据集,也有一些是非传统意义上的数据集(non-traditional datasets),作者相信,这些非传 ...

  8. 常用的基于内容的推荐算法实现原理

    这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例. 本文会从什么是基于内容的推荐算法.算法基本原理.应用场景.基于内容的推荐算法的优缺点.算法落地需要 ...

  9. AI:人工智能实践六大场景(金融信用违约、反欺诈模型、客户偏好洞察、智能推荐、精准营销、客户流失管理)及其对应常用机器学习算法经验总结(不断更新)

    AI:人工智能实践六大场景(金融信用违约.反欺诈模型.客户偏好洞察.智能推荐.精准营销.客户流失管理)及其对应常用机器学习算法经验总结(不断更新) 目录

最新文章

  1. 车辆行人检测数据集_开源 | 相机和激光雷达融合的行人车辆检测跟踪
  2. linux切换到顶层命令,一些在Linux下提高工作效率的常用命令
  3. 企业文件服务器资源管理方案
  4. IEWebBrowser组件的execWB方法
  5. 转载:Redis 应用场景
  6. 一文带你理解Java中Lock的实现原理
  7. 15 位健在的牛叉程序员,你知道哪几位?
  8. NLP 《隐式马尔科夫链》
  9. python创意爱情代码大全-王牌花色-题解(Python代码)
  10. python PyQt5初级教程hello world
  11. 机器人车间气管_大开眼界!机器人焊装车间火力全开
  12. android多申请内存,Android内存等信息
  13. Datawhale编程学习之数组和链表(1)
  14. ARM CHI总线笔记
  15. 系统交易---战术资产配置 (Tactical Asset Allocation TAA)介绍
  16. python数据分析实战:DCM模型设计及实现(以波音公司用户选择为例)
  17. notify()和 notifyAll()有什么区别
  18. C++/C语言中十进制转二进制的常见方法
  19. 开发常用英语单词表格
  20. signature=1c1223d10236c18f125cb9f7a490588e,Microscaled proteogenomic methods for precision oncology

热门文章

  1. 预付费水电表系统功能有哪些?
  2. jQuery 验证码输入错误后自动刷新验证码 点击验证码图片刷新验证码
  3. PyCharm社区版安装教程和环境配置及使用
  4. 来自量子世界的新技术---算法篇
  5. 修改oracle nls_language
  6. 二进制、八进制、十进制、十六进制之间的互相转化
  7. c语言字符型数据是,C语言字符型数据.doc
  8. 编程题目+数据库题目总结(3)
  9. 学习一个 Linux 命令:realpath 命令
  10. 高等数学笔记-乐经良老师-第八章-多元函数微分学(Ⅱ)