本节书摘来异步社区《Python自然语言处理》一书中的第1章,第1.5节,作者:【美】Steven Bird , Ewan Klein , Edward Loper,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.5 自动理解自然语言
我们一直在各种文本和Python编程语言的帮助下自下而上地探索语言。然而,我们也对通过构建有用的语言技术,开拓语言和计算知识面的兴趣。现在,将借此机会从代码的细节中退出来,以描绘自然语言处理的全景图。
在纯应用层面上,我们都需要帮助才能在网络上的文本中找到有用的信息。搜索引擎在网络的发展和普及中发挥了关键作用,但也有一些缺点。它需要技能、知识和一点运气才能找到这样一些问题的答案:“我用有限的预算能参观费城和匹兹堡的哪些景点?”,“专家们怎么评论数码单反相机?”,“过去的一周里可信的评论员都对钢材市场做了哪些预测?”。让计算机来自动回答这些问题,涉及包括信息提取、推理与总结在内的广泛的语言处理任务,而且将需要在一个更大规模、更稳健的层面上实施,这超出了我们当前的能力。
在哲学层面上,构建智能机器是人工智能长久以来的挑战,语言理解是智能行为的重要组成部分。这一目标多年来一直被看作是太困难了。然而,随着NLP技术日趋成熟,用稳定的方法来分析非结构化文本越来越广泛,对自然语言理解的期望变成一个合理的目标再次浮现。
在本节中,我们将介绍一些语言理解技术。
词意消歧
在词意消歧中,要分析出特定上下文中的词被赋予的是哪个意思。思考存在歧义的词serve和dish。
(2) a. serve: help with food or drink; hold an office; put ball into play
b. dish: plate; course of a meal; communications device```
在包含短语he served the dish的句子中,你可以知道serve和dish用的都是它们与食物相关的含义。仅仅3个词,讨论的话题不太可能从体育转向陶器。这也许会迫使你眼前产生一幅怪异的画面:一个职业网球手正把他的郁闷发泄到放在网球场边上的陶瓷茶具上。换句话说,自动消除歧义需要使用上下文,利用相邻词汇的相近含义。另一个有关上下文影响的例子是词by,它有几种含义,例如:the book by Chesterton(施事——Chesterton是书的作者);the cup by the stove(位置——炉子在杯子旁边);submit by Friday(时间——星期五前提交)。观察(3)中斜体字的含义有助于解释by的含义。
(3) a. The lost children were found by the searchers (施事)
b. The lost children were found by the mountain (位置)
c. The lost children were found by the afternoon (时间)`
指代消解
更深刻的语言理解是解决“谁对谁做了什么”,即检测动词的主语和宾语。虽然你在小学已经学会了这些,但它比你想象的更难。在句子the thieves stole the paintings中,很容易分辨出谁做了偷窃的行为。考虑(4)中句子的3种可能,尝试确定是什么被出售、被抓和被发现(其中一种情况是有歧义的)。
(4) a. The thieves stole the paintings. They were subsequently sold.
b. The thieves stole the paintings. They were subsequently caught.
c. The thieves stole the paintings. They were subsequently found.```
要回答这个问题涉及到寻找代词they的先行词thieves或者paintings。处理这个问题的计算技术包括指代消解(anaphora resolution)——确定代词或名词短语指的是什么——和语义角色标注(semantic role labeling)——确定名词短语如何与动词相关联(如代理、受事、工具等)。
自动生成语言
如果能够自动地解决语言理解等问题,我们将能够继续进行那些包含自动生成语言的任务,如自动问答和机器翻译。在自动问答中,一台机器应该能够回答用户关于特定文本集的问题。
(5) a. Text: ...The thieves stole the paintings. They were subsequently sold. ...
b. Human: Who or what was sold?
c. Machine: The paintings.`
机器的回答表明,它已经正确地计算出they是指paintings,而不是thieves。在机器翻译中,机器应该能够把文本翻译成另一种语言文字,并准确传达原文的意思。在把例子文本译成法文过程中,我们不得不在第二句中选择代词的性别:ils(男性),如果thieves被出售,elles(女性),如果paintings被出售。正确的翻译实际上取决于对代词的正确理解。
(6) a. The thieves stole the paintings. They were subsequently found.
b. Les voleurs ont voléles peintures. Ils ontététrouvés plus tard.
(the thieves)
c. Les voleurs ont voléles peintures. Elles ontététrouvées plus tard.
(the paintings)```
所有这些例子中,弄清楚词的含义、动作的主语及代词的先行词是确定句子含义的步骤,也是希望语言理解系统能够做到的事情。
机器翻译
长久以来,机器翻译(MT)都是语言理解的圣杯,人们希望能找到从根本上提供高品质且符合语言习惯的任意两种语言之间的翻译。其历史可以追溯到冷战初期,当时自动翻译带来大量的政府赞助,它也是NLP本身的起源。
今天,特定语言之间实用的翻译系统已经形成,而且有些已经集成到搜索引擎中了。但是,这些系统有一些严重的缺点。我们可以在NLTK的“babelizer”的帮助下探索它们(当你使用from nltk.book import * 导入本章的材料时,它已经自动装载了)。这个程序把提交的英文句子翻译成指定语言,然后把结果重新翻译回英文。这样重复12次后结束或者得到曾经产生过的翻译时(表示一个循环)结束。
babelize_shell()
NLTK Babelizer: type 'help' for a list of commands.
Babel> how long before the next flight to Alice Springs?
Babel> german
Babel> run
0> how long before the next flight to Alice Springs?
1> wie lang vor dem folgenden Flug zu Alice Springs?
2> how long before the following flight to Alice jump?
3> wie lang vor dem folgenden Flug zu Alice springen Sie?
4> how long before the following flight to Alice do you jump?
5> wie lang, bevor der folgende Flug zu Alice tun, Sie springen?
6> how long, before the following flight to Alice does, do you jump?
7> wie lang bevor der folgende Flug zu Alice tut, tun Sie springen?
8> how long before the following flight to Alice does, do you jump?
9> wie lang, bevor der folgende Flug zu Alice tut, tun Sie springen?
10> how long, before the following flight does to Alice, do do you jump?
11> wie lang bevor der folgende Flug zu Alice tut, Sie tun Sprung?
12> how long before the following flight does leap to Alice, does you?
观察可以发现,该系统正确地把Alice Springs从英文翻译成了德文(第1行),但在翻译回英文时却以Alice jump结束(第2行)。介词before一开始被翻译成德文对应的介词vor,但后来变成了连词bevor(第5行)。第5行以后的句子变得没有意义(但请注意以逗号指示的各种分句,以及从jump到leap的变化)。翻译系统无法识别当一个词是某个名字的一部分时,并且会弄错语法结构。语法问题在下面的例子中更加明显。是约翰发现了猪,还是猪找到了约翰?
babelize_shell()
Babel> The pig that John found looked happy
Babel> german
Babel> run
0> The pig that John found looked happy
1> Das Schwein, das John fand, schaute gl?cklich
2> The pig, which found John, looked happy
机器翻译是困难的,一方面原因是给定的单词可能有几种不同的解释(取决于它的意思),另一方面原因是必须改变词序才能与目标语言的语法结构保持一致。如今,遇到的难题是,从新闻和政府网站发布的两种或两种以上的语言文档中可以收集到大量的相似文本。如果给出一个德文和英文双语的文档或者一个双语词典,就可以自动配对组成句子,这个过程叫做文本对齐。一旦有一百万个或更多的句子对,就可以检测出相应的单词和短语,并建立能用来翻译新文本的模型。
人机对话系统
在人工智能的历史中,主要的智能测试是一种语言学测试,叫做图灵测试:一个响应用户文本输入的对话系统能否表现得如此自然以致我们无法区分它是人工生成的响应?相比之下,今天的商业对话系统能力是非常有限的,但在有限的给定领域仍然能够发挥作用,如下面的下例子。
S: How may I help you?
U: When is Saving Private Ryan playing?
S: For what theater?
U: The Paramount theater.
S: Saving Private Ryan is not playing at the Paramount theater, but
it’s playing at the Madison theater at 3:00, 5:30, 8:00, and 10:30.
你不能要求这个系统提供驾驶指示或附近餐馆的细节,除非所需的信息已经被保存并且合适的问题答案已经被纳入语言处理系统。
观察可看出这个系统能够了解用户的目标:用户询问电影上映的时间,系统正确地判断出用户是想要看电影。这一推断看起来如此明显,以至于你可能都没有注意到它,一个自然语言系统需要被赋予这种自然的交互能力。没有它,当问到:“你知道拯救大兵瑞恩什么时候上映?”时,系统可能只会回答一个冷冷的、毫无用处的“是的”。然而,商业对话系统的开发者使用上下文语境假设和业务逻辑确保在用户以不同方式表达需求或提供信息时对特定应用都能有效处理。因此,如果你输入When is ...或者I want to know when ...或者Can you tell me when ...时,这些简单的规则总是对应着放映时间,这足以使系统能够提供有益的服务了。
对话系统展示了一般的NLP流程。图1-5所示为一个简单的对话系统架构。沿图的顶部从左向右是一些语言理解组件的“管道”。这些图是从语音输入经过文法分析到某种意义的重现。图的中间,从右向左是这些组件将概念转换为语音的逆向流程。这些组件构成了系统的动态方面。在图的底部是一些有代表性的静态信息:处理组件在其上运作的语言相关数据的仓库。
提示 轮到你来:
作为一个原始的对话系统的例子,尝试与NLTK的chatbot谈话。使用之前请运行nltk.chat.chatbots()。(记住要先输入nltk。)
<div style="text-align: center"><img src="https://yqfile.alicdn.com/b071f327e37bc54e1c9c5f5e7a4d50d4d617f779.png" width="" height="">
</div>
图1-5 简单的语音对话系统的流程架构:分析语音输入(左上),识别单词,文法分析和在上下文中解释,应用相关的具体操作(右上);响应规划,实现文法结构,然后是适当的词形变化,最后到语音输出;处理的每个过程都蕴含不同类型的语言学知识
文本的含义
近年来,一个叫做文本含义识别(Recognizing Textual Entailment,RTE)的公开的“共享任务”使语言理解所面临的挑战成为关注焦点。基本情形很简单:试想你想找到证据来支持一个假设:Sandra Goudie被Max Purnell击败了。而有一段简短的文字似乎是有关的,例如:Sandra Goudie在2002年国会选举首次当选,通过击败工党候选人Max Purnell将现任绿党下院议员Jeanette Fitzsimons推到第三位,以微弱优势赢得了Coromandel席位。文本是否为假说提供了足够的证据呢?在这种特殊情况下,答案是“否”。你可以很容易得出这样的结论,但使用自动方法做出正确决策是困难的。RTE挑战为竞赛者开发系统提供数据,但这些数据对“蛮力”机器学习技术(将在第6章介绍)来说是不够的。因此,语言学分析是至关重要的。在前面的例子中,很重要的一点是让系统知道Sandra Goudie是假设中被击败的人,而不是文本中击败别人的人。思考下面的文本-假设对,这是任务困难性的另一个例证。
(7) a. Text: David Golinkin is the editor or author of 18 books, and over 150
responsa, articles, sermons and books
b. Hypothesis: Golinkin has written 18 books`
为了确定假说是否能得到文本的支持,该系统需要以下背景知识:
(1)如果有人是一本书的作者,那么他/她写了这本书;
(2)如果有人是一本书的编辑,那么他/她(完全)没有写这本书;
(3)如果有人是18本书的编辑或作者,则无法断定他/她是18本书的作者。
NLP的局限性
尽管在很多如RTE这样的任务研究中取得了进展,但在现实世界的应用中已经部署的语言理解系统仍不能进行常识推理或以一般的可靠的方式描述这个世界的知识。在等待这些困难的人工智能问题得到解决的同时,接受一些在推理和知识能力上存在严重限制的自然语言系统是有必要的。因此,从一开始,自然语言处理研究的重要目标一直是使用浅显但强大的技术代替无边无际的知识和推理能力,促进构建“语言理解”技术的艰巨任务不断取得进展。事实上,这是本书的目标之一,我们希望你能掌握这些知识和技能,构建有效的自然语言处理系统,并为构建智能机器这一长期的理想做出贡献。