架构之路程序员产品经理

一文简单理解推荐系统

2018-10-29  本文已影响158人  caison
文章首发于51CTO技术栈公众号
作者 陈彩华
文章转载交流请联系 caison@aliyun.com

本文主要介绍什么是推荐系统,为什么需要推荐系统,如何实现推荐系统的方案,包括实现推荐系统的一些常见模型,希望给读者提供学习实践参考。

1 推荐系统概述

为什么需要推荐系统

信息爆炸

长尾效应是美国《连线》杂志主编Chris Anderson在于2006年出版了《长尾理论》一书中指出,传统的80/20原则(80%的销售额来自于20%的热门品牌)在互联网的加入下会受到挑战。互联网条件下,由于货架成本极端低廉,电子商务网站往往能出售比传统零售店更多的商品。这些原来不受到重视的销量小但种类多的产品或服务由于总量巨大,累积起来的总收益超过主流产品的现象。

主流商品往往代表了绝大多数用户的需求,而长尾商品往往代表了一小部分用户的个性化需求。

推荐系统通过发掘用户的行为,找到用户的个性化需求,从而将长尾商品准确地推荐给需要它的用户,帮助用户发现那些他们感兴趣但很难发现的商品。

推荐系统的任务在于:一方面帮助用户发现对自己有价值的信息,另一方面让信息能够展现在对它感兴趣的用户面前,从而实现信息消费者和信息生产者的双赢。

推荐系统的本质

通过一定的方式将用户和物品联系起来,而不同的推荐系统利用了不同的方式。

推荐系统常用的3种联系用户和物品的方式

推荐系统就是自动联系用户和物品的一种工具,它能够在信息过载的环境中帮助用户发现令他们感兴趣的信息,也能将信息推送给对它们感兴趣的用户。

评价指标

从产品的角度出发,评价一个推荐系统可以从以下维度出发:

2 基于用户行为推荐

2.1 用户行为

可以分为显性反馈行为(explicit feedback)隐性反馈行为(implicit feedback)

用户行为 特征 作用
评分 整数量化的偏好,可能得取值是[0,n],n一般的取值是5或者10 通过用户对物品的评分,可以精确得到用户的偏好
投票 布尔值的偏好,取值是0或1 通过用户对物品的投票,可以精确得到用户的偏好
转发 布尔值的偏好,取值是0或1 通过用户对物品的投票,可以精确得到用户的偏好
保存书签 布尔值的偏好,取值是0或1 通过用户对物品的投票,可以精确得到用户的偏好
标记标签(tag) 一些单词,需要对单词进行分析,得到偏好 通过分析用户的标签,可以得到用户对物品的理解,用户的情感,是喜欢还是厌恶
评论 一些文字,需要进行文本分析得到偏好 通过分析用户的评论,可以得到用户的情感,是喜欢还是厌恶

基于用户行为数据设计的推荐算法一般称为协同过滤算法。学术界对协同过滤算法进行了深入研究,提出了很多方法,比如基于邻域的算法( neighborhood-based )、隐语义模型( latent factor model )、基于图的随机游走算法( random walk on graph )等。

下面主要展开介绍基于领域的算法和隐语义模型算法。

2.2 基于领域的算法

2.2.1 算法概述

基于邻域的方法是最著名的、在业界得到最广泛应用的推荐算法,而基于邻域的方法主要包含下面两种算法:

算法涉及的基本步骤如下:

2.2.2 相似度计算

计算相似度主要有以下3种计算方式:

3种计算相关系数的算法中,皮尔逊相关系数在生产中最为常用。

2.2.3 邻居的选择

通过相似度计算出若干个最相似的邻居后,如何选择邻居?主要有以下方式:

邻居的选择

该方式直接选择选择固定数量的邻居,有可能把相似度较小的对象也引入

该方式先用相似度门槛筛选出邻居的一个集合,再从集合里面挑选出相似度较大的邻居。
可以避免把相似度较小的对象引入,效果更好

2.2.4 基于用户的协同过滤算法(UserCF)

算法概述

简单而言,就是给用户推荐和他兴趣相似的其他用户喜欢的物品

在一个在线个性化推荐系统中,当一个用户 A 需要个性化推荐时,可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的、而用户 A 没有听说过的物品推荐给 A 。这种方法称为基于用户的协同过滤算法。

基于用户的协同过滤

用于A与用户C的兴趣比较相似,用户C喜欢了物品4,所以给用户A推荐物品4

数学实现

用户评分矩阵

已知用户评分矩阵Matrix R(一般都是非常稀疏的),推断矩阵中问号处的评分值

UserCF模型存在问题

基础解决方案

基于用户的协同过滤不流行的原因

2.2.5 基于物品的协同过滤算法(ItemCF)

算法概述

简单而言,就是给用户推荐和他之前喜欢的物品相似的物品

基于物品的协同过滤算法(简称 ItemCF )给用户推荐那些和他们之前喜欢的物品相似的物品。

比如,该算法会因为你购买过《数据挖掘导论》而给你推荐《机器学习》。不过, ItemCF 算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算物品之间的相似度。该算法认为,物品 A 和物品 B 具有很大的相似度是因为喜欢物品 A 的用户大都也喜欢物品B。

物品1和物品3都被用户A和用户B喜欢,所以认为是相似物品,所以当用户C喜欢物品1,就给用户C推荐物品3

算法主要主要步骤如下:

数学实现思路

预测用户评分

需要用户用户5对物品1的评分r_15,由于物品3、物品6是与物品1最为相似的2个物品,取相似度作为权重,所以r_15可以预测如下:
r\_15 = (0.41*2 + 0.59*3)/ (0.41 + 0.59) = 2.6

模型优势

2.2.6 UserCF和ItemCF综合比较

UserCF 给用户推荐那些和他有共同兴趣爱好的用户喜欢的物品,而 ItemCF 给用户推荐那些和他之前喜欢的物品类似的物品。从这个算法的原理可以看到:

换句话说:

UserCF ItemCF
性能 适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大 适用于物品数明显小于用户数的场合,如果物品很多(网页),计算物品相似度矩阵代价很大
领域 时效性较强,用户个性化兴趣不太明显的领域 长尾物品丰富,用户个性化需求强烈的领域
实时性 用户有新行为,不一定造成推荐结果的立即变化 用户有新行为,一定会导致推荐结果的实时变化
冷启动 在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的。

新物品上线后一段时间,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户
新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品。

但没有办法在不离线更新物品相似度表的情况下将新物品推荐给用户
推荐理由 很难提供令用户信服的推荐解释 利用用户的历史行为给用户做推荐解释,可以令用户比较信服
常见场景 实时新闻
突发情况
图书
电子商务
电影
外卖

3 基于用户标签推荐

3.1 标签推荐概述

推荐系统联系用户和物品的3种途径

推荐系统的目的是联系用户的兴趣和物品,这种联系需要依赖不同的媒介。目前流行的推荐系统基本上通过3种方式联系用户兴趣和物品:

3.2 标签相关问题

3.2.1 标签的定义

根据维基百科的定义,标签是一种无层次化结构的、用来描述信息的关键词,它可以用来
描述物品的语义。根据给物品打标签的人的不同,标签应用一般分为两种:

3.2.2 用户为什么要打标签

从产品的角度,我们需要理解用户打标签的行为,为什么要打标签,只有深入了解用户的行为,我们才能基于这个行为设计出令他们满意的个性化推荐系统。

用户这个行为背后的原因主要可以从2个维度进行探讨:

3.2.3 用户打什么样的标签

3.2.4 为什么要给用户推荐标签

用户浏览某个物品时,标签系统非常希望用户能够给这个物品打上高质量的标签,这样才能促进标签系统的良性循环。因此,很多标签系统都设计了标签推荐模块给用户推荐标签。一般认为,给用户推荐标签有以下好处。

3.2.5 如何给用户推荐标签

用户 u 给物品 i 打标签时,我们有很多方法可以给用户推荐和物品 i 相关的标签。比较简单的方
法有 4 种:

3.3 一个最简单的算法

基本步骤如下:

对于上面算法,用户u对于物品i的兴趣公式如下:
p(u,i)=\sum_bn_{u,b}n_{b,i}
B(u) 是用户u打过的标签集合,
B(i)是物品i被打过标签的集合,
n_{u,b} 是用户 u 打过标签b的次数,
n_{b,i}是物品 i 被打过标签 b 的次数

用户 - 标签 - 物品

某用户使用过“幽默”标签10次,“搞笑”标签3次,“讽刺”标签6次。这3个标签被物品A使用的次数分别的4、7、2。
由此计算用户对物品的兴趣值为:10 * 4 + 3* 7 + 6*2 = 73

上面的计算公式会倾向于给热门标签对应的热门物品很大的权重,因此会造成推荐热门的物品给用户,从而降低推荐结果的新颖性,还有数据稀疏性的问题,可以通过计算结果除以惩罚项来进行修正。

4 系统冷启动问题

问题简介

系统冷启动(cold start)问题主要在于如何在一个新开发的网站上(还没有用户,也没有用户行为,只有一些物品的信息)设计个性化推荐系统,从而在网站刚发布时就让用户体验到个性化推荐服务这一问题

主要可以分为3类:

解决思路

针对上述3类冷启动问题,一般来说,可以参考如下解决方案:

5 评估指标

R(u) 是根据用户在训练集上的行为给用户作出的推荐列表, T(u) 是用户在测试集上的行为列表

实际上,不同的平台还有不同的衡量标准,例如用户满意度,广告收益,需要结合实际业务情况做策略调整。

6 系统架构

6.1 基于特征的推荐系统

再次回顾一下上面提到的推荐系统联系用户和物品的3种途径

推荐系统联系用户和物品的3种途径

如果将这3种方式都抽象一下就可以发现,如果认为用户喜欢的物品也是一种用户特征,或者和用户兴趣相似的其他用户也是一种用户特征,那么用户就和物品通过特征相联系。

基于特征的推荐系统

用户特征种类特别多,主要包括一下几类

6.2 系统整体架构

由于推送策略本身的复杂性,如果要在一个系统中把上面提到的各种特征和任务都统筹考虑,那么系统将会非常复杂,而且很难通过配置文件方便地配置不同特征和任务的权重。
因此,推荐系统需要由多个推荐引擎组成,每个推荐引擎负责一类特征和一种任务,而推荐系统的任务只是将推荐引擎的结果按照一定权重或者优先级合并、排序然后返回。

推荐系统基本架构图

这样做有2个好处:

我们可以将每一种策略都设计成一个推荐引擎,然后通过分析用户对推荐结果的反馈了解用户比较喜欢哪些引擎推荐出来的结果,从而对不同的用户给出不同的引擎组合权重。

6.3 推荐引擎架构

推荐引擎使用一种或几种用户特征,按照一种推荐策略生成一种类型物品的推荐列表,基本架构如下图:


推荐引擎架构图

如图,推荐引擎架构主要包括3部分

其中,有几个模块需要特别介绍一下:

7 总结

除了本文介绍的模型算法,基于用户行为推荐还有隐语义模型,基于图的模型比较常见,还有的基于上下文、社交网络推荐。实际有一些常见的算法库可以实际推荐系统运算,包括LibRec,Crab等。

参考

《推荐系统实践》

一文读懂推荐系统知识体系)

个性化推荐系统总结

推荐系统介绍

上一篇下一篇

猜你喜欢

热点阅读