我们对“语言”可能不陌生,对“自然语言”有点陌生,对“自然语言处理”就真的有点陌生了。
不妨设想如下场景:
当你加完班回到家中,疲惫地往沙发上一躺,随口一句“打开电视”,沙发前的电视按命令开启,然后一个温柔的声音会向你问候,“今天想看什么类型的电影?”或者是主动向你推荐目前最为流行的一些影片。
其实这些场景不再是设想,它正在悄悄地走进你我的生活。
2018年谷歌在开发者大会上演示了一个预约理发店的聊天机器人,语气惟妙惟肖,表现相当令人惊艳。相信很多读者都接到过人工智能的推销电话,不去仔细分辨的话,根本不知道电话那头只是一个自然语言处理程序。
“人机对话”“机器人客服”“文档结构化处理”是自然语言处理应用较为广泛的部分,也是商业价值较高的一些方向。除此之外,还有文本写作、机器人作诗等一些带有娱乐性质的应用。这些统统是“自然语言处理”。
自然语言处理(Natural Language Processing,NLP)是研究计算机处理人类语言的一门技术,包括:
· 句法语义分析——对于给定的句子,进行分词、词性标记、命名实体识别和链接、句法分析、语义角色识别、多义词消歧。
· 信息抽取——从给定文本中抽取重要的信息,比如时间、地点、人物、事件、原因、结果、数字、日期、货币、专有名词等。通俗说来,就是要了解谁在什么时候、什么原因、对谁、做了什么事、有什么结果,涉及实体识别、时间抽取、因果关系抽取等关键技术。
· 文本挖掘(或者文本数据挖掘)——包括文本聚类、分类、信息抽取、摘要、情感分析以及对挖掘的信息和知识的可视化、交互式的表达界面。目前主流的技术都基于统计机器学习。
· 机器翻译——把输入的源语言文本通过自动翻译获得另外一种语言的文本。根据输入媒介不同,可以细分为文本翻译、语音翻译、手语翻译、图形翻译等。机器翻译从最早的基于规则的方法到二十年前基于统计的方法,再到今天基于神经网络(编码-解码)的方法,逐渐形成了一套比较严谨的方法体系。
· 信息检索——对大规模的文档进行索引。可简单对文档中的词汇赋之以不同的权重来建立索引,也可利用1,2,3的技术来建立更加深层的索引。在查询的时候,对输入的查询表达式(比如一个检索词或者一个句子)进行分析,然后在索引里面查找匹配的候选文档,再根据一个排序机制把候选文档排序,最后输出排序得分最高的文档。
· 问答系统——对一个自然语言表达的问题,由问答系统给出一个精准的答案。需要对自然语言查询语句进行某种程度的语义分析,包括实体链接、关系识别,形成逻辑表达式,然后到知识库中查找可能的候选答案并通过一个排序机制找出最佳的答案。
· 对话系统——系统通过一系列的对话,跟用户进行聊天、回答、完成某一项任务,涉及用户意图理解、通用聊天引擎、问答引擎、对话管理等技术。此外,为了体现上下文相关,要具备多轮对话能力。同时,为了体现个性化,要开发用户画像以及基于用户画像的个性化回复。
当然,实际上自然语言处理并不仅限于上文所说的这些,实际上随着人们对深度学习的了解,更多应用正在不停地开发出来,相信读者会亲眼见证这一切的发生。
自然语言处理经历了长时间的发展,基本上可以说随着计算机在科学界和工业界的应用而不停地向前发展:
· 1950年前,主流:阿兰·图灵的图灵测试。人和机器进行交流,如果人无法判断自己交流的对象是人还是机器,就说明这个机器具有智能。
· 1950—1970年,主流:基于规则形式语言理论。根据数学中的公理化方法研究自然语言,采用代数和集合论把形式语言定义为符号的序列。它试图使用有限的规则描述无限的语言现象,发现人类普遍的语言机制,建立所谓的普遍语法。
· 1970—2010年,主流:基于统计。主要是谷歌、微软、IBM等公司。20世纪70年代,弗里德里克·贾里尼克及其领导的IBM华生实验室将语音识别率从70%提升到90%。1988年,IBM的彼得·布朗提出了基于统计的机器翻译方法。2005年,谷歌机器翻译打败基于规则的Sys Tran。
· 2010年以后,逆袭:机器学习。AlphaGo先后战胜李世石、柯洁等,掀起人工智能热潮。深度学习、人工神经网络成为热词,涉及领域包括语音识别、图像识别、机器翻译、自动驾驶和智能家居。
简单来说,自然语言处理可以分为以下几个阶段:
(1)可以说最早的自然语言处理是基于语法的,这也是最容易想到的点。一开始这一想法受到了众多专家的支持和追捧。科学家们认为可以通过总结一些语法规则来控制“自然语言处理系统”。
后来这套方法里的一个致命的弊病开始显露出来,就是这个方法的算法复杂性会变得非常高。因为人类语言本身的复杂性,可能要分析一个并不长的段落需要数十条规则,这些规则彼此之间可能是相悖的,需要不断地增加规则。最终可以想象处理一篇文章需要大量的规则,而这样海量的规则背后对应非常可怕的算法复杂度,这也远远超出了普通计算机的处理能力。
于是这种思想很快就被研究人员抛弃了。
(2)后来的自然语言处理更多的是基于统计的,目前来说发展也是比较成熟的。这一阶段的自然语言处理项目所强调的核心就是统计学方法,比如著名的贝叶斯定理。这一部分其实也是人工智能里相对比较好入手的部分。这一部分中的许多技术已经有数十年的历史,早已成为我们日常生活的一部分。可能甚至大家都没有意识到它的存在,其中的典型案例有反垃圾邮件和文章情感分析等。
(3)传统的自然语言处理总是有些啃不动的问题,比如词汇的分词问题、词义消歧问题(同一句话里的代词,究竟指代谁)、方法的模糊性问题,以及潜在含义问题(如何去理解一些俗语或者汉语里的成语这种知识点)。目前,自然语言处理的重点和前沿是要实现结合了深度学习的自然语言处理。也就是说,随着深度学习的发展,自然语言处理被提供了无限的可能和机遇。许许多多之前非常硬核的问题如今也可以使用深度学习去推动解决。