显示标签为“推荐系统算法”的博文。显示所有博文
显示标签为“推荐系统算法”的博文。显示所有博文

2012年11月17日星期六

关于个性化的产品-用户模型分为行为模型和兴趣模型两部分,推荐系统包含我们常见的“推荐算法”,以及怎样把这些算法得到的结果推送到用户面前的“推荐逻辑”。


关于个性化的产品-用户模型分为行为模型和兴趣模型两部分,推荐系统包含我们常见的“推荐算法”,以及怎样把这些算法得到的结果推送到用户面前的“推荐逻辑”。

随着近年来互联网公司对个性化服务的关注程度在提高,开始有很多人从学术、从产品、从实现上研究推荐系统这个存在已久却颇为潮流的事物。一个产品的成功,需要建立在管理人员、产品经理及技术人员对相关知识体系里某些基本概念的共识,及由此产生的默契,避开无谓的争执与误解。
这里,我要根据自己的理解,斗胆给一些模糊的概念下一个定义。因为不管这些定义是否是公认的,每个人都应当为自己从事的领域建立一套基本而较为清晰的概念体系,为此你才可以把实践经验组织成一个可作演绎推理的系统。
何谓一个推荐产品,一言蔽之:找出用户兴趣所在,推荐符合TA兴趣的事物。这个定义包含了两方面的内容:用户建模与推荐系统。有些时候,用户建模这部分是没有的,或者只是一些简单的人口统计学信息。但拥有用户模型是一个推荐产品走向成熟的标志。
这里的用户模型又可分为行为模型和兴趣模型两部分。行为模型跟用户的访问行为相关,如用户的访问频次、在系统留下数据的多少、频繁点击模式及这些模式后面的意义等等。兴趣模型可以用一个高维的兴趣空间来刻画,这些维度所代表的意义可随着应用领域不同而变化,可以从用户的收藏行为中抽象,也可从文本信息中抽取。
推荐系统包含我们常见的“推荐算法”,以及怎样把这些算法得到的结果推送到用户面前的“推荐逻辑”。推荐算法跟我们常用的机器学习或数据挖掘算法并没有清晰的界线,基本上任何适用于大规模数据计算的机器学习算法都有可能成为你推荐系统中的候选。一个自适应的具有成长能力的推荐系统还免不了需要反馈收集和指标评价体系这些模块,这也是系统之所以被称之为系统的原因,在我以前写的一篇分析开源推荐系统框架duine的博客也有类似的描述。所以,推荐算法并不是一个专门的学科,但推荐系统的构建可以成为一个专门的研究领域。虽然大多数论文都只会讨论具体的某些或某类算法,但这不应成为你树立一个系统视角的障碍。
设计一个成功的推荐产品不单是工程师们的事,也是产品经理和设计师的事,特别是对于这么个没有太多实例可以参考的新颖的产品形式,各方面人员对基本概念的认识与认同,有助于一起协作把事情做好。
上面简短的文字,一部分是我三年从业经验的一些总结,一部分是我在翻译《智能web算法》这本书时对经验梳理的结果。
该书的第3章就是介绍推荐系统的,里面的叙述跟我的理解未必完全一致,但有助于梳理我们在这个实践性领域的思路。我随书做了一些笔记,放在豆瓣笔记上 ,有兴趣的朋友可以对比着阅读。
关于作者
阿稳, 豆瓣, 算法工程师
推荐系统;数据挖掘;算法架构及实现的可扩展性;R环境编程
如果你的问题已经能从我的博客中得到解答,就最好不过了:

[译]推荐引擎反思

原文链接:http://www.readwriteweb.com/archives/rethinking_recommendation_engines.php

注:原文先是介绍了netflix的竞赛和推荐系统的分类,这些内容都被我略过,直接翻译了最主要的问题。所以,下文中提到的“竞争者”就是netflix竞赛的参与者,而“第五类算法”就是指如下四类推荐算法之外的第五种。
四类推荐算法:
    * 个性化的推荐:基于用户过去的行为作出推荐。
    * 社会推荐:基于相似用户的过去的行为进行推荐。
    * 基于item的推荐:基于事物间的相似性进行推荐。
    * 前面三种方法的混合。

车库里的人

推荐问题的复杂性在于它广泛的可能性。这即是说,很难精确地确定事物的哪一个基因适用于某个具体的人,很难指出一部电影或音乐的哪一部分特点让我们给它打5分。要转变技术人员的思维是很困难的。《连线》文章上提到了一个竞争者使用的是一个非常罕见的计谋来使得他的算法能有效运行。

他是来自伦敦的Gavin Potter,昵称是“车库里的人”,他的方法的依据是人类的惰性。显然,对电影的打分依赖于我们对之前看过的电影的打分。例如,如果你连续看了三部电影,并给它们打了4分,当你看到下一部稍好一点的电影时,会给它打5分。反之,如果你连续地给三部电影打了1分,那么当你看到如上一样的一部5分电影时,你却会打出4分。

当你还在思考这是不是真的的时候,你会发现这类算法现在已经占据了第五类推荐算法的位置,并在不断地发展当中,而其它的算法则发展甚少。通过一点心理学的知识来增强数学公式无疑是个好办法,这是我们接下来要谈及的。用过滤器来取代推荐系统

这样的情况曾多少次发生在你的身上:一个朋友给你推荐了一部电影或一个宾馆,你高高兴兴地去了影碟店或宾馆,但却败兴而归?很多!很显然,炒作使得期望的门槛提高了,反而更多的可能是带来失望。以数学语言来说,这种类型的错误被称为假阳性。现在考虑另一种情况,如果你的朋友不是给你推荐一部电影,而是告诉你你不会喜欢某部电影的,所以不用花钱去租它回来了;这种情况下会发生什么?

这种情况会带来些什么坏处呢?不会有什么坏处,因为很可能你就不会去看这部电影。但即使你看了,并且你也喜欢它,你也不会感觉到有负面的情绪影响。这个例子说明了我们对于假阳性和假阴性错误的不同反应。假阳性使我们感到沮丧,但假阴性不会。以过滤代替推荐的思想就是为了平衡这样的一种现象。

当Netflix作出推荐时,它总会有一个出错的比率。或早或晚地,它总会有出现差错的时候,然后会向你推荐一部你不喜欢的电影。如果推荐系统不是这样做,而是向你展示一堆新的片子,同时附带一个按钮:把那些我不喜欢的过滤掉。算法是一样的,但用户感受却大不一样的。

实时过滤

在实时新闻的时代,这种想法变得越来越重要与强大。我们越来越需要对新信息进行连续地过滤。拿我们的RSS阅读器来说,过滤是我们每天都得干的事情。我们从新闻流的角度来看这个世界,其中过去的事情是不相关的。我们不需要推荐,因为我们已经订阅得太多了。我们需要的是噪声过滤。需要一个算法会说:“嘿,你一定不会喜欢那个东西的,隐藏它吧。”

如果机器能做到那样,积极地把我们周围无用的信息扔开,剩下的我们就可以自己来处理了。从邮件过滤系统来借鉴一下,如果我们身边的工具都有一个按钮:“给我把这个过滤一下”,可能这个功能还是默认启用的,那我们就能做更多的事情了。

结论

构建一个完美的推荐引擎是一件非常复杂的任务。不管用什么方法,协同过滤或基于item相似的推荐都是不会被原谅的商业工具,假阳性般的错误会很快地让用户流失。可能把心理学应用于这个问题可以让用户懂得感激这些复杂的算法所做的事情。如果机器过滤掉那些我们一定不会喜欢的,而不是给我们推荐一些东西,我们可能会更加地宽容和给予更多的理解。
关于作者
阿稳, 豆瓣, 算法工程师
推荐系统;数据挖掘;算法架构及实现的可扩展性;R环境编程
如果你的问题已经能从我的博客中得到解答,就最好不过了:

[译]推荐引擎反思


[译]推荐引擎反思

原文链接:http://www.readwriteweb.com/archives/rethinking_recommendation_engines.php

注:原文先是介绍了netflix的竞赛和推荐系统的分类,这些内容都被我略过,直接翻译了最主要的问题。所以,下文中提到的“竞争者”就是netflix竞赛的参与者,而“第五类算法”就是指如下四类推荐算法之外的第五种。
四类推荐算法:
    * 个性化的推荐:基于用户过去的行为作出推荐。
    * 社会推荐:基于相似用户的过去的行为进行推荐。
    * 基于item的推荐:基于事物间的相似性进行推荐。
    * 前面三种方法的混合。

车库里的人

推荐问题的复杂性在于它广泛的可能性。这即是说,很难精确地确定事物的哪一个基因适用于某个具体的人,很难指出一部电影或音乐的哪一部分特点让我们给它打5分。要转变技术人员的思维是很困难的。《连线》文章上提到了一个竞争者使用的是一个非常罕见的计谋来使得他的算法能有效运行。

他是来自伦敦的Gavin Potter,昵称是“车库里的人”,他的方法的依据是人类的惰性。显然,对电影的打分依赖于我们对之前看过的电影的打分。例如,如果你连续看了三部电影,并给它们打了4分,当你看到下一部稍好一点的电影时,会给它打5分。反之,如果你连续地给三部电影打了1分,那么当你看到如上一样的一部5分电影时,你却会打出4分。

当你还在思考这是不是真的的时候,你会发现这类算法现在已经占据了第五类推荐算法的位置,并在不断地发展当中,而其它的算法则发展甚少。通过一点心理学的知识来增强数学公式无疑是个好办法,这是我们接下来要谈及的。用过滤器来取代推荐系统

这样的情况曾多少次发生在你的身上:一个朋友给你推荐了一部电影或一个宾馆,你高高兴兴地去了影碟店或宾馆,但却败兴而归?很多!很显然,炒作使得期望的门槛提高了,反而更多的可能是带来失望。以数学语言来说,这种类型的错误被称为假阳性。现在考虑另一种情况,如果你的朋友不是给你推荐一部电影,而是告诉你你不会喜欢某部电影的,所以不用花钱去租它回来了;这种情况下会发生什么?

这种情况会带来些什么坏处呢?不会有什么坏处,因为很可能你就不会去看这部电影。但即使你看了,并且你也喜欢它,你也不会感觉到有负面的情绪影响。这个例子说明了我们对于假阳性和假阴性错误的不同反应。假阳性使我们感到沮丧,但假阴性不会。以过滤代替推荐的思想就是为了平衡这样的一种现象。

当Netflix作出推荐时,它总会有一个出错的比率。或早或晚地,它总会有出现差错的时候,然后会向你推荐一部你不喜欢的电影。如果推荐系统不是这样做,而是向你展示一堆新的片子,同时附带一个按钮:把那些我不喜欢的过滤掉。算法是一样的,但用户感受却大不一样的。

实时过滤

在实时新闻的时代,这种想法变得越来越重要与强大。我们越来越需要对新信息进行连续地过滤。拿我们的RSS阅读器来说,过滤是我们每天都得干的事情。我们从新闻流的角度来看这个世界,其中过去的事情是不相关的。我们不需要推荐,因为我们已经订阅得太多了。我们需要的是噪声过滤。需要一个算法会说:“嘿,你一定不会喜欢那个东西的,隐藏它吧。”

如果机器能做到那样,积极地把我们周围无用的信息扔开,剩下的我们就可以自己来处理了。从邮件过滤系统来借鉴一下,如果我们身边的工具都有一个按钮:“给我把这个过滤一下”,可能这个功能还是默认启用的,那我们就能做更多的事情了。

结论

构建一个完美的推荐引擎是一件非常复杂的任务。不管用什么方法,协同过滤或基于item相似的推荐都是不会被原谅的商业工具,假阳性般的错误会很快地让用户流失。可能把心理学应用于这个问题可以让用户懂得感激这些复杂的算法所做的事情。如果机器过滤掉那些我们一定不会喜欢的,而不是给我们推荐一些东西,我们可能会更加地宽容和给予更多的理解。
关于作者
阿稳, 豆瓣, 算法工程师
推荐系统;数据挖掘;算法架构及实现的可扩展性;R环境编程
如果你的问题已经能从我的博客中得到解答,就最好不过了:

YouTube调整搜索排序算法:更侧重观看时长


YouTube调整搜索排序算法:更侧重观看时长

2012-10-14 09:41:11 来源: 网易科技报道 

网易科技讯  10月14日消息,据国外媒体报道,美国视频网站YouTube最近宣布,将调整其视频的搜索排序算法,使真正获得用户观看的视频置于更为优先的位置。

根据调整后的算法,如果一个视频YouTube用户观看时间普遍达三分钟时间,而另一个类似视频YouTube用户打开后普遍观看几秒钟后就关闭,那么前一个视频将在搜索结果中获得更高的排名。

YouTube 在其官方博客中表示:“今年3月我们对"推荐视频(Suggested Videos)"功能进行调整,最近对流量分析工具YouTube Analytics进行完善。我们正不断努力,使我们视频发现功能更侧重于观看时间。”

YouTube表示,通过对这些新的排序方法进行测试,显示点击量对其视频搜索排序结果的影响下降,而观看时间的影响上升。这样一来,今后YouTube上受到用户欢迎的视频数量将增加,从而提高其视频的整体质量。


为了让视频发布者了解其视频表现,YouTube Analytics增加了一个“观看时间(Time Watched)”的报告工具。

YouTube表示:“因此,坚持上传你的粉丝喜爱和愿意与他人分享的视频,并鼓励他们在YouTube上发现更多自己喜欢的视频,你将发现自己的粉丝群也获得增长。”

谷歌今年8月宣布,它会在搜索结果中对受到大量版权投诉的网站采取降级处理。但据报道,这一措施并不包括其旗下 YouTube。

本月早些时候,YouTube宣布将资助一些原创频道向海外扩张。它最近还开始测试一个被称为"Video Questions Editor"的互动问答功能。(刘春)

(本文来源:网易科技报道 ) 

Youtube视频推荐算法:从10页论文到4页论文的变迁


Youtube视频推荐算法:从10页论文到4页论文的变迁

所以说豆瓣广播是个好东西,长久以来已经怠于主动关注paper的我,每次都能通过我那些专业敬业的友邻们发现有意思的文章或话题,知识因分享而伟大!而这一次,这篇来自youtube的4页论文[1],最初是通过Chen_1st同学的博客介绍知道的。追溯过去,又找到了Greg Linden的评荐博客。这篇文章很新,以至于我根本找不到免费的全文下载,于是很感谢zibuyu博士帮了一忙,还把youtube在08年发的那篇10页论文[2]一并给我发了过来,于是就有这个有点标题党的题目。
实话说,那篇10页论文我没仔细看,但还是先来回顾一下。08年的论文主要思想是把推荐问题建立在一个user-video的图上,试图在该图上给user u找到合适的video v。作者认为对某个u,他感兴趣的v应该是符合如下三个条件的。
1、 u与v之间的路径应该是短的;
2、 u与v之间应该有多条路径可达;
3、 u与v之间的路径应该排除掉那些度很高的节点。
为了在图上搜索符合这三个条件的解,作者提出了多种方法来解决这个被命名为Adsorption的算法,如Averaging、Random Walk、Linear System。给出了不少的概念定义与算法描述,并附赠一系列美好的实验结果。
但在那篇4页的论文里,之前的那些工作似乎都成了浮云,除了是来自于同一个公司的人,做的是同一个推荐产品之外,你几乎很难从这篇文章里再找到从前系统的影子,不单作者换了,行文风格从研究人员变成了工程师,甚至连最后的REFERENCES都没有对之前的文章加以引用。于是Greg不无戏谑地说:尽管我们做了上十年的工作,中间还穿插了对netflix竞赛的孜孜探讨,但好像一切又回到了原点,古老的item-based思想仍然发挥着其独有的魅力。
下面看看在遥远的墙外,那个叫youtube的视频网站始祖做了些什么复古式的工作。
首先无需求不产品,推荐产品也是要面向用户的特定需求的。Youtube用户的需求主要有三个方面:明确知道自己要看哪个视频;通过搜索来获取某些主题的视频;也不知道看什么,纯粹逛逛,找找乐子。Youtube的推荐产品面向的就是第三种需求,需要达成的目标是:视频推荐的时效性、精确性与多样性,可解释性是一个plus。
接下来几个工程师开始进行系统设计,搬出了诸如解耦、降低系统复杂性等等工程概念之后,介绍了他们本质上就是简单的item-based的推荐算法(但他们说这是关联规则)。最重要的公式就是以下的video相似性计算公式:
其中分子是video i与video j在用户session数据库中共同出现的次数,分母是一个规范化函数。当函数取值为ci时,这其实就是关联规则的置信度的计算公式,而当函数取值为vi与vj的模的乘积时,这个就是余弦相似度计算公式(因为在向量取值为1与0时,cij等于vi与vj的内积)。所以可以说这是关联规则与余弦相似度的通式。但youtube对这个函数的取值是ci * cj,如果把i作为种子,要找i的相似video的话,ci是不会影响到相似video的排序的,所以只有cj在起作用,而cj的作用则起到了打压热门视频的效果(因为播放得越多,cj越大,相似度越小),从另一个侧面可以提升推荐的多样性。当然这只是一种最简单的相似性描述,youtube实际系统当中还会考虑一些别的因素,如播放时间戳、视频的元信息等等。
理论上可以为每一个video pair计算出一个相似度rij,但实际中通常要对这个值进行截断,而以video作为节点,以有效的rij为边的权值就构成了一个有向的video graph。接下来就是根据这个图来为某个用户u生成候选推荐了。假设我们拥有用户u的一个视频种子集S,它可能来自于用户的收藏、评星或者简单的收看记录,一般意义上的item-based方法这时就会对S中的每一个视频,寻找它在video graph上的最近邻居,并以此作为推荐的候选。如下面的公式所示。
而这篇文章的方法稍有不同,但也很简单。作者们认为一般的item-based方法通常会压缩推荐候选的范围,即这种方法得到的结果通常多样性比较差。于是他们在第一步搜索最近邻居的基础上加以扩展:搜索多阶的最近邻居,如下面的两个公式所示。
这样就完成了推荐池的扩容。但这个推荐池通常比较庞大,而推荐系统只能从中选择几个或几十个推送到用户面前,这样就必须知道其中哪些视频的权重更大,哪些更小,所以就需要一个赋权的过程。Youtube对视频的赋权方式主要考虑了三方面的因素:1)视频的质量;2)跟用户的切合程度;3)多样性。第一个因素取决于视频上传时间、播放、评星、收藏、分享、评论等等视频本身的数据。第二个因素取决于用户对种子集中视频的喜好程度,以及推荐池中的视频跟种子集视频的相似程度。第三个因素可以通过多种方法来评判。然后把这三方面的因素作一个线性加权,就得到了推荐池中每个视频的权重,接下来的推荐就顺理成章了。
如此三步:构造video graph;在图上生成扩展的候选推荐池;为推荐池的video赋权。就是一个大致的框架,简单明了,非常工程化实用化的实现,一贯的google范。
为了说明这种推荐方法的有效性,作者以最多收看、最多收藏、最多评星的视频作为baseline,用以与推荐视频作比较,实验是在线进行的A/B Test,实验框架我以前也有过简要介绍。实验时间是21天,评判标准是点击率。结果发现,在这段时间里,推荐视频的点击率都稳定地比那三个baseline高出两倍,这已经足够说明问题了。
最后提一个数据,在youtube首页的推荐模块中的视频点击,占了首页视频点击的60%,虽然有模块位置的因素在里面,这也是个相当可观的数字。
Greg那篇博客下面还有一些饶有趣味的讨论话题,比如Greg说这篇文章应该引用早期amazon的那篇关于item-based的文章,因为从推荐算法本质上它们是同一套东西。当然同时Greg也坚称amazon是item-based推荐应用的始祖,而有人则指出,其实这样的思想在90年代的paper就已经有人提出过,但Greg认为这并不影响amazon是第一个把这项技术成功地应用于商业、特别是大规模数据应用领域的始作俑者,就如pagerank的想法在google诞生之前就已经存在,但没有人怀疑google是使用这项技术的成功的先行者。我认同Greg的说法,要是从paper或纯粹想法的角度不断回溯,估计某位古希腊哲人或古中国的科学家都可以跳出来说:哥当初就已经是这么想的!
参考文献:
[1] Davidson, J. and Liebald, B. and Liu, J. The YouTube video recommendation system. Proceedings of the fourth ACM conference on Recommender systems. 2010
[2] Baluja, S. and Seth, R. and Sivakumar, D. and Jing, Y. Video suggestion and discovery for youtube: taking random walks through the view graph. Proceeding of the 17th international conference on World Wide Web. 2008
关于作者