基于内容的推荐简介

系统简介


基于内容的推荐系统(也称CB):根据用户历史信息(如评分、评价、分享、和收藏过的文档)构造用户偏好文档,计算推荐项目与用户偏好文档的相似度,将最相似的项目推荐给用户。例如,在书籍推荐中,基于内容的系统首先分析用户已经购买过的打分比较高的书籍的共性(作者、风格等),再推荐与这些用户感兴趣的书籍内容相似度高的其他电影。再例如一个推荐饭店的系统可以依据某个用户之前喜欢很多的烤肉店而为他推荐烤肉店。 CB最早主要是应用在信息检索系统当中,所以很多信息检索及信息过滤里的方法都能用于CB中。

CB的一般流程

CB一般包括三步:

1.Item Representation:为每个item抽取出一些特征(item的content)来表示此item;

2.Profile Learning:利用一个用户过去喜欢及不喜欢的item的特征数据,来学习出此用户的喜好特征(profile);

3.Recommendation Generation:通过比较上一步得到的用户profile与候选item的特征,为此用户推荐一组相关性最大的item.

基于内容的推荐系统的层次结构如下图所示:

如上图所示,生成推荐的过程主要依靠三个部件:

 第一、   内容分析器:从原先的商品信息(例如文档、网页、新闻、产品描述)中提取有用的信息用一种适当的方式表示。例如(将网页表示成关键词向量)该表示形式将作为属性学习器和过滤部件的输入结点。

第二、   文件学习器:该模块收集、泛化代表用户偏好的数据,生成用户概要信息。通常,是采用机器学习方法从用户之前喜欢和不喜欢的商品信息中推出一个表示用户喜好的模型。例如,一个基于网页的推荐系统的属性学习器能够实现一个相关反馈的方法,将表示正面和负面例子的向量与表示用户概要信息的原型向量混合在一起。训练样例是那些附有用户正面和负面反馈信息的网页。

第三、   过滤部件:通过学习用户概要信息,匹配用户概要信息和商品信息,推荐相关的商品,结果是一个二元的连续型的相关判断(相似度度量)。后者将生成一个用户可能感兴趣的潜在商品评分列表。该匹配是计算原型向量和商品向量的余弦相似度。

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

我们详细介绍上面的三个步骤。

1.Item Representation

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

如何表示一篇文章在信息检索中已经研究了很多年了,下面介绍向量空间模型(vector space model 简称VSM)

记我们要表示的所有文章集合为D={d1,d2,d3,...,dN},而所有文章中出现的词的集合为T={t1,t2,t3,...tn}(对于中文文章首先进行分词),如果我们有N篇要处理的文章,而这些文章里包含了n个不同的词。我们最终要使用一个向量来表示一篇文章,比如第i篇文章被表示为dj=(w1j,w2j,w3j),其中w1j表示第一个词在文章j中的权重,值越大表示越重要。所以,为了表示一篇文章,现在关键的就是如何计算dj各分量的值了。用的最多的计算方法还是信息检索中常用的词频-逆文档频率(term frequency–inverse document frequency,简称tf-idf)。第j篇文章中与词典里第k个词对应的tf-idf为:

其中是第k个词在文章j中出现的次数,而nk是所有文章中包含低k个词的文章数量,最终第k个词在文章j中的权重由下面的公式获得:

做归一化的好处就是不同文章之间的表示向量被归一到一个量级上,便于下面步骤的操作。

2.Profile Learning

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

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

a. 最近邻方法(k-Nearest Neighbor,简称kNN)


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

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

b.Rocchio算法

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

在CB里我们可以类似的使用Rocchio算法来获得用户u的profile:

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

c.决策树算法(Decision Tree简称DT)

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

d.线性分类算法(linear classifier,简称LC)

对于我们这里的二类问题,线性分类器(LC)尝试在高维空间找一个平面,使得这个平面尽量分开两类点。也就是说,一类点尽可能在平面的某一边,而另一类点尽可能在平面的另一边。

e.朴素贝叶斯算法(Naive Bayes,简称NB)

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

3. Recommendation Generation

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

CB的优缺点分析

优点分析

1.用户之间的独立性(User independence)既然每个用户的profile都是依据他本身对item的喜好获得的,自然就与他人的行为无关。而CF刚好相反,CF需要利用很多其他人的数据。CB的这种用户独立性带来的一个显著好处是别人不管对item如何作弊(比如利用多个账号把某个产品的排名刷上去)都不会影响到自己。

2.好的解释性(Transparency):如何向用户解释为什么推荐了这些产品给他,你只要告诉他这些产品具有某某属性,这些属性跟你的品味很匹配等等。

3.新的item可以立即得到推荐(new item problem):只要一个新的item加进item库,它就马上可以被推荐,被推荐的机会和老的item是一致的。而CF对于新item就很无奈,只有当此新item被某些用户喜欢过(或打过分),它才可能被推荐给其他用户。所以,如果一个纯CF的推荐系统,新加进来的item就永远不会被推荐。

缺点分析

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

2.不能发现用户的潜在兴趣。不能为用户发现新的感兴趣的资源,只能发现和用户已有兴趣相似的资源。

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

 

友情链接:http://www.cnblogs.com/breezedeus/archive/2012/04/10/2440488.html

references:

[1] Gediminas Adomavicius and Alexander Tuzhilin, Towards the Next Generation of Recommender Systems: A Survey of the State-of-the-Art and Possible Extensions

[2] Michael J. Pazzani and Daniel Billsus, Content-Based Recommendation Systems, 2007

 

转载于:https://www.cnblogs.com/mlfighting/archive/2013/04/16/3024143.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值