一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第9天,点击查看活动详情。
什么是自然语言处理
- 自然语言处理(Natural Language Processing,NLP)是一门融合了计算机科学、人工智能以及语言学 的交叉学科。
- 自然语言是人工智能的一个领域。
- 自然语言处理的终极目标是理解人类语言或人工智能 。
自然语言概述
人类独有的自然语言非常独特,仔细思考一下,我们日常中每天都在用的自然语言(尤其是中文)具有高度灵活 的特点。
⭐️ 自然语言与编程语言的对比
我们不妨拿自然语言与编程语言从以下几方面做个对比:
1. 词汇量
自然语言的词汇量的丰富程度远远超过编程语言 。例如,C 语言共有 32 个关键字,Java 有 52 个;而中文目前大约有五万多个词条,并且仍在不断增加。
💡C 语言的 32 个关键字组成了所有的 C 语言程序,中文的五万多个词条组成了所有中文文章。
2. ⭐️ 结构化
自然语言是非结构化 的,而编程语言是结构化的 。
结构化指的是信息具有明确的结构关系,可以通过明确的机制来读写 。例如,Python 用 apple.funder='乔布斯'
可以明确读取苹果公司的创始人,而中文我们可以说 苹果公司的创世人是乔布斯
,可以说 乔布斯是苹果公司的创始人
,还可以说 只有乔布斯才可以称得上苹果公司的创始人
...
重点谈谈结构化
编程语言通过极少的词汇量 + 极强的结构化实现了各式各样的程序代码。 自然语言通过极多的词汇量 + 极弱的结构化实现了五花八门的表达方式。
3. 歧义性
自然语言中可能存在大量的歧义,而这些歧义在不同的语境下可能表现为不同的意思 ,举一个经典的笑话:
他说:“她这个人真有意思(funy)。”她说:“他这个人怪有意思的(funy)。”于是人们以为他们有了意思(wish),并让他向她意思意思(express)。他火了:“我根本没有那个意思(thought)!”她也生气了:“你们这么说是什么意思(Intention)?”事后有人说:“真有意思(funny)。”也有人说:“真没意思(nonsense)。”
而机器所处理的编程语言则不能具有任何歧义 ,有一点歧义就会导致代码的运行错误、编译错误。
4. 容错性
自然语言在使用中可能会出现很多错误 ,例如拼写错误、语法错误、顺序错误、发音错误等,而我们人类基本都可以理解这些有一些小错误的文本。但计算机对于编程语言的要求则是绝对正确 。
5. 易变性
任何语言都不是一成不变的,例如,汉语每年会产生大量的新词汇,而编程语言 C++ 几乎每隔很多年才会修订一次。
6. 简略性
人类语言往往简洁、干练 。我们经常省略大量背景知识或常识,比如我们会对朋友说“老地方见” ,而不必指出“ 老地方” 在哪里。对于机构名称,我们经常使用简称,比如“工行” “地税局” ,假定对方熟悉该简称。
总结
❗️ 首先记住一条原则:计算机对编程语言要求绝对精准无误,而自然语言非常灵活随意 。自然语言处理工作重点就是解决这个矛盾。
自然语言 | 编程语言 | |
---|---|---|
词汇量 | 极多 | 极少 |
结构化 | 极弱 | 极强 |
歧义性 | 极强 | 极弱 |
容错性 | 极强 | 极弱 |
易变性 | 极强 | 极弱 |
简略性 | 极强 | 极弱 |
⭐️ 自然语言处理任务流程
按照处理对象的颗粒度,自然语言处理的任务大致可以分为图所示的几个层次:
自然语言的数据类型
自然语言处理系统的输入源一共有 3 个 ,即语音、图像与文本 。其中文本处理是重中之重 ,其他两种数据最后也一般先要转化为文本才能进行后续的处理任务 ,对应的处理分别为语音识别(Speech Recognition)和光学字符识别(Optical Character Recognition,OCR)。
中文分词、词性标注和命名实体识别(词法分析)
这 3 个任务都是围绕词语进行分析,统称词法分析 。词法分析的主要任务是将文本分隔为有意义的词语 (中文分词) ,确定每个词语的类别和浅层的歧义消除(词性标注),并且识别出一些较长的专有名词 ( 命名实体识别) 。
对中文而言,词法分析常常是后续高级任务的基础。在流水线式的系统中,如果词法分析出错,则会波及后续任务。
词法分析可以说是自然语言处理的基础任务,目前中文词法分析已经非常成熟。
信息抽取
词法分析之后,文本已经呈现出部分结构化的趋势 。至少,计算机看到的不再是一个超长的字符串,而是有意义的单词列表(分词结果),并且每个单词还附有自己的词性(词性标注结果)以及一些标签(命名实体识别)。
根据这些分词后的单词与标签,通过信息抽取我们可以抽取出一部分有用的信息。例如通过高频词抽取出关键词;根据词语之间的统计学信息抽取出关键短语乃至句子。
文本分类与文本聚类
将文本拆分为一系列词语之后,我们还可以在文章级别做一系列分析。
把许多文档分类进行整理称作文本分类,例如判断一段话是褒义还是贬义的,判断一封邮件是否是垃圾邮件。
把相似的文本归档到一起,或者排除重复的文档,而不关心具体类别,此时进行的任务称作文本聚类。
句法分析
词法分析只能得到零散的词汇信息,通过句法分析可以得到句子之间的语法关系 。
例如,在一些问答系统中,比如我们问智能语音助手“查询刘医生主治的内科病人”,用户真正想要查询的不 是“刘医生” ,也不是“内科” ,而是“病人” 。但这三个词语都是名词,只有通过句法分析清楚他们之间的语法关系才能理清。
语义分析
相较于句法分析,语义分析侧重语义而非语法 。 它包括词义消歧(确定一个词在语境中的含义,而不是简单的词性)、 语义角色标注(标注句子中的谓语与其他成分的关系) 乃至语义依存分析(分析句子中词语之间的语义关系 )。
篇章分析
篇章分析可以自动分析自然语言语篇或者话语的组成结构、句际关系、语句衔接、语义连贯以及交际功能并得到相应内部表示的过程、技术和方法。
简单来说就是从更为广的视角—篇章角度进行分析,自然最为复杂也最为困难,目前很不成熟。
指代消解
指代消解指在文本中确定代词指向哪个名词短语的问题,举个例子:
今天晚上 10 点有国足 的比赛,他们 的对手是泰国队 。在过去几年跟泰国队 的较量中他们 处于领先,只有一场惨败 1-5。
指代消解要做的就是分辨文本中的 他们
指的到底是 国足
还是 泰国队
。
其他 NLP 任务
上述的这些任务是 NLP 中最为基础也最为重要的基本任务,除此之外还有一些更加偏向应用、与终端产品联系更为紧密的任务:
- 自动问答,例如 Siri。
- 自动摘要,为一篇长文档生成简短的摘要。
- 自动翻译,例如中文自动翻译英文。
- ⚠️ 信息检索,一般认为信息检索(Information Retrieve, IR)是区别于自然语言处理的独立学科。虽然两者具有密切的联系,但 IR 的目标是查询信息,而 NLP 的目标是理解语言。
自然语言处理的方法
自然语言处理方法发展历史
既然自然语言处理位于机器学习的应用层,那么自然语言处理的历史如同机器学习的历史一样,经历了从逻辑规则 到统计模型 的发展。
基于规则的专家系统(专家系统)
专家系统是由专家人工制定的确定性流程 ,只是看起来像人工智能而已。本质上仍然是“有多少人工,就有多少智能。”
专家系统在 NLP 领域的应用有波特词干算法(Poter stemming algorithm),广泛应用于英文词干提取,部分规则例如:
专家系统要求设计者对所处理的问题具备深入的理解,并且尽量以人力全面考虑所有可能的情况。它最大的弱点是难以拓展。当规则数量增加或者多个专家维护同一个系统时,就容易出现冲突。显然对于复杂的自然语言,尤其是中文,可能只有很小很小的领域才能应用专家系统。这种方法基本已经落伍了。
「每当我开除一个语言学家,语音识别系统就更准确了。」 Every time I fire a linguist, the performance of the speech recognizer goes up.
基于统计的学习方法(机器学习)
现在机器学习的本质实际上就是“统计智能”,机器学习的很多算法都是来源于统计学,自然语言处理同样不例外,统计学习方法其实就是机器学习的别称,目前是自然语音处理中最为重要的一种方法。
统计,指的是在语料库上进行统计,让机器自动学习一些自然语言的规律 。语料库指的是人工标注的结构化文本。
深度学习
虽然深度学习在 NLP 领域的发力并不是很大,如下数据:
可以看出深度学习的准确率并不是特别高,甚至还不如机器学习的一些算法。而且深度学习训练较为昂贵,成本代价也比较高。但很显然深度学习在 NLP 未来的应用仍然大有可为。
语料库
语料库就是自然语音处理中的数据集,下面介绍一下常用的语料库:
语料库建设
很多时候我们找不到符合处理需求的语料库,就只能自己动手标注了。语料库建设指的是构建一份语料库的过程,,分为规范制定、 人员培训与人工标注这 3 个阶段。相信每一个研究生都经历过当一名标注工的阶段。
中文分词语料库
中文分词语料库指的是由人工正确切分后的句子集合 。最为著名的语料库如《人民日报》语料库。
词性标注语料库
指的是切分并为每个词语指定一个词性的语料 ,每个单词后面用斜杠隔开的就是词性标签。例如:
命名实体识别语料库
这种语料库人工标注了一些实体名词以及实体类别。比如《 人民日报》语料库中一共含有人名、 地名和机构名 3 种命名实体:
句法分析语料库
这种语料库每个句子都经过了分词、 词性标注和句法标注 ,即标注了单词之间的联系和关系。 例如一个句子可视化后如图所示。
文本分类语料库
指的是人工标注了所属分类的文章构成的语料库,这种语料库标注最为简单,数据量也非常大。
NLP 开源工具
针对前面提到的 NLP 的任务的各个流程,网上已经有了很多的开源工具可以直接使用,下边介绍最为主流的几种:
不必多说,作者肯定要主推自己的产品,而且这个产品确实不错,所以后面都用 HanLP
,而且我们使用主流的 Python 语言。
HanLP 快速尝试
通过命令行,可以在不写代码的前提下轻松调用 HanLP 提供的常见功能。
分词
$ hanlp segment
我和你
我/rr 和/cc 你/rr
不必多说,作者肯定要主推自己的产品,而且这个产品确实不错,所以后面都用HanLP,而且我们使用主流的Python语言。
不必/d 多/a 说/v ,/w 作者/nnt 肯定/v 要/v 主推/b 自己/rr 的/ude1 产品/n ,/w 而且/c 这个/rz 产品/n 确实/ad 不错/a ,/w 所以/c 后面/f 都/d 用/p HanLP/nx ,/w 而且/c 我们/rr 使用/v 主流/n 的/ude1 Python/nx 语言/n 。/w
关闭词性标注:
$ hanlp segment --no-tag
中国共产党是中国工人阶级的先锋队,同时是中国人民和中华民族的先锋队,是中国特色社会主义事业的领导核心,代表中国先进生产力的发展要求,代表中国先进文化的前进方向,代表中国最广大人民的根本利益。党的最高理想和最终目标是实现共产主义。
中国共产党 是 中国 工人阶级 的 先锋队 , 同时 是 中国 人民 和 中华民族 的 先锋队 , 是 中国 特色 社会主义 事业 的 领导核心 , 代表 中国 先进 生产力 的 发展 要求 , 代表 中国 先进 文化 的 前进方向 , 代表 中国 最 广大 人民 的 根本利益 。 党 的 最高 理想 和 最终目标 是 实现 共产主义
句法分析
$ hanlp parse
中国共产党是中国工人阶级的先锋队,同时是中国人民和中华民族的先锋队,是中国特色社会主义事业的领导核心,代表中国先进生产力的发展要求,代表中国先进文化的前进方向,代表中国最广大人民的根本利益。党的最高理想和最终目标是实现共产主义。
1 中国共产党 中国共产党 ni nt _ 2 主谓关 _
2 是 是 v v _ 0 核心关系 _ _
3 中国 中国 ns ns _ 4 定中关系 _ _
4 工人阶级 工人阶级 n n _ 6 定中关 _
5 的 的 u u _ 4 右附加关系 _ _
6 先锋队 先锋队 n n _ 2 动宾关系 _ _
7 , , wp w _ 2 标点符号 _ _
8 同时 同时 d d _ 9 状中结构 _ _
9 是 是 v v _ 2 并列关系 _ _
10 中国 中国 ns ns _ 11 定中关系 _ _
11 人民 人民 n n _ 15 定中关系 _ _
12 和 和 c c _ 13 左附加关系 _ _
13 中华民族 中华民族 n n _ 11 并列关 _
14 的 的 u u _ 11 右附加关系 _ _
15 先锋队 先锋队 n n _ 9 动宾关系 _ _
16 , , wp w _ 2 标点符号 _ _
17 是 是 v v _ 2 并列关系 _ _
18 中国 中国 ns ns _ 19 定中关系 _ _
19 特色 特色 n n _ 20 定中关系 _ _
20 社会主义 社会主义 n n _ 21 定中关 _
21 事业 事业 n n _ 23 定中关系 _ _
22 的 的 u u _ 21 右附加关系 _ _
23 领导核心 领导核心 nz nz _ 17 动宾关 _
24 , , wp w _ 17 标点符号 _ _
25 代表 代表 n n _ 30 主谓关系 _ _
26 中国 中国 ns ns _ 28 定中关系 _ _
27 先进 先进 a a _ 28 定中关系 _ _
28 生产力 生产力 n n _ 25 动宾关系 _ _
29 的 的 u u _ 25 右附加关系 _ _
30 发展 发展 v vn _ 17 并列关系 _ _
31 要求 要求 n n _ 30 动宾关系 _ _
32 , , wp w _ 30 标点符号 _ _
33 代表 代表 n n _ 38 定中关系 _ _
34 中国 中国 ns ns _ 36 定中关系 _ _
35 先进 先进 a a _ 36 定中关系 _ _
36 文化 文化 n n _ 33 动宾关系 _ _
37 的 的 u u _ 33 右附加关系 _ _
38 前进方向 前进方向 n n _ 30 并列关 _
39 , , wp w _ 38 标点符号 _ _
40 代表 代表 n n _ 44 定中关系 _ _
41 中国 中国 ns ns _ 44 定中关系 _ _
42 最 最 d d _ 43 状中结构 _ _
43 广大 广大 b b _ 44 定中关系 _ _
44 人民 人民 n n _ 46 定中关系 _ _
45 的 的 u u _ 44 右附加关系 _ _
46 根本利益 根本利益 nz nz _ 38 并列关 _
47 。 。 wp w _ 2 标点符号 _ _
48 党 党 n n _ 51 定中关系 _ _
49 的 的 u u _ 48 右附加关系 _ _
50 最高 最高 a a _ 51 定中关系 _ _
51 理想 理想 n n _ 54 主谓关系 _ _
52 和 和 c c _ 53 左附加关系 _ _
53 最终目标 最终目标 nz nz _ 51 并列关 _
54 是 是 v v _ 2 并列关系 _ _
55 实现 实现 v v _ 54 动宾关系 _ _
56 共产主义 共产主义 n n _ 55 动宾关 _
57 。 。 wp w _ 2 标点符号 _ _