随着移动互联网的飞速发展,特别是物联网(InternetofThing,IoT)的飞速发展,人与设备的语言交互场景也越来越多,并且越来越成为核心。这种语言的交互既包括纯文字的,也包括语音的。自然语言处理(NaturalLanguageProcessing,NLP)就是以电子计算机、编程语言为工具对人类特有的书面和口头形式的自然语言信息进行各种类型处理和加工的技术。当然,随着技术的不断发展,其处理领域也出现了跨形态的组合。比如通过与图形图像处理技术的结合,可以实现看图说话、在线答题等应用。所以,自然语言处理是一门涉及语言学、计算机科学,当然还有数学的交叉性科学。
自然语言处理的目的是为了让计算机能够理解人的语言,然后做出相应的处理或者应答。根据应用场景的不同,自然语言处理可以分为如下三点:(1)信息抽取,包括自动摘要、自动检索、舆情分析等;(2)语言理解,包括机器翻译、人机对话、语义理解等;(3)跨形态组合,包括看图说话、语音自动合成、辅助教学等。这些应用都是利用自然语言处理技术,对所需要处理的信息进行挖掘和分析,找出人们想要的东西,进而做出响应。而落实到具体的应用,又会衍生出很多不同的应用系统,由此衍生出来的应用系统包括但不限于:信息自动抽取系统、信息自动检索系统、文本信息挖掘系统、机器翻译系统、人机对话系统、图片描述自动生成系统、语音自动识别系统、语音自动合成系统、计算机辅助教学系统,等等。
因为自然语言自身的复杂性,比如:很多歧义、结构复杂多样、表达千变万化,导致其处理方法纷繁复杂,要考虑非常多的情景。所以上述这些系统之间又存在交叉,或者上下关联,或者前后依赖等复杂的关系。而这些复杂的应用对于一个初学者来说,是非常庞杂和难以掌握的,在学习的过程中难免存在因为其中某一个细节不能掌握,而影响整个进程的进度。或者是虽然理解了算法的数学原理,但是怎么在实际场景中应用,以及当前算法能解决哪些实际问题,还是不了解。在笔者学习的过程中,发现目前出版的一些书籍,或者是偏理论性的,会介绍很多自然语言处理技术发展的历史,比如符号逻辑的发展轨迹、语义网络的发展轨迹、语言学派和统计学派的“恩怨情仇”,会让初学者在学习的过程中抓不住重点,有时候又感觉它们好像就是一回事;又或者介绍的内容过于技术,开篇就把其中涉及的一些数学知识全都介绍一遍,因为这其中有很多数学知识是比较高阶的,比如隐马尔科夫链、条件随机场、数理逻辑推理等,在介绍数学知识的过程中,又难免会涉及相关的证明。本来其数学形式就比较复杂,再加上连环的证明就更难懂了,对于数学基础稍微薄弱一点的读者,就感觉没有学习的欲望和必要了。但是在实际应用中,其实这些烦琐的证明根本不需要,有时候只需要记住一个结论,然后根据自己数据的情况,优化模型中的参数就可以了。所以笔者就想结合自己学习过程中和实际工作中的一些经验和教训,从应用的角度来对自然语言处理中的一些技术进行介绍。在介绍的时候,希望尽量地避免烦琐和突兀的数学证明,从应用的角度尽可能简洁明了地对一个算法或者处理系统进行简要的介绍,先让大家对这个方法有一个直观感性的认识,然后再深入了解其中的难点,进而深入学习和攻克难点。
本书采用以应用为主,算法和实现为辅的形式对自然语言处理中的一些技术进行介绍。对于算法数学原理的介绍,都是穿插在每一个应用的介绍中,对每一部分的数学知识进行分别介绍和讲解,没有开篇便对所涉及的数学知识进行一个全面的介绍,这样大家就不会因为某一个部分的数学知识不完备,或者掌握起来有困难而放弃整个知识体系的学习,这样大家就可以独立学习和掌握。同时因为知识遗忘的必然性,笔者将数学知识融入到应用中进行介绍,就更容易让读者记住。否则前后脱节之后,就忘记了之前讲解的数学原理,即使在应用中又要重新学习,也并不一定能够知道具体的应用原理。
因此,笔者完全从应用的角度来进行各个内容的组织,没有涉及太多的处理技术起源、变革、发展等历史信息。这一方面是因为各个技术都有自己的长处和缺点,这个是理论学派争论的焦点,但不是应用层面应该关心或者需要表明立场的地方;另一方面作为主要介绍应用实战的书,这里更多的是想让读者了解对于同一个问题目前的一些处理的方法和这些方法之间的优劣,以及相互的关联,以便找到解决问题更好的方法,这样也更有利于整个事情的发展。所以从做事情的本身来说,我们需要关心的是事情怎么能够做起来,没有做起来是因为什么,所以我们更多关心的是“术”的事情,而对于“道”的层面更多的是了解,是取众家之长,来“集大成”,而不能剑走偏锋。
目前,随着源工具的不断增加,大家对底层应用的开发需求在逐渐降低,所以本书先从上层应用介绍入手,让读者能够直接用起来,这样更有利于读者边实践边学习,也可以避免大家因为学习底层技术太难而阻碍后期应用的学习。从企业的角度出发,缺的也不是底层通用的处理技术和能力,更多的是缺少对实际业务的处理能力,业务跑起来之后,整个系统便会随着业务的发展而不断发展。所以本书采用以应用贯串始终的方式来进行相关技术的介绍和说明。
具体来说,本书主要从以下三个方面介绍了自然语言处理中相关的一些技术。
1)语义模型详解:主要是从应用的角度介绍自然语言处理中的一些语义处理模型,比如关键词提取、计算词距离、文本自动生成等。
2)自然语言处理系统基础算法:这一部分主要是从基础系统搭建的角度对相关算法进行介绍。包括分词、词性标注、句法分析等。这两部分介绍的内容又分别从使用原理、实现原理、具体的代码实现,以及对当前方法的思考这四个角度进行介绍。
3)系统案例实战:介绍了搭建一个舆情分析和挖掘系统所要涉及的环节、各个环节的算法实现,以及部分实现代码。
本书在写作过程中力求普及并与实践相结合,尽可能地照顾到不同层次不同专业的读者。另外,本书是以应用场景来组织各个内容的,每一个章节都包含一个完整的应用解决方案:问题解决的原理、实现的算法原理、具体算法的实现,所以读者可以根据自己的需要独立地学习各个章节的内容。在各个章节的学习过程中,笔者强烈建议读者在学习具体方法之前,一定要认真地理解所要解决问题的具体场景。要理解当前场景的输入是什么、输出是什么,为什么会是这样的结构,只有弄明白了这些,才会对算法有更深入的理解,也才能更好地使用所学习的算法,做到举一反三。因为算法本身是一种数据处理逻辑,所以只要具有相同处理逻辑的问题都可以用同样的算法,比如最大熵模型发挥了巨大的作用是人们找到了其适用的场景,而不是对模型进行各种变形以让其去适合具体的应用。
本书在写作的过程中参考了很多国内外学者的论文和著作。如果没有他们的出色工作,没有他们极为宝贵的研究成果,本书是写不出来的。在本书出版之际,谨向他们表示衷心的感谢。
在本书写作过程中,笔者常为自己的学识不足而苦恼、自然语言处理作为一门交叉性边缘性学科,涉及语言学、计算机科学、数学等各个方面的知识,笔者学识浅陋,论述之中倘有不当,恳请读者批评指正。有任何意见和建议请发到
[email protected],不胜感激。
最后,谨向帮助、支持和鼓励我完成本书的我的家人、同事、领导、朋友以及出版社的领导、编辑致以深深的敬意和真挚的感谢!
作者
2017年9月于杭州