首页 > 编程笔记

自然语言处理(NLP)介绍(非常详细)

自然语言(Natural Language)是人类交流和思考的主要工具,通常是指一种自然地随文化演化的语言(如英语、汉语等)。编程语言是指计算机程序设计语言,如 C、Java、Python 等。

自然语言与编程语言的对比如下表所示:

表:自然语言和编程语言对比
比较 不  同
词汇量 自然语言中的词汇比编程语言中的关键词丰富,随时创造各种类型的新词
结构化 自然语言非结构化,而编程语言是结构化的
歧义性 自然语言含有大量歧义,而编程语言是确定的
容错性 自然语言的错误随处可见,而编程语言错误会导致编译不通过
易变性 自然语言变化相对迅速嘈杂一些,而编程语言的变化要缓慢得多
简略性 自然语言往往简洁、干练,而编程语言就要明确定义

自然语言处理(Natural Language Processing,NLP)主要探讨如何让计算机“理解”(Natural Language Understanding,NLU)人类的语言、让计算机自动“生成”语言(Natural Language Generation,NLG)。

自然语言处理是一门融合了计算机科学、人工智能及语言学的交叉学科,研究如何通过机器学习等技术,让计算机学会处理人类语言、理解人类语言,如下图所示:


图 1 自然语言处理的定位

发展历程

自然语言处理发展历程如下图所示,大致分为以下三个阶段。


图 2 自然语言处理发展历程

第一阶段:1950-1990年,基于语言学规则的语言处理技术

通过用计算机程序设计语言、制定一系列的规则表示人类语言。

1948 年,香农把离散马尔可夫过程的概率模型应用于描述语言的自动机,同时又把“熵”的概念引入自然语言处理。克莱尼在同一时期研究了有限自动机和正则表达式。

1956 年,乔姆斯基提出了上下文无关语法,导致了基于规则和基于概率两种不同的自然语言处理方法,使得该领域的研究分成了采用规则方法的符号派和采用概率方法的随机派两大阵营,进而引发了其后数十年有关这两种方法孰优孰劣的争执。

同年,人工智能诞生以后,自然语言处理迅速融入了人工智能的研究中。随机派学者利用贝叶斯方法等统计学原理取得了一定的进步,符号派也进行了形式语言理论生成句法和形式逻辑系统的研究。这一时期,多数学者注重研究推理和逻辑问题,只有少数学者在研究统计方法和神经网络。

1967 年,美国心理学家 Neisser 提出了认知心理学,从而把自然语言处理与人类的认知联系起来。

第二阶段:1990年-2010年,基于统计的机器学习处理技术

运用统计模型和语料库进行自然语言处理,统计学习方法其实就是机器学习的别称,其中,基于隐马尔可夫模型的统计方法和话语分析在这一时期取得了重大进展。

20 世纪 90 年代以后,随着计算机的速度和存储量大幅提高,网络技术的大力发展,语音和语言处理的商品化开发成为可能,基于自然语言的信息检索和信息抽取的需求变得更加突出,自然语言处理不再局限于机器翻译、语音控制等早期研究领域。

第三阶段:2010年至今,基于神经网络的深度学习

从 20 世纪 90 年代末起,人们逐渐认识到仅基于规则或基于统计的方法,无法取得成功。基于神经网络的深度学习被应用于自然语言处理,取得了较好的结果。

处理流程

计算机处理自然语言的过程具有“四化”:形式化、算法化、程序化和实用化,具体如下:
自然语言处理流程如下图所示:

图 3 自然语言处理流程

研究内容

自然语言处理,是研究计算机处理人类语言的一门技术,分为:语言学方向、数据处理方向、语言工程方向、人工智能和认知科学方向 4 大方向。

自然语言处理的研究方向包括如下内容。
自然语言处理的内容如下图所示:


图 4 自然语言处理的内容

推荐阅读