用于自然语言查询的联接路径的消岐的制作方法

文档序号:11620591阅读:161来源:国知局
相关申请的交叉参考根据35u.s.c.§119(e),本申请要求2015年9月11日提交的美国临时专利申请no.62/217,409“disambiguatingjoinpathsfornaturallanguagequeries”的优先权,通过引用将其合并于此。本说明书涉及用于自然语言查询的联接路径的消岐。
背景技术
::辨别进行自然语言查询的行文语境可以改善查询处理。例如,可将查询“calculatethesalesofgoodsproducedinitaly”解释为“calculatethesalesmadeinitalyofgoodsthathavebeenproduced”或者“calculatethesalesofgoodsthathavebeenproducedinitaly”。发布该查询的语境将有助于理解预期的解释。技术实现要素:一般而言,本说明书描述为了自然语言查询将联接路径消岐的技术。一般而言,本说明书所述主题内容的一个创造性方案可以在包括以下动作的方法中具体实施:获得来自用户的自然语言查询;在将所述自然语言查询转换为要在知识库的结构化应用编程接口(api)上进行的结构化操作时:响应于检测与所述转换相关联的行文歧义,其中所述行文歧义标识出自然语言查询中包括的单词的两个以上解释:通过基于已经基于所述知识库的数据模式生成的一个或多个联接路径从所述单词的两个以上解释中选择所述单词的解释,解决所述行文歧义;根据选择的所述单词的解释修改所述自然语言查询,以生成一个或多个结构化操作;对于所述知识库的所述结构化api进行所述一个或多个结构化操作;以及将与所述自然语言查询结果匹配的搜索结果返回所述用户。该方法的其他实施例包括对应的计算机系统、设备、以及在一个或多个计算机存储装置上记录的计算机程序,每个被配置为进行该方法的动作。对于要被配置为进行特定操作或动作的一个或多个计算机的系统而言,意味着系统在上面安装了软件、固件、硬件或它们的组合,工作时软件、固件、硬件或它们的组合使得系统进行操作或动作。对于要被配置为进行特定操作或动作的一个或多个计算机程序而言,意味着一个或多个程序包括在通过数据处理设备执行时,使得设备操作或动作的指令。上述及其他实施例可以分别选择性地包括以下特征的一个或多个,单独地或组合地。具体而言,一个实施例包括组合的所有以下特征。所述联接路径包括共享公共列的至少两个表的标识符。所述联接路径还包括所述公共列的一个或多个标识符。通过基于已经基于所述知识库的数据模式生成的一个或多个联接路径从所述单词的两个以上解释中选择所述单词的解释,解决所述行文歧义包括:确定所述单词与所述至少两个表的第一表的第一列中指定的值匹配;以及基于所述确定,在参考所述至少两个表的第二表的第二列中指定的值时识别所述单词。将所述自然语言查询转换为要在知识库的结构化应用编程接口(api)上进行的结构化操作包括:获得通过分析器生成的分析器输出,所述输出代表所述自然语言查询;以及根据所述分析器输出生成概念树,其中子语境概念节点在所述概念树上所位于的等级不比任何属性节点更靠近所述概念树的根部。获得分析器输出包括将所述自然语言查询处理为标志。基于所述概念树以及选择的所述单词的解释生成所述结构化操作。本说明书所述主题内容可以在特定实施例中实施,从而实现以下优点的一个或多个。可以减少解决自然语言歧义所需的计算工作量。可以基于预设语境自动解决自然语言查询中出现的歧义,因此不需要用户介入。此外,对于用户提供的自然语言查询中检测的行文歧义,可以在它们出现时就被解决,这消除了基于每个替代性解释而产生搜索结果的需要。本说明书所述主题内容的一个或多个实施例的细节在附图以及以下描述中给出。根据说明书、附图、以及权利要求书,主题内容的其他特征、方案、以及优点将变得显而易见。附图说明图1是示出示例性数据表以及数据表之间的潜在联接的简图。图2是示出示例性子语境词汇的简图。图3是示出示例性超图的简图。图4是示出图3所示超图的示例性表现的简图。图5是示出示例性概念树的简图。图6是示出用于自然语言查询的联接路径的消岐的示例性系统的简图。图7至图8是示出示例性图式词汇的简图。图9是示出处理联接路径的示例的流程图。不同的附图中相同的附图标记和指定表示相同的元件。具体实施方式自然语言查询处理系统可以基于自然语言查询,利用自然语言处理(nlp)技术来产生能够在基础数据源上操作的结构化查询,并执行结构化查询来获得查询结果。为此,例如需要通过领域专家来指定——在本说明书中被称为图式词汇的——以下信息集合的一个或多个:根据自然语言查询产生的基础数据源的数据模式——例如列名与标志——例如单词或短语之间的映射;数据表之间的联接映射,例如表a中哪个列与表b中的“country”列联接;可识别的域值;例如,应当将单词“italy”识别为国家;以及查询过滤器与自然语言查询中包括的单词之间的映射;例如一个或多个国家过滤器所参考的映射,在“whatistherevenueing20countries”这样的查询中的短语“g20countries”。基于这些图式词汇,在接收自然语言查询之后,询问处理系统可以识别查询中的标志,例如通过利用分析器来分析查询,以及基于图式词汇将标志映射到概念。分析器可以指定所识别的标志之间的依赖关系,例如利用概念树。因此,分析器输出可包括将所识别的概念作为节点的概念树。系统可以分析概念树,以生成结构化查询——例如sql查询,并对基础数据源执行这些结构化查询,以获得搜索结果。歧义可能由于处理自然语言查询而出现。例如,当自然语言查询中包括的单词可以解释为表示两个不同的可识别图式词汇——例如表示不同表的不同列中包括的值——的时候,歧义可能出现。本说明书描述了当歧义出现时用于检测它们的技术。因此,可以在提交机构化查询以获得搜索结果之前解决歧义。这样可以改善性能,并缩短提供与用户预期相对应的结果所需的时间。例如,当通过用户将输入查询修正一次或多次,以响应于基于有歧义的自然语言查询生成的结果消除歧义的时候,不需要生成多个结构化查询。在一些实施方式中,可以基于本文所述的一个或多个算法来解决歧义,不需要用户介入来简化处理以及合理化用户体验。例如,在接收到“calculatethesalesofgoodsproducedinitaly”的查询之后,自然语言系统可以生成以下三个标志:“sales”、“italy”和“produced”。通过自然语言系统确定为匹配图式词汇的标志被识别为概念。例如,系统可将“sales”识别为表示图1所示表102的列“sales_usd”的概念;将概念“italy”识别为用于国家名的反向索引匹配;将概念“produced”识别为图2所示子语境204中包括的n-gram;并且因此,系统将查询识别为包括三个概念。但是系统可以确定,用于国家“italy”的概念是有歧义的,因为概念“italy”可以解释为进行销售所在的国家,也可以解释为生产或制造商品所在的国家。因此系统可以要求附加语境来消岐。附加语境可以是根据与特定子语境中指定的值匹配的相同自然语言查询产生的另一个概念。例如,因为概念“produced”与子语境204中包括的其中一个n-gram匹配,如图2所示,所以系统可以依靠子语境204中包括的其他n-gram,例如“production_cost”n-gram以及“manufacture_country_code”n-gram,以解决与概念“italy”有关的歧义。例如,当两种解释或者同样有可能,或者同样合理时,系统将依靠一个或多个子语境中指定的数据来选择一个解释,并基于所选择的解释来解决自然语言查询。因此,系统会将概念“italy”解释为生产或制造商品所在的国家,因为概念“produced”具有子语境204而非子语境202中的n-gram匹配。基于数据模式和联接映射的超图生成基于其可以进行消岐的子语境是基于超图来产生,超图表示其中数据表相互之间可具有多个联接映射的数据库图式。在一些实施方式中,作为图式词汇的一部分,子语境通过领域专家来产生,以指定特定领域中数据的关系。超图包括一组节点以及一组边,节点表示数据库中存储的数据表的列,边表示列所属的表。如果两个节点表示的列是可以联接的,则通过边将两个节点连接;并且边识别列所属的表。表的联接系属是导致表从另一个表开始的一系列联接。在两个表之间可以有多个可能的联接系属。如果在a与b之间指定了联接映射(a,x,b,y),那么可将从a开始到b的联接系属表示为“a::xb”。超边包括:表名、联接系属、以及超节点的列表(通过参考或索引)。节点包括:表名、属性名、以及{ajoinlineagewiththeattributename},又称为属性路径。在图1所示的示例性表中,factorytoconsumer表102中的sale_country_code列可以与geo表104中的country_code列联接,并且因此,用超图上的相同节点来表示这两个列;如同factorytoconsumer表102中的manufacture_country_code列与geo表104中的country_code列。换言之,通过其节点集合在公共列上重叠的超边来表示可通过一个或多个公共列联接的表。但是当两个表可通过两个以上公共列来联接时,需要包括两个以上公共列的表的若干实例来构造超图。例如,如图1所示,geo表104可通过以下两种方式与factorytoconsumer表102联接:通过manufacture_country_code外键以及通过sale_country_code外键。因此,描述factorytoconsumer表102以及geo表104的超图300包括geo表104的两个实例,如图3所示。因为在超图300中有geo表104的两个实例,所以自然语言处理系统在处理自然语言查询时需要将它们相互区分。本说明书所述消岐技术使用来自源表的联接路径。或者,可通过参照表名来进行消岐。在任何联接映射中源表是并非基本表的表。换言之,源表通过其外键的一个或多个与另一个表联接,但不是其主键。在以上示例中,当在manufacture_country_code列和sale_country_code列以及country_code列上将表联接时,factorytocustomer表是源表,而geo表不是源表,manufacture_country_code列和sale_country_code列都不是factorytoconsumer表的主键,country_code列是geo表的主键。联接路径是线性结构,例如描述通过以下foreign_key-primary_key联接映射怎样从源表到达给定表的字符串或列表,例如按照[<table_name>::<foreign_key>]*<table_name>的形式。“*”表示[<table_name>::<foreign_key>]可以重复一次以上。用于图3所示两个geo表的联接路径是:“factorytoconsumer::sale_country_codegeo”;以及“factorytoconsumer::manufacture_country_codegeo”。联接路径也可用于描述超图的节点,例如跨越两个表的公共列或可联接列。例如,用于“factorytoconsumer::sale_country_codegeo”边的联接路径如下:“factorytoconsumer::sale_country_codegeo::country_code”;“factorytoconsumer::sale_country_codegeo::country_name”;以及“factorytoconsumer::sale_country_codegeo::country_region”。用于生成联接路径的示例性算法如下:1.current_tables={setof(table,joinlineage)pairsfortablesthatdonotappearastheparenttableforanyjoinmappings}。用于这些表的“joinlineage”与表匹配。ex:[(buyerseller,“buyerseller”)]2.在current_tables非空时:a.从current_tables中将(t,t.join_lineage)出列。b.产生用于该表“instance”的超边并将其添加到超图。hyperedge(t,t.join_lineage,hypernodes={})c.对于表t,找到不出现的所有列作为任何联接映射中的主键。对于每个列t.c,产生超节点并将其添加到超图。注意,我们是首次看到这些属性并且这是为什么我们产生用于它们的节点。此外,将超节点添加到超节点的列表,用于在以上步骤中产生的超边。d.对于表t,找到出现的所有列作为任何联接映射中的主键。当我们在联接系属中处理先前的表时,我们已经基本上产生用于这些的超节点。我们只是将这些现有超节点的参考添加到用于以上步骤中产生的超边的超节点的列表。e.对于所有联接映射(ft,fk,pt,pk),其中向当前表中enqueue(pt,append(t.join_lineage,“::fkpt”)。以上示例性算法将终止,除非存在循环联接关系。通过检查表是否已经在联接路径中出现,可以容易地检测循环联接关系。在构造联接路径时也允许预定数量的循环,不会导致算法暂停。下面是以上示例性算法的输出,将图7至-图8所示的图示词汇用作输入。1.current_tables={(buyerseller,“buyerseller”)},hyperedges={},hypernodes={}2.在处理(buyerseller,“buyerseller”)之后:a.新的超边:i.e1(buyerseller,“buyerseller”,{n1,n2,n3,n4,n5})b.新的超节点:i.n1(buyerseller,sales_usd,“buyerseller::sales_usd”)ii.n2(buyerseller,transaction_item,“buyerseller::transaction_item”)iii.n3(buyerseller,transaction_date,“buyerseller::transaction_date”)iv.n4(buyerseller,buyer_id,“buyerseller::buyer_id”)v.n5(buyerseller,seller_id,“buyerseller::seller_id”)c.current_tablesi.(person,“buyerseller::buyer_idperson”)ii.(person,“buyerseller::seller_idperson”)3.在处理(person,“buyerseller::buyer_idperson”)之后a.新的超边:i.e1(person,“buyerseller::buyer_idperson”,{n4,n6,n7,n8,n9})(注意,n4是对于buyerseller而较早产生的,buyerseller是联接键)b.新的超节点:i.n6(person,full_name,“buyerseller::buyer_idperson::full_name”)ii.n7(person,likes,“buyerseller::buyer_idperson::likes”)iii.n8(person,personal_address_id,“buyerseller::buyer_idperson::personal_address_id”)iv.n9(person,business_address_id,“buyerseller::buyer_idperson::business_address_id”)c.current_tablesi.(person,“buyerseller::seller_idperson”)ii.(address,“buyerseller::buyer_idperson::personal_address_idaddress”)iii.(address,“buyerseller::buyer_idperson::business_address_idaddress”)自然语言查询处理系统可以根据图1所示数据模式100生成图4所示超图400。子语境的分析子语境概念变换一旦生成超图,自然语言查询处理系统就可以分析与特定领域相关联的领域词汇中指定的子语境,并通过子语境传播联接路径。处理自然语言查询的其中一个挑战来自于自然语言的灵活性,因为可以按照多种不同的行文方式来表达相同的含义。这样会将依赖关系分析复杂化。例如,自然语言处理系统可以根据自然语言查询中包括的短语或单词生成相同的概念,但是这些概念之间的依赖关系可以不同,取决于分析器怎样分析自然语言查询。此外,因为自然语言查询处理系统可以依靠外部分析器提供的分析输出——例如概念树,并且不能控制外部分析器的操作,所以为了传播联接路径,系统需要将它接收的分析器输出变换为可通过系统处理的形式。为此,自然语言查询处理系统可以利用启发法或变换规则来变换概念树,从而产生其结构可通过系统处理的概念树,以生成联接路径。例如,以下自然语言查询承载相同的含义:1.计算买方个人地址在nevada(内华达)的销售额;2.计算买方在nevada有他的个人地址的销售额;以及3.对于在nevada有他们的个人地址的买方而言总销售额是多少。图5是示出示例性概念树502、504和506的简图500。具体而言,分析器可以根据具有不同结构的上述三个自然语言查询来产生三个概念树502、504和506。作为处理这些概念树的一部分,系统例如可以基于字符串匹配来比较具有领域词汇中指令的值的节点,并将“buyer”节点514和“personaladdress”节点516识别为子语境节点;将“nevada”节点518识别为反向索引匹配概念;以及将“sale”节点512识别为数据库属性节点,数据库属性节点需要来自两个以上表的数据的集结。如上所述,可将自然语言查询处理系统限制为基于具有特定格式的概念树来处理联接路径。例如,自然语言查询处理系统可能只能处理子语境节点位于父系等级或者位于从根部到概念节点的“ancestry”(谱系)路径上的概念树,以使得可以正确地建立从该概念到这些节点的依赖性。例如,考虑概念树502。系统需要确定nevada节点对应什么。系统可通过查看它谱系中的子语境节点来实现这一点。但是,“personaladdress”节点516(是子语境节点)并非位于从根部到“nevada”节点的路径上,并且会阻止系统正确地建立“nevada是买方个人地址的地址所在的州”。对于504中的概念树而言存在类似的问题,但此时系统不一定能够在处理“nevada”节点516时涉及“buyer”子语境节点514。自然语言查询处理系统可将概念树的原始结构变换为可通过系统处理的不同结构。例如,自然语言查询处理系统可通过在概念树504中将“buyer”节点514移动为更靠近根部一个等级,将概念树504变换为概念树508,这使得“buyer”节点514成为“personaladdress”节点516的父系节点。在经过变换的概念树508中,子语境节点514位于从节点518到根部的路径上,并且系统现在可将514用于处理518。一个示例性变换算法如下:对于基于宽度优先遍历的概念树中的每个概念:1.如果概念并非子语境概念,则跳过。2.如果概念是子语境概念:a.如果子语境节点没有任何子节点,或者如果在概念树中它仅有的后代都是子语境节点:i.将子语境节点上移,成为它父系的父系。一旦上移子语境节点的变换发生,系统就生成这些子语境所表示的可能联接系属。生成联接系属包括利用另一个变换,另一个变换导致子语境概念节点通过一个或多个可能的联接系属扩增。如果非子语境节点将子语境概念节点作为它的父系,则系统可以核实,是否存在对于节点中参考的属性而言合理的单个联接系属。如果有多个合理的联接系属,则系统可以确定畸形的查询。生成可能的联接系属的示例性变换示出如下:对于基于宽度优先遍历的概念树中的每个概念(c):1.如果概念并非子语境概念,或者并非数据库属性概念,则跳过。2.如果概念c是数据库属性概念(对数据库属性的直接参考),则进行以下步骤(让我们假定属性是表“t”的“a”)a.如果属性没有与其相关联的子语境,则跳过。b.对于(表t的)每个子语境s,属性是:i.如果s不具有任何外键属性,则跳过ii.对于子语境s(存在联接映射(t,fk,pt,pk))中的每个外键属性(fk):1.将联接系属“t::fkpt”添加到c.join_lineagesc.注意,数据库属性只能添加联接系属的第一链接。3.如果概念c是子语境概念:a.joinsforsubcontext={}。c的子语境是s。与该子语境相关的表是tb.对于概念的子语境(存在联接映射(t,fk,pt,pk))中的每个外键属性(fk),将联接映射添加到joinsforsubcontext。c.如果joinsforsubcontext为空,则我们没有什么可做。该子语境中没有任何外键。d.检查概念c(pc)的父系是否为子语境节点。i.对于joinsforsubcontext中的每个联接映射,如果pc并非子语境,或者如果它没有存储任何join_lineages(t,fk,pt,pk):1.将联接系属“t::fkpt”添加到c.join_lineagesii.对于pc.join_lineages中的每个join_lineage(j),如果pc存储了任何join_lineages,:1.令“t1”成为j中的第一表,令“tn”成为最后一个。(ex:ifjoinlineageis“a::ab::bc”,t1=aandtn=c)2.对于joinsforsubcontext中的每个联接映射(t,fk,pt,pk):a.如果tn==t,我们通过“tn::fkpt”在末端延伸j,并将其添加到c.join_lineages。b.如果t1==pt,我们通过“t::fk”在首端延伸j,并将其添加到c.join_lineages。3.对于joinsforsubcontext中的每个联接映射(t,fk,pt,pk):a.将联接系属“t::fkpt”添加到c.join_lineages。例如,在处理图5所示的概念树506时,自然语言查询处理系统——例如按照根到叶的方式——找到树506中的第一属性语境节点,随后“sale”节点512成为“buyer”节点514。“buyer”节点514被指定用于buyerseller表并且与属性“buyer_id”相关联,属性“buyer_id”是个人表的外键。基于该子语境,系统确定“buyerseller::buyer_idperson”是联接路径,并将该联接路径存储在“buyer”节点514中。如果基于用于“buyer”节点514的该子语境可以确定一个以上联接路径,例如,当“buyer”节点514与其他表的外键相关联时,系统也可将这些联接路径存储在“buyer”节点514中。在处理用于“buyer”节点514的联接路径之后,系统可以处理用于“personaladdress”节点516的联接路径。因为“personaladdress”节点516被指定用于个人表并且与作为是地址表的外键的列“personal_address_id”相关联,所以系统可以确定是否已经构造这种联接路径,例如“person::personal_address_idaddress”,并存储在“buyer”节点514中。如果存在现有联接路径,则系统可以延伸现有联接路径,如果在现有联接路径中最后指定的表与新联接路径中指定的子语境表匹配的话。在该示例中,因为在联接路径“buyerseller::buyer_idperson”中最后指定的表是个人表(persontable),它与新联接路径“person::personal_address_idaddress”中的子语境表个人匹配,所以可将现有联接路径延伸为“buyerseller::buyer_idperson::personal_address_idaddress”。当可以类似地延伸一个以上现有路径时,系统也可以延伸这些联接路径。处理联接路径并延伸现有联接路径的以上示例在图9中示出。用于超图创建的算法基于图式词汇和联接映射经历所有表以及它们的属性。对于具有大量属性的表而言,可以具有非常广泛的词汇覆盖率。但是,给定的查询一般只参考这些词汇的小子集。系统可以对表和属性进行大量修剪,以保证按照它捕捉所有表、属性、以及与原始自然查询相关的联接映射的方式,将生成的超图修剪成完整的形状和形式。修剪可以提供将超图显著简化的优化效果。修剪的预备步骤包括在概念树中找到所有参考表和属性。可通过进行以下操作来完成这个工作。所得的输出是一组参考表以及一组参考表属性。1.对于概念树中的每个概念(遍历的顺序没有影响)a.在概念(如果有的话)中找到参考表并将参考表插入一组参考表。b.在概念(如果有的话)中找到参考属性并将参考属性插入一组参考表属性。示例性修剪算法示出如下:a.修剪联接树(jointree)的叶节点。a.boolpruned_node=trueb.当pruned_node:i.pruned_node=falseii.如果存在叶节点n,其中n.table不在(通过以上算法计算的)参考表的组中:1.从树去除到n的所有进入边。这是一个叶节点,所以没有外出边。2.从树去除节点n;以及3.pruned_node=true。(注意,算法可以重复,直到它找到未参考的叶节点;以及修剪叶节点会生成新的叶节点作为结果)。b.修剪树的根节点。a.当root.table不在参考表的组中并且root只有一个外出边时:i.令n成为root用它唯一的边所连接的节点。ii.去除root的外出边以及节点root。iii.令n成为新的root。将超图节点与属性参考匹配基于概念树,自然语言查询处理系统可以构造新的联接路径或延伸现有的联接路径。系统可以基于与外表的属性相对应的概念,构造新的联接路径或延伸现有的联接路径。在末端,对于正确形成的查询,系统将每个属性概念与单个联接路径匹配,这使得能够通过明确的方式将此属性参考转化为sql。下面给出用于此的一个示例性处理:1.产生将属性路径映射到超节点的地图。注意,对于每个超节点而言属性路径是唯一的。让我们称之为nodemap。2.为了方便起见,产生另一个地图,其具有超边总数对应于特定表的计数。记住,因为可能有导致该表的多个不同联接路径,所以可能有为了一个表而产生的多个超边。让我们称该地图为hyperedgecount。3.对于基于宽度优先遍历的概念树中的每个概念(c):a.找到在此概念c中参考的属性。(如果参考了一个以上属性,那么我们对每个属性重复以下步骤)。假定这是t.x(表t的属性x)。b.如果(hyperedgecount[t]==1),那么这意味着对于属性参考没有歧义。我们找到hyperedge(h)并将用于概念(c)中的属性参考的完整属性路径设置为h.join_lineage+“x”。此外,存在与此属性参考匹配的单个超节点。c.如果(hyperedgecount[t]>1),则我们需要找到哪一个是相关的。我们前往概念c的父系节点。让我们称父系节点为pc。i.如果pc.join_lineages为空,那么我们将不能唯一地识别完整的属性路径。这意味着查询是畸形的,生成错误消息并将其提供给用户。ii.如果pc.join_lineages非空,那么我们尝试找到与用于属性参考的超节点的唯一匹配。1.hypernode_matches={}2.对于以t结束的pc.join_lineages中的每个join_lineage(当我们尝试检查用于t.x的可能属性路径时,我们忽略其他)a.生成用于t.x的的attribute_path作为(join_lineage+“x”)。在nodemap中查找该属性,以检查它是否实际上对应于超节点。如果是,则将该节点添加到hypernode_matches。3.如果hypernode_matches仍然为空,那么这意味着我们将不能唯一地识别完整的属性路径。这意味着查询是畸形的,生成错误消息并将其提供给用户。4.如果hypernode_matches有一个以上元素,那么这意味着系统不能唯一地识别完整的属性路径。这意味着查询是畸形的,生成错误消息并将其提供给用户。5.如果hypernode_matches有单个元素,则我们唯一地找到了我们的匹配超节点。返回上述“对于在nevada有他们的个人地址的买方而言总销售额是多少?”的示例性查询,在应用所有概念树变换之后,其导致图5所示概念树的元素508。节点512对应于buyerseller表的明确的“sale”属性。节点514和节点516是通过联接系属扩增的子语境概念节点。节点518是用于地址表中的state列的反向索引匹配。这里,有地址表的多个实例,例如买方个人地址、卖方个人地址、买方公司地址及卖方公司地址,且节点518可将状态属性与这些表实例的其中任何一个匹配。系统确定实际上参考这些地址表实例的哪一个。这是通过检查父系节点(516)是否具有可以使用的联接路径来实现的。节点516具有联接路径“buyerseller::buyer_idperson::personal_address_idaddress”,这允许系统识别对于节点518而言与买方个人地址的状态的唯一匹配,消除了与用于“nevada”的概念相关联的歧义。所得的查询是:selectsum(buyerseller.sales_usd)asalias0_sales_usdfrombuyersellerinnerjoinpersonon(buyerseller.buyer_id=person.person_id)innerjoinaddresson(person.personal_address_id=address.address_id)whereaddress.state=nevada.在一些实施方式中,为了自然语言查询将联接路径消岐的方法包括以下步骤:1.首先,应用子语境变换a.子语境叶节点上移变换(movingsubcontextleafnodesuptransform)b.子语境联接系属变换(subcontextjoinlineagetransform)2.找到所有参考表和属性(findingallreferencedtablesandattributes)。3.生成用于表的联接树(generatingthejointreefortables)。4.修剪联接树(pruningthejointree)。5.仅对于联接树(jointree)中的剩余表以及该组中的表之间的联接映射进行超图创建(hypergraphcreation)。a.对于步骤(2.c),我们仅对于在查询中参考的列生成节点6.将超图节点与属性参考匹配(matchinghypergraphnodestoattributereferences)。7.标记匹配的超节点并运行超图缩减(利用公知技术),以进一步修剪超图。8.为每个超边生成表别名,然后根据超图生成联接。图6是示出为了自然语言查询将联接路径消岐的示例性系统600的简图。系统100包括自然语言(nl)查询处理系统620和知识库630。在一些实施方式中,知识库630是对其执行自然语言查询的数据源。nl查询处理系统620包括:可选择的词法分析器和语法分析器622、消岐子系统624、以及查询执行子系统626;知识库630包括知识获取模块632和实体数据库634。系统600接收源自一个或多个用户装置610——例如智能电话610-b或膝上型电脑610-a——的自然语言查询,并将自然语言查询转换为要在知识库630的应用编程接口(api)上进行的结构化操作——例如编程语句。在获得查询结果之后,系统600将它们回送到一个或多个用户装置610。nl查询处理系统620将从用户装置610接收的自然语言查询——例如简明英语查询——处理为结构化操作,例如sql查询,在知识库630的api上执行这些操作,以产生查询结果,并将查询结果返回用户装置610。可选择的词法分析器和语法分析器622将自然语言查询处理为标志,进而处理为语法树,在本说明书中语法树又称为概念树。此外,词法分析器和语法分析器622可将概念树变换为具有不同结构的另一个概念树,例如改变概念树的结构。消岐子系统624基于概念树的节点上存储的联接路径将自然语言查询消岐。查询执行子系统626基于消岐子系统624以及词法分析器和语法分析器622的输出生成结构化查询。此外,查询执行子系统626对于知识库630的api执行结构化查询,以产生查询结果。知识库630将结构化api提供给用户使用,以查询和更新实体数据库634。知识获取子系统632从外源——例如互联网——获得附加实体信息,并且与实体数据库634中的现有实体信息相关联地、根据知识库的数据模式存储它。知识获取子系统可以直接与外源通信,避开nl前端620。实体数据库634存储实体信息,例如关于实体的信息,例如人们的生日、公司的地址,以及多个组织之间的关系。实体信息根据数据模式存储在实体数据库634中。在一些实施方式中,实体数据库634利用表结构存储实体信息。在其他实施方式中,实体数据库634将实体信息存储在图结构中。通常,利用实体数据库的数据库管理系统(dbms)支持的形式语言来表达数据模式。当在实体数据库中通过逻辑方式构造实体信息时,数据模式指定实体信息的组织,例如,当实体数据库是关系数据库时将实体信息划分为数据库表。数据模式可包括表示专用于应用的完全性约束条件的数据,例如,在表中应用可以访问哪些列,以及应当怎样组织输入参数来查询某个表。在关系数据库中,数据模式例如可以限定表、字段、关系、视图、索引、包、过程、函数、队列、触发器、类型、序列、物化视图、同义词、数据库链接、目录、xml图式、以及其他元素。主题内容的实施例以及本说明书中所述功能操作可以在数字电子电路中、在通过有形方式具体实施的计算机软件或固件中、在计算机硬件中实施,包括本说明书中公开的结构以及它们的结构等同物,或者在它们的一个或多个的组合中实施。本说明书所述主题内容的实施例可以被实施为一个或多个计算机程序,即,在有形的非瞬时存储介质上编码的计算机程序指令的一个或多个模块,用于通过数据处理设备执行,或者控制数据处理设备的操作。计算机存储介质可以是机器可读存储装置、机器可读存储衬底、随机存储器装置或串行访问存储器装置、或者它们的一个或多个的组合。替代性或附加性地,可以在人为生成的传播信号——例如机器生成的电信号、光信号或电磁信号——上将程序指令编码,传播信号被生成为将信息编码,用于传输到适当的接收器设备,以通过数据处理设备执行。术语“数据处理设备”表示数据处理硬件并涵盖用于处理数据的所有类型设备、装置和机器,作为示例,包括可编程处理器、计算机、或多个处理器或计算机。此外,设备可以是专用逻辑电路,例如fpga(现场可编程门阵列)或asic(专用集成电路),或进一步包括专用逻辑电路。除了硬件之外,设备可以选择性地包括为计算机程序创造执行环境的代码,例如构成处理器固件、协议堆栈、数据库管理系统、操作系统、或者它们的一个或多个的组合的代码。计算机程序——又称为或者被描述为程序、软件、软件应用、app、模块、软件模块、脚本或代码——可以按照任何形式的编程语言编写,包括编译或解释语言、说明性或程序性语言;并且可以按照任何形式部署,包括作为独立程序或者作为模块、组件、子例程、或适合于在计算环境中使用的其它单元。程序可以但是不必对应于文件系统中的文件。程序可以存储在保存其他程序或数据的一部分文件中——例如在标记语言文档中存储的一个或多个脚本,存储在专用于所考虑的程序的单个文件、或者存储在多个协调文件中——例如存储一个或多个模块、子程序、或一部分代码的文件。计算机程序可以部署为在一个计算机上执行,也可以部署为在位于一个地点或者分布于多个地点并通过数据通信网络互连的多个计算机上执行。本说明书所述处理和逻辑流程可通过执行一个或多个计算机程序的一个或多个可编程计算机进行,以通过操作输入数据并产生输出来进行功能。处理和逻辑流程也可通过专用逻辑电路——例如fpga或asic——进行,或者通过专用逻辑电路以及一个或多个编程计算机的组合进行。适合于执行计算机程序的计算机可以基于通用微处理器或专用微处理器或二者、或者任何其他类型的中央处理器。一般而言,中央处理器从只读存储器或随机访问存储器或二者接收指令和数据。计算机的核心元件是用于进行或执行指令的中央处理器以及用于存储指令和数据的一个或多个存储器装置。中央处理器和存储器可通过专用逻辑电路来补充,或者合并在专用逻辑电路中。一般而言,计算机还包括用于存储数据的一个或多个大型存储装置——例如磁盘、磁光盘、或光盘,或者可以操作性地连接为往来于大型存储装置接收或传送数据或二者兼有。但是,计算机不需要有这些装置。此外,可以在其他装置中嵌入计算机,例如在移动电话、个人数字助理(pda)、移动音频或视频播放器、游戏机、全球定位系统(gps)接收器、或便携存储装置——例如通用串行总线(usb)闪存驱动中,不一而足。适合于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储器装置,作为示例,包括半导体存储器装置——例如eprom、eeprom、以及闪存装置;磁盘——例如内部硬盘或移动硬盘;磁光盘;以及cd-rom和dvd-rom盘。为了提供与用户的交互,本说明书所述主题内容的实施例可以在具有显示装置以及键盘和点击装置的计算机上实施,显示装置例如是crt(阴极射线管)或lcd(液晶显示器)监视器,用于向用户显示信息,键盘和点击装置例如是鼠标或轨迹球,用户可以由其向计算机提供输入。也可以使用其他类型的装置来提供与用户的交互;例如,向用户提供的反馈可以是任何形式的传感器反馈,例如视觉反馈、听觉反馈、或触觉反馈;可以按照任何形式接收来自用户的输入,包括声音、语音、或触觉输入。此外,计算机可通过向用户使用的装置发送文档以及从用户使用的装置接收文档,与用户交互;例如,通过响应于从网络浏览器接收的请求,向用户装置上的网络浏览器发送网页。本说明书所述主题内容的实施例可以在这样的计算系统中实施:所述计算系统包括后端组件——例如作为数据服务器,或者所述计算系统包括中间组件——例如作为应用服务器,或者所述计算系统包括前端组件——例如客户端计算机,该客户端计算机具有图形用户交互界面、网络浏览器、或用户可以按照与本说明书所述主题内容的实施方式来交互的app,或者所述计算系统在包括这种后端组件、中间组件或前端组件的一个或多个的任意组合的计算系统中实施。系统组件可通过数字数据通信——例如通信网络——的任何形式或介质互连。通信网络的示例包括局域网(lan)和广域网(wan),例如互联网。计算系统可包括客户端和服务器。客户端和服务器通常相互远离,一般通过通信网络交互。客户端与服务器的关系由于在各个计算机上运行且相互具有客户端-服务器关系的计算机程序而出现。在一些实施例中,服务器向用户装置传输数据——例如html网页,例如为了向与充当客户端的装置交互的用户显示数据以及接收来自用户的用户输入。在用户装置产生的数据——例如用户交互的结果——可以在服务器从装置接收。虽然本说明书包含很多特定实施方式细节,但是它们不应视为对任何发明范围或者权利要求书所主张的范围的限制,而是对于特定发明的特定实施例所具体化的特征的描述。在单独实施例背景下本说明书所述的某些特征也可以在单个实施例中组合实施。相反,在单个实施例背景下所述的各种特征也可以单独地或者按照任何合适的子组合在多个实施例中实施。此外,虽然上面将特征描述为按照某些组合动作,甚至一开始也这样主张,但是有时候来自所主张的组合的一个或多个特征可以从组合中删除,并且所主张的组合可以指向子组合或者子组合的变型。类似地,虽然按照特定顺序在附图中示出操作,但是不应将其理解为要求按照所示的特定顺序或者按照连续顺序进行这些操作,或者要求进行所有所示的操作,以实现期望的结果。在某些情况下,多任务和并行处理可能是有利的。此外,上述实施例中各种系统模块和组件的分离不应当理解为在所有实施例中要求这种分离,而是应当理解为通常可将所述程序组件和系统一起集成在单个软件产品中或者封装在多个软件产品中。已经描述了主题内容的特定实施例。其他实施例均落入后附权利要求书的范围。例如,可以按照不同的顺序进行权利要求中引用的动作,仍然实现期望的结果。作为一个示例,附图中所示的处理不一定要求所示的特定顺序、或连续顺序来实现期望的结果。在一些情况下,多任务和并行处理可能是有利的。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1