前 言
2013年前后,自然语言处理和聊天机器人开始占据我们的生活。一开始,Google搜索看起来更像是一个索引,需要一些技巧才能找到我们要找的东西,但它很快就变得更加智能,可以接受越来越多的自然语言搜索。然后智能手机的文字自动补全功能开始变得先进起来,中间按钮给出的通常就是我们要找的词[1]。
2014年年末,Thunder Shiviah和我在俄勒冈州的一个黑客项目(Hack Oregon)上合作,挖掘竞选活动的自然语言财务数据。我们试图在美国的政治捐助者之间找到关联。政客们似乎在竞选财务文件中含糊其辞地隐藏了捐助者的身份。在这个项目中,有趣的不是我们能够使用简单的自然语言处理技术来揭示这些关联。最让我惊讶的是,Thunder经常会在我发送电子邮件几秒钟后,以简洁而恰当的方式回复我那些随意的电子邮件。他使用的是Smart Reply,一个Gmail收件箱“助手”,它的回复速度比我们阅读电子邮件的速度还快。
于是我深入进去,学习这些神奇的“魔术”背后的技巧。学得越多,这些令人印象深刻的自然语言处理技巧似乎就越可行,也越容易理解。我接手的每一个机器学习项目似乎都涉及自然语言处理。
也许是因为对语言的热爱,以及迷恋语言在人类智能中所起的作用,我会花几个小时与我在夏普实验室的信息理论家老板John Kowalski讨论词是否具有“意义”。我从导师和学生那里学到了越来越多的东西后,也逐渐获得了自信,我似乎能够自己构建一些新的、神奇的东西。
我学到的一个技巧是遍历一组文档,计算“War”和“Hunger”等词之后出现“Game”或“III”等词的频率。如果在大量的文本上进行这种处理,你就能从词、短语或句子序列中很好地猜出正确词。这种经典的语言处理方法对我来说很直观。
教授和老板们把这叫作马尔可夫链,但对我来说,这只是一个概率表,一个基于前一个词的每个词的计数列表。教授们把这叫作条件分布,也就是在前一个词后面出现另一个词的概率。Peter Norvig为Google构建的拼写校正器表明这种方法可以很好地扩展,并且只需要很少的Python代码[2]。我们需要的只是大量的自然语言文本。当想到在维基百科或古腾堡计划[3]这样大规模的免费文本集合上做这样一件事的可能性时,我不禁兴奋起来。
然后我听说了潜在语义分析(latent semantic analysis,LSA)。这似乎只是描述在大学里学过的线性代数运算的一种奇特的方法。只要记录下所有一起出现的词,就可以使用线性代数将这些词按照“主题”分组。LSA可以将整个句子甚至是一篇很长的文档的含义压缩成一个向量。而且,在搜索引擎中使用LSA时,它似乎具有一种不可思议的能力,那就是即使大家想不起来文档中包含的词,也能够返回正在寻找的文档。优秀的搜索引擎通常都能这样做!
然后,gensim
发布了一个基于Python实现的Word2vec词向量,能对单个词进行语义数学计算。事实证明,如果把文档分割成更小的块,这个神奇的神经网络数学就相当于原来的LSA技术。这让我大开眼界,给了我希望,让我感觉也许我能在这个领域有所贡献。多年来,我一直在思考分层语义向量——书是如何由章节、段落、句子、短语、词、字符组成的。Word2vec的发明者Tomas Mikolov洞察到,可以从词和包含10个词的短语构成的两级层次结构上找出文本的主要语义。几十年来,NLP的研究人员一直认为词具有组成成分,如“好”和情感强度。可以对这些情感评分、添加或删除成分,来组合多个词的含义。但是,Mikolov已经想出了无须人工创建这些向量的方法,甚至不用定义什么是成分。这使NLP变得非常有趣!
大约在那个时候,Thunder把我介绍给他的学生Cole,后来有人把我介绍给Hannes。于是我们3个人开始在NLP领域“分而治之”。我对构建一个听起来很智能的聊天机器人很感兴趣,Cole和Hannes的灵感来自强大的神经网络黑匣子。不久,他们打开了黑匣子,向我描述了他们的发现。Cole甚至用它来构建聊天机器人,以帮助我完成NLP之旅。
每次我们研究一些令人惊奇的新NLP方法时,这些方法似乎都是我能够理解和使用的,而且似乎每一种新技术一问世就有一个Python实现。我们需要的数据和预训练模型常常包含在这些Python包中。周日下午,在弗洛伊德的咖啡馆里,我、Hannes、Cole和其他朋友们一起集思广益,或者玩围棋和中键游戏(middle button game)。我们快速取得了一些进展,开始为Hack Oregon的班级和团队做讲座。
在2015年和2016年,情况变得十分严重。随着微软公司的Tay和其他机器人开始失控,很明显,自然语言机器人正在影响社会。2016年,我忙着测试一款机器人,它能通过收集推文来预测选举。与此同时,有关Twitter机器人对美国总统大选影响的新闻报道开始浮出水面。2015年我了解到,一个系统可以利用自然语言文本的算法“判断”来预测经济趋势,并触发大额金融交易[4]。这些影响经济和改变社会的算法创建了一个放大器反馈回路。对这些算法来说,“适者生存”法则似乎更倾向于产生最多利润的算法,而这些利润往往是以牺牲民主的结构性基础为代价的。机器正在影响人类,而我们人类正在训练它们使用自然语言来增加它们的影响力。显然,这些机器是在善于思考的人类的控制之下,但当意识到这些人同时也受到机器人的影响时,你是不是开始觉得有些混乱了?这些机器人会导致反馈系统中的连锁反应而失控吗?整个连锁反应对人类的价值观和利益是否有利,也许与这些机器人的初始条件有着很大的关系。
然后Manning出版公司的Brian Sawyer打来电话,我立刻就知道了我想要写什么,想要帮助谁。NLP算法和自然语言数据聚合的发展步伐不断加快,Cole、Hannes和我正在奋力追赶。
政治和经济领域的非结构化自然语言数据使NLP成为竞选或者财务管理者工具箱中的关键工具。令人不安的是,有些文章由其他机器人撰写,而这些文章体现的情感驱动着机器人写的这些预言。这些机器人通常不知道彼此,但它们实际上是在互相交谈,并试图操纵对方,而对人类和整个社会的影响在后来才能显现出来。我们只是在这种影响下随波逐流而已。
这种机器人与机器人对话循环的一个例子是金融科技初创企业Banjo在2015年的崛起。通过监控Twitter,Banjo的NLP机器人可以在路透社或美国有线电视新闻网的第一位记者发表报道前30分钟至1小时预测出有新闻价值的事件,而它用来检测这些事件的许多推文几乎肯定会被其他多个机器人收藏和转发,目的是吸引Banjo的NLP机器人的“眼球”。被机器人收藏并被Banjo监控的这些推文并不仅仅是根据机器学习算法分析来进行策划、推广或计量,其中许多推文完全是由NLP引擎编写的。[5]
越来越多的娱乐、广告和财务报告内容在不需要人动一根手指的情况下就可以生成。NLP机器人可以编写整个电影脚本[6]。视频游戏和虚拟世界经常会出现与我们对话的机器人,它们有时甚至会谈论机器人和人工智能本身。这种“戏中戏”将得到更多的关于电影的元数据,然后现实世界中的机器人会据此撰写评论以帮助大家决定看哪部电影。随着自然语言处理技术对自然语言风格的分析以及生成对应风格的文本,作者身份的判定将变得越来越难[7]。
NLP还以一些不那么直接的其他方式影响着社会。NLP支持高效的信息检索(搜索),对于我们消费的信息内容将是一个很好的过滤器或促进者。搜索是第一个商业上成功的NLP应用。搜索驱动的NLP算法的发展越来越快,进而改进了搜索技术本身。我们会向大家展示Web搜索背后的一些自然语言索引和预测技术,以帮助大家为这个增加集体智慧的良性技术循环做出贡献。我们还会展示如何将本书编入索引,让机器来负责记忆术语、事实和Python代码片段,这样大家就可以将大脑解放出来进行更高层次的思考。接下来大家还可以用自己构建的自然语言搜索工具来影响你和朋友的文化特征。
随着NLP技术的发展,信息流和计算能力也不断增强。我们现在只需在搜索栏中输入几个字符,就可以检索出完成任务所需的准确信息。搜索提供的前几个自动补全选项通常非常合适,以至于让我们感觉是有一个人在帮助我们进行搜索。当然,我们在编写本书的过程中使用了各种各样的搜索引擎。有些时候,这些搜索结果中也包括由机器人策划或撰写的社交帖子和文章,这反过来启发了后续页面中的许多NLP解释和应用程序。
到底是什么推动了NLP的发展?
- 是对不断扩大的非结构化Web数据有了新的认识吗?
- 是处理能力的提高跟上了研究人员的思路吗?
- 是用人类语言与机器互动的效率得到提升了吗?
实际上以上这些都是,其实还有更多。大家可以在任何一个搜索引擎[8]中输入这样一个问题“为什么现在自然语言处理如此重要?”,然后就能找到维基百科上给出各种好理由的文章[9]。
还有一些更深层次的原因,其中一个原因是对通用人工智能(AGI)或深层人工智能(Deep AI)的加速追求。人类的智慧可能只是体现在我们能够把思想整理成离散的概念,进行存储(记忆)和有效地分享。这使我们能够跨越时间和空间来扩展我们的智力,将我们的大脑连接起来形成集体智能。
Steven Pinker在《思想本质》(The Stuff of Thought)中提出的一个观点是:我们实际上是用自然语言思考的。称其为“内心对话”不是没有原因的。Facebook、Google和Elon Musk正押注于这样一个事实:文字将成为思维的默认通信协议。他们都投资了一些项目,试图把思想、脑电波和电信号转换成文字[10]。此外,沃尔夫假说认为语言会影响我们的思维方式[11]。自然语言无疑是文化和集体意识的传播媒介。
因此,如果我们想要在机器上模仿或模拟人类的思维,那么自然语言处理可能是至关重要的。此外,大家将在本书中学习词的数据结构及嵌套关系中可能隐藏着的有关智能的重要线索。大家将使用这些结构,而神经网络使无生命的系统能够以看起来像人类的方式消化、存储、检索和生成自然语言。
还有一个更重要的原因,为什么大家想要学习如何编写一个使用自然语言的系统?这是因为你也许可以拯救世界!希望大家已经关注了大佬们之间关于人工智能控制问题和开发“友好人工智能”的挑战的讨论[12]。Nick Bostrom、Calum Chace[13]、Elon Musk[14]和其他许多人都认为,人类的未来取决于我们开发友好机器的能力。在可预见的未来,自然语言将成为人类和机器之间的重要联系纽带。
即使我们能够直接通过机器进行“思考”,这些想法也很可能是由我们大脑中的自然词和语言塑造的。自然语言和机器语言之间的界限将会变得模糊,就像人与机器之间的界限将会消失一样。事实上,这条界线在1984年开始变得模糊,那年《赛博格宣言》[15]的发表使George Orwell的反乌托邦预言变得更加可能并易于接受[16][17]。
希望“帮助拯救世界”这句话没有让大家产生疑惑。随着本书的进展,我们将向读者展示如何构建和连接聊天机器人“大脑”。在这个过程中,读者会发现人类和机器之间的社交反馈回路上,微小的扰动都可能会对机器和人类产生深远的影响。就像一只蝴蝶在某个地方扇动翅膀一样,对聊天机器人的“自私属性”上一个微小的调整,可能会带来敌对聊天机器人冲突行为的混乱风暴[18]。大家还会注意到,一些善良无私的系统会迅速聚集一批忠实的支持者,来帮助平息由那些目光短浅的机器人造成的混乱。由于亲社会行为的网络效应,亲社会的协作型聊天机器人可以对世界产生巨大影响[19]。
这正是本书作者聚集在一起的原因。通过使用我们与生俱来的语言在互联网上进行开放、诚实、亲社会的交流,形成了一个支持社区。我们正在利用集体智慧来帮助建立和支持其他半智能的参与者(机器)[20]。我们希望我们的话语能在大家的脑海中留下深刻的印象,并像meme一样在聊天机器人的世界里广泛传播,用构建亲社会NLP系统的热情来感染其他人。我们希望,当超级智能最终出现时,这种亲社会的精神能对它有略微的推动作用。
[1] 在智能手机的预测文本键盘上重复点击中间按钮,了解Google认为你接下来想说什么。2013年,它作为“SwiftKey game”首次出现在Reddit上。
[2] 详见标题为“How to Write a Spelling Corrector”的网页,作者Peter Norvig。
[3] 如果大家感激这些可免费使用的自然语言书籍,那么也许也愿意参与争取延长版权的原始“使用”日期。
[4] 详见标题为“Why Banjo Is the Most Important Social Media Company You’ve Never Heard Of”的网页。
[5] Twitter在2014年的财务报告显示,有多于8%的推文是由机器人撰写的,DARPA[(美国)国防高级研究计划局]在2015年举办了一场竞赛,试图检测这些机器人,以减少它们对美国社会的影响。
[6] Five Thirty Eight。
[7] NLP已经成功用于分析16世纪莎士比亚等作家的风格。
[8] 用DuckDuckGo查询NLP。
[9] 参见维基百科词条“Natural language processing”。
[10] 参见《连线》杂志文章“We are Entering the Era of the Brain Machine Interface”(我们正在进入脑机接口时代)。
[11] 详见标题为“Linguistic relativity”(语言相对论)的网页。
[12] 参见维基百科词条“AI Control Problem”。
[13] Calum Chace,Surviving AI。
[14] 详见标题为“Why Elon Musk Spent $10 Million To Keep Artificial Intelligence Friendly”(为什么伊隆·马斯克花1000万美元来保持人工智能友好)的网页。
[15] Haraway,Cyborg Manifesto。
[16] George Orwell的《1984》的维基百科词条。
[17] 维基百科词条“The Year 1984”。
[18] 聊天机器人的主要工具是模仿与它交谈的人。对话参与者可以使用这种影响对机器人产生亲社会和反社会行为的研究。参见Tech Republic的文章“Why Microsoft’s Tay AI Bot Went Wrong”(为什么是微软的Tay AI机器人出了问题)。
[19] 关于自动驾驶汽车可能对高峰时段交通造成影响的研究中,可以找到一个自动驾驶汽车“感染”人类的例子。在一些研究中,高速公路上,你周围的每十辆车中就有一辆车会帮助你调节行为,减少拥堵,并产生更通畅、更安全的交通流量。
[20] Toby Segaran的Programming Collective Intelligence(《集体智慧编程》)在2010年开启了我的机器学习之旅。