《自然语言处理实战:利用Python理解、分析和生成文本》读书笔记:第1章 NLP概述

目录

第1章 NLP概述

1.1 自然语言与编程语言

1.2 神奇的魔法

1.2.1 会交谈的机器

1.2.2 NLP中的数学

1.3 实际应用

1.4 计算机“眼”中的语言

1.4.1 锁的语言(正则表达式)

1.4.2 正则表达式

1.4.3 一个简单的聊天机器人

1.4.4 另一种方法

1.5 超空间简述

1.6 词序和语法

1.7 聊天机器人的自然语言流水线

1.8 深度处理

1.9 自然语言智商

1.10 小结


第1章 NLP概述

1.1 自然语言与编程语言

和计算机编程语言不同,自然语言并不会被翻译成一组有限的数学运算集合。自然语言处理是计算机科学和人工智能的一个研究领域,它关注自然语言的处理。这种处理通常包括将自然语言转换成计算机能够用于理解这个世界的数据。同时,这种对世界的理解有时被用于生成能够体现这种理解的自然语言文本。

自然语言处理系统常常被称为“流水线”,这是因为该系统往往包括多个处理环节,其中自然语言从“流水线”的一端输入,处理后的结果从另一端输出。

1.2 神奇的魔法

“自然语言”与“自然世界”中“自然”一词的意义相同。世界上自然的、进化的事物不同于人类设计和制造的机械的、人工的东西。能够设计和构建软件来阅读和处理大家现在正在阅读的语言,该语言正是关于如何构建软件来处理自然语言的,这非常高级,也十分神奇。

1.2.1 会交谈的机器

自然语言不能直接被翻译成一组精确的数学运算集合,但是它们确实包含可供提取的信息和指令。这些信息和指令可以被存储、索引、搜索或立即使用。

1.2.2 NLP中的数学

一旦从自然语言中提取出结构化的数值型数据——向量之后,就可以利用各种数学工具和机器学习工具。我们可以使用类似于将三维物体投影到二维计算机屏幕的线性代数方法,这些方法早在NLP自成体系之前就被计算机和绘图员所使用了。这些突破性的想法开启了一个“语义”分析的世界,即让计算机能够解释和存储语句的“含义”,而不仅仅是对其中的词或字符计数。语义分析和统计学一起可以有助于解决自然语言的歧义性,这里的歧义性是指词或短语通常具有多重含义或者解释。

因此,从自然语言文本中提取信息和构建编程语言的编译器完全不同。目前最有前景的技术绕过了正则语法(模式)或形式语言的严格规则。我们可以以来词语之间的统计关系,而不是逻辑规则表述的深层系统。

此外,自然语言还有一个更难解决的所谓“解码”挑战。用自然语言说话和写作的人都假定信息处理(听或者读)的对象是人而非机器。如果我们假设人类的语言“处理器”拥有人类一生关于世界的常识,我们就能用很少的话表达很多信息。这种信息的压缩率仍非机器的能力可及。

1.3 实际应用

文本挖掘、情感分析、行为预测、医学诊断……

1.4 计算机“眼”中的语言

1.4.1 锁的语言(正则表达式)

我们希望聊天机器人能够识别诸如“Hello Rosa”之类的问候语,并做出合适的恢复。这种语言就像锁语言一样,是一种形式语言,这是因为它对如何编写和解释一条可接受的语句有着严格的规定。形式语言是自然语言的子集,很多自然语言中的语句都可以用形式语言的语法来匹配或者生成。

1.4.2 正则表达式

正则表达式使用了一类特殊的称为正则语法的形式语言语法。正则语法的行为可预测也可证明,而且足够灵活。深奥、复杂的正则语法规则通常可以用一行称为正则表达式的代码来表示。

1.4.3 一个简单的聊天机器人

假阳性和假阴性错误的同时存在意味着我们的正则表达式既过于宽松又过于严格,这些错误可能会使机器人听起来有点儿迟钝和机械化,我们必须做更多的努力来改进匹配的短语,使机器人表现得更像人类。

受计算资源所限,早期的NLP研究人员不得不使用人类大脑的计算能力来设计和手动调整复杂的逻辑规则来从自然语言字符串中提取信息。这称为基于模式的NLP方法。这些模式就像正则表达式那样,可以不仅仅是字符序列模式。NLP还经常涉及词序列、词性或其他高级的模式。核心的NLP构建模块以及复杂的端到端NLP对话引擎都是通过这种方式,即基于正则表达式和模式匹配来构建的。基于模式匹配NLP方法的艺术技巧在于,使用优雅的模式来获得想要的内容,而不需要太多的正则表达式代码行。

1.4.4 另一种方法

为数值序列和向量设计的距离度量方法对一些NLP应用程序来说非常有用,如拼写校正器和专有名词识别程序。所以,当这些距离度量方法有意义时,我们使用这些方法。但是,针对那些我们对自然语言的含义比对拼写更感兴趣的NLP应用程序来说,有更好的方法。对于这些NLP应用程序,我们使用自然语言词和文本的向量表示以及这些向量的一些距离度量方法。

机器可以很好地处理词袋,通过这种方式能够收集即便是中等长度的文档的大部分信息内容。在词条排序和计数之后,每篇文档都可以表示为一个向量,即该文档中每个词或词条的整数序列。

这些栈和它们包含的每个词的数目被表示成一个词向量,该向量包含了许多0、一些1或2,这些数字散落在词所属栈出现的位置。这些词的所有组合方式构成的向量称为向量空间。该空间中向量之间的关系构成了我们的模型,这个模型试图预测这些词出现在各种不同的词序列集合中的组合。

可以想象,我们把能找到的所有文档、语句、句子甚至单个词,一个一个地输到这台机器。我们会在每个语句处理完后,对底部每个槽中的词条计数,我们称之为该语句的向量表示。机器以这种方式产生的所有可能的向量称为向量空间。这种表示文档、语句和词的模型称为向量空间模型。它允许我们使用线性代数来对这些向量进行运算,计算距离和自然语言语句的统计信息,这些信息有助于我们用更少的人工编码来解决更广泛的问题,同时也使得NLP流水线更加强大。

一个关于词袋向量序列的统计学问题事,在特定的词袋下最可能出现的词组合是什么?或者,更进一步,如果用户输入一个词序列,那么数据库中最接近用户提供的词袋向量的词袋是什么?这其实是一个搜索查询。输入词是用户可能在搜索框中搜索的词,最接近的词袋向量对应用要查找的目标文档或网页。高效回答上述两个问题的能力足以构建一个机器学习聊天机器人,随着我们给它提供的数据越来越多,它也会变得越来越好。

1.5 超空间简述

1.6 词序和语法

词的顺序很重要。那些在词序列(如句子)中控制词序的规则被称为语言的语法。这是之前的词袋或词向量例子中所丢弃的信息。词序所包含的逻辑对任何希望正确回复的机器而言都很重要,尽管普通的问候语通常不会因为词袋处理而造成混淆,但如果把更复杂的语句放入词袋中,就会丢失大部分意思。

无论语句是用形式化的编程语言编写的,还是用非形式化的自然语言编写的,当语句要表达事物之间的逻辑关系时,词序和语法都非常重要。这就是计算机语言依赖严格的语法和句法分析规则的原因。

1.7 聊天机器人的自然语言流水线

聊天机器人需要4个处理阶段和一个数据库来维护过去语句和回复的记录。这4个处理阶段中的每个阶段都可以包含一个或多个并行或串行工作的处理算法。

(1)解析:从自然语言文本中提取特征、结构化数值数据。

(2)分析:通过对文本的情感、语法合法度及语义打分,生成和组合特征。

(3)生成:使用模板、搜索或语言模型生成可能的回复。

(4)执行:根据对话历史和目标,规划相应语句,并选择下一条回复。

大多数聊天机器人将包含这5个子系统(4个处理阶段加上数据库)的所有元素。但是很多应用程序针对其中多个步骤只需要简单的算法。有些聊天机器人更擅长回答事实型问题,而其他一些则更擅长做出冗长、复杂、令人信服的像人一样的回复。

此外,深度学习和数据驱动编程使NLP和聊天机器人的应用迅速多样化。这种数据驱动的方法通过为NLP流水线提供越来越多的期望得以应用的领域中的数据使其更加复杂。当一种新的机器学习方法被发现能够更好地利用这些数据进行更有效的模型泛化或正则化时,那么就有可能实现能力的巨大飞跃。

1.8 深度处理

自然语言处理流水线的各个阶段可以看作是层,就像前馈神经网络中的层一样。深度学习就是通过在传统的两层机器学习模型架构(特征提取+建模)中添加额外的处理层来创建更复杂的模型和行为。

1.9 自然语言智商

就像人类的智能一样,如果不考虑多个智能维度,单凭一个智商分数是无法轻易衡量NLP流水线的能力的。衡量机器人系统能力的一种常见方法是,根据系统行为的复杂性和所需的人类监督成都这两个维度来衡量。但是对自然语言处理流水线而言,其目标是建立一个完全自动化的自然语言处理系统,会消除所有的人工监督(一旦模型被训练和部署)。因此,一对更好的IQ维度应该能捕捉到自然语言流水线复杂性的广度和深度。

随着阅读的不断深入,我们将构建聊天机器人的各个组成元素。聊天机器人需要所有的NLP工具才能很好地工作:

1.特征提取(通常产生一个向量空间模型);

2.通过信息提取回答事实型问题;

3.通过语义搜索从自然语言文本或对话的历史记录中学习;

4.通过自然语言生成来构成有意义的新语句。

机器学习给了我们一种方式,让机器表现得就像我们花了一辈子时间用数以百计的复杂正则表达式或算法在它身上一样。只需要提供用户语句以及期望聊天机器人模拟的回复的示例,我们就可以教会机器对类似于正则表达式中定义的模式进行回复。而由机器学习产生的语言“模型”,即有限状态机则好得多,它们对拼写和录入错误不那么敏感。

此外,基于机器学习的NLP流水线更容易用编程实现。我们不需要预测语言符号的每一种可能用法,而只需要给训练流水线提供匹配和不匹配的短语样本。只要在训练过程中给它们贴上标签,聊天机器人就知道哪些是正样本,哪些是负样本,它就会学会对正负样本进行区分。甚至还有一些机器学习方法,几乎不需要“标记”数据。

1.10 小结

1.好的NLP可以帮助拯救世界;

2.词的意义和意图可以被机器破译;

3.一个智能的NLP流水线将能够处理歧义;

4.我们可以教机器常识,而不是花一辈子的时间来训练它们;

5.聊天机器人可以看成是一种语义搜索引擎;

6.正则表达式不仅仅用于搜索。

你可能感兴趣的:(#,自然语言处理,人工智能)