My PhD. Thesis 我的博士论文

曾经有一个人在blog里写他的博士论文,我觉得这是一个好主意。虽然现在离我正式写论文还有半年,不过我决定现在博客里写一个大纲。欢迎大家拍砖。大家的宝贵意见我会吸收到正式的论文中去。

Title :
Temporal Effects in Recommender Systems
推荐系统中的时间效应

我暂时确定是这个题目,也许会改个说法,但大致的范围就是研究推荐系统中的时间效应。

Main Contents
1. Introduction of recommender system 推荐系统简介
1.1 Main Problem of recommender system 推荐系统的主要问题
1.2 Main Algorithms in Recommender System 推荐系统的主要算法
1.3 Main Evaluation Method in Recommender System 推荐系统的主要评测手段

2. Temporal Effects Analysis 时间效应分析
2.1 User Preference Shifting 用户兴趣变化
2.2 Item Lifecycle Analysis Item的时效性
2.3 Long Tail in Temporal Data 时间中的长尾
2.4 Seasonal Effect 季节效应

3. Modelling Temporal Effects 时间效应建模
3.1 Neighborhood Model 邻域模型
3.2 Graph Model 图模型
3.3 Latent Factor Model 隐语义模型

上面是一个简短的目标

ResysChina on Douban

We have built a minisite on douban for recsys. Please visit and follow:

http://site.douban.com/106414/

推荐系统时效性的一条有趣的曲线

我目前在做一些时间的分析,有一些很有趣的现象,和大家share一下。

我一直比较关心一个推荐系统的问题,就是不同系统的用户行为究竟有什么区别,而如何根据这些区别来选择合适的推荐算法来预测用户的行为

在互联网里面,有着各种各样的资源,新闻,电影,音乐,百科,博客,论坛,开源工程(sourceforge)。对于不同的资源,用户行为会因为资源的属性而发生很大的改变,而正是因为用户行为的改变,使得推荐算法很难做到通用,而是需要我们为不同的系统开发不同的推荐算法。

那么我的想法是,找到每个系统不同的参数,然后根据看这些参数来了解这个系统需要什么样的算法。

目前我想到的第一个参数是时效性。这些系统具有不同的时效性。如果我们定义一个item的生命周期为这个item在系统中存在的天数(一个item在某一天存在,是指这个item在这一天至少被1个人关注过)我画出了一个item的popularity(多少人关注过)和生命周期之间的关系曲线。

从这条曲线可以看出,一个系统的时效性和这条曲线的斜率是很相关的。

nytimes的时效性很短,他的大部分item都是在第一天被很多人关注,而后面就没有人关注了,所以即使很popular的item,他的生命周期比不popular的item也长不了太久。其次是blogspot,然后是youtube。

wiki和lastfm的斜率很接近最大理论斜率(0.5)。这说明,他们上面的popular的东西完全是因为生命周期长所以才热门。而不是因为在某天特别的火过。

在算法方面,我的发现是,itemcf特别适合于wiki和lastfm这种斜率很大的,而usercf比较适合nytimes,youtube,和blogspot 我认为这是两种不同兴趣在不同系统中起不同作用的一种表现。

如果我们要预测一个人在t时候要干什么,我们一般从两条线索来调查
1)用户在t时刻还干了什么(itemcf就是基于这个假设)
2)其他用户在t时刻干了什么(usercf就是基于这个假设)
对于新闻来说,用户自己没有太多的习惯,他们其实看的都是其他用户也看的(这一点从我们觉得google reader很好用,就可以体现出来)而对音乐来说,每个人都有自己的喜好,不太会因为别人在听什么,他就也要听什么。

当然,从上面的分析可以知道,这两条线索都是不完整的,完整的应该是综合考虑两条线索。

Resys Group关于music recommendation新颖性的讨论

最近group里面讨论到了音乐推荐的新颖性,很有意思,这里把一些精华的言论摘录出来

Wu Di
说到热门推荐vs.长尾挖掘的事,我想到了一个实验

还是Oscar同学的那篇博士论文,“Music Recommendation and Discovery in the Long Tail”,对应的答辩PPT里面有张图,是一个实验的数据表格。实验是拿Last.fm的CF引擎跑的。

实验有288个参与者,实验素材是一堆30秒的音乐片段,经过CF处理后,推荐给测试者听,要求他们用5分制打分,同时会问他们一个问题,“你认得出这首歌 / 这首歌的演唱者吗?”

实验结果:

1. 当测试者既认得出这首歌,也听得出这首歌的演唱者时,测试者的平均给分是4.64(发生比率15.5%,下同)
2. 当测试者只听得出演唱者,而认不出这首歌的时候,测试者的平均给分是3.88(12.81%)
3. 当测试者即听不出演唱者,也认不出这首歌的时候,平均给分是3.03(71.69%)

实验得出的一个直观简论是,当推荐结果变得陌生时,用户变得不爽了…

Song Hui
关于这个实验结果我觉得是不是换个理解方式?

Oscar的结果1,2,3:当推荐结果陌生时,用户对推荐结果的评价会降低(而非用户变得不爽)

举个例子来说,如果豆瓣电台推荐给我的都是孙燕姿的歌,我都很熟悉,而且我会给很高的评分(正常情况下我是不会给那些我熟悉的歌打分的,不过在这个实验里用户是被要求给所有推荐结果打分),
但我对推荐系统确很不满意,推荐结果对我来说不够新颖,我更喜欢系统给我推荐一些我不熟悉的东西(如果是我喜欢的就更好了),
虽然对于这些不熟悉的推荐结果我给的分相比那些熟悉的可能会低,但这并不代表我的用户体验不好。

因此,当推荐结果变得陌生,用户给的评分较低 =? 用户不爽

Wen GuoZhu
这个实验的一个致命问题是没有考虑时间性,所以它结论的适用场景是实验室内的那一小段时间,而实际推荐系统考虑的是一个长期效果
我的意思是说,这个实验只是实验室里的情况,并不能代表实际的情况。因为实验室里的测试只是一两个小时的听歌喜好,当然是听到熟悉的就会打高分。但实际当中,用户是长年累月在听歌,你要是老给TA播熟悉的,时间长了TA就不乐意了。所以,这个实验的结论并不适用于实际情况。

如果还有进一步的讨论,我会更新这个帖子。

学术性网络调查:推荐网站的总体用户体验 [转]

这是香港的chen li老师在group里面贴的一个帖子,他要我们多宣传,所以我就转载到blog里面来了。

http://groups.google.com/group/resys/browse_thread/thread/c238fb019206ae34?hl=zh-CN

这是由瑞士联邦理工大学(洛桑分校)与香港浸会大学的人机交互组合作设计的一个网络用户调查。 主要目的是研究用户对当前推荐系统的使用体验,比如推荐
产品的质量,多样性和解释能力对用户行为的影响。这项研究的成果会对推荐系统就算法开发,用户界面设计和可用性等方面作出贡献,从而提高网络用户对推荐
网站的认可度。

我们有五份丰厚的奖品,会从中国(包括香港地区)的所有参与者中随机选出。

这个调查由一组英文问题组成。根据您自身使用推荐网站的经验,您只需要10到15分钟时间回答这些问题,就有机会获奖。 我们衷心的感谢您对我们的研究
所将投入的宝贵时间和意见,并谢谢如果能将这个调查链接转发给您的朋友和同事。

以下是这个调查的链接和英文介绍。

链接是:http://grpupc1.epfl.ch/~hu/survey/survey.php?sid=2

Have you used a recommender system in the past 6 months? Will you tell
us your experience with that system? By participating, you help our
research group understand user experience offered by various online
recommender systems. A recommender system proposes items that may
interest a user based on his/her browsing or purchasing behaviors. For
example, the “Customers who bought this item also bought” found on
Amazon.com is an example of a recommender system. The survey takes
about 15 minutes and can be done in front of your own computers.

As an appreciation of your time and effort, we offer the following
five prizes that will be randomly drawn from the participants:

1. First prize: iPod Touch – 8 Go (259 CHF)
2. Second prize: iPod Nano – 8 Go (199 CHF)
3. Third prize: iHome iP9 (149 CHF)
4. Forth prize: iPod Shuffle 4Gb (99.90 CHF)
5. Fifth prize: Victorinox Swissflash Ruby Mini Multi-Tool (75.00 CHF)

Note: the statement “All prizes can be exchanged to gift vouchers of
an equal amount from FNAC (www.fnac.ch or www.fnac.fr)” is not
suitable for users from Asia.

If you are interested, the study can be found at:
http://grpupc1.epfl.ch/~hu/survey/survey.php?sid=2

We thank you very much for your time and help in advance. Don’t
hesitate to forward the link to your friends/colleagues.

Best regards,
Dr. Pearl Pu
Swiss Federal Institute of Technology in Lausanne (EPFL)
Dr. Li Chen
Hong Kong Baptist University (HKBU)

参加CCIR会议

这几天在黑龙江牡丹江的镜泊湖参加CCIR会议。我是来打酱油的,师弟有一篇论文。这边上网太麻烦,只有开会的地方才能上网。

什么样的用户反应是推荐系统最需要的

用户看到推荐结果的时候会有很多不同的反应,比如以电影推荐为例

1. 这个推荐很有道理,不过推荐结果我已经看过了
2. 这个推荐的东西是什么啊,不知道
3. 靠,这个电影这个网站居然有,一直就想看

不知道还有什么心理?

用Topic组织你的兴趣

文栋兄的cutt真是千呼万唤始出来啊。 文栋专门写了一篇文章介绍他们的系统,大家可以围观一下:
http://www.guwendong.com/post/2010/cutt.html

然后再给大家展示一下Logo

OK,客套话说完了,来说说我的看法吧。这套系统的核心是利用主题(topic)来联系user和item的关系。推荐领域的一个牛人曾经说过,推荐的本质就是将user和item联系起来,user-cf是用相同兴趣的用户联系user/item, item-cf是用相似的item联系user/item。而cutt是利用topic联系user和item。

其实用topic联系user和item的思想在数据挖掘的领域已经有很悠久的历史了,其代表的模型就是LSI,pLSA, LDA,这些统统被称为latent factor model或者topic model。在理想的情况下,我们可以把item分成一个个的topic,然后更加用户的历史记录计算用户对不同的topic的喜好程度,从而对用户做出推荐。

topic model的好处是可以解决新的item的cold start的问题。如果一个新的item出现了,在collaborative filtering的方法中,如果还没有一个用户对这个item产生过行为,我们是没有办法判断谁会喜欢这个item的。但如果item是一篇文章,我们就可以根据topic model知道这个item属于什么样的topic (可以通过分析文章的内容),这样就可以把这个item推荐到喜欢这个item的topic的用户那儿去。

这个过程听起来很简单,其实还是很复杂的,首先是如何定义topic。举电影的例子,比如大话西游,可以属于古装片,周星驰电影,西游记,香港电影,向华强/向华胜兄弟的电影,搞笑电影,90年代香港电影,等等很多的topic。我们根据不同的数据可以得到不同的topic,而不同的用户对这个电影的看法可能是倾向于不同的topic。比如有的用户就是冲着周星驰去的,而有的用户只是冲着搞笑电影去的。

建立topic model需要的核心数据是拿到不同entity之间的关系。在collaborative filtering里面,用户看过item就是一种关系。语义网络也是一种关系,比如周星驰是演员,也当过导演,这就是一种语义网络定义的关系。cutt在语义网络方面下了很大的功夫。他们更加不同的数据,对item进行了不同种类的聚类,同时找出了用户最关心的聚类展示给用户。

另外cutt在反馈系统的设计上,直接让用户对他们找出来的topic进行反馈,这样就可以更好的给用户做出推荐。当然cutt也有很多的问题,不过这可能是和中国的互联网现状相关的,中国互联网上原创文章比较少,有意思的文章也比较少。这样造成大量的topic相关的文章其实也就是一篇,其他的文章都是相互转载。 另外用户的冷启动问题也比较难解决,因为现在还没有用户的喜好数据,所以cutt目前其实还没有做推荐系统,他们只是提供了一个相关topic的浏览体系,让用户比较容易的找到自己喜欢的topic。

就技术细节而言,cutt比我上面说的要复杂的多,我这儿就算抛砖引玉了,嘿嘿。

LDA的实现

首先要感谢Wang Yi的帮助,我之前对统计模型总是没有深入的了解,最近仔细研究了LDA之后,发现这个模型具有很多矩阵模型没有的优点。而且这个算法的实现很简单。下面的图片就是主要代码

同时利用openmp实现了一个简单的并行版本,可以充分一下利用我机器的4个核。

轻松一下

如何修改chromium的user-agent

在chrome工程下webkit/support/glue 工程里面,有个webkit_glue.cc的文件,找到里面这么一行

StringAppendF(
result,
“Mozilla/5.0 (%s; %c; %s; %s) AppleWebKit/%d.%d”
” (KHTML, like Gecko) %s Safari/%d.%d”,
mimic_windows ? “Windows” : kUserAgentPlatform,
kUserAgentSecurity,
((mimic_windows ? “Windows ” : “”) + BuildOSCpuInfo()).c_str(),
kUserAgentLocale,
WEBKIT_VERSION_MAJOR,
WEBKIT_VERSION_MINOR,
product.c_str(),
WEBKIT_VERSION_MAJOR,
WEBKIT_VERSION_MINOR
);
这就是chromium生成user-agent的语句,可以随便修改了