《推荐系统实践》读书笔记总结

后记

本书着重介绍了推荐系统的各种算法设计和系统设计的方法,并且利用一些公开的数据集离线评测了各种算法。对于无法通过离线评测知道算法性能的情况,本书引用了很多著名的用户调查实验来比较不同的算法。

但需要申明的一点是,本书的很多离线实验都是在一两个数据集上完成的,所以本书得到的所有结论都不是定论,可能换一个数据集就会得到完全相反的结论。这主要是因为不同网站中的用户行为有很大的差异,所以推荐系统很难有放之四海而皆准的结论。因此,需要在自己的数据集上重复本书介绍的实验和算法,再得到审核自己具体情况的结论。

2009年ACM推荐系统大会上Strand研究人员做的一个报告“推荐系统十堂课”,在这个报告中Strand的研究人员总结了他们设计推荐系统的经验,提出了10条在设计推荐系统中学习到的经验和教训。

  1. 确定你真的需要推荐系统。推荐系统只有在用户遇到信息过载时才必要。如果你的网站物品不太多,或者用户兴趣都比较单一,那么也许并不需要推荐系统。所以不要纠结于推荐系统这个词,不要为了做推荐系统而做推荐系统,而是应该从用户的角度出发,设计出能够真正帮助用户发现内容的系统,无论这个系统算法是否复杂,只要能够真正帮助用户,就是一个好的系统。
  2. 确定商业目标和用户满意度之间的关系。对用户好的推荐系统不代表商业上有用的推荐系统,因此要首先确定用户满意的推荐系统和商业上需求的差距。一般来说,有些时候用户满意和商业需求并不吻合。但是一般情况下,用户满意度总是符合企业的长期利益,因此这一条的主要观点是要平衡企业的长期利益和短期利益之间的关系。
  3. 选择合适的开发人员。一般来说,如果是一家大公司,应该雇用自己的开发人员来专门进行推荐系统的开发。
  4. 忘记冷启动的问题。不断地创新,互联网上有任何你想要的数据。只要用户喜欢你的产品,他们就会不断贡献新的数据。
  5. 平衡数据和算法之间的关系。使用正确的用户数据对推荐系统至关重要。对用户行为数据的深刻理解是设计好推荐系统的必要条件,因此分析数据是设计系统中最重要的部分。数据分析决定了如何设计模型,而算法只是决定了最终如何优化模型。
  6. 找到相关的物品很容易,但是何时以何种方式将它们展现给用户是很困难的。不要为了推荐而推荐。
  7. 不要浪费时间计算相似兴趣的用户,可以直接利用社会网络数据。
  8. 需要不断地提升算法的扩展性。
  9. 选择合适的用户反馈方式。
  10. 设计合理的评测系统,时刻关注推荐系统各方面的性能。

总结

这本书很早之前就想看了而且很早之前就买了,然后可能由于当时看到这里面复杂的数学公式和算法望而生畏就没有读下去,只读了一点。最近不是很忙,加上心血来潮花了一周时间粗略地看了一遍并且整理了读书笔记。同时,这也是我第一次写读书笔记,笔记的很大部分都是摘抄书上内容,而另一部分则是将书上内容用我自己的语言加以概括。这么做的原因有两点:(1)第一次整理读书笔记不清楚该如何整理;(2)关于推荐系统方面的内容是我第一次了解,所以很多知识都是第一次听说,因此觉得书上的所有内容我都需要学习、整理。尽管这次我整理了书中几乎所有的公式,但是没有一个公式是我真正推导验证过的,只知皮毛。当然这么做也是有我的理由的,我觉得即使我这次推导了一遍公式,记忆很牢固但是如果长期不去使用、复习,那么忘记是迟早的事。

为了让自己心里不那么惭愧,我总结了通过这次整理读书笔记学到的阅读整理技巧,聊以自慰:

  1. 读技术性书籍不要奢求读一次便要全部掌握记牢,欲速则不达。读技术性书籍有好几种阅读方法,你可以尝试带有目的性的去读,当前你需要去了解哪部分知识便去读那部分知识,这样可以做当通过实际生活中的应用加深你对相应知识的理解,两全其美。当然,你也可以去读两三遍,第一遍读的时候知识粗略了解,能够做到如果遇到问题知道在书中哪部分寻找解答方法即可,这就可以算作第二遍去阅读。第三遍阅读则是你遇到的问题多得已经几乎让你将书中提到的算法全部实现过了,这时候你再去阅读一遍目的是将整个知识体系梳理一遍,因为这时候估计你已经能够做到遇到1马上知道1后面跟的是2了。这两种阅读方法无法比较好坏,只能说面对的情况不同,选择的阅读方法就不同。
  2. 读书笔记的整理也很相似,当你第一遍阅读的时候可以只在书上画出你觉得重要的部分。不要急于去整理,原因是当你第一次阅读某一领域的书籍时会遇见很多你不了解的知识,如果直接去整理摘抄的话,不说你会收获多少,时间成本就很大(我在整理这本书的读书笔记的时候就深刻意识到了这点,因为我可能只花一两个小时去阅读一章,但是会花掉我四五个小时去整理摘抄并且这个过程是十分枯燥无趣的,令人很难坚持完成),而且长时间不复习很容易会忘记,更令人难过的是你会认为自己将阅读这本书的时间算作是浪费掉的,这种挫败感至少对我来说是难以化解的,从而丧失了积极反馈,成就感荡然无存。真正该去整理的时间是在第二次复习的时候,因为当你结合你实际问题去阅读的时候,实际问题会给你提供一个角度,你会从这个角度看待这部分知识。同样你也会从这个角度去理解这部分知识,进而解决实际问题,这可能就是大佬说的每次阅读会学到不同的东西。

最后评价一下这本书。看到扉页上写到2012年6月第一版,距离现在已经六年多了。不难想象这本书所涉及到的机器学习的知识在当时可以算作是十分前沿的技术,因为当时还没有深度学习的提出,AI领域的爆发式发展,梯度下降等机器学习算法还没像现在这般耳熟能详。如果我能在那个年代读到这样一本书,那么我一定是最”前卫”的程序员。因此,我觉得这本书可以算作是推荐系统领域的经典入门必读书籍,这个称号当之无愧,国人能写出这种水平的书籍我感到无比自豪。书中引用很多论文并且介绍了这些论文中的算法,严谨细致,为对推荐领域更为感兴趣的读者提供了丰富的扩展阅读材料,并且介绍的众多算法无一不是当时最为流行的推荐系统算法,这一点从作者所引用论文的发表时间就可以看出。由浅入深,先介绍简单算法再一步步加以改进,使读者更加容易消化理解。同时书中也加入了作者自己的观点以及经验,干货十足。然而令人可惜地是本书没有第二版,书中介绍的Amazon和Twitter的一些例子在如今看来早已过时,国内也出现了以推荐系统为核心技术的独角兽公司例如今日头条等。

但瑕不掩瑜,我仍然以读到此书为我的一大幸事。