什么是推荐系统?
首先我们来了解一下推荐系统是什么?推荐系统是一种信息过滤系统,它可以基于用户的历史行为数据或物品数据,通过一定的算法,为用户推荐符合需求的物品。比如,我从Amazon买了一本《时间简史》。下次再浏览的时候,它推荐我我可能喜欢《未来简史》;两个人在同一个地方同一个时间打开今日头条。他们却在首页看到不一样的内容,推荐系统实际上已经在我们生活中十分常见。
推荐解决的主要问题
互联网时代是信息过载的时代,面对包罗万象的各种信息,我们如何应对?为了解决信息过载的问题,已经陆续诞生了很多的解决方案(分类目录,搜索引擎,推荐系统等)。推荐系统通过挖掘用户和产品的二元关系,找到用户感兴趣的产品。其作用在于:
- 帮助用户快速发现感兴趣和高质量的信息,提升用户体验。
- 增加用户使用产品时间。
- 减少用户浏览到重复或者厌恶的信息带来的不利影响。
- 提供个性化信息,信息的推荐更为精准。
和搜索的差别
推荐系统和搜索引擎在本质上都是一个信息检索的系统。但是它和搜索最大的区别是,搜索是主动式的,根据用户输入的关键词去数据库中搜索匹配用户输入的结果、并运用机器学习或者其他排序手段进行排序,最终展现给用户。而我们看到的推荐系统,是在用户没有明确需求的情况,即用户没有主动输入的行为,通过利用上下文,当前用户所处的环境,分析用户的历史行为给用户的兴趣建模,从而主动给用户推荐能够满足他们兴趣和需求的信息。
推荐系统中的典型流程
整体架构图
推荐系统整体架构包括基础层、模型层,算法层,组合层和应用层五层。
-
基础层:包括用户基本属性数据,内容数据的收集和处理,以及用户行为日志收集传输,挖掘和存储,基于用户的行为数据,在不同维度下生成各种热门库,包括pv,ctr等。
-
模型层:一方面对内容进行处理成机器和算法可以理解的特征,比如分类,标签等。具体怎么处理要看业务需求,如果是文章相关的,那么会需要涉及自然语言处理;如果是图片,视频就会涉及到图片识别和处理。最总会生成一套用户标签体系,包括用户画像和内容画像。另一方面,根据用户的浏览数据,会挖掘用户和用户关系,物品和物品关系以及用户物品关系。
-
算法层:主要是基于各种算法进行召回的计算,例如热门召回、用户兴趣召回、关联规则、协同过滤、矩阵分解和DNN等,这一层主要是用MapReduce和Hive做离线计算,利用Spark,tensorflow进行模型训练。
-
融合层:在算法层我们介绍了协同过了,兴趣召回等多种算法,然而不同的算法,均有它自身的属性,并且其推荐结果也存在差别。如何平衡各个算法的推荐结果?在算法层,各种不同的推荐算法会产生各不相同的召回数据,融合层的主要作用就是对不同算法产生的结果进行汇总并且排序的过程。融合层常用策略包括基于规则的融合:通过加权混合的方式。我们根据各个推荐算法的苹果效果,给予不同的权重,推荐效果好的算法,给予更高的权重,效果差的给予更低的权重,进行混合排序。另一种方式首先用效果好的推荐算法推荐,如果推荐的数据不够时用效果差的补充。基于机器学习的融合策略包括:LR、FM、GBDT、融合模型等,首先获取访问用户的特征,历史浏览记录,已经各个推荐算法的召回数据的内容特征等。再应用机器学习预测模型,预估召回数据集中的各个ad的点击率。最后根据点击率高低进行排序。
-
应用层:应用层主要是负责向外部提供接口服务。外部程序通过rpc调用的方式请求应用层的API接口。
用户访问流程
每次用户访问网站的首先会获取用户id,根据用户id查询用户画像的数据,获取用户活动区域,偏爱类目,价格等特征。基于区域,类目,价格等可以进行多策略召回。然后对各个策略的产生的结果进行融合,去重和过滤,然后将结果进行排序下发给用户。在整个流程中有两个重要的点,分别是去重和下发。
-
去重逻辑
在召回层,我们会同时使用多种不同的策略进行召回,包括,基于用户当前所处的地域,和用户感兴趣的类型,协同过滤,还有用户画像,在这多个召回策略中很有可能会出现同一短视频在多个召回策略中出现,因此我们在融合多个召回结果的时候需要进行过滤,去重。在完成去重逻辑之后,为了防止给用户推荐之前用户已经推荐过的产品,我们需要记录每次给用户推荐的产品。在每次推荐的时候和之前已经推荐过的列表进行去重。通常而言一般会记录用户最近一周的数据。
-
下发逻辑
对于不同算法触发出来的候选集,只是根据算法的历史效果决定算法产生的item的位置并不能取得非常好的效果,同时在每个算法的内部,不同item的顺序也只是简单的由一个或者几个因素决定,这些排序结果需要借助机器学习的方法,使用相关的排序模型,综合多方面的因素来决定。常用的排序方式是通过逻辑回归进行点击率预估,根据预测的概率值进行排序,并展现给用户
用户行为反馈流程
用户在网站的行为,一方面用于触发各种离线召回策略的计算,包括用户画像更新,热点推荐重算等,当用户访问一个新的短视频时候,我们首先获取这个短视频的内容标签,然后根据这个内容标签取更新用户标签。另一方面这些行为在不同程度上反应了用户的意图。在重排序模型中可以对不同的行为给予不同的权重值以更细地刻画用户的行为强弱。
-
行为种类(显性、隐性)
用户行为在个性化推荐系统中一般分为两种:显性反馈行为,和隐性反馈行为。显性反馈行为包括用户明确表示对物品喜恶的行为。隐性反馈行为指的是那些不能明确反映用户喜恶的行为,但数据量更大。在很多网站中,很多用户甚至只有隐性反馈数据
-
行为的重要度
用户行为在个性化推荐系统中主要包括如下:搜索,筛选,点击,收藏,点赞。 最重要的是点赞和收藏,其次是点击,排在最后是搜索和筛选
离线计算流程
-
内容特征计算
内容特征处理最大的问题就是高纬问题。即使去掉低频词和高报词等停用词后,维度依然很高。为了提高推荐系统的精度和效率,常常通过特征选择的办法进行降维
具体做法是构造一个评估函数对特征向量中的所有特征逐一评分,选取分值高于设定阑值的特征。常用的评估函数有:文档频数、词频函数、TIFDF、期望交叉摘、CHI、信息增益、互信息等。
并且内容不仅是文字,仍会有图片、视频、语音等,对于这三者,因为维度完全不同,所以使用手段与方法也完全不同。对于图片内容,通过标签也就是图片标注,和图片识别的方式来生成特征。对于视频内容,首先抽取视频中的图片,再识别抽取的图片中的内容,生成标签,最终汇总各个图片的标签,形成视频标签。对于音频,一方面获取标题中的信息。另外一方面通过语音识别技术将语音转换成文字,然后进行标记。
-
用户特征计算
用户特征的计算主要是通过对用户行为进行分析。包活用户点击,收藏,点赞,结合用户基本属性,再进行后处理。再有要将特征值加以过滤,分配权重,结合衰减因子进行最终输出。最终输出的结果应该分为基本属性、用户兴趣、用户关系及用户行为,结合所有综合分析用户动机,在适时的时候推荐合适的内容从而形成推荐最佳化的最终目的,让用户最小成本的获取信息
推荐效果如何评估?
-
时效性
时效性内容指的是那些与时间强相关的内容,比如新闻、时事等。如果一条10天前xx球员获得冠军的新闻现在被推荐了出来,可想用户肯定是莫名其妙或者是很失望的。因此,对于时效性内容,需要与普通的待推荐的内容区分开,做单独的推荐或者不走个性化推荐。
-
准确度
如果是类似评分机制,则一般计算均方根误差(误差平方和取均值)和平均绝对误差(误差绝对值和取平均)。如果是topN推荐的话,则主要计算召回率和准确率。准确率就是指我推荐的n个物品中有多少个是对的,其所占的比重。 召回率则是指正确结果中有多少比率的物品出现在了推荐结果中。两者的不同就是前者已推荐结果个数当除数,后者已正确结果个数当除数。
-
用户满意度
这是最最关键的指标,推荐系统推荐物品,就是希望推荐出来的物品能让用户满意。可以有两种方法,一是用户问卷调查,二是在线评测满意度,比如豆瓣的推荐物品旁边都有满意和不满意的按钮,亚马逊这种可以计算推荐的物品有没有被用户购买等等,一般用点击率,用户停留时间,转化率等指标来度量
-
新颖性
不能说系统推荐的物品其实我都知道,那这样推荐系统就完全失去了存在的意义,一般都希望推荐一些用户不知道或者没看过的视频。方法一是取出已经看到过视频,但这还不够,一般会计算推荐商品的平均流行度,因为通常越不热门的物品越会让用户觉得新颖。比如我爱周星驰,那么推荐《临岐》就很有新颖性,因为大家都不知道这是周星驰出演的
-
惊喜度
这个和新颖度还是有区别的,惊喜度是讲我直觉想不出来为什么会给我推荐这物品,比如电影,但是我看了之后觉得很符合我的胃口,这就是惊喜度。像上面一个例子,只要我知道是周星驰演的,那可能就没什么惊喜度,因为我知道是因为演员才给我推荐的这部电影
-
多样性
虽然推荐系统最主要还是满足用户的兴趣,但是也要兼顾内容的多样性,对于权重不同的兴趣都要做到兼顾.比如我看电影,我既喜欢看格斗类的电影,同时又喜欢爱装文艺,那么给我的推荐列表中就应该这两个类型的电影都有,而且得根据我爱好比例来推荐,比如我平时80%是看格斗类的,20%是看文艺类的,那么推荐结果中最好也是这个比例。可以根据物品间的相似度来计算,一个推荐列表中如果所有物品间的相似度都比较高,那么往往说明都是同一类物品,缺乏多样性
推荐系统难点
-
精准把握用户的兴趣
用户兴趣不仅存在多样性,而且会随着时间的变化而改变。对此我们在用户画像中引入了长短兴趣画像,提升模型效果。通过引入时间因子,对用户基于不同的时间周期分别做用户画像,比如基于最近半年的时间做长期用户画像,基于最近1个月的时间做短期用户画像,基于session会话周期进行实时用户画像,通过这三个不用的用户画像,我们可以更好的去捕捉用户的兴趣变化
兴趣基于时间的税衰减
- 冷启动问题
- 物品冷启动, 初期先给物品一定的曝光,观察一段时间的,评估预期收益,如果预期收益好,则增加曝光,如果预期收益不好,则减少曝光
- 对于用户冷启动, 采集用户登录app时的信息,地理位置,机型,然后进行推荐。极端情况,推荐高质量的物品,并增加物品丰富性,利用实时推荐进行更新
- 性能问题
- 离线,准实时和实时 三级推荐框架
- 用户纬度的缓冲