入门的好书
2009-04-13
花了很长时间,终于断断续续地坚持把《Programming Collective Intelligence》给读完了。作者用非常直观的方式向读者展示了人工智能和机器学习中的大量经典的算法。更可贵的是,作者在展示算法时所使用的例子都是Internet中非常有代表性的场景,并且很多情况下还会结合一些实际运营的Web站点的数据作更进步阐释。当然,作为一本实用型的书,少不了的是大量可运行的代码。
与其他Data Mining、Machine Learning方面的一些教科书相比,这本书的最大的优点是具体和直接。因为算法类教科书要传达的是一个领域内的相关知识,它往往非常专注本领域相关知识的介绍,而尽可能少涉及到一些次要的相关领域的知识。另外,又要显得本领域的重要性,所以描述要尽可能地严格和一般。也就是说,需要撇开具体问题(可以举例),仅仅从一个更高的层次上抽象地介绍这个领域。以表明“这个领域不光能解决这个问题,我的模型在这,只要你能套对模型,你的问题就能用我的方法来解。”而描述算法用的也是自然语言或者伪代码,目的是为了说明“我是语言中立的,满足一定条件的语言都能实现这个算法。”并且,还要用很多的篇幅来说明或者证明这个算法为什么是有效的,在什么时候有效,有效到什么程度等。
而事实上,对于初学者来说,描述上抽象往往可能造成了理解上的困难。因为我们理解东西,很多时候可能比较喜欢从感性上升到理性。也就是由具体到抽象。而教科书上的介绍往往是反过来的,先建立理性认识,然后再让你去实验实践得到感性认识。如果之前有一点背景知识,能够利用类比想象来理解的话,情况还好,否则就真的只能“云深不知处”了。所以,这边书的作用也正是在于此吧:它提供了关于这先算法如何编写以及使用的非常直白的指南。直白到就是照着书上敲代码配置环境就能运行。
不过补充一句,我没有贬低教科书的意图,事实上,看完这本书以后,想继续提高对于算法的认识的话,教科书依然是一个非常好的途径。
关于这本书没有告诉我们的。这本书没有告诉我们这些算法为什么有用。另外,它也没说怎么讲如何将算法用于大规模的数据上。关于第一个问题,是理论的问题,教科书解答的也正是这种问题。关于第二个问题,则是实践性的问题。关于大规模数据的存储、访问,以及在数据上的运算问题则更多是分布式并行系统所研究的问题。我想如果要是把这些东西加进来,这本书不知道还要加厚几倍,而它的读者不知道要少多少。
再说具体内容,集体智慧编程思想其实是简单的:各人自动自发无目的地提供信息,经过计算机整理以后会形成一种“合力”使得更多的人受益。举例来说,内容推荐。在内容推荐中,首先通过一个人过往的行为,比如看过的电影、书、朋友等,提取这个人爱好的特点(将人抽象成一些关键字,或者说属性),然后可以:1 推荐这个人特点吻合程度高的内容(内容本身也抽象成了一些关键字);2 推荐和这个人爱好相近的人所喜欢的东西(志同道合嘛)3 其他。通过这种在属性空间中的运算,对人和内容、人和人、内容和内容之间的关系进行整理、展示、应用。这个就有点像流水生产线,流水线上每个工人负责一些比较细致具体的活儿,而整个流水线机械负责整个流程的运转和一些容易处理的加工过程。而集体智慧编程正是由计算机负责知识的整理过程,而人负责提供零散的各个知识点。
总结一下,这边书以恰到好处的深度展示了一幅利用集体智慧建设更智能的Internet的图景。在这个图景中,每个人按照自己的目的产生信息,而计算机则整理这些信息以造福更多的人。