我是靠谱客的博主 自然盼望,最近开发中收集的这篇文章主要介绍基于内容的推荐算法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

        协同过滤(Collaborative Filtering Recommendations,简称CF)是目前最流行的推荐方法,在研究界和工业界得到大量使用。但是,工业界真正使用的系统一般都不会只有CF推荐算法,基于内容的推荐(Content-basedRecommendations,CB)基本也会是其中的一部分。

        基于内容的推荐服从如下假设:对于特定目标用户,在内容上与该用户以往感兴趣的信息项目相似的项目,用户将来很可能对这些项目仍感兴趣。

        基于内容的推荐的基本思想是:对每个用户都用一个称作用户的兴趣模型(User Profile)的文件构成数据结构来描述其喜好;对每个项目的内容进行特征提取(FeatureExtraction),形成特征向量(Feature Vector);当需要对某个用户进行推荐时,把该用户的用户兴趣模型同所有项目的特征矩阵进行比较得到二者的相似度,系统通过相似度推荐文档。

1、层次结构

        CB的过程一般包括以下三步

      (1Item Representation:为每个item抽取出一些特征(也就是item的content了)来表示此item;       对应着上图中的Content Analyzer。

      (2)Profile Learning:利用一个用户过去喜欢(及不喜欢)的item的特征数据,来学习出此用户的喜好特征(profile);     对应着上图中的Profile Learner。

      (3Recommendation Generation:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item。    对应着上图中的Filtering Component。

        举个例子说明前面的三个步骤。(1对于个性化阅读来说,一个item就是一篇文章。根据上面的第一步,我们首先要从文章内容中抽取出代表它们的属性。常用的方法就是利用出现在一篇文章中的词来代表这篇文章,而每个词对应的权重往往使用信息检索中的TF-IDF来计算。利用这种方法,一篇抽象的文章就可以使用具体的一个向量来表示了。(2第二步就是根据用户过去喜欢什么文章来产生刻画此用户喜好的profile了,最简单的方法可以把用户所有喜欢的文章对应的向量的平均值作为此用户的profile。比如某个用户经常关注与推荐系统有关的文章,那么他的profile中“CB”、“CF”和“推荐”对应的权重值就会较高。(3在获得了一个用户的profile后,CB就可以利用所有item与此用户profile的相关度对他进行推荐文章了。一个常用的相关度计算方法是cosine。最终把候选item里与此用户最相关(cosine值最大)的N个item作为推荐返回给此用户。

2、详细介绍上面的三个步骤

2.1 Item Representation

        真实应用中的item往往都会有一些可以描述它的属性。这些属性通常可以分为两种:结构化的(structured)属性与非结构化的(unstructured)属性。所谓结构化的属性就是这个属性的意义比较明确,其取值限定在某个范围;而非结构化的属性往往其意义不太明确,取值也没什么限制,不好直接使用。比如在交友网站上,item就是人,一个item会有结构化属性如身高、学历、籍贯等,也会有非结构化属性(如item自己写的交友宣言,博客内容等等)。对于结构化数据,我们自然可以拿来就用;但对于非结构化数据(如文章),我们往往要先把它转化为结构化数据后才能在模型里加以使用。真实场景中碰到最多的非结构化数据可能就是文章了(如个性化阅读中)。下面我们就详细介绍下如何把非结构化的一篇文章结构化。

        基于内容的推荐方法在文本类推荐领域得到了广泛应用相比于多媒体信息(视频、音频、图片等),文本类项目(新闻、网页、博客)的特征提取相对容易。


2.2 Profile Learning

        假设用户u已经对一些item给出了他的喜好判断,喜欢其中的一部分item,不喜欢其中的另一部分。那么,这一步要做的就是通过用户u过去的这些喜好判断,为他产生一个模型。有了这个模型,我们就可以根据此模型来判断用户u是否会喜欢一个新的item。所以,我们要解决的是一个典型的有监督分类问题,理论上机器学习里的分类算法都可以照搬进这里。

        简单地说,就是把用户所有浏览过的item分类,分成用户喜爱和不喜爱的两类,然后利用喜爱的这部分对用户进行建模。

        下面我们简单介绍下CB里常用的一些学习算法:

2.2.1 最近邻方法(k-NearestNeighbor,简称KNN)

        对于一个新的item,最近邻方法首先找用户u已经评判过并与此新item最相似的k个item,然后依据用户u对这k个item的喜好程度来判断其对此新item的喜好程度。这种做法和CF中的item-based KNN很相似,差别在于这里的item相似度是根据item的属性向量计算得到,而CF中是根据所有用户对item的评分计算得到。

        对于这个方法,比较关键的可能就是如何通过item的属性向量计算item之间的两两相似度。建议对于结构化数据,相似度计算使用欧几里得距离;而如果使用向量空间模型(VSM)来表示item的话,则相似度计算可以使用cosine。

2.2.2  Rocchio算法

       Rocchio算法是信息检索中处理相关反馈(Relevance Feedback)的一个著名算法。比如你在搜索引擎里搜“苹果”,当你最开始搜这个词时,搜索引擎不知道你到底是要能吃的苹果,还是要不能吃的苹果,所以它往往会尽量呈现给你各种结果。当你看到这些结果后,你会点一些你觉得相关的结果(这就是所谓的相关反馈了)。然后如果你翻页查看第二页的结果时,搜索引擎可以通过你刚才给的相关反馈,修改你的查询向量取值,重新计算网页得分,把跟你刚才点击的结果相似的结果排前面。比如你最开始搜索“苹果”时,对应的查询向量是{“苹果” : 1}。而当你点击了一些与Mac、iPhone相关的结果后,搜索引擎会把你的查询向量修改为{“苹果” : 1, “Mac” : 0.8, “iPhone” : 0.7},通过这个新的查询向量,搜索引擎就能比较明确地知道你要找的是不能吃的苹果了。Rocchio算法的作用就是用来修改你的查询向量的:{“苹果”: 1}--> {“苹果”: 1, “Mac”: 0.8, “iPhone”:0.7}。


        正如在本节开头所说,本节要解决的是一个典型的有监督分类问题。所以各种有效的分类机器学习算法都可以用到这里,下面列举几个常用的分类算法:

2.2.3 决策树算法(DecisionTree,简称DT)

        当item的属性较少而且是结构化属性时,决策树一般会是个好的选择。这种情况下决策树可以产生简单直观、容易让人理解的结果。而且我们可以把决策树的决策过程展示给用户u,告诉他为什么这些item会被推荐。但是如果item的属性较多,且都来源于非结构化数据(如item是文章),那么决策树的效果可能并不会很好。

2.2.4 线性分类算法(LinearClassifer,简称LC)

 

2.2.5朴素贝叶斯算法(NaiveBayes,简称NB)

        NB算法就像它的简称一样,牛逼!NB经常被用来做文本分类,它假设在给定一篇文章的类别后,其中各个词出现的概率相互独立。它的假设虽然很不靠谱,但是它的结果往往惊人地好。再加上NB的代码实现比较简单,所以它往往是很多分类问题里最先被尝试的算法。我们现在的profilelearning问题中包括两个类别:用户u喜欢的item,以及他不喜欢的item。在给定一个item的类别后,其各个属性的取值概率互相独立。我们可以利用用户u的历史喜好数据训练NB,之后再用训练好的NB对给定的item做分类。 

2.3 Recommendation Generation

        如果上一步Profile Learning中使用的是分类模型(如DT、LC和NB),那么我们只要把模型预测的用户最可能感兴趣的n个item作为推荐返回给用户即可。而如果Profile Learning中使用的直接学习用户属性的方法(如Rocchio算法),那么我们只要把与用户属性最相关的n个item作为推荐返回给用户即可。其中的用户属性与item属性的相关性可以使用如cosine等相似度度量获得。

        CB的用户模型和信息项目模型一般釆用VSM模型进行表示。在CB中,对于目标用户c,其基于内容的用户描述可以表示为函数uf(c),而特定项目s的内容模型为if(s),则推荐系统的效用函数u(c,s)可以表示为项目的评分函数score:


        CB的评分函数一般采用特定相似度(Similarity)来度量项目与用户的相关性,夹角余弦相似度(cosineSIMilarity, COSIM)是CB中使用最广泛的相似度。COSIM将用户描述和信息项目描述视为向量,并在向量空间中根据二者之间夹角的余弦值来度量相似性。

        最后得到的u数值用于排序对象,将最靠前的若干个对象作为推荐"

        例如:上述介绍的文本,余弦相似度为:


3、优缺点

优点

         1不需要其它用户的数据,没有冷启动问题和稀疏问题。即每个用户的profile都是依据他本身对item的喜好获得的,自然就与他人的行为无关。
         2)能为具有特殊兴趣爱好的用户进行推荐。
         3
能推荐新的或不是很流行的项目,没有新项目问题。新项目进入推荐系统后,基于内容的推荐方法为其提取特征,进而建立刻画其内容的特征向量,然后根据用户偏好文档决定是否向用户推荐。 
         4
通过列出推荐项目的内容特征,可以解释为什么推荐那些项目。如果需要向用户解释为什么推荐了这些产品给他,你只要告诉他这些产品有某某属性,这些属性跟你的品味很匹配等等。

缺点

         1有限的内容分析:只能分析一些容易提取的文本类内容(新闻、网页、博客),而自动提取多媒体数据(图形、视频流、声音流等)的内容特征具有技术上的困难。

         2过度规范问题:不能为用户发现新的感兴趣的资源,只能发现和用户已有兴趣相似的资源。

         3新用户问题:当一个新的用户没有或很少对任何商品进行评分时,系统无法向该用户提供可信的推荐。

4、总结

        CB应该算是第一代的个性化应用中最流行的推荐算法了。但由于它本身具有某些很难解决的缺点(如上面介绍的第1点),再加上在大多数情况下其精度都不是最好的,目前大部分的推荐系统都是以其他算法为主(如CF),而辅以CB以解决主算法在某些情况下的不精确性(如解决新item问题)。但CB的作用是不可否认的,只要具体应用中有可用的属性,那么基本都能在系统里看到CB的影子。组合CB和其他推荐算法的方法很多,最常用的可能是用CB来过滤其他算法的候选集,把一些不太合适的候选(比如不要给小孩推荐偏成人的书籍)去掉。

 

参考文献:

1、任磊——推荐系统关建技术研究

2、张亮——推荐系统中协同过滤算法若干问题的研究

3、郭艳红——推荐系统的协同过滤算法与应用研究

4、杨博——推荐算法综述

5、主要的推荐算法简介

6、基于内容的推荐系统概述

7、个性化推荐算法概述

8、基于内容的推荐


最后

以上就是自然盼望为你收集整理的基于内容的推荐算法的全部内容,希望文章能够帮你解决基于内容的推荐算法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(29)

评论列表共有 0 条评论

立即
投稿
返回
顶部