Beyond Search

最好走的路越走越难,最难走的路越走越容易!

Keso 的力量

今天切身体会了一把 Keso 的威力!Keso 仅仅是在他的“昨日新闻”里收录了我的一篇Blog,“推荐系统:Amazon、Pandora 和 Del.icio.us”,就为我的 Blog 带来了数量级的访问量提升。看看下面这组数据多么有震撼力啊!数据来源是我的 Google Analytics 帐户。

Date Range	Visits	Pageviews
Mon 1/22	3	7
Tue 1/23	2	2
Wed 1/24	7	18
Thu 1/25	36	47
Fri 1/26	89	123

啥也不说了,对 Keso 只有高山仰止的份儿了!我积累了半年的 Feedsky 订阅只有 7 个,Keso 轻易就帮我涨到了 8 个,要是能突破 10 个就好了,哈哈。

其实这个现象也可以归为推荐系统里面的一个问题。在我之前有关 User-Based 与 Item-Based 推荐方法的介绍文章里,提到由于 User-Based 的计算量过大,性能比较差,所以现在的在线系统通常采用 Item-Based 的方法。然而在 2003 年,Mild 教授曾经从批判的角度审视了各种推荐算法,指出基于 Item-based 方法并不一定好,算法准确度与采用的实验数据数据有关,大多数情况下还是 User-based 方法好。就这个问题,我和豆瓣的首席推荐算法专家“胖子”曾经有过一次简单的讨论,希望可以寻找一个可行的思路以发挥 User-Based 方法的效能。当时达成的一个共识就是,如果是诸如 Keso 这样的牛人给我们做的推荐,通常都是有用的(得分比较高的)!这里面的关键问题就是如何识别“牛人”。今天受到了一些启发,对豆瓣来讲,从“友邻”出发弄一个 PeopleRank 出来应该是一个思路。众所周知,在豆瓣里被加入友邻次数最多的一定是阿北了;而在豆瓣上,阿北给出一个推荐肯定也能引起广泛的共鸣。有机会把这个想法作一下试验。

头一次有人链接我的文章,另外再纪念一下 Blog PV 突破 100!

  1. http://blog.donews.com/keso/archive/2007/01/26/1120278.aspx
  2. http://www.tagrit.com/story/2916/

Update: 2006.1.26,Feedsky 订阅数顺利超过 10 个,纪念一下,哈哈!谢谢 Keso!
zhuaxia(5);Bloglines(4);google reader(1);GreatNews(1),感谢这些朋友!

推荐系统:Amazon、Pandora 和 Del.icio.us

Alex Iskold 在 RWW 上发表了一篇文章,“The Art, Science and Business of Recommendation Engines”,这是一篇非常不错的关于“Recommender Systems”的文章,推荐大家一定阅读一下。由于Google,现在大家关注的热点是“Search”,但互联网不仅仅只是 Search,应该有更多,我们也需要更多。当我们知道自己要什么的时候,我们要做的是“Search”,比如我喜欢易中天的《品三国》,我可以 google 一下,看看它会给我些什么不一样的东西。这个时候,我的目的很明确,Search 围绕我的目的,可以作很多。但更多的时候,我其实并不是明确地知道自己想要什么,我只是无聊,我不知道应该 Search 什么,我就是想随便“翻翻”。这个“翻翻”就是 Alex 文章里面说到的 “Browse”。Alex 提到了很重要的一点,在 “Browse” 的状态下,用户“需要一些建议”(open to suggestions)。这正是需要 Recommender Systems 发挥作用的时候!

Alex 总结了 3 种推荐模式,它完全是从应用的角度划分的,但基本是可以和我之前提到的学术界的 3 种划分相对应的。

  1. 个人化推荐(personalized recommendation)—— 基于个人以前的行为模式进行推荐。
  2. 社会化推荐(social recommendation)—— 基于和你相似用户以前的行为模式进行推荐。
  3. 项推荐(item recommendation)—— 基于项本身进行推荐。

当然还有这 3 种混合模式的推荐。而且通常下,一个好的推荐系统,必然也是多种推荐方法相混合。觉得推荐模式的是数据!我们不讨论 Alex 的划分。他分析了 3 个非常成功的案例:Amazon、Pandora和 Del.icio.us。

Amazon 是当之无愧的“推荐之王(King of recommendation)”,无论是从推荐的实际效果还是从对推荐的重视程度上来看,都很难再找出一个能和 Amazon 比肩的应用。“据说(rumored)” Amazon 30% 的销售是依靠推荐带来的!Amazon 自然是根据需要选择了不同的推荐方法,Alex 的分析基本正确。

Pandora 为推荐系统打开了一个新思路,Alex 形象地称之为基于“基因”的推荐。据说,Pandora 大概花了四年的时间来准备它的音乐库,分析每一首歌曲的音乐特质,提取它的基因。冷开始问题,是所有推荐系统新上线时的最大问题,Pandora 通过耐心的积累和专业的工作,换来了上线后用户对其推荐准确性和低廉进入成本的如潮好评!“绑架?我们不专业啊!”,石头里这句经典的台词,其实在玩笑间说出了一个实实在在的道理——要成就一件事情,需要专业,包括态度的专业和技术的专业。但我个人认为,如果 Pandora 仅是停留在目前这种状况,还是无法建立不可逾越的壁垒的。它需要进一步在自己和用户之间建立一种有效的反馈回路,从而不断调整自己的推荐系统。Amazon 具备这种天然的反馈回路——它可以跟踪用户对推荐产品的实际购买情况。这完全不影响用户体验,在不知不觉间就可以完成。而 Pandora 不具备此天然回路,因为听音乐通常是一种背景活动,比如我,我会边写程序边听音乐,绝大部分它推荐给我的歌曲,我都会听,很少快进或者跳过,从而使 Pandora 丧失了获取反馈的机会。以 Pandora 现有的数据基础,如果可以很好的解决这个问题,那么 Pandora 之外的音乐推荐网站就都可以干别的去了。

有没有可能把 Pandora 这种基于“基因”的推荐方法拓展开来呢?Alex 说可以使用“tag”。但我个人持保留态度。Del.icio.us 是 tag 应用的开创者,它确实为我们管理和组织信息带来了一种新的行之有效的方法。但以此为基础进行推荐可行吗?应该慎重对待此问题。tag 的使用太过于随意,因人而异差别很大,基于这种随意打上的 tag 进行推荐,风险太大。推荐系统里有句名言,“不准确的推荐,还不如不推荐”!我曾经贴过一篇关于 tag 的文章,“Manual vs. automated tagging”,也推荐大家看一看。总之,一套精心设计的、能够引导用户正确标注的 tag 系统,是围绕 tag 展开推荐的基础。

Greg 对 Alex 的文章进行了回应,“The value of recommendation engines”,同样值得一看。

美国总统之咒

今天翻看2007.1.4期的《南方周末》,发现了这个。不知道以前有没有人总结过,反正看了挺震惊。以下转载在南方周末,原文见这里“肯尼迪总体遇刺之地”。

有人说,肯尼迪被杀是因为受到“总统诅咒”之故,命中注定。
我读过一篇文章,说100多年前,因美国政府迫害土著印地安人,印地安人诅咒,凡是在年份尾数是零的年头当选的总统,都会死在任上。美国4年选一次总统,每20年会轮到一次选举年尾数是零的年份。
听来荒唐,但可怕的是,从1840年以来,凡是在年份尾数是零的年头当选的总统都应验了这个诅咒!
让我们看一看:
1840年,哈里森,就任才一个多月就病死了;
1860年,林肯,在任上被暗杀身亡;
1880年,加菲尔德,在任上被暗杀身亡;
1900年,麦金莱,在任上被暗杀身亡;
1920年,哈定,在任上病故;
1940年,罗斯福,在任上病故;
1960年,肯尼迪,被暗杀身亡;
1980年当选的里根,被一个年轻人开枪刺杀,中两 弹,但获救保住了性命。青年刺客被当场抓获。这个青年刺杀总统的原因却荒唐得让人难以置信———为了引起他所追求的一个女演员对他的注意!
文章作者猜测,或许里根的获救会打破这个诅咒?否则,下一个命丧任上的美国总统就是,2000年当选又连任的现任总统———乔治·W·布什


肯尼迪被刺之前
肯尼迪被刺之前

肯尼迪被刺之地·得克萨斯州达拉斯迪利广场
肯尼迪总统遇刺现场———得克萨斯州·达拉斯市·迪利广场。上方左边的七层楼房就是得州教科书大楼,子弹发自六楼仓库的一扇窗户。

Findory 要走了!

早上看 Blog,突然看到了这条令人震惊的消息——“Findory rides into the sunset”!

因为喜欢研究个性化推荐,所以崇拜 Greg;因为崇拜 Greg,所以喜欢上了 Findory,喜爱上了那个桔红色的小标记。虽然用得还是没有 Google Reader 多,但每天总是要上去转一转的。Findory 是历史最悠久的个性化内容服务站点,它正式启动于2004年1月2日,刚刚度过他3岁的生日。Findory 对用户的隐私保护,在初期曾经给我留下了非常深刻的印象。你可以不进行任何 的注册,就可以享受到具有一定 personalized 程度的内容。当你在 Findory 中点击自己喜欢的文章的时候,Findory就会在后台学习你的 阅读习惯,之后,Findory 就会把他计算出来的推荐结果呈献给你。你阅读的文章越多,Findory 对你的阅读习惯的学习越全面,就可能为你推荐越准 确的内容。

和另外一个类似的 personialized news 网站 reddit 被高价收购相比,Findory 今天的结果确实令人惋惜。RWW 上曾经有一篇 Blog 其中对比了这两个网站,“Personalied Content 国外市场纵览”。我个人其实也更加看好 Findory,因为就我的体验,无论从功能还是算法的效果来看,Findory 都要好于 reddit!可世事难料,最后退出的竟然是 Findory!Greg 曾经写过这么一篇 Blog,“Ruthless enough for a startup?”,表达了他自己的一些困惑。现在我再来看这篇 Blog,心里更加不是滋味,难道——“Is ruthlessness the key to success for Web 2.0 startups?”我不禁联想到了我喜爱的豆瓣。豆瓣,你够 ruthless 吗?

不管怎样,祝福 Greg 日后取得更辉煌的成就!

推荐系统:Slope One 算法

Slope One 算法是由 Daniel Lemire 教授在 2005 年提出的一个 Item-Based 推荐算法。
Slope One 算法试图同时满足这样的的 5 个目标:

  1. 易于实现和维护:普通工程师可以轻松解释所有的聚合数据,并且算法易于实现和测试。
  2. 运行时可更新的:新增一个评分项,应该对预测结果即时产生影响。
  3. 高效率的查询响应:快速的执行查询,可能需要付出更多的空间占用作为代价。
  4. 对初次访问者要求少:对于一个评分项目很少的用户,也应该可以获得有效的推荐。
  5. 合理的准确性:与最准确的方法相比,此方法应该是有竞争力的,准确性方面的微小增长不能以简单性和扩展性的大量牺牲为代价。

使用这个图可以简明扼要的说明一下 Slope One 算法。

  1. User A 给 Item I 打分为 1;给 Item J 打分为 1.5。
  2. Uesr B 给 Item I 打分为 2。
  3. 问题是:User B 给 Item J 打分为多少?
  4. 使用 Slope One 算法,答案是:2.5,2+(1.5-1)=2.5。

是不是非常简单?!Slope One 算法就是这么简单,而且它居然还相当有效!详细的试验分析可以看这里“Slope One Predictors for Online Rating-Based Collaborative Filtering”。

喜欢 Python 的朋友可以看这篇 Blog,“tutorial about how to implement Slope One in Python”,非常详细的介绍了 Slope One 算法在 Python 下的实现步骤。当然了,这只是一个非常简单的实现,你可以使用 MovieLens 或者 EachMovie 的数据集进行一些简单地试验。但如果真正要把它投入到商业环境,还有许多其他的工作必须做好。

我正在使用 Python 实现一个推荐算法模块集,其中也实现了 Slope One 算法,但现在还比较简陋,不太适合开源,等完善一些之后,我会把它开源出来,和大家共享。

必须学会的十件事情

原文在这里:Half an Hour: Things You Really Need to Learn

原文里说的是“在校园里”确实需要学会的十件事情,但看完后我觉得同样适用于校园外——尤其是从国内校园里走出来的我们!我把标题部分按照自己的理解翻译了一下,详细的内容见原文。

  1. How to predict consequences,如何预测结果。
  2. How to read,如何阅读。
  3. How to distinguish truth from fiction,如何思考,只要应是“如何辨明真假”,但个人觉得文中强调的更是辨明真假——即思考。
  4. How to empathize,如何换位思考。
  5. How to be creative,如何拥有创造力。
  6. How to communicate clearly,如何明白无误地交流。
  7. How to learn,如何学习。
  8. How to stay healthy,如何保持健康!
  9. How to value yourself,如何秀自己,如何表现自己的价值。
  10. How to live meaningfully,如何有意义地生活。

对我来讲,最需要学习的是:How to predict consequences;How to value myself。你呢?

2007,健康快乐!

2007 年来了!祝大家健康快乐!

2006 年是我写 blog 的第一年,虽然断断续续的,但还是坚持了下来。这期间把 blog 搬了 2 次家,最开始是在 blog.donews.com 上,但 总感觉系统不好用,别别扭扭的;后来搬到了 hi.baidu.com 上,非常相信 baidu 的技术能力,但产品做的确实让人失望,不得不再找新房子;直到 donews 推出了 my,选择了 wordpress 还是非常让人舒心的。公欲善其事,必先利其器!正在考虑 2007 年搭建自己独立的 blog 平台,域名就是 beyondsearch.cn,我查了,这个还没有被注册。

不知道通过 feedsky 订阅我 blog 的 4 位朋友你们身在何方,都是从事什么工作的?非常感谢你们对我的支持,如果方便的话,请在此文 后留个名字,打个招呼。当然,也同样感谢每一位访问者。

2007 年我最大的愿望:希望可以看到更多更好的基于个性化推荐技术的 Web 应用!

2007 年,我也将努力自己开发一个使用个性化推荐技术的 Web2.0 应用。