网络Bigbrother如何“猜”你喜欢? 2012-11-14 16:54 作者:Joseph A. Konstan/John

如今,在网上购物的人已经习惯收到系统为他们做出的个性化推荐,比如Netflix(美国在线影片租赁提供商)会推荐你可能喜欢的视频,Pandora(美国流行音乐电台)会通过预测我们的喜好从而生成个性化的音乐流。

所有这些结果都源自各式各样的推荐系统,它们依靠计算机算法运行,根据顾客的浏览、搜索、下单和喜好,为顾客选择他们可能喜欢,并有可能购买的商品。推荐系统的初衷是帮助在线零售商提高销售额,如今已成为一块规模巨大且不断增长的业务。

与此同时,推荐系统也正在向零售网站以外的领域拓展:大学用它们来引导学生选课,移动电话公司靠它们来预测哪些用户有可能转投另一家供应商,会议主办方也测试过用它们来分配论文给审稿专家。

最初的推荐系统相对粗糙,对行为做出的预测往往并不准确。但随着用户数据来源的扩大,基于此上的算法得到迅速改善。今天,推荐系统都是些极其复杂和精专的系统,看起来似乎比你还要了解你自己。

那么,推荐算法是怎么“猜你喜欢”的?

你有没有想过自己在亚马逊眼中是什么样子?答案是:你是一个很大、很大的表格里一串很长的数字。这串数字描述了你所看过的每一样东西,你点击的每一个链接以及你在亚马逊网站上买的每一件商品;表格里的其余部分则代表了其他数百万到亚马逊购物的人。你每次登陆网站,你的数字就会发生改变;在此期间,你在网站上每动一下,这个数字就会跟着改变。这个信息又会反过来影响你在访问的每个页面上会看到什么,还有你会从亚马逊公司收到什么邮件和优惠信息。

推荐系统开发者试过用各种各样的方法来采集和解析所有这些数据。近年来,多数人都选择使用“个性化协同推荐”(Personalized Collaborative Recommender)算法,它也是亚马逊、Netflix、Facebook以及一家英国流行音乐网站Last.fm的核心算法。之所以“个性”,是因为这种算法会追踪用户的每个行为,并以此进行推荐;而说它“协同”,则在于它能根据其他顾客对商品的喜好程度,决定是否对其进行关联。

系统中几种常用算法

User-User算法:计算用户之间的相似度

“用户关联”(user-user)是根据用户对同一件商品评分的相似度来计算他们之间的“距离”。举例来说,如果两个人对同一件商品的评分都是5,那么他们之间的距离就为0,若有不同,则会出现一个相差值,差值越大,两人的距离也就越远。通过计算得出品味相近的客户,我们便称之为共有一个“邻集”。

但是这种用户关联的策略效果并不好。首先,形成有意义的邻集很难,用户共同评分的地方往往很少,其中很多还是那种人人都喜欢的东西,比如一部备受好评的大片,不具备说服力。再来,由于用户间“距离”的变化很快,很多计算都需要及时进行,这个过程远远跟不上人们在网站上的节奏。

Item-Item算法:计算物品之间的关联

鉴于以上不足,如今,大部分的推荐系统都依靠“物品关联”(item-item)的算法,它依据评分用户的相似度来计算两种物品之间的距离。比如喜欢汤姆·克兰西作品(《猎杀“红十月”号》)的人,很可能也会给克莱夫·卡斯勒(美国惊险小说协会主席)的书打高分。一对物品之间的距离根据大量用户的评分计算得出,一段时间里相对稳定,由此推荐系统可以预先计算距离,并生成推荐结果。

然而,无论是“用户关联”还是“物品关联”,都存在一个问题,即对于同一件物品,用户前后的评分可能并不相同。品味、心情和印象随时都是变化。麻省理工学院上世纪90年代的一项研究表明,最初打分一年后,用户的评分会发生平均1分(满分7分)的变动。研究人员一直尝试在模型中纳入这一变量。比如,当用户给某个商品打了分,但这个分数与推荐算法过去记录的关于个人或物品信息不符,有些推荐算法就会邀请用户再次对这个商品进行评价。

除此之外,这两种算法还有一个更大的缺陷:太机械。它们能发现喜欢同样物品的人,但却忽略了爱好非常相似的潜在用户组合。比如说你喜欢莫奈的睡莲,那么在这个法国印象派大师的250幅睡莲中,你最喜欢哪一幅?一群喜欢莫奈的人当中,每个人喜欢的睡莲可能都不相同,这两种算法将很难识别出他们共同的爱好。

降维算法:把事物特征一般化

在此基础上,一种更科学的算法——降维应运而生。通过降维(Dimensionality Reduction)把事物更加一般化地表现出来。这种方法在计算量上要密集得多,不过随着计算机的发展,它也在逐渐取得突破。

拿你喜欢的食物当例子。你可以把这些信息用一个巨型矩阵表示出来,你可能给了烤牛排5星、红烧小排4星、烤鸡翅2星、冻豆腐卷1星、奶酪烤蘑菇5星、盐水毛豆4星,等等。

然而,推荐算法并不关心你给哪种食物评了多少颗星,它想要了解的是你一般而言的喜好,以便将这个信息应用到更丰富的食物上。比方说,基于你上面给出的信息,算法可能会认为你喜欢牛肉、咸的东西和烤制菜品,不喜欢鸡肉和任何油炸的东西,不喜欢也不讨厌蔬菜。

以此类推,你爱吃的食物所拥有的特点或者说维度,其数量远低于符合你要求的食物所包含的维度。通过查对这些维度,推荐算法可以迅速决定你是否会喜欢一种新的食物(比方说盐焗排骨),方法就是把这种食物的各项维度(咸的、牛肉做的、不是鸡肉、不是炒的、不是蔬菜、不是烤的)同你的资料进行比对。

这是一个很酷的解决方案,更为一般性的呈现,使得推荐算法能够准确地发现有着相似性但喜好不同的用户。而且它大幅压缩了矩阵的规模,使算法变得更加高效。创建矩阵所需要的时间会随着客户和产品数量的增多而飞速增长,一旦收到新的评分,矩阵就已经过时,但即便如此,它仍然能以一个挺不错的水平运作。

请您先登陆,再发跟帖!