购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第1章
自然语言理解方法与应用程序

我们使用自然语言通过口语和书面语形式与他人交流,这种能力是我们成为社会成员的重要因素之一。在全球范围内,幼儿开口说出第一句话的时候,都是值得庆祝的时刻。通常情况下,我们可以轻松地理解自然语言。但当一个人生病、受伤或身处异国他乡时,语言表达可能有困难,这时我们会更加清晰地意识到语言在生活中的重要性。

本章将介绍自然语言以及自然语言理解应用程序。 自然语言理解 方法广泛应用于与人机对话相关的人工智能(Artificial Intelligence,AI)系统中。此外,本章还将讨论自然语言的载体(文档、语音、数据库中的文本字段等)、自然语言类别(英语、中文、西班牙语等)、NLP相关方法,以及用于NLP的Python编程语言。

本章将介绍以下内容:

❑自然语言基础知识

❑自然语言与字符编码

❑对话式人工智能与自然语言理解

❑交互式应用程序——聊天机器人与语音助手

❑非交互式应用程序

❑Python自然语言处理展望

这些主题将有助于全面认识NLU领域,了解NLU的用途,明确NLU与其他对话式人工智能应用的关系,并了解NLU可用于解决何种类型的问题。同时,你还将了解NLU应用程序为终端用户和组织机构带来的诸多好处。

在阅读完本章后,你将能够辨别出各种问题所需的NLU技术。无论是企业家、开发人员、学生还是研究人员,都可以根据具体需求将NLU技术应用到实际场合中。

1.1 自然语言基础知识

目前尚无任何技术能像人类一样通过理解自然语言从语言中提取丰富的意义。然而,对于给定的具体目标和应用,通过NLU方法,当前技术水平足以帮助我们实现许多实用和对社会有益的应用。

口语和书面语都十分丰富且无处不在。口语存在于人和智能系统之间的日常对话中,也存在于广播、电影和播客等媒体中。书面语存在于网络、书籍和人际交流中,如电子邮件等。书面语也存在于表格和数据库的文本字段中,这些字段可能存在于网上,但无法被搜索引擎搜索。

在经过分析后,所有这些形式的语言构成了各种应用程序的基础。本书将为基本的自然语言分析技术奠定基础,使你能够在各种应用程序中灵活使用NLU方法。

1.2 自然语言与字符编码

根据Babbel.com(https://www.babbel.com/en/magazine/the-10-most-spoken-languages-in-the-world)所述,尽管大多数人说的是十大语言之一,但世界上存在着成千上万种口语和书面语形式的自然语言。本书将重点关注世界上的主要语言,但需要注意的是,不同的语言会给NLP应用程序带来不同的挑战。例如,在中文书面语中,词之间不存在空格,而大多数NLP工具使用空格来识别文本中的词。这意味着在处理中文时,除了识别空格外,还需要额外的步骤来分隔中文的词。这一点可以从图1.1由Google Translate翻译的例子中看出,该例子中的中文词之间没有空格。

图1.1 中文不像大多数西方语言那样用空格分隔单词

另一个需要注意的问题是,在有些语言中同一个词有许多不同的形式。一个词的尾缀反映出这个词的部分信息,如这个词在句子中所起的作用。如果你主要使用英语,你可能习惯了这种单词尾缀形式较少的情况。这使应用程序可以相对容易地计算一个词出现的频率。然而,这并不适用于所有语言。

例如,在英语中,单词 walked 可以用在不同的语境中,其形式相同但含义不同,例如“ I walked”“they walked” 或者“she has walked ”。然而,在西班牙语中,同一个动词( caminar )可能有不同的形式,比如 Yo caminé ellos caminaron ,或者 ella ha caminado 。这给NLP带来的挑战是,可能需要额外的预处理步骤才能成功地分析这些语言中的文本。第5章将讨论如何为这些语言添加额外的预处理步骤。

另一个需要记住的要点是,在不同的语言之间,可用的处理工具及其质量可能存在显著的差异。对于世界上的主要语言,如西欧和东亚语言,一般都有相当不错的处理工具。然而,对于使用人数不足1000万的语言,可能不存在任何处理工具,或者处理工具的效果较差。这主要是由于可用的训练数据有限,以及处理这些语言的商业兴趣较低。

开发资源相对较少的语言被称为 低资源语言 。对于这些语言,没有足够的书面语样本用于训练大型机器学习模型。也许只有极少数的使用者能够对该语言的运作机理提供见解。这些语言可能濒临灭绝,或者只有少数人群在使用。尽管为其中一些语言开发自然语言方法可能不现实,或者代价非常昂贵,但为这些语言开发NLP技术的方法正在积极研究中。

最后,许多常见的语言并不使用罗马字符,如汉语、俄语、阿拉伯语、泰国语、希腊语和印地语等。在处理非罗马字母语言时,重要的是要认识到工具必须能够处理各种不同的字符编码。 字符编码 用于表示各种不同书写系统中的字符。在许多情况下,文本处理库中的函数具有多个参数,这些参数允许开发人员为打算处理的文本指定适当的编码。在为非罗马字母语言选择处理工具时,必须考虑工具能否处理这些字符编码。

1.3 对话式人工智能与自然语言理解

对话式人工智能 是一个广泛使用的术语,用于描述使系统可以与人类进行口头和文本交流的方法。这些方法包括语音识别、NLU、对话管理、自然语言生成和文本到语音转换。重要的是要区分这些方法,因为它们经常被混淆。虽然本书的重点放在NLU上,但我们也将简要介绍其他相关方法,以便了解这些方法如何组成一个整体:

语音识别: 也被称为 语音到文本转换 自动语音识别 (Automatic Speech Recognition,ASR)。语音识别是一种将语音音频转换为文本的方法。

自然语言理解: 基于书面语言,生成可以由计算机处理的结构化表示。输入的书面语可以是语音识别的结果,也可以是原始书面语文本。结构化表示包含了用户的 意图 或目的。

对话管理: 根据NLU的结构化输出,决定系统应该做出什么样的反应。系统反应包括提供信息、播放音乐,或执行某些操作从用户那里获取更多信息,以满足用户的意图。

自然语言生成: 创建文本,该文本表达了对话管理对用户问题的回复或反馈。

文本到语音转换: 基于自然语言生成过程创建的文本输入,该文本到语音转换模块在给定文本时生成语音音频输出。

这些模块之间的关系如图1.2所示,它们构成了一个完整的自然语言对话系统。本书的重点是NLU部分。然而,由于自然语言应用程序使用了其他模块,如语音识别、文本到语音转换、自然语言生成和对话管理,因此它们也会被偶尔提及。

图1.2 一个完整的口语对话系统

接下来的两节将总结一些重要的自然语言应用程序。你将了解到本书所涉及的方法及其发展潜力。希望这些广泛使用的工具及其实现能引起你的兴趣。

1.4 交互式应用程序——聊天机器人与语音助手

NLP应用可以被大致分为两类:一类为 交互式应用程序 ,其重点关注的是人机对话;另一类为 非交互式应用程序 ,其重点关注的是一个文档或一组文档。

在交互式应用程序中,用户与系统能够实时交谈或互发信息。常见的交互式应用程序包括聊天机器人和语音助手,如智能音箱和客户服务应用程序等。这些应用程序的交互性要求系统要做出快速、几乎即时的响应,因为用户正在等待系统的响应。根据交谈习惯,用户通常不会容忍延迟超过几秒钟的回复。这些应用的另一个特点是用户输入通常很短,在口语交互情景下,用户的语音输入可能只有几个词或只持续几秒钟。这意味着依赖于大量可用文本的分析方法将无法很好地适用于这些应用程序。

除了NLU本身之外,实现一个交互式应用程序很可能还需要图1.2中的一个或多个其他模块。显然,具有语音输入的应用程序将需要语音识别模块,而对用户以语音或文本做出响应的应用程序则需要自然语言生成模块和文本到语音转换模块(如果系统的响应是语音)。任何需要完成多轮对话的应用程序还需要某种形式的对话管理,用于跟踪用户之前在对话中说了什么,并在后续组织系统响应时将这些信息考虑在内。

意图识别 是交互式自然语言应用程序的一个重要方面,这将在第9章和第14章中进行详细讨论。意图本质上是用户在发表言论时的目标或目的。显然,了解用户的意图是为用户提供正确信息的核心。除了意图之外,交互式应用程序通常还需要识别用户输入中的 实体词 实体 ,其中实体是系统为了解决用户意图而需要的附加信息。例如,如果一个用户说: 我想预订一张从波士顿到费城的机票。”意图将是“预订机票”,相关的实体是出发地和目的地。由于预订航班还需要旅行日期,因此日期也是实体。因为用户在这句话中没有提到旅行日期,所以系统接下来应该询问用户日期问题,这个过程叫作 槽填充 (slot filling),将在第8章中进行讨论。实体、意图和用户所提问题之间的关系如图1.3所示。

图1.3 用户所提旅行问题中的意图和实体

请注意,意图代表一句话的整体含义,但实体只代表这句话中特定部分的含义。这个区别很重要,因为这涉及选择什么样的机器学习模型来处理这些信息。第9章将更详细地讨论这个话题。

1.4.1 通用语音助手

大多数人都很熟悉智能音箱或手机 通用语音助手 ,如亚马逊的Alexa、苹果的Siri和谷歌的Assistant。通用语音助手能够为用户提供日常信息,包括体育比分、新闻、天气以及知名公众人物的信息。它们还可以播放音乐并控制家电设备。与这些功能相对应,通用语音助手能够识别用户问题的意图,例如,在用户问题“获取 < 地名 > 的天气预报”中,意图是“获取天气预报”,而 < 地名 > 表示一个实体。类似地,在用户问题“ < 队伍名称 > 游戏的得分”中,意图是“获得游戏比分”,特定的队伍名称作为实体。这些应用程序一般知识广博,但缺乏深度。在大多数情况下,它们与用户的交谈只是基于一个或最多两个相关的实体。也就是说,在大多数情况下,这类系统无法进行深入而复杂的对话。

通用语音助手封闭且私有。这意味着开发人员很难向其添加通用功能,比如添加一种新的语言。不过,除了前面提到的语音助手之外,还有一款名为 Mycroft 的开源助手,它允许开发人员向底层系统添加功能,而不仅仅是使用平台所提供的功能。

1.4.2 企业助手

与通用语音助手相比,一些交互式应用程序拥有某个公司或组织的丰富信息。这些应用程序就是 企业助手 ,它们被设计用来执行与某个公司有关的特定任务,如客户服务,或者提供政府或教育机构的信息。企业助手还可以做一些其他事情,比如检查订单的状态、为银行客户提供账户信息,或者让居民了解停电的情况。企业助手通常连接到包含客户或产品信息的数据库。基于这些信息,企业助手可以提供专业领域的专业信息,但知识面狭窄。例如,企业助手可以告诉你某家公司的产品是否有库存,但它并不知道你最喜欢球队的最新比赛结果,而这是通用语音助手非常擅长的。

尽管存在一些开源工具,如RASA(https://rasa.com/),但企业语音助手通常使用诸如Alexa Skills Kit、Microsoft LUIS、Google Dialogflow或Nuance Mix等开发工具。这些工具功能强大,且易于使用。使用这些工具,只需要开发人员提供包含意图和实体的样本,应用程序就可以在用户的话语中找到这些意图和实体,从而理解用户想要做什么。

与语音助手类似,基于文本的聊天机器人可以执行相同类型的任务,但聊天机器人从用户那里获取的是文本信息而不是语音信息。聊天机器人在网站上变得越来越普遍,它们可以提供网站上的许多信息。由于用户能够轻松地表达出他们感兴趣的内容,因此聊天机器人可以避免用户在非常复杂的网站中进行信息搜索。在很多情况下,用于开发语音助手的工具同样可以用于开发基于文本的聊天机器人。

因为创建应用程序只需要少量编码,所以本书不会在商业工具上花费太多时间。相反,本书将专注商业工具背后的方法,这将使开发人员能够在不依赖商用框架的情况下实现应用程序。

1.4.3 翻译

翻译 是交互式应用程序的第三个主要类别。与前面介绍的助手不同,翻译应用程序帮助用户与他人交流沟通,即用户不再与助手进行对话,而是与另一个人进行对话。实际上,这些应用程序扮演了一个翻译的角色,可以翻译两种不同的人类语言,以使两个使用不同语言的人能够相互交谈。这些应用程序可以基于口语或打字输入。虽然口语输入更快、更自然,但如果出现语音识别错误(这是常见的),那么这种错误可能会显著干扰人与人之间交流的流畅性。

在谈论简单主题(例如旅游信息)时,交互式翻译应用程序最实用。对于复杂话题,例如商务谈判,交互式翻译应用程序可能表现不好,因为话题的复杂性会导致过多的语音识别错误和翻译错误。

1.4.4 教育

最后, 教育 是交互式NLU的一个重要应用领域之一。语言学习可能是最自然的教育应用程序之一。例如,有一些应用程序可以让学生用正在学习的新语言与应用程序进行交谈。相比于与他人练习对话,这些应用程序更具优势,因为应用程序始终保持一致,不会感到厌烦,而且用户即使犯了错误也不会感到尴尬。其他教育应用程序还可以帮助学生阅读、学习语法,或辅导学生课程等。

图1.4是各种不同类型交互式应用程序及其关系的总结。

图1.4 交互式应用程序的层次结构图

到目前为止,本节已经介绍完了交互式应用程序。在这些应用程序中,终端用户可以直接与NLP系统对话,或者向系统实时输入文本。这些应用的特点是用户输入短,需要系统快速响应。下面我们将探讨非交互式应用程序,即在没有用户的情况下分析语音或文本。要分析的材料可以是任意长的,且处理时间不必是即时的。

1.5 非交互式应用程序

自然语言应用程序的另一种主要类型是非交互式应用程序(或离线应用程序)。在这些应用程序中,由NLU模块完成主要工作,通常不需要图1.2中的其他模块。非交互式应用程序处理现有文本,没有用户在场。这意味着无须实时处理,因为用户并没有在线等待答案。同样,非交互式应用程序不必等待用户下一句说什么,因此在许多情况下,处理速度比交互式应用程序更快。

1.5.1 分类

非交互式自然语言应用程序的一个非常重要且广泛的应用场景是文档 分类 ,即根据文档的内容将文档分配到不同的类别中。多年来,分类一直是NLP领域的一个主要应用,并且已有各种不同方法来解决这个问题。

分类的一个简单例子是互联网上回答用户常见问题(Frequently Asked Question,FA Q)的应用程序,它首先对问题进行分类,然后提供之前为每个类别准备的答案,从而 回答 用户的常见问题。对于这个应用程序,与允许用户从列表中选择问题相比,分类系统是一个更好的解决方案,因为应用程序可以将问题自动分类到数百个FA Q类别中,从而使用户免于浏览庞大的类别列表。另一个有趣的文本分类例子是根据影评或剧情摘要等信息自动判断电影的类型。

1.5.2 情感分析

情感分析 是分类问题的一种,其目标是将文本(例如产品评论)分类为表达正面或负面情绪的文本。听起来感觉只需要寻找正面或负面的词就可以完成情感分析任务,但通过下面这个例子可以看到,尽管这段文本有许多负面的词和短语(担心、坏掉、问题、退货、疼),但该评论实际上是正面的:

“虽然这把椅子坐起来很舒服,但我担心可能会使用不久就会坏掉,因为椅子腿太细。结果这并不是问题。我本以为我需要退货,但我没有遇到任何问题,而且这是唯一一把使用起来后背不疼的椅子。”

考虑到上下文语境,需要使用更复杂的NLP方法去判断这是一个正面的评论。情感分析是一个非常有价值的应用,因为如果有成千上万条产品评论,而且还不断有新的产品评论出现,那么公司很难手动完成这一分类工作。企业不仅希望了解客户如何看待自己的产品,而且希望比较竞争产品的评论与自身产品的评论,这对企业来说也是非常有价值的。如果有数十种类似的产品,这将会大大增加用于分类的评论数量。文本分类应用程序可以自动化文本分类工作。文本分类是一个非常活跃的NLP研究领域。

1.5.3 垃圾邮件与网络钓鱼检测

垃圾邮件检测 是另一个非常有价值的分类应用程序,其目标是将电子邮件分类为用户想要浏览的正常邮件和应该丢弃的垃圾邮件。这个应用程序不仅实用,而且具有挑战性,因为垃圾邮件发送者不断尝试规避垃圾邮件检测算法。这意味着垃圾邮件检测方法必须随着创建垃圾邮件方法的发展而发展。例如,垃圾邮件发送者经常拼错一些可能代表该邮件是垃圾邮件的关键词,比如用数字1替换字母l,或用数字0替换字母o。虽然这种拼写错误的单词对人类阅读没有影响,但它与计算机寻找的关键词将不再匹配,因此必须开发垃圾邮件检测方法来发现这些小把戏。

与垃圾邮件检测密切相关的是检测恶意文本消息,恶意文本消息或者包含试图攻击用户的信息,或者包含恶意链接或文档,一旦用户点击这个链接或打开这个文档,恶意软件就会加载到计算机系统中。在大多数情况下,垃圾邮件只是令人讨厌,但网络钓鱼更严重,因为如果用户点击了一个网络钓鱼链接,则可能会产生极具破坏性的后果。因此,任何提高网络钓鱼信息检测的方法都是非常有益的。

1.5.4 虚假新闻检测

另一个非常重要的应用是 虚假新闻检测 。虚假新闻是指那些看起来非常像真实新闻,但包含的信息并非事实的文本,其目的在于误导读者。与垃圾邮件检测、网络钓鱼检测一样,虚假新闻检测同样具有挑战性,因为制造虚假新闻的人都在积极地尝试规避检测。检测虚假新闻不仅对维护社会安全很重要,而且从平台的角度来看也很重要,因为用户会逐渐不信任那些报道虚假新闻的信息平台。

1.5.5 文档检索

文档检索 的任务是根据用户的搜索文本提供满足用户搜索查询的文档。这方面最好的例子是我们每天都要进行多次的网络搜索。网络搜索是最为人熟知的文档检索示例,但文档检索方法也适用于在任意一组文档中查找信息,例如,文档可以是数据库或表单的文本字段。

文档检索基于用户查询文本和已有文档之间的良好匹配,因此需要同时分析用户的查询文本和文档。可以使用关键词搜索完成文档检索任务,但简单的关键词搜索容易出现两种错误。首先,查询中的关键词可能与文档中匹配的关键词有着不同的含义。例如,如果一个用户在寻找glasses,他需要的是戴在眼睛上的眼镜,而不是喝酒用的杯子(注意,眼镜和杯子在英文中都是glasses)。另一种错误是由于关键词不匹配而找不到相关结果。如果用户只使用了关键词glasses,就可能发生这种情况,即错过使用关键词spectacles或eyewear找到的结果,即使用户对这些结果感兴趣。使用NLP方法代替简单的关键词查找技术可以提供更准确的结果。

1.5.6 分析

NLP领域的另一个重要且广泛的应用是分析。 分析 是NLP一系列应用的总称。分析试图从文本中获取信息,这里的文本一般是语音转录的文本。一个很好的例子是查看电话客服中心服务电话的转录文本记录,以发现客服混淆了客户的问题或向客户提供了错误信息的情况。分析的结果可以用于电话客服中心的客服培训。分析还可用于审查社交网站上的帖子,以寻找当前热门话题。

1.5.7 信息抽取

信息抽取 是另一种NLP的应用类型。信息抽取从诸如报纸文章之类的文本中提取结构化信息,这种信息可以用来填充数据库。例如,可以从新闻报道的文本中抽取一个事件的日期、具体时间、参与者和地点等重要信息。这些信息与之前讨论聊天机器人和语音助手时所提到的意图和实体非常相似,我们会发现这两种类型的应用程序使用许多相同的处理方法。

在信息抽取应用程序中,还有一个任务是 命名实体识别 (Named Entity Recognition,NER),用于识别人物、组织和位置在文本中的指代。在报纸文章等长文本中,通常用多种方法来指代同一个人。例如,“乔·拜登”可能被称为“总统”“拜登先生”“他”,甚至“前副总统”等。在识别对“乔·拜登”的指代词时,信息抽取应用程序还必须避免将“拜登博士”误解为“乔·拜登”,因为“拜登博士”指的是他的妻子。

1.5.8 机器翻译

语言之间的翻译(也被称为 机器翻译 )自出现以来一直是最重要的NLP应用之一。总体上,机器翻译尚未完全解决,但在过去几年取得了巨大的进展。互联网上机器翻译的应用,如谷歌翻译(Google Translate)和必应翻译(Bing Translate),在文本翻译(例如翻译网页)上表现得非常好,尽管肯定还有改进的空间。

谷歌和必应等机器翻译应用程序在某些类型的文本上效果较差,例如,包含大量专业词汇的技术文档或包含朋友间使用的口语的文本。根据维基百科的说法,谷歌翻译可以翻译109种语言。然而,需要注意的是,对于使用人数较少的语言,其翻译准确率要低于使用人数较多的语言。

1.5.9 其他应用程序

正如人类可以阅读和理解文本一样,许多应用程序也能够阅读和理解文本,为人们提供帮助。抄袭检测、语法纠错、学生作文自动打分、基于文本的作者身份识别,这些只是NLP应用的一小部分。长文本自动总结和复杂文本简化也非常重要。这两种方法常用于原始输入是非交互式语音的情况,如播客、YouTube视频或广播。

图1.5是对非交互式应用程序的图形化总结。

图1.5 非交互式应用程序的层次结构图

图1.5显示了上述讨论的非交互式应用程序之间的关系。很明显,分类是一个主要的应用领域,第9章、第10章和第11章将继续深入探讨分类问题。

1.5.10 应用程序类型总结

前面几小节概述了不同类型的交互式和非交互式应用程序及其之间的关系。很明显,NLP可以用于解决许多重要的问题。本书的剩余部分将深入研究适合解决各种不同类型问题的具体方法,你将学习如何针对具体问题选择最有效的方法。

1.6 Python自然语言处理展望

传统上,NLP使用各种计算机语言,从早期的专用语言(如Lisp和Prolog)到更现代的语言(如Java),现在使用的则是Python。目前,Python可能是NLP领域最流行的编程语言,部分原因是它可以相对快速地实现有趣的应用,而且开发人员能够快速获得关于其想法结果的反馈。

Python的另一个主要优点是存在大量实用的、经过充分测试的而且文档完备的Python库。可应用于NLP问题的Python库有NLTK、spaCy、scikit-learn和Keras等。接下来的章节将详细探讨这些库。除了这些库之外,本书还将使用JupyterLab等开发工具。Stack Overflow和GitHub网站也提供了非常有价值的NLP资源。

1.7 本章小结

本章介绍了自然语言的基础知识和NLU的应用。本章还研究了对话式人工智能和NLU之间的关系,并探索了交互式和非交互式应用程序。

第2章将讨论针对一个实际应用选择NLU方法时需要考虑的因素。虽然有很多NLU方法可以完成这个应用,但对于目前的技术水平来说,有些方法可能难度太大。其他看似很适合用NLU解决的问题,实际上存在更简单的解决方法。第2章将探讨如何识别适合实际问题的NLU方法。 h5krGEeFgbsVKwHt2v1BrtqAwTsLme06LyrbyyiGrmIX3dH2edrcxIlwqrS2SPBQ

点击中间区域
呼出菜单
上一章
目录
下一章
×