`
leiyonglin
  • 浏览: 50042 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

如何从无到有建立推荐系统

阅读更多

原文: http://gengrenjie.com/2009/12/15/%E3%80%90resys%E3%80%91%E5%A6%82%E4%BD%95%E4%BB%8E%E6%97%A0%E5%88%B0%E6%9C%89%E5%BB%BA%E7%AB%8B%E6%8E%A8%E8%8D%90%E7%B3%BB%E7%BB%9F/

 

 

推荐系统广泛应用于各类网站,电子商务中的商品推荐、博客网站的文章推荐,以及帮助人们寻找音乐和影片的各类应用。但如何才能从无到有的给网站配备一个推荐系统呢?针对这个问题,我在搜索引擎中遍寻多时,但始终没有找到满意的答案。这期间我也加入了国内推荐系统高手聚集的推荐系统邮件列表,其中不乏当当、卓越亚马逊、豆瓣等业内在推荐系统上领先的产品、技术高手,但浸淫多日却始终无法在脑海中形成一个以内容推荐为最终目的的产品框架或产品路线图。这种状态一直持续到我购买了集体智慧编程(Programming Collective Intelligence)后才得以改观,现在我将此书的部分读书笔记予以整理,希望能给同样对推荐系统感兴趣的朋友整理出一个可操作的、适合内容型网站推荐系统产品框架。

——————–正文分割线——————–

我们知道,要想了解内容网站的推荐信息,最没有技术含量的方法莫过于向朋友询问。我们也知道,这其中有一部分人的品位会比其他人的高一些,通过观察这些人是否通常也和我们一样喜欢同样的东西,可以逐渐对这些情况有所了解。不过随着选择越来越多,要想通过询问一小群人来确定我们想要的东西,将会变得越来越不切实际,因为他们可能并不了解所有的选择。这就是为什么人们要发展出一套被称为协同过滤(collaborative filtering)的技术。从实际的情况看,目前我们所能接触到的领先推荐系统,包括Netfilx、豆瓣、Amazon等等都是利用协同过滤技术来实现的。协同过滤又分成几种:基于用户的协同过滤、基于项目的协同过滤、基于模型的协同过滤。

那么到底什么是协同过滤?它需要产品设计者做哪些事情才能实现?(为了让问题简化,这里着重介绍基于用户的协同过滤)

一个基于用户的协同过滤过滤算法通常的做法是对一大群人进行搜索,并从中找出与我们品位相近的一小群人。算法会对这些人所偏爱的其他内容进行考察,并将它们组合起来构成一个经过排名的推荐列表。因此产品设计者需要理解你的网站需要依次做以下这几件事情:

1.搜集偏好(Collecting Preferences)

要搜集偏好意味着要寻找一种表达不同人及其偏好的方法。例如,豆瓣会要求用户对每部电影用1到5颗星来评分,以此来体现包括本人在内的每位影评者对某一给定影片的喜爱程度。假如你正在设计一个购物网站,那不妨用数字1来代表有人过去购买过某件商品,用数字0来代表未曾购买过任何商品。而对于一个新闻故事投票网站,我们可以分别用数字-1、0和1来表达“不喜欢”、“没有投票”、“喜欢”。不管偏好如何表达的,你要做的是建立一种方法来使得你的用户来参与表达,并把他们表达的内容对应到数字以形成相应的数据集合。

2.寻找相近的用户(Finding Similar Users)

有了人们偏好的数据集后,我们需要有一种方法来确定人们在品位方面的相似程度。为此,我们可以将每个人与所有其他人进行对比,并计算他们的相似度评价值。有若干种方法可以达到此目的:欧几里德距离(Euclidean Distance Score)皮尔逊相关度(Person Correlation Coefficient)余弦相似性(Cosine-based Similarity)、调整余弦相似性(Adjusted Cosine Similarity)、Jaccard系数曼哈顿距离算法等。请记住,各种相似度的计算方法各有所长,要根据具体的应用场景来选取一种或几种综合使用。

下面以实际例子简单介绍两种:

欧几里德距离(Euclidean Distance Score):它以经过人们一致评价的物品为坐标轴,然后将参与评价的人绘制到图上,并考察他们彼此间的距离远近。x轴、y轴分别代表电影Dupree和Snake,而在第一象限偏好空间里的则是每个人对这两部电影的评分。

 

不难发现,Toby对Snakes和Dupree这两部电影的评分是4.5和1.0,而LaSalle的则是4.0和2.0。按照欧几里德距离的结论,偏好越相似的人,其在偏好空间的距离就越短。至于如何计算两者的距离,运用你初中学的几何知识就行,计算两点每个坐标的差值,求平方后再相加,最后对总和取平方根。值得一提的是此方法对于数量多于两项的评分也同样适用。因此,你可以设计一个函数来计算2个用户间的相似度,当然前提是两者需要有一定重合的评分项。

 

皮尔逊相关度(Pearson Correlation Score):它的原理是通过判断两组数据与某一直线拟合程度来判断相似度。它在数据不是很规范(normalized)的时候,如影评者对影片的评价总是相对于平均水平偏离很大时,会倾向于给出更好的结果。

如下图是Mick LaSalle和Gene Seymour分别对5部电影的评分(与上图不同,x轴和y轴对应的是两个人),虚线被称为最佳拟合线(best-fit line),其绘制原则是尽可能地靠近图上的所有坐标点。如果两位评论者对所有影片的评分情况都相同,那么这条直线将成为对角线,并且会与图上所有的坐标点都相交。

 

 

下图展示了一个有着更高相关系数的例子,这意味着Lisa Rose和Jack Matthews在这几部电影上有着更高的相似度(各点更靠近最佳拟合曲线)。

 

采用皮尔逊方法可以修正“夸大分值(grade inflation)”的情况。在上图中,虽然Jack总是倾向于给出比Lisa更高的分数,但最终的直线仍然拟合度较高,这是因为他们两者有着相对近似的偏好。也就是说,如果某人总是倾向于给出比另一人更高的分数,而两者的分差又始终保持一致,则他们依然可能会存在很好的相关性。而此前提到过的欧几里德距离评价方法,会因为一个人的评价始终比另一个人更为“严格”(从而导致评价始终相对较低),而得出两者不相近的结论,即使他们的品位很相似也是如此。而这一行为是否是我们想要的结果,取决于具体的应用场景。

皮尔逊的相关度算法首先会找出两位评论者都曾评价过的物品,然后计算两者的评分总和和平方和,并求得评分的乘积之和。最后,利用这些计算结果计算出相关系数:

 

PS:公式能看懂,但我还未能从数学上去理解此公式的推导过程,惭愧-_-|||

3.为评论者打分(Ranking the Critics)

理解了上一步后,这步就简单了。现在只需根据指定的人员对每个人进行打分,找出最接近的匹配结果,也即所谓该人的最近邻。回到上面的例子,我们的目的是要寻找与自己品位相似的影评者,那么所需要做的就是以你自己为基准,计算每个人和你的相似度,然后排序输出前几项即可。现在假设你是Toby,那么经过这一步的计算你会得到一个你的最近邻列表,也就是说你可能会知道Lisa、Mick和Claudia可能是和你品位最相近的3个人。

4.推荐物品(Recommending Items)

找到一位和你趣味相投的影评者固然不错,但我们的最终目的是一份影片的推荐列表(上面提到过的以内容推荐为最终目的)。当然,简单的做法是查找与自己品位最相近的人,并从他所喜欢的影片中找出一部自己还未看过的影片,但这样做有些随意或者是粗糙。因为如果该人还未对某些影片做过评论,但这些影片也许就是我们所喜欢的。又或者另外的一种情况就是推荐给你某人特别热衷的一部影片,但有其他可靠数据表明所有的其他评论者都不看好这部影片。

为了解决上述问题,我们需要一个经过加权的评价值来为影片打分:

上图中Critic列是与Toby进行相似度对比的人名,Similarity列表示他们与Toby的相似度系数。Night、Lady和Luck都是电影名,所在列是这些人对这些电影的评分。S.x打头的那几列给出了相似度系数和评分后相乘的结果。如此一来,相比于我们不相近的人,那些与我们相近的人将会对整体评价拥有更多的贡献。

那有人会问为什么不直接采用Total这行,而需要Total/Sim.Sum?这是因为,一部受更多人评论的影片会对结果产生更大的影响,因此我们必须要除以Sim.Sum,它代表了所有对这部电影有过评论的评论者的相似度之和。就像Night这部电影,Total为12.89,有5个人为其评分,而Lady为8.38,4个人评分。假设电影Night有和当前相同的Total分数却多了一倍的人为其评分,那最后的结果也未必一定比电影Lady的Total/Sim.Sum更好。

好了,我们现在已经得到了一个经过排名的影片列表了,你可以决定自己究竟要不要观看其中的某一部,或者干脆什么也别看。其实,有时候什么都不推荐也是一种推荐。

最后我用lovelycharts画了这张流程图(用的时候才现不支持中文噢)。如果你想要设计一个推荐系统,现在应该大概清楚要做哪几件事情了吧:)

 

 

分享到:
评论

相关推荐

    从无到有 中小企业应该怎样做好电子商务

    利用自身灵活性迅速建立起一套有效的信息系统,并以此为基础,开展电子商务。一方面通过信息化手段完善自身管理缺陷、规范业务流程、提高产品和服务质量;另一方面也可以依托电子商务更快速的融入全球竞争,在本土...

    软件工程之专题十一: 系统工程知识

    性能评价指标是客观评价信息系统性能的依据,一般包括系统平均无故障时间,系统联机响应时间、处理速度、吞吐量、操作灵活性,系统加工数据的准确性,系统的可扩充性等。 业务流程分析: 业务流程分析的目的是为了...

    点菜系统的设计与实现

    给出了从点菜到菜单打印以及建立后台数据库对菜单进行管理等一整套详细方案及具体实现过程.该系统由无线点菜器和接收器端2部分组成,两者之间由无线数传模块实现数据的无线传输,可实现无纸点菜,以及菜单打印和对...

    数据库系统概论第四版答案

    独立性差,记录内有结构,整体无结构,由应用程序自己控制。数据库系统面向现实世界, 共享性高,冗余度小,具有较高的物理独立性和一定的逻辑独立性,整体结构化,用数据模 型描述,由数据库管理系统提供数据的安全...

    图书管理系统的课程设计

    ② 清除库存:某种书已无保留价值,将它从图书账目中注销。 ③ 借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。 ④ 归还z注销对借阅者的登记,改变该书的现存量。

    JSP设备管理系统毕业论文

    设备管理系统使得设备管理工作从手工到人机系统,涉及管理模式的变动不大。高校导入设备管理系统成本低,时间短,无需对现有硬件和软件环境作大的变动,用户能很快适应导入设备管理系统后新的工作方式。设备管理系统...

    在MIPS开发板上建立Linux系统及开发环境

    讨论了在主机上建立相关服务器,通过NFS服务从主机上下载内核,在无盘开发板上启动Linux的方法。 一、引言 大多数基于MIPS处理器的平台上都没有提供软、硬盘接口,一般情况下,也没有在板载Flash里烧入可使用的...

    汽车ABS模型仿真,防抱死制动系统建模 包括simulink建立的汽车ABS模型和Word文档详细说明如何对防抱死制动系统 (A

    包括simulink建立的汽车ABS模型和Word文档详细说明如何对防抱死制动系统 (ABS) 进行建模。 它对车辆在紧急制动情况下的动态行为进行仿真。 仿真分析包括 在 ABS 模式下运行仿真、在无 ABS 的情况下运行仿真、带 ABS ...

    计算机联锁系统.pptx

    随着铁路运输发展的需要和科学技术的进步,特别是电子计算机在各个领域中的应用,更为先进的联锁系统——计算机联锁系统应运而生,它实现了从有接点到无接点的变革,使联锁设备更加小巧而可靠。计算机联锁首先于...

    住户管理系统(MFC课程设计)

    绝对原创,做了两周时间,从无到有一边学一边做的,过程艰辛啊。 内容是:住户管理系统,在老师要求的课题第一个下稍作修改(有些功能实在是做不出来,所以放弃了)。 程序用了appface的皮肤包,30天试用的,所以...

    广工数据结构课设 文献管理系统 使用B树

    ②清除:某种文献已无保留价值,将它从系统中注销。 ③借阅:如果一种文献的现存量大于零,则借出一本,登记借阅者的证件和归还期限。 ④归还:注销对借阅者的登记,改变该文献的现存量。 ⑤显示:以凹入表的形式...

    自己动手写操作系统(含源代码).part2

    所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了。 那么为什么我又写作了第...

    在线考试系统文献综述

    考虑到现有机房的服务器上一般都是采用Windows NT作为操作系统,因此我们在应用服务器上建立WEB 时,采用微软的IIS(Microsoft Internet Information Server4.0),为了系统的安全性,安装微软的Proxy Server 作为...

    鸿蒙 Linux 系统镜像 harmnoyOS.rar

    华为鸿蒙系统正式版PC下载是华为官方打造的操作系统,是建立在linux开源内核的基础上开发的,华为鸿蒙系统正式版PC下载不仅仅内置了火狐、谷歌、opera等主流浏览器的使用,还会为用户带来自带的办公软件使用,方便...

    在线考试管理系统毕业设计

    建立一个安全稳定可靠的基于B/S模式下的考试系统,是当前信息化教育的必须,对信息化教育有着较大的促进作用,因为有远程的教育也就必须有远程的考试,没有考试的教育算不上完整的教育,本系统就是在这么一个大的...

    自己动手写操作系统(含源代码).part1

    所谓填补空白,具体说就是让像我一样的操作系统爱好者在读完本书之后,能够有信心去读其他比较流行的开源的操作系统代码,有能力从零开始自己动手写操作系统,而这个任务第一版已经完成了。 那么为什么我又写作了第...

    万韬多媒体在线计算机上机考试系统

    系统支持 手动组卷 和 自动组卷 2 种模式,其中自动组卷中有出卷人 按题型步骤,输入一定的题目数量,有系统 随机从题库中提取试题,添加入试卷。操作简单方便、组卷完毕之后,可查看已组完的试卷,并可对试题 顺序...

    浅谈关于能量管理系统

    考核监视管理系统从EM S 获取有关实时数据和运行状态信息, 通过标准网络数据通信接口, 将这些实时数据和运行状态信息传送到EM S 自动考核监视管理计算机。通过数据格式转换软件, 在本地机上建立考核管理系统专用实时...

    企业网站管理系统

    使用Qollar,网站主不仅可以从网站后台实时“看见”和“跟踪”网站上每一位访客的访问情况和信息 (如对方所在的城市、正在浏览的网页等),从而分析出最有价值的潜在客户,还可以向访客弹出聊天窗口, 与...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    本网站以xp为Web平台,JSP+Ajax+Servlet+JavaBean+Hibernate为网站实现技术,建立基于MySQL数据库系统的核心动态网页,实现博客网站前台及博客个人维护管理等功能模块。 1、 系统处理的准确性和及时性:系统处理的...

Global site tag (gtag.js) - Google Analytics