推荐算法初步_算法总览

2021-01-15 10:45发布

1. 什么是推荐算法


推荐算法计算机专业中的一种算法,通过一些数学算法,推测出用户可能喜欢的东西,目前应用推荐算法比较好的地方主要是互联网,例如淘宝、头条新闻等。所谓推荐算法就是利用用户的一些行为,通过一些数学算法,推测出用户可能喜欢的东西。

推荐算法最早在1992年就提出来了,但是火起来实际上是最近这些年的事情,因为互联网的爆发,有了更大的数据量可以供我们使用,推荐算法才有了很大的用武之地。

 

套用在互联网领域中,指的就是最热的那一小部分资源将得到绝大部分的关注,而剩下的很大一部分资源却鲜少有人问津。这不仅造成了资源利用上的浪费,也让很多口味偏小众的用户无法找到自己感兴趣的内容。

  目的2:降低信息过载

  互联网时代信息量已然处于爆炸状态,若是将所有内容都放在网站首页上用户是无从阅读的,信息的利用率将会十分低下。因此我们需要推荐系统来帮助用户过滤掉低价值的信息。

  目的3:提高站点的点击率/转化率

  好的推荐系统能让用户更频繁地访问一个站点,并且总是能为用户找到他想要购买的商品或者阅读的内容。

  目的4:加深对用户的了解,为用户提供定制化服务

  可以想见,每当系统成功推荐了一个用户感兴趣的内容后,我们对该用户的兴趣爱好等维度上的形象是越来越清晰的。当我们能够精确描绘出每个用户的形象之后,就可以为他们定制一系列服务,让拥有各种需求的用户都能在我们的平台上得到满足。

  ……

 

3. 推荐算法的条件


现在的各种各样的推荐算法,但是不管怎么样,都绕不开几个条件,这是推荐的基本条件:

1.根据和你共同喜好的人来给你推荐 

2.根据你喜欢的物品找出和它相似的来给你推荐 

3.根据你给出的关键字来给你推荐,这实际上就退化成搜索算法了 

4.根据上面的几种条件组合起来给你推荐

 

4. 推荐算法分类


4.1 基于流行度的推荐算法

基于流行度的推荐算法比较简单粗暴,主要是对热点商品或者信息的推荐。它主要是根据PV、UV、日均PV或分享率等数据来按某种热度排序来推荐给用户。这种算法既有优点也有缺点。

优点:简单,适用于刚注册的新用户,能够解决对新用户进行推荐的冷启动问题;

缺点:无法针对用户提供个性化的推荐。基于这种算法也可做一些优化,比如加入用户分群的流行度排序,例如把热榜上的体育内容优先推荐给体育迷,把政要热文推给热爱谈论政治的用户。

 

4.2 基于内容的推荐算法

基于内容的推荐是在推荐引擎出现之初应用最为广泛的推荐机制,它的核心思想是根据推荐物品或内容的元数据,发现物品或者内容的相关性,然后基于用户以往的喜好记录,推荐给用户相似的物品。比如你看了哈利波特I,基于内容的推荐算法发现哈利波特II-VI,与你以前观看的在内容上面(共有很多关键词)有很大关联性,就把后者推荐给你。

这种推荐系统多用于一些资讯类的应用上,针对文章(电影音乐)本身抽取一些tag作为该其关键词,继而可以通过这些tag来评价两篇文章的相似度。

优点:

1、易于实现,不需要用户数据因此不存在稀疏性和冷启动问题。

2、基于物品本身特征推荐,因此不存在过度推荐热门的问题。

缺点:

1、抽取的特征既要保证准确性又要具有一定的实际意义,否则很难保证推荐结果的相关性。豆瓣网采用人工维护tag的策略,依靠用户去维护内容的tag的准确性。

2、推荐的Item可能会重复,典型的就是新闻推荐,如果你看了一则关于MH370的新闻,很可能推荐的新闻和你浏览过的,内容一致。

 

4.3 基于关联规则的推荐算法

基于关联规则的推荐更常见于电子商务系统中,并且也被证明行之有效。其实际的意义为购买了一些物品的用户更倾向于购买另一些物品。基于关联规则的推荐系统的首要目标是挖掘出关联规则,也就是那些同时被很多用户购买的物品集合,这些集合内的物品可以相互进行推荐。目前关联规则挖掘算法主要从Apriori和FP-Growth两个算法发展演变而来。 基于关联规则的推荐系统一般转化率较高,因为当用户已经购买了频繁集合中的若干项目后,购买该频繁集合中其他项目的可能性更高。

缺点:

1.计算量较大,但是可以离线计算,因此影响不大。

2.由于采用用户数据,不可避免的存在冷启动和稀疏性问题。

3.存在热门项目容易被过度推荐的问题。

 

4.4 基于协同过滤的推荐

协同过滤是一种在推荐系统中广泛采用的推荐方法。这种算法基于一个“物以类聚,人以群分”的假设,喜欢相同物品的用户更有可能具有相同的兴趣。基于协同过滤的推荐系统一般应用于有用户评分的系统之中,通过分数去刻画用户对于物品的喜好。协同过滤被视为利用集体智慧的典范,不需要对项目进行特殊处理,而是通过用户建立物品与物品之间的联系。 目前,协同过滤推荐系统被分化为两种类型:基于用户(User-based)的推荐和基于物品(Item-based)的推荐。

 

4.4.1 基于用户(User-based)的推荐

基于用户的协同过滤推荐的基本原理是,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到 K 邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。

下图给出了一个例子,对于用户 A,根据用户的历史偏好,这里只计算得到一个邻居 - 用户 C,然后将用户 C 喜欢的物品 D 推荐给用户 A。

优点:在于推荐物品之间在内容上可能完全不相关,因此可以发现用户的潜在兴趣,并且针对每个用户生成其个性化的推荐结果。

缺点:在于一般的Web系统中,用户的增长速度都远远大于物品的增长速度,因此其计算量的增长巨大,系统性能容易成为瓶颈。因此在业界中单纯的使用基于用户的协同过滤系统较少。

 

优点:同基于用户的推荐相比,基于物品的推荐应用更为广泛,扩展性和算法性能更好。由于项目的增长速度一般较为平缓,因此性能变化不大。

缺点:无法提供个性化的推荐结果。

 

4.4.3 协同过滤算法总结

基于用户和基于物品两个策略中应该如何选择呢?其实基于物品的协同过滤推荐机制是 Amazon 在基于用户的机制上改良的一种策略,因为在大部分的 Web 站点中,物品的个数是远远小于用户的数量的,而且物品的个数和相似度相对比较稳定;同时基于物品的机制比基于用户的实时性更好。但也不是所有的场景都是这样的情况,在一些新闻推荐系统中,也许物品,也就是新闻的个数可能大于用户的个数,而且新闻的更新程度也很快,所以它的相似度依然不稳定。所以,推荐策略的选择其实也和具体的应用场景有很大的关系。

基于协同过滤的推荐机制是现今应用最为广泛的推荐机制,它有以下几个显著的优点:

  1. 它不需要对物品或者用户进行严格的建模,而且不要求物品的描述是机器可以理解的,所以这种方法也是领域无关的。

  2. 这种方法计算出来的推荐是开放的,可以共用他人的经验,很好的支持用户发现潜在的兴趣偏好。

然后而它也存在以下几个缺点:

  1. 方法的核心是基于历史数据,所以对新物品和新用户都有“冷启动”的问题。

  2. 推荐的效果依赖于用户历史偏好数据的多少和准确性。

  3. 在大部分的实现中,用户历史偏好是用稀疏矩阵进行存储的,而稀疏矩阵上的计算有些明显的问题,包括可能少部分人的错误偏好会对推荐的准确度有很大的影响等等。

  4. 对于一些特殊品味的用户不能给予很好的推荐。

  5. 由于以历史数据为基础,抓取和建模用户的偏好后,很难利用获取的用户偏好演变,从而导致这个方法不够灵活。

 

4.5 基于模型的推荐算法

基于模型的方法有很多,主要是使用常用的机器学习算法对目标用户建立推荐算法模型,然后对用户的爱好进行预测推荐以及对推荐的结果打分排序等。 常用的模型包括Aspect Model,pLSA,LDA,聚类,SVD,Matrix Factorization,LR,GBDT等,这种方法训练过程比较长,但是训练完成后,推荐过程比较快且准确。因此它比较适用于实时性比较高的业务如新闻、广告等。当然,而若是需要这种算法达到更好的效果,则需要人工干预反复的进行属性的组合和筛选,也就是我们常说的特征工程。而由于新闻的时效性,系统也需要反复更新线上的数学模型,