前言
说起本书,还要追溯到2010年3月份的ResysChina推荐系统大会。在那次会议上,我遇到了刘江老师。刘老师看过我之前写的一些推荐系统方面的博客,希望我能总结总结,写本简单的书。当时国内还没有推荐系统方面的书,而国外已经有这方面的专业书了,因此图灵公司很想出版一本介绍推荐系统的书。所以,去年7月博士毕业时,我感觉有时间可以总结一下这方面的工作了,于是准备开始写这本书。
写这本书的目的有下面几个。首先,从个人角度讲,虽然写博士论文时已经总结了读博期间在推荐系统方面的工作,但并没有全部涉及整个推荐系统的各个方面,因此我很希望通过写作这本书全面地阅读一下相关的文献,并在此基础上总结一下推荐系统各个方面的发展现状,供大家参考。其次,最近几年从事推荐系统研究的人越来越多,这些人中有些原来是工程师,对机器学习和数据挖掘不太了解,有些是在校学生,虽然对数据挖掘和机器学习有所了解,却对业界如何实现推荐系统不太清楚。因此,我希望能够通过本书让工程师了解推荐系统的相关算法,让学生了解如何将自己了解的算法实现到一个真实的工业系统中去。
一般认为,推荐系统这个研究领域源于协同过滤算法的提出。这么说来,推荐系统诞生快20年了。这期间,很多学者和公司对推荐系统的发展起到了重要的推动作用,各种各样的推荐算法也层出不穷。本书希望将这20年间诞生的典型方法进行总结。但由于方法太多,这些方法的归类有很多不同的方式。比如,可以按照数据分成协同过滤、内容过滤、社会化过滤,也可以按照算法分成基于邻域的算法、基于图的算法、基于矩阵分解或者概率模型的算法。为了方便读者入门,本书基本采用数据分类的方法,每一章都介绍了一种可以用于推荐系统设计的、新类型的用户数据,然后介绍如何通过各种方法利用该数据,最后在公开数据集上评测这些方法。当然,不是所有数据都有公开的数据集,并且不是所有算法都可以进行离线评测。因此,在遇到没有数据集或无法进行离线评测的问题时,本书引用了一些著名学者的实验结果来说明各种方法的效果。
为了使本书同时适合工程师和在校学生阅读,本书在写作中同时使用了两种介绍方法。一种是利用公式,这样方便有一些理论基础的同学很快明白算法的含义。另一种是利用代码,这样可以方便工程师迅速了解算法的含义。不过因为本人是学生出身,工程经验还不是特别足,所以有些代码写得不是那么完美,还请工程师们海涵。
本书一开始写的时候有3位作者,除了我之外还有豆瓣的陈义和腾讯的王益。他们两位都是这方面的前辈,在写作过程中提出了很多宝贵的意见。但因为二位工作实在太繁忙,所以本书主要由我操刀。但书中的很多论述融合了大家的思想和经验,是我们很多次讨论的结果。因此在这里感谢王益和陈义二位合作者,虽然二位没有动笔,但对这本书做出了很大的贡献。
其次,还要感谢吴军老师为本书作序。感谢谷文栋、稳国柱、张夏天各自审阅了书中部分内容,提出了很多宝贵的意见。感谢我在Hulu的同事郑华和李航,郑华给了我充分的时间完成这本书,对这本书能够按时出版功不可没,而李航审阅了书中的部分内容,提出了很多有价值的修改意见。
最后感谢我的父母和妻子,他们在我写作过程中给予了很大照顾,感谢他们的辛勤付出。