本章的主要意图是协助读者形成对NLIDB的高层了解,并更好地了解和运用本书中介绍的技能和办法。咱们首要在第2.1节描绘了一个示例数据库以及针对数据库的示例输入问题。然后在介绍本书剩下部分将要运用的术语之前,咱们介绍了基线NLIDB的常见架构(第2.2节)。最后,在第2.3节中,咱们描绘了一个根本的逐渐构建进程,以构建针对示例数据库处理示例问题的基线NLIDB。

示例数据库

考虑一个具有图2.1所示模式的数据库。这个简略的数据库只包含三个表,每个表有两到三列。即便关于这样一个简略的数据库,人们也能够问关于单个高中学生或他们之间联系的各种各样的问题。表2.11列出了针对数据库的一些或许的输入问题以及能够从数据库中检索正确输出的相应SQL查询。能够看到,虽然这些问题长度类似,但相应的SQL句子的杂乱性差异很大。在本章的其余部分,咱们描绘了构建根本NLIDB的步骤,该NLIDB以这些问题作为输入,并将其转化为对数据库的SQL查询。咱们还将评论构建这样一个NLIDB的要害应战,供给额定的示例。

数据库的天然言语接口——构建NLIDB的基础常识

数据库的天然言语接口——构建NLIDB的基础常识

天然言语接口数据库的解剖

数据库的天然言语接口——构建NLIDB的基础常识

图2.2描绘了依据管道的根本NLIDB的要害组件以及它们之间的衔接。如图所示,NLIDB的中心包含三个主要组件:第一个组件是查询了解,它将给定的天然言语问题转化为内部逻辑表明,一般称为查询解说。第二个组件是查询翻译,它将每个查询解说转化为相应的结构化查询,然后能够针对底层数据存储履行。最后一个组件是成果显现,将履行的查询成果回来给用户。在本书的后面部分,咱们将介绍最近的办法,其间要害组件,特别是查询了解和查询翻译,被构建成一个单一的端到端模型。

除了前述的三个中心组件外,实际国际中的NLIDB一般还包含其他组件。首要,查询了解和查询翻译或许依赖于外部常识来更好地解说输入问题。外部常识能够依据底层数据库或外部来历(例如,DBPedia)主动构建。外部常识也能够直接由用户供给,例如近义词词典。其次,NLIDB还能够包含交互生成,以生成其答案的解说,并从用户那里取得反应。解说一般与成果一同显现。用户反应能够是隐式的(例如,依据用户行为如查询前史归纳得出)或显式的(例如,经过UI交互供给的用户输入)。

构建一个NLIDB

在本节中,咱们逐渐描绘了怎么在依据管道的NLIDB中构建上述要害组件。在第4章中,咱们将评论怎么将要害组件的功用构建成一个单一的端到端模型。在实践运用中,NLIDB或许会选用这两种办法的组合,以最佳平衡诸如质量和运行时效率等多个要素。

查询了解

一个简略而有效的办法是在更根本的句法结构分析的基础上构建查询了解,例如词性标示和依存句法分析。图2.3、2.4、2.5和2.6显现了表2.1中示例输入问题的依存句法树,以及各个句法树的词性符号。现在咱们详细描绘怎么运用这样的句法结构来生成查询解说。

数据库的天然言语接口——构建NLIDB的基础常识

解析树节点分类

第一步是识别能够映射到查询组件的解析树节点,并依据它们能够映射到的相应SQL组件将它们分类为不同类型。表2.2总结了常见类型的解析树节点和它们或许映射到的相应SQL组件。 解析树节点的类型高度依赖于其词性符号(POS)。一般来说,普通名词(例如,NN,NNS)一般是Name节点;专有名词(例如,NNP,NNPS)一般是Value节点;限定词(DET)一般是Quantifier节点;形容词(JJ)一般是Quantifier节点;动词(例如,VB)一般是Select节点或Function节点。

数据库的天然言语接口——构建NLIDB的基础常识

解析树节点映射

第二步是将一切解析树节点映射到相应的数据库构件中。这种映射的成果称为查询树,是一种特定类型的查询解说。关于一切类型的节点的映射进程,不包含Name节点和Value节点,一般与底层数据库无关,并依赖于简略的映射规矩,例如表2.3中的规矩。

Name节点和Value节点的映射或许愈加杂乱。这种映射不只依赖于底层数据库本身,而且一般需求考虑整个查询,而且有时需求用户输入来处理或许的歧义或弥合输入问题与底层数据库之间的语义距离。例如,假如用户提出的问题是“John在哪个年级?”而且在图2.1中的示例数据库中存在多个名为“John”的学生,则体系或许会回来一切学生的信息,或许请求用户输入以决议感兴趣的学生。

促进Name和Value节点映射的一种办法是构建一个翻译索引。翻译索引实质上是数据库构件的语义索引,包含联系和特点的称号以及实践值。它为每个数据库构件生成变体,并保护一个答应值的逆向查找的映射。变体的生成能够依据一系列简略的映射字典、范畴特定的本体论和更杂乱的主动变体生成。

数据库的天然言语接口——构建NLIDB的基础常识

表2.4展现了与图2.1中示例数据库对应的或许翻译索引的片段。Highschooler联系的变体依据预界说的映射字典,Highschooler.grade特点的值的变体来自教育范畴的本体论,Highschooler.name特点的值的变体依据Person类型的主动变体生成。这样的翻译索引有助于弥合输入问题和底层数据库之间的语义距离。此外,每个变体一般还与一个置信水平相关联,指示映射的正确性。体系能够运用这样的信息来处理多种或许解说时的歧义。例如,给定输入问题“列出一切高中学生的名字?”,依据翻译索引,咱们能够将“高中生”映射到Highschooler并具有很高的置信度,“学生”映射到Highschooler并具有较低的置信度。在这种情况下,咱们将前者的映射排在后者之前。

图2.7、2.8和2.9别离展现了表2.1中问题Q1、Q2和Q3的或许解析树节点映射。咱们保存相应解析树节点的依存联系以用于下一步——查询翻译。为简略起见,咱们删除了一切未映射到数据库构件的解析树节点,除了任何根节点。

数据库的天然言语接口——构建NLIDB的基础常识

除了运用映射规矩和翻译索引外,还能够构建更杂乱的要害词映射,例如依据词嵌入和深度神经网络的办法。咱们将在第4章中更详细地描绘这些技能。

查询树重构

关于与简略挑选查询对应的输入问题,上述两个步骤已经足够。但是,在某些情况下,为了便利查询翻译,咱们或许需求调整查询树结构,以考虑(1)或许存在的解析树错误和(2)原始输入问题中的遗漏,以便促进查询翻译,正如先前提出的那样。

例如,图2.10展现了与表2.1中的问题Q5相对应的查询树。在原始问题中,“超越5个朋友”这个表达办法更为简练,也能够说更天然地表达了“朋友的数量超越5个”的语义。由于该表达隐含地描绘了聚合,因此对应于前一表达的查询子树不包含函数节点。因此,直接将查询树转化为SQL子句将导致错误地省略聚合函数。处理此问题的一种办法是重构查询树,增加被省略的计数函数节点,并移动节点,使得称号节点出现在操作符节点之前,得到调整后的查询树如图2.11所示。

数据库的天然言语接口——构建NLIDB的基础常识

查询翻译

查询翻译是在查询树之上操作的,它生成终究可履行的结构化查询。依据查询树,确认终究可履行的结构化查询的查询类型,而且针对每种类型或许运用不同的查询翻译进程。

简略的SELECT查询

当查询树既不包含函数节点也不包含量词节点时,相应的结构化查询将是一个简略的SELECT查询,不包含聚合函数或子查询。关于这样的查询,运用以下步骤进行翻译是直接的:

SELECT子句: 将与Select节点下的特点称号相对应的每个Name节点(NN)增加到SELECT子句中。

FROM子句: 将与联系称号相对应的每个Name节点(NN)增加到FROM子句中。

WHERE子句: 关于每个操作符节点(ON),依据附加到节点的Name节点-Value节点对向WHERE子句增加谓词。关于未衔接到操作符节点(ON)的每个Value节点(VN),运用“=”函数增加一个谓词。

JOIN子句: 假如在FROM子句中增加了多个联系,则依据数据库架构(拜见第3.2节中主键和外键的界说),为每对联系之间的外键-主键增加一个JOIN子句。这一步也称为联接途径推断。

依据上述进程,咱们能够从诸如图2.7和2.8所示的查询树中获取输入问题Q1和Q2的正确SQL句子。

简略聚合查询

简略聚合查询是指包含一个或多个聚合函数但没有子查询的查询。当查询树仅包含一个函数节点且没有量词节点时,相应的查询一般是一个简略的聚合查询。图2.1中的Q3和Q4都是简略的聚合查询。简略聚合查询的翻译比简略SELECT查询稍微杂乱一些。

SELECT子句: 将Select节点下没有与Function节点(FN)衔接的每个Name节点(NN),对应于特点称号,增加到SELECT子句中;假如仅有一个Function节点(FN)到根节点的途径仅包含一个Name节点,则将相应的SQL函数增加到SELECT子句中。

FROM子句: 将与联系称号相对应的每个Name节点(NN)增加到FROM子句中。

WHERE子句: 关于每个操作符节点(ON),依据附加到节点的Name节点-Value节点对向WHERE子句增加谓词。关于未衔接到操作符节点(ON)的每个Value节点(VN),运用“=”函数增加一个谓词。

JOIN子句: 假如在FROM子句中增加了多个联系,则需求为联系增加JOIN子句。除非问题明确认义了衔接条件,不然咱们依据数据库架构查看联系之间的途径,并相应地增加JOIN子句。这一步也称为联接途径推断。

ORDER BY子句: 假如函数节点(FN)对应于max或min,则增加ORDER BY count( ) DESC LIMIT 1用于max,以及ORDER BY count( ) ASC LIMIT 1用于min。

HAVING子句:假如函数节点(FN)衔接到一个操作符节点(ON),则将相应的谓词增加到HAVING子句中。

外部常识

为了正确履行查询了解,NLIDB需求了解底层数据库,并了解用户对应于底层数据库的范畴或许具有的常见常识。

与NLIDB相关的外部常识包含:

  1. 言语常识,如WordNet [13](英语的词汇数据库)和FrameNet [14](供给单词的语义结构);
  2. 国际常识,供给有关实体特定实例的显式常识,例如YAGO [15]、Freebase [16]、DBPedia [3]和Wikidata [17]供给的常识(例如,“美国的首都是华盛顿特区”);
  3. 常识常识,例如ConceptNet [18]描绘的隐含一般实际(例如,“房子一般有窗户”);
  4. 范畴常识,包含特定范畴的实际,也称为范畴特定本体论,例如生物医学范畴的国际疾病分类[19]和金融范畴的金融业务本体[20]。

在2.3.1节介绍的翻译索引是捕获外部常识的一种简略办法。咱们能够依据底层数据库和外部资源构建翻译索引。例如,在表2.4中显现的翻译索引中,“Highschooler.grade = 9”中,“grade 9”和“9th grader”等变体能够依据范畴常识和底层数据库架构[21]主动生成,而“freshman”等变体需求经过映射字典显式增加。这种外部常识是使NLIDB能够处理具有底层数据库中不可用的国际常识的问题的要害,例如“Who are all the freshmen?”中的“新生”概念。

在7.1节中,咱们将评论处理NLIDB中歧义问题的技能,一般经过运用外部常识。咱们能够将外部常识作为一个独自的组件,如翻译索引,或作为考虑外部常识的机器学习模型的一部分,在更杂乱的办法中考虑外部常识。

交互生成

在抱负的情况下,NLIDB能够处理恣意的输入问题,并正确地将它们转化为相应的结构化查询。但是,在实际中,NLIDB常常遇到无法处理的输入问题。在这种情况下,与许多以人为中心的人工智能体系一样,体系向用户解说它能够了解和不能了解的内容,并积极征求用户的反应,该反应或许是显式给出的,也或许是隐式的。

拼写纠正和查询主动完成是减少含糊和错误问题的常见技能。此外,一个常见的应战常常导致NLIDB失败,即缺乏范畴特定的常识,因为提前注入到NLIDB中的外部常识或许不足以满意需求。例如,迄今为止描绘的示例NLIDB无法处理输入问题“谁是最受欢迎的高中学生?”,因为它无法对“最受欢迎的”进行分类和映射到相应的解析树节点。在这种情况下,它能够调用交互生成来通知用户它不了解术语“最受欢迎的”。然后,它能够要求用户从头表达问题,更明确地表达“最受欢迎的”语义,例如“谁是高年级拥有最多朋友的学生?”或“谁是被最多学生喜爱的高年级学生?”。每个查询重构都能够增加到其外部常识中,以更好地处理未来的查询。第7章将更详细地评论用于查询消歧和查询主张的交互技能。

此外,即便NLIDB已成功了解并翻译了输入问题,体系也能够支撑用户与回来的成果进行额定的交互,下面将详细介绍。

成果生成

一旦成功获取了结构化查询,体系将查询发送到数据存储中,然后履行查询并将履行成果回来。成果生成然后将成果回来给用户,或许还会供给额定的信息,取决于履行成果。

非空成果

假如查询的履行成果不为空,成果生成能够直接将成果行回来给用户。此外,如前文所述,它或许支撑以下附加交互,以改进体系的可用性:

成果描绘:为了供给更天然的交互体验并协助用户更好地了解答案,能够回来成果的天然言语描绘,而不是以表格形式的原始输出。

成果可视化:成果能够可视化,以协助用户更好地了解和与查询答案交互。

成果解说:能够供给关于成果获取办法的解说,以协助用户更好地了解和信任回来的成果。关于输入问题,最根本的解说能够经过杰出显现映射到数据库构件或非平凡查询片段的原始输入问题中的要害词来生成。

成果探究:能够供给额定的用户交互,如对查询成果进行排序和钻取,以答应用户在不需求宣布其他查询的情况下进一步探究查询成果。

在第6章中,咱们将全面审查从数据生成文本的技能,一般用于成果描绘。在第7章中,咱们将更详细地评论与成果可视化、解说和探究相关的技能。

数据库的天然言语接口——构建NLIDB的基础常识

空成果

假如履行成果为空,向用户解说导致空成果的或许原因非常重要。空成果的一个或许原因是输入问题的翻译查询错误。经过运用之前描绘的解说技能,用户能够查看体系对原始输入问题的查询了解是否正确反映了原始输入问题的语义。空成果的另一个或许原因是原始输入问题的答案确实为空。在这种情况下,体系能够供给额定的协助来协助用户获取非空成果。体系能够依据查询前史供给查询主张,例如之前宣布的类似查询的非空成果。体系还能够经过查询放宽来协助,或许依据用户交互(例如,类似于IQR [22])。

图2.12显现了上述不同选项的示例。经过杰出显现履行的查询成果的天然言语描绘和空成果的替代查询来解说查询了解。

数据库的天然言语接口——构建NLIDB的基础常识

总结

在本章中,咱们介绍了一个NLIDB的常见架构,它包含查询了解和查询转化,并供给了一个逐渐构建根本完成的指南。咱们还评论了怎么经过运用用户反应和外部常识来扩展这样一个基线完成,以处理查询了解和成果显现中的应战。在本书的其余部分,咱们将更深入地评论相关主题。详细而言,在第4章中,咱们将深入评论与查询了解和转化相关的各种现代技能,包含端到端神经模型,在第6章中,咱们将介绍从数据生成天然言语的办法。在第5章中,咱们将评论评估NLIDB各个方面的办法。最后,在第7章中,咱们将回忆NLIDB中各种交互性方面,包含对话式NLIDB以及适用于提高NLIDB效果和功效的常见交互技能。

咱们将任何感兴趣的读者引荐到一本较早的书本[2],其间对传统的NLIDB进行了全面的评论。