自然语言处理基础概念

182 阅读15分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 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 的目标是理解语言。

自然语言处理的方法

自然语言处理方法发展历史

既然自然语言处理位于机器学习的应用层,那么自然语言处理的历史如同机器学习的历史一样,经历了从逻辑规则统计模型 的发展。

机器学习-波澜壮阔 40 年

基于规则的专家系统(专家系统)

专家系统是由专家人工制定的确定性流程 ,只是看起来像人工智能而已。本质上仍然是“有多少人工,就有多少智能。”

专家系统在 NLP 领域的应用有波特词干算法(Poter stemming algorithm),广泛应用于英文词干提取,部分规则例如:

专家系统要求设计者对所处理的问题具备深入的理解,并且尽量以人力全面考虑所有可能的情况。它最大的弱点是难以拓展。当规则数量增加或者多个专家维护同一个系统时,就容易出现冲突。显然对于复杂的自然语言,尤其是中文,可能只有很小很小的领域才能应用专家系统。这种方法基本已经落伍了。

「每当我开除一个语言学家,语音识别系统就更准确了。」 Every time I fire a linguist, the performance of the speech recognizer goes up.

基于统计的学习方法(机器学习)

现在机器学习的本质实际上就是“统计智能”,机器学习的很多算法都是来源于统计学,自然语言处理同样不例外,统计学习方法其实就是机器学习的别称,目前是自然语音处理中最为重要的一种方法。

统计,指的是在语料库上进行统计,让机器自动学习一些自然语言的规律 。语料库指的是人工标注的结构化文本。

深度学习

虽然深度学习在 NLP 领域的发力并不是很大,如下数据:

可以看出深度学习的准确率并不是特别高,甚至还不如机器学习的一些算法。而且深度学习训练较为昂贵,成本代价也比较高。但很显然深度学习在 NLP 未来的应用仍然大有可为。

解读 NLP 深度学习的各类模型

语料库

语料库就是自然语音处理中的数据集,下面介绍一下常用的语料库:

语料库建设

很多时候我们找不到符合处理需求的语料库,就只能自己动手标注了。语料库建设指的是构建一份语料库的过程,,分为规范制定、 人员培训与人工标注这 3 个阶段。相信每一个研究生都经历过当一名标注工的阶段。

中文分词语料库

中文分词语料库指的是由人工正确切分后的句子集合 。最为著名的语料库如《人民日报》语料库。

词性标注语料库

指的是切分并为每个词语指定一个词性的语料 ,每个单词后面用斜杠隔开的就是词性标签。例如:

命名实体识别语料库

这种语料库人工标注了一些实体名词以及实体类别。比如《 人民日报》语料库中一共含有人名、 地名和机构名 3 种命名实体:

句法分析语料库

这种语料库每个句子都经过了分词、 词性标注和句法标注 ,即标注了单词之间的联系和关系。 例如一个句子可视化后如图所示。

文本分类语料库

指的是人工标注了所属分类的文章构成的语料库,这种语料库标注最为简单,数据量也非常大。

NLP 开源工具

针对前面提到的 NLP 的任务的各个流程,网上已经有了很多的开源工具可以直接使用,下边介绍最为主流的几种:

不必多说,作者肯定要主推自己的产品,而且这个产品确实不错,所以后面都用 HanLP,而且我们使用主流的 Python 语言。

hanlp 官网

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  标点符号  _  _

更多用法

NLP 之 pyhanlp 安装及其使用