本书着重介绍了推荐系统的各种算法设计和系统设计的方法,并且利用 一些公开的数据集离线评测了各种算法。对于无法通过离线评测知道算法 性能的情况,本书引用了很多著名的用户调查实验来比较不同的算法。
首先需要申明,本书的很多离线实验都是在一两个数据集上完成的,所 以本书得到的所有结论都不是定论,可能换一个数据集就会得到完全相反 的结论。这主要是因为不同网站中的用户行为有很大的差异,所以推荐系 统很难有放之四海而皆准的结论。因此本书非常鼓励读者在自己的数据集 上重复本书的实验,再得到适合自己具体情况的结论。这也是本书书名 中“实践”一词希望达到的效果。
最后,我想引用2009年ACM推荐系统大会上Strand研究人员做的一个报 告“推荐系统十堂课”,在这个报告中Strand的研究人员总结了他们设计推荐 系统的经验,提出了10条在设计推荐系统中学习到的经验和教训。
- 确定你真的需要推荐系统。推荐系统只有在用户遇到信息过载时才 必要。如果你的网站物品不太多,或者用户兴趣都比较单一,那么也 许并不需要推荐系统。所以不要纠结于推荐系统这个词,不要为了做 推荐系统而做推荐系统,而是应该从用户的角度出发,设计出能够真 正帮助用户发现内容的系统,无论这个系统算法是否复杂,只要能够 真正帮助用户,就是一个好的系统。
- 确定商业目标和用户满意度之间的关系。对用户好的推荐系统不代 表商业上有用的推荐系统,因此要首先确定用户满意的推荐系统和商 业上需求的差距。一般来说,有些时候用户满意和商业需求并不吻 合。但是一般情况下,用户满意度总是符合企业的长期利益,因此这 一条的主要观点是要平衡企业的长期利益和短期利益之间的关系。
- 选择合适的开发人员。一般来说,如果是一家大公司,应该雇用自 己的开发人员来专门进行推荐系统的开发。
- 忘记冷启动的问题。不断地创新,互联网上有任何你想要的数据。 只要用户喜欢你的产品,他们就会不断贡献新的数据。
- 平衡数据和算法之间的关系。使用正确的用户数据对推荐系统至关 重要。对用户行为数据的深刻理解是设计好推荐系统的必要条件,因此分析数据是设计系统中最重要的部分。数据分析决定了如何设计模 型,而算法只是决定了最终如何优化模型。
- 找到相关的物品很容易,但是何时以何种方式将它们展现给用户是 很困难的。不要为了推荐而推荐。
- 不要浪费时间计算相似兴趣的用户,可以直接利用社会网络数据。
- 需要不断地提升算法的扩展性。
- 选择合适的用户反馈方式。
- 设计合理的评测系统,时刻关注推荐系统各方面的性能。