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

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

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

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

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)。假设您正在与一个人和一台计算机进行聊天会话,但是一开始就不会告诉您哪个是哪个。如果您在与每台计算机聊天后无法确定哪些合作伙伴是计算机,则计算机已成功模仿人类。
如果计算机在这种“模仿游戏”(或众所周知的“图灵测试”)中成功地将自己作为人类传递出去,那么根据图灵的说法,我们应该准备好说计算机可以思考并且可以说是要聪明。因此图灵侧面提出了以某种方式检查计算机内部状态的问题,而不是将其行为作为智能的证据。根据同样的推理,我们假设为了说一台计算机能够理解英语,它只需表现得就像它一样。这里重要的不是图灵模仿游戏的具体细节,而是根据可观察行为来判断自然语言理解能力的建议。

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

  1. 根据词袋模型使用Python实现一个简单的分析句子对相似度的软件

    使用词袋模型实现一个简单的分析句子对相似度的软件 1. 实验内容 本次实验使用词袋(bag of words)技术,利用词袋模型进行编程并计算了不少于10组句子对的相似度,同时设计了图形界面,可以在界 ...

  2. python自然语言处理 |分析句子的意思

    python自然语言处理的第10章 分析句子的意思,这一章在拆解英语的语法及对应于计算机语言的概念和内容变得更深更多,相应地需要理解和记忆的东西增多.整章读下来很吃力,可能大致有了个理解. 我们已经有 ...

  3. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第10章 分析句子的意思

    第10章 分析句子的意思 10.1 自然语言理解 查询数据库 自然语言.语义和逻辑 10.2 命题逻辑 10.3 一阶逻辑 一阶定理证明 一阶逻辑语言总结 真值模型 独立变量和赋值 量化 量词范围歧义 ...

  4. Python自然语言处理 10 分析语句的含义

    既然已经有了分析机制和基于特征的文法,那么能否做一些类似分析语句的含义的事情? 回答下列问题: (1)如何表示自然语言的含义,并能通过计算机进行处理? (2)怎样才能将意思表示与无限制的语句集相关联? ...

  5. python nltk 10 分析句子的意思

    10 分析句子的意思 Analyzing the Meaning of Sentences 1 自然语言理解 1.1 查询数据库 1.2 自然语言,语义学和逻辑学 2 命题逻辑 3 一阶逻辑 3.1 ...

  6. 《用Python进行自然语言处理》第8章 分析句子结构

    1. 我们如何使用形式化语法来描述无限的句子集合的结构? 2. 我们如何使用句法树来表示句子结构? 3. 语法分析器如何分析一个句子并自动构建语法树? 8.1 一些语法困境 语言数据和无限可能性 #语 ...

  7. NLTK11《Python自然语言处理》code10 分析语句的含义

    分析语句的含义 # -*- coding: utf-8 -*- # win10 python3.5.3/python3.6.1 nltk3.2.4 # <Python自然语言处理> 10 ...

  8. 编译原理学习笔记(二十九)~习题:分析句子 id--id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系。

    题目 分析句子 id–id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系. 语法如下: E → E - T (1) E → T (2) T → T * F (3) T → F(4 ...

  9. 2020年中国超声行业现状与竞争格局分析,目前小型化超声市场份额还较小「图」

    一.超声行业发展概况 1985年前后中国开始使用超声,经过30多年的发展,国内超声技术基本完成了形态学诊断的研发,在功能上进一步丰富.根据国外超声龙头公司的技术发展路径,未来国产超声技术将在成像和探头 ...

最新文章

  1. 主播靠颜值还是???!!!!!
  2. arcsde 和oracle(双机热备)分布式安装(转载)
  3. oracle之高级子查询之课后练习
  4. POJ 2255/递归:前序中序求后序
  5. python中函数type可以测试对象类型_python类型检测最终指南--Typing模块的使用
  6. alxctools索引超出了数组界限_[译]V8中的数组类型
  7. bzoj1339[Baltic2008]Mafia*
  8. Google大牛涉嫌性骚扰被停职,NIPS官方致歉,传闻多时的AI圈黑幕终于被撕开
  9. BZOJ3707 圈地
  10. MicroPython ESP32 读取DS18B20温度数据
  11. 教妹学Java(十):Unicode字符集简介
  12. eclipse之 Type Hierachy:Viewing the type hierarchy
  13. mysql计算相关系数_用sql实现相关系数的计算
  14. 广东又将添新高校:香山大学来了
  15. ubuntu14.04彻底卸载ibus安装fcitx拼音输入法
  16. 生存分析之Cox模型简述与参数求解
  17. J2SDK和TOMCAT的安装及配置
  18. Mac To Win
  19. java idea导入ecli项目
  20. git合并分支相关操作

热门文章

  1. 运维监控-Zabbix Server 使用微信 WeChat 告警
  2. kotlin入门笔记
  3. a14处理器和骁龙875参数对比 哪个好
  4. ObjectArx图层操作总结——新建、层色、删除
  5. ECharts柱状图颜色设置
  6. php unicode转ascii,php – 将Unicode字符转换为等效的ASCII字符
  7. 遇到Parallels Desktop中 Win10 无法启动或一直在恢复等问题解决办法
  8. 品百味人生 2020年国庆假期
  9. Flutter 主题(皮肤)更换的那些事
  10. 彻底解决设备未获得Play保护机制认证解决方法华为荣耀手机鸿蒙2.0系统HarmonyOS 2.0安装谷歌服务框架GMS谷歌应用商店Google Play华为P40 Mate40 Mate30荣耀30