文章首发于51CTO技术栈公众号 作者 陈彩华 文章转载交流请联系 caison@aliyun.com
本文主要介绍什么是推荐系统,为什么需要推荐系统,如何实现推荐系统的方案,包括实现推荐系统的一些常见模型,希望给读者提供学习实践参考。
1 推荐系统概述为什么需要推荐系统信息爆炸
对于信息消费者,需要从大量信息中找到自己感兴趣的信息,而在信息过载时代,用户难以从大量信息中获取自己感兴趣、或者对自己有价值的信息。
对于信息生产者,信息生产者,需要让自己生产的信息脱颖而出,受到广大用户的关注。从物品的角度出发,推荐系统可以更好地发掘物品的长尾(long tail)。
长尾效应
长尾效应是美国《连线》杂志主编Chris Anderson在于2006年出版了《长尾理论》一书中指出,传统的80/20原则(80%的销售额来自于20%的热门品牌)在互联网的加入下会受到挑战。互联网条件下,由于货架成本极端低廉,电子商务网站往往能出售比传统零售店更多的商品。这些原来不受到重视的销量小但种类多的产品或服务由于总量巨大,累积起来的总收益超过主流产品的现象。
主流商品往往代表了绝大多数用户的需求,而长尾商品往往代表了一小部分用户的个性化需求。
推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的商品。
推荐系统的任务在于:一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢。
推荐系统的本质通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。
推荐系统常用的3种联系用户和物品的方式
推荐系统就是自动联系用户和物品的一种工具,它能够在信息过载的环境中帮助用户发现令他们感兴趣的信息,也能将信息推送给对它们感兴趣的用户。
评价指标从产品的角度出发,评价一个推荐系统可以从以下维度出发:
用户满意度
用户作为推荐系统的重要参与者,其满意度是评测推荐系统的最重要指标。但是,用户满意度没有办法离线计算,只能通过用户调查或者在线实验获得。预测准确度
预测准确度度量一个推荐系统或者推荐算法预测用户行为的能力。这个指标是最重要的推荐系统离线评测指标,从推荐系统诞生的那一天起,几乎99%与推荐相关的论文都在讨论这个指标。
在计算该指标时需要有一个离线的数据集,该数据集包含用户的历史行为记录。然后,将该数据集通过时间分成训练集和测试集。最后,通过在训练集上建立用户的行为和兴趣模型预测用户在测试集上的行为,并计算预测行为和测试集上实际行为的重合度作为预测准确度。覆盖率
覆盖率( coverage )描述一个推荐系统对物品长尾的发掘能力。覆盖率有不同的定义方法,
最简单的定义为推荐系统能够推荐出来的物品占总物品集合的比例。多样性
用户的兴趣是广泛的,为了满足用户广泛的兴趣,推荐列表需要能够覆盖用户不同的兴趣领域,即推荐结果需要具有多样性。新颖性
新颖的推荐是指给用户推荐那些他们以前没有听说过的物品。在一个网站中实现新颖性的最简单办法是,把那些用户之前在网站中对其有过行为的物品从推荐列表中过滤掉。惊喜度
与新颖性不同,如果推荐结果和用户的历史兴趣不相似,但却让用户觉得满意,那么就可以说推荐结果的惊喜度很高,而推荐的新颖性仅仅取决于用户是否听说过这个推荐结果。信任度
对于基于机器学习的自动推荐系统,同样存在信任度( trust )的问题,如果用户信任推荐系统,那就会增加用户和推荐系统的交互。同样的推荐结果,以让用户信任的方式推荐给用户就更能让用户产生购买欲,而以类似广告形式的方法推荐给用户就可能很难让用户产生购买的意愿。
度量推荐系统的信任度只能通过问卷调查的方式,询问用户是否信任推荐系统的推荐结果。实时性
推荐系统需要实时地更新推荐列表来满足用户新的行为变化,推荐系统需要能够将新加入系统的物品推荐给用户。这主要考验了推荐系统处理物品冷启动的能力。健壮性
任何一个能带来利益的算法系统都会被人攻击,这方面最典型的例子就是搜索引擎。搜索引擎的作弊和反作弊斗争异常激烈,而健壮性(即 robust, 鲁棒性)指标衡量了一个推荐系统抗击作弊的能力。
可以分为显性反馈行为(explicit feedback)和隐性反馈行为(implicit feedback)
显性反馈行为
是指用户明确表示对物品喜好的行为,主要方式就是评分和喜欢/不喜欢,常见的显性反馈行为可以参考如下表格:
| 用户行为 | 特征 | 作用 |
|---|---|---|
| 评分 | 整数量化的偏好,可能得取值是[0,n],n一般的取值是5或者10 | 通过用户对物品的评分,可以精确得到用户的偏好 |
| 投票 | 布尔值的偏好,取值是0或1 | 通过用户对物品的投票,可以精确得到用户的偏好 |
| 转发 | 布尔值的偏好,取值是0或1 | 通过用户对物品的投票,可以精确得到用户的偏好 |
| 保存书签 | 布尔值的偏好,取值是0或1 | 通过用户对物品的投票,可以精确得到用户的偏好 |
| 标记标签(tag) | 一些单词,需要对单词进行分析,得到偏好 | 通过分析用户的标签,可以得到用户对物品的理解,用户的情感,是喜欢还是厌恶 |
| 评论 | 一些文字,需要进行文本分析得到偏好 | 通过分析用户的评论,可以得到用户的情感,是喜欢还是厌恶 |
隐性反馈行为(implicit feedback)
指的是那些不能明确反应用户喜好的行为。最具代表性的隐性反馈行为就是页面浏览行为。用户浏览一个物品的页面并不代表用户一定喜欢这个页面展示的物品,比如可能因为这个页面链接显示在首页,用户更容易点击它而已。
相比显性反馈,隐性反馈虽然不明确,但数据量更大。在很多网站中,很多用户甚至只有隐性反
馈数据,而没有显性反馈数据。
基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的算法( neighborhood-based )、隐语义模型( latent factor model )、基于图的随机游走算法( random walk on graph )等。
下面主要展开介绍基于领域的算法和隐语义模型算法。
2.2 基于领域的算法2.2.1 算法概述基于邻域的方法是最著名的、在业界得到最广泛应用的推荐算法,而基于邻域的方法主要包含下面两种算法:
基于用户的协同过滤算法(UserCF)
基于物品的协同过滤算法(ItemCF)
算法涉及的基本步骤如下:
1 收集用户偏好,把用户对物品的偏好转换成可量化的综合评分值
2 找到相似的用户或物品
3 计算推荐
计算相似度主要有以下3种计算方式:
1 欧氏距离(Euclidean Distance)
向量欧式距离:其实就是求2个向量的夹角
3种计算相关系数的算法中,皮尔逊相关系数在生产中最为常用。
2.2.3 邻居的选择通过相似度计算出若干个最相似的邻居后,如何选择邻居?主要有以下方式:
邻居的选择
基于固定数量的邻居
该方式直接选择选择固定数量的邻居,有可能把相似度较小的对象也引入
基于相似度门槛的邻居
该方式先用相似度门槛筛选出邻居的一个集合,再从集合里面挑选出相似度较大的邻居。
可以避免把相似度较小的对象引入,效果更好
简单而言,就是给用户推荐和他兴趣相似的其他用户喜欢的物品
在一个在线个性化推荐系统中,当一个用户 A 需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户 A 没有听说过的物品推荐给 A 。这种方法称为基于用户的协同过滤算法。
基于用户的协同过滤
用于A与用户C的兴趣比较相似,用户C喜欢了物品4,所以给用户A推荐物品4
数学实现
作者:caison
链接:https://www.jianshu.com/p/90b7c7d4edf2



