第十章-分析句子的含义(还需要进行小的修改)

我们已经看到,利用计算机的能力大规模处理文本是多么有用。然而,现在我们有了解析器和基于特征的语法,通过分析句子的意思,我们能做些类似的有用的事情吗?本章的目的是回答以下问题:

我们如何表示自然语言的意义,使计算机能够处理这些表示?

我们如何将意义表示与无限组句子联系起来?

我们如何使用程序将句子的意思表示与知识存储联系起来?
在此过程中,我们将学习逻辑语义领域的一些正式技术,看看这些数据是如何被用来查询存储事实的数据库的。

10.1自然语言理解

10.1.1查询数据库

假设我们有一个程序,让我们输入一个自然语言问题,然后给出正确的答案

在这里插入图片描述
写这样一个程序有多难?我们能不能用我们在书中遇到的技巧,还是涉及到一些新的东西?在本节中,我们将展示在受限域中解决任务是非常简单的。但我们也会看到,为了更全面地解决这个问题,我们必须打开一个全新的思想和技术的盒子,包括意义的表达。首先假设我们有结构化的城市和国家数据。具体来说,我们将使用一个数据库表,其前几行如1.1所示。
在这里插入图片描述

很明显,从这个表格数据检索答案的方法是使用数据库查询语言(如SQL)编写查询。
注意:SQL(结构化查询语言)是一种用于检索和管理关系数据库中的数据的语言。如果您想了解更多关于SQL的信息,http://www.w3schools.com/sql/方便您在线参考。
例如,执行查询(2)将提取值“greece”:

在这里插入图片描述

这指定一个结果集,这个结果集包含数据行中Country列的所有值,且对应的City列的值为’athens’。

当英语作为查询系统的输入时,如何获得相同的效果?第九章中描述了基于特征的语法形式。使从英语到SQL的转换变得容易。 语法sql0.fcfg演示了如何在分析句子的同时组合句子的意义表示。每个短语结构规则都补充了构造特征sem值的recipe。你可以看到这些recipe非常简单;在每种情况下,我们都使用string concatenation操作+来拼接子组件的值,从而为父组件创建值。
在这里插入图片描述
这允许我们将查询解析为SQL 在这里插入图片描述

注意:你来试试:运行解析器,打开最大跟踪,即
cp = load_parser(‘grammars/book_grammars/sql0.fcfg’, trace=3),
并检查当将完整的边添加到图表中时,sem的值是如何建立的。
最后,我们对数据库city.db执行查询并检索一些结果。
在这里插入图片描述
因为每一行r是一个单元素元组,所以我们打印出元组的成员而不是元组本身

总而言之,我们已经定义了一个任务,其中计算机返回有用的数据以响应自然语言查询,我们通过将一小部分英语翻译成SQL来实现这一任务。我们可以说我们的NLTK代码已经“理解”了SQL,因为Python能够对数据库执行SQL查询,并且通过扩展它还可以“理解”诸如中国的哪些城市之类的查询。这与从荷兰语翻译成英语作为自然语言理解的一个例子相似。假设您是母语为英语的人,并且已经开始学习荷兰语。你的老师问你是否理解(3)的含义:

在这里插入图片描述
如果你知道(3)中单个词的含义,并知道这些含义如何组合起来构成整个句子的意思,你可以说(3)意思和"Margrietje loves Brunoke"是相同的

观察者-让我们称她为Olga-可能会把这作为你确实掌握(3)意义的证据。但这取决于Olga自己对英语的理解。如果她不理解英语,那么你从荷兰语翻译成英语并不能说服她你了解荷兰语的能力。我们很快就会回到这个问题。

语法sql0.fcfg与NLTK Earley解析器一起,有助于执行从英语到SQL的翻译。这个语法有多充足? 您看到整个句子的SQL翻译是从组件的翻译构建的。但是,这些组件含义表示似乎没有太多理由。例如,如果我们看一下名词短语"Which city"的分析,限定词和名词分别对应于SQL中的SELECT和City FROM city_table。但是,这些都没有一个明确的意义来把它们和别的区分开来。

我们可以对语法进行另一种批评:我们将数据库中的一些令人尴尬的细节“硬连接”到其中。我们需要知道相关表的名称(例如,city_table)和字段的名称。但是我们的数据库可能包含完全相同的数据行,但使用了不同的表名和不同的字段名,在这种情况下,SQL查询将不可执行。同样,我们可以以不同的格式存储我们的数据,例如XML,在这种情况下,检索相同的结果将要求我们将我们的英语查询转换为XML查询语言而不是SQL。这些考虑表明我们应该将英语翻译成比SQL更抽象和通用的东西。

为了提高这一点,让我们考虑另一个英语查询及其翻译: 在这里插入图片描述

注意:
你来试试:扩展语法sql0.fcfg,使它将(4a)转换为(4b),并检查查询返回的值。
您可能会发现最简单的方法是首先扩展语法以处理查询,例如在处理连接之前,哪些城市的人口超过1,000,000。
完成此任务后,您可以将解决方案与NLTK数据分布中的grammars / book_grammars / sql1.fcfg进行比较。

观察到(4a)中的连接词“and”被转换为SQL对应物中的AND(4b),后者告诉我们从两个条件为真的行中选择结果:Country列的值为’china’,Population列的值大于1000。这个解释并涉及一个新的想法:它谈到在某些特定情况下的真实情况,并且告诉我们Cond1 AND Cond2在情况s中是正确的,以防条件Cond1在s中为真并且条件Cond2在s中为真。虽然这并不能解释英语的全部意义,但它具有独立于任何查询语言的良好属性。事实上,我们已经从经典逻辑中给出了标准解释。在接下来的部分中,我们将探索一种方法,将自然语言的句子转换为逻辑而不是SQL等可执行的查询语言。逻辑形式主义的一个优点是它们更抽象,因此更通用。如果我们想要,一旦我们将其翻译成逻辑,我们就可以将其翻译成各种其他特殊用途语言。实际上,通过自然语言查询数据库的认真尝试都使用了这种方法。

10.1.2自然语言、语义和逻辑

我们开始尝试通过将其转换为另一种语言SQL的查询来捕获(1a)的含义,计算机可以解释和执行该查询。但这仍然提出了翻译是否正确的问题。退出数据库查询,我们注意到和的含义似乎取决于能否在特定情况下指定何时陈述是真的。而不是将句子S从一种语言翻译成另一种语言,我们试图通过将S与世界上的某种情况联系起来来说出S是什么。让我们进一步探究。想象一下,有一种情况是有两个实体,Margrietje和她最喜欢的玩偶Brunoke。另外,两个实体之间存在关系,我们称之为喜欢关系。如果你理解了(3)的含义,那么你就知道在情境中它是正确的。在某种程度上,你知道这一点,因为你知道Margrietje指的是Margrietje,Brunoke指的是Brunoke,而houdt van指的是喜欢关系。

我们介绍了语义学中的两个基本概念。首先,陈述句在某些情况下是真或假。第二,定名短语和专有名词指的是世界上的事物。所以(3)在Margrietje喜欢玩偶Brunoke的情况下是正确的,如图1.1所示。

在这里插入图片描述

一旦我们在某种情况下采用了真理的概念,我们就有了强大的推理工具。特别是,我们可以查看一组句子,并询问它们在某些情况下是否可以一起真实。例如,(5)中的句子都可以是真的,而(6)和(7)中的句子不能。 换句话说,(5)中的句子是一致的,而(6)和(7)中的句子是不一致的。
在这里插入图片描述

我们选择了关于虚构国家的句子(在马克斯兄弟的1933年电影“鸭子汤”中有特色),强调你推理这些例子的能力并不取决于现实世界中的真假。如果您知道单词no的含义,并且也知道一个国家的首都是该国的城市,那么您应该能够得出结论:(6)中的两个句子是不一致的,无论Freedonia在哪里或 它的首都人口是多少。也就是说,两种句子都不可能存在。同样,如果你知道北方所表达的关系是不对称的,那么你应该能够断定(7)中的两个句子是不一致的。

从广义上讲,基于逻辑的自然语言语义学方法侧重于自然语言的那些方面,这些方面指导我们对一致性和不一致性的判断。逻辑语言的语法旨在使这些功能正式显式化。因此,确定诸如一致性的属性通常可以减少为符号操作,即,可以由计算机执行的任务。为了实现这种方法,我们首先要开发一种表示可能情况的技术。我们用逻辑学家称之为模型的东西来做这件事。

一组W句子的模型是W中所有句子都为真的情形的正式表示。表示模型的常用方法涉及集合论。 话语领域D(我们当前关心的所有实体)是一组个体,而关系被视为从D构建的集合。让我们看一个具体的例子。
我们的域D将由三个孩子组成,Stefan,Klaus和Evi,分别代表s,k和e。 我们把它写成D = {s,k,e}。表达式boy表示由Stefan和Klaus组成的集合,表达式girl表示由Evi组成的集合,表达式表示由Stefan和Evi组成的集合。 1.2是模型的图形呈现。

在这里插入图片描述

在本章的后面,我们将使用模型来帮助评估英语句子的真实性或虚假性,并以此方式来说明表示意义的一些方法。然而,在进入更详细的细节之前,让我们将讨论放到更广阔的视角,并链接回我们在5中简要提出的主题。计算机能理解句子的含义吗?我们怎么能告诉它是否呢?这类似于问“计算机可以思考吗?”阿兰·图灵(Alan Turing)提出了一个着名的建议,就是通过研究计算机与人类进行合理对话的能力来回答这个问题(图灵,1950)。假设您正在与一个人和一台计算机进行聊天会话,但是一开始就不会告诉您哪个是哪个。如果您在与每台计算机聊天后无法确定哪些合作伙伴是计算机,则计算机已成功模仿人类。
如果计算机在这种“模仿游戏”(或众所周知的“图灵测试”)中成功地将自己作为人类传递出去,那么根据图灵的说法,我们应该准备好说计算机可以思考并且可以说是要聪明。因此图灵侧面提出了以某种方式检查计算机内部状态的问题,而不是将其行为作为智能的证据。根据同样的推理,我们假设为了说一台计算机能够理解英语,它只需表现得就像它一样。这里重要的不是图灵模仿游戏的具体细节,而是根据可观察行为来判断自然语言理解能力的建议。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值