相關(guān)申請的交叉參考根據(jù)35u.s.c.§119(e),本申請要求2015年9月11日提交的美國臨時專利申請no.62/217,409“disambiguatingjoinpathsfornaturallanguagequeries”的優(yōu)先權(quán),通過引用將其合并于此。本說明書涉及用于自然語言查詢的聯(lián)接路徑的消岐。
背景技術(shù):
::辨別進行自然語言查詢的行文語境可以改善查詢處理。例如,可將查詢“calculatethesalesofgoodsproducedinitaly”解釋為“calculatethesalesmadeinitalyofgoodsthathavebeenproduced”或者“calculatethesalesofgoodsthathavebeenproducedinitaly”。發(fā)布該查詢的語境將有助于理解預(yù)期的解釋。技術(shù)實現(xiàn)要素:一般而言,本說明書描述為了自然語言查詢將聯(lián)接路徑消岐的技術(shù)。一般而言,本說明書所述主題內(nèi)容的一個創(chuàng)造性方案可以在包括以下動作的方法中具體實施:獲得來自用戶的自然語言查詢;在將所述自然語言查詢轉(zhuǎn)換為要在知識庫的結(jié)構(gòu)化應(yīng)用編程接口(api)上進行的結(jié)構(gòu)化操作時:響應(yīng)于檢測與所述轉(zhuǎn)換相關(guān)聯(lián)的行文歧義,其中所述行文歧義標(biāo)識出自然語言查詢中包括的單詞的兩個以上解釋:通過基于已經(jīng)基于所述知識庫的數(shù)據(jù)模式生成的一個或多個聯(lián)接路徑從所述單詞的兩個以上解釋中選擇所述單詞的解釋,解決所述行文歧義;根據(jù)選擇的所述單詞的解釋修改所述自然語言查詢,以生成一個或多個結(jié)構(gòu)化操作;對于所述知識庫的所述結(jié)構(gòu)化api進行所述一個或多個結(jié)構(gòu)化操作;以及將與所述自然語言查詢結(jié)果匹配的搜索結(jié)果返回所述用戶。該方法的其他實施例包括對應(yīng)的計算機系統(tǒng)、設(shè)備、以及在一個或多個計算機存儲裝置上記錄的計算機程序,每個被配置為進行該方法的動作。對于要被配置為進行特定操作或動作的一個或多個計算機的系統(tǒng)而言,意味著系統(tǒng)在上面安裝了軟件、固件、硬件或它們的組合,工作時軟件、固件、硬件或它們的組合使得系統(tǒng)進行操作或動作。對于要被配置為進行特定操作或動作的一個或多個計算機程序而言,意味著一個或多個程序包括在通過數(shù)據(jù)處理設(shè)備執(zhí)行時,使得設(shè)備操作或動作的指令。上述及其他實施例可以分別選擇性地包括以下特征的一個或多個,單獨地或組合地。具體而言,一個實施例包括組合的所有以下特征。所述聯(lián)接路徑包括共享公共列的至少兩個表的標(biāo)識符。所述聯(lián)接路徑還包括所述公共列的一個或多個標(biāo)識符。通過基于已經(jīng)基于所述知識庫的數(shù)據(jù)模式生成的一個或多個聯(lián)接路徑從所述單詞的兩個以上解釋中選擇所述單詞的解釋,解決所述行文歧義包括:確定所述單詞與所述至少兩個表的第一表的第一列中指定的值匹配;以及基于所述確定,在參考所述至少兩個表的第二表的第二列中指定的值時識別所述單詞。將所述自然語言查詢轉(zhuǎn)換為要在知識庫的結(jié)構(gòu)化應(yīng)用編程接口(api)上進行的結(jié)構(gòu)化操作包括:獲得通過分析器生成的分析器輸出,所述輸出代表所述自然語言查詢;以及根據(jù)所述分析器輸出生成概念樹,其中子語境概念節(jié)點在所述概念樹上所位于的等級不比任何屬性節(jié)點更靠近所述概念樹的根部。獲得分析器輸出包括將所述自然語言查詢處理為標(biāo)志?;谒龈拍顦湟约斑x擇的所述單詞的解釋生成所述結(jié)構(gòu)化操作。本說明書所述主題內(nèi)容可以在特定實施例中實施,從而實現(xiàn)以下優(yōu)點的一個或多個??梢詼p少解決自然語言歧義所需的計算工作量??梢曰陬A(yù)設(shè)語境自動解決自然語言查詢中出現(xiàn)的歧義,因此不需要用戶介入。此外,對于用戶提供的自然語言查詢中檢測的行文歧義,可以在它們出現(xiàn)時就被解決,這消除了基于每個替代性解釋而產(chǎn)生搜索結(jié)果的需要。本說明書所述主題內(nèi)容的一個或多個實施例的細節(jié)在附圖以及以下描述中給出。根據(jù)說明書、附圖、以及權(quán)利要求書,主題內(nèi)容的其他特征、方案、以及優(yōu)點將變得顯而易見。附圖說明圖1是示出示例性數(shù)據(jù)表以及數(shù)據(jù)表之間的潛在聯(lián)接的簡圖。圖2是示出示例性子語境詞匯的簡圖。圖3是示出示例性超圖的簡圖。圖4是示出圖3所示超圖的示例性表現(xiàn)的簡圖。圖5是示出示例性概念樹的簡圖。圖6是示出用于自然語言查詢的聯(lián)接路徑的消岐的示例性系統(tǒng)的簡圖。圖7至圖8是示出示例性圖式詞匯的簡圖。圖9是示出處理聯(lián)接路徑的示例的流程圖。不同的附圖中相同的附圖標(biāo)記和指定表示相同的元件。具體實施方式自然語言查詢處理系統(tǒng)可以基于自然語言查詢,利用自然語言處理(nlp)技術(shù)來產(chǎn)生能夠在基礎(chǔ)數(shù)據(jù)源上操作的結(jié)構(gòu)化查詢,并執(zhí)行結(jié)構(gòu)化查詢來獲得查詢結(jié)果。為此,例如需要通過領(lǐng)域?qū)<襾碇付ā诒菊f明書中被稱為圖式詞匯的——以下信息集合的一個或多個:根據(jù)自然語言查詢產(chǎn)生的基礎(chǔ)數(shù)據(jù)源的數(shù)據(jù)模式——例如列名與標(biāo)志——例如單詞或短語之間的映射;數(shù)據(jù)表之間的聯(lián)接映射,例如表a中哪個列與表b中的“country”列聯(lián)接;可識別的域值;例如,應(yīng)當(dāng)將單詞“italy”識別為國家;以及查詢過濾器與自然語言查詢中包括的單詞之間的映射;例如一個或多個國家過濾器所參考的映射,在“whatistherevenueing20countries”這樣的查詢中的短語“g20countries”?;谶@些圖式詞匯,在接收自然語言查詢之后,詢問處理系統(tǒng)可以識別查詢中的標(biāo)志,例如通過利用分析器來分析查詢,以及基于圖式詞匯將標(biāo)志映射到概念。分析器可以指定所識別的標(biāo)志之間的依賴關(guān)系,例如利用概念樹。因此,分析器輸出可包括將所識別的概念作為節(jié)點的概念樹。系統(tǒng)可以分析概念樹,以生成結(jié)構(gòu)化查詢——例如sql查詢,并對基礎(chǔ)數(shù)據(jù)源執(zhí)行這些結(jié)構(gòu)化查詢,以獲得搜索結(jié)果。歧義可能由于處理自然語言查詢而出現(xiàn)。例如,當(dāng)自然語言查詢中包括的單詞可以解釋為表示兩個不同的可識別圖式詞匯——例如表示不同表的不同列中包括的值——的時候,歧義可能出現(xiàn)。本說明書描述了當(dāng)歧義出現(xiàn)時用于檢測它們的技術(shù)。因此,可以在提交機構(gòu)化查詢以獲得搜索結(jié)果之前解決歧義。這樣可以改善性能,并縮短提供與用戶預(yù)期相對應(yīng)的結(jié)果所需的時間。例如,當(dāng)通過用戶將輸入查詢修正一次或多次,以響應(yīng)于基于有歧義的自然語言查詢生成的結(jié)果消除歧義的時候,不需要生成多個結(jié)構(gòu)化查詢。在一些實施方式中,可以基于本文所述的一個或多個算法來解決歧義,不需要用戶介入來簡化處理以及合理化用戶體驗。例如,在接收到“calculatethesalesofgoodsproducedinitaly”的查詢之后,自然語言系統(tǒng)可以生成以下三個標(biāo)志:“sales”、“italy”和“produced”。通過自然語言系統(tǒng)確定為匹配圖式詞匯的標(biāo)志被識別為概念。例如,系統(tǒng)可將“sales”識別為表示圖1所示表102的列“sales_usd”的概念;將概念“italy”識別為用于國家名的反向索引匹配;將概念“produced”識別為圖2所示子語境204中包括的n-gram;并且因此,系統(tǒng)將查詢識別為包括三個概念。但是系統(tǒng)可以確定,用于國家“italy”的概念是有歧義的,因為概念“italy”可以解釋為進行銷售所在的國家,也可以解釋為生產(chǎn)或制造商品所在的國家。因此系統(tǒng)可以要求附加語境來消岐。附加語境可以是根據(jù)與特定子語境中指定的值匹配的相同自然語言查詢產(chǎn)生的另一個概念。例如,因為概念“produced”與子語境204中包括的其中一個n-gram匹配,如圖2所示,所以系統(tǒng)可以依靠子語境204中包括的其他n-gram,例如“production_cost”n-gram以及“manufacture_country_code”n-gram,以解決與概念“italy”有關(guān)的歧義。例如,當(dāng)兩種解釋或者同樣有可能,或者同樣合理時,系統(tǒng)將依靠一個或多個子語境中指定的數(shù)據(jù)來選擇一個解釋,并基于所選擇的解釋來解決自然語言查詢。因此,系統(tǒng)會將概念“italy”解釋為生產(chǎn)或制造商品所在的國家,因為概念“produced”具有子語境204而非子語境202中的n-gram匹配?;跀?shù)據(jù)模式和聯(lián)接映射的超圖生成基于其可以進行消岐的子語境是基于超圖來產(chǎn)生,超圖表示其中數(shù)據(jù)表相互之間可具有多個聯(lián)接映射的數(shù)據(jù)庫圖式。在一些實施方式中,作為圖式詞匯的一部分,子語境通過領(lǐng)域?qū)<襾懋a(chǎn)生,以指定特定領(lǐng)域中數(shù)據(jù)的關(guān)系。超圖包括一組節(jié)點以及一組邊,節(jié)點表示數(shù)據(jù)庫中存儲的數(shù)據(jù)表的列,邊表示列所屬的表。如果兩個節(jié)點表示的列是可以聯(lián)接的,則通過邊將兩個節(jié)點連接;并且邊識別列所屬的表。表的聯(lián)接系屬是導(dǎo)致表從另一個表開始的一系列聯(lián)接。在兩個表之間可以有多個可能的聯(lián)接系屬。如果在a與b之間指定了聯(lián)接映射(a,x,b,y),那么可將從a開始到b的聯(lián)接系屬表示為“a::xb”。超邊包括:表名、聯(lián)接系屬、以及超節(jié)點的列表(通過參考或索引)。節(jié)點包括:表名、屬性名、以及{ajoinlineagewiththeattributename},又稱為屬性路徑。在圖1所示的示例性表中,factorytoconsumer表102中的sale_country_code列可以與geo表104中的country_code列聯(lián)接,并且因此,用超圖上的相同節(jié)點來表示這兩個列;如同factorytoconsumer表102中的manufacture_country_code列與geo表104中的country_code列。換言之,通過其節(jié)點集合在公共列上重疊的超邊來表示可通過一個或多個公共列聯(lián)接的表。但是當(dāng)兩個表可通過兩個以上公共列來聯(lián)接時,需要包括兩個以上公共列的表的若干實例來構(gòu)造超圖。例如,如圖1所示,geo表104可通過以下兩種方式與factorytoconsumer表102聯(lián)接:通過manufacture_country_code外鍵以及通過sale_country_code外鍵。因此,描述factorytoconsumer表102以及geo表104的超圖300包括geo表104的兩個實例,如圖3所示。因為在超圖300中有g(shù)eo表104的兩個實例,所以自然語言處理系統(tǒng)在處理自然語言查詢時需要將它們相互區(qū)分。本說明書所述消岐技術(shù)使用來自源表的聯(lián)接路徑?;蛘?,可通過參照表名來進行消岐。在任何聯(lián)接映射中源表是并非基本表的表。換言之,源表通過其外鍵的一個或多個與另一個表聯(lián)接,但不是其主鍵。在以上示例中,當(dāng)在manufacture_country_code列和sale_country_code列以及country_code列上將表聯(lián)接時,factorytocustomer表是源表,而geo表不是源表,manufacture_country_code列和sale_country_code列都不是factorytoconsumer表的主鍵,country_code列是geo表的主鍵。聯(lián)接路徑是線性結(jié)構(gòu),例如描述通過以下foreign_key-primary_key聯(lián)接映射怎樣從源表到達給定表的字符串或列表,例如按照[<table_name>::<foreign_key>]*<table_name>的形式?!?”表示[<table_name>::<foreign_key>]可以重復(fù)一次以上。用于圖3所示兩個geo表的聯(lián)接路徑是:“factorytoconsumer::sale_country_codegeo”;以及“factorytoconsumer::manufacture_country_codegeo”。聯(lián)接路徑也可用于描述超圖的節(jié)點,例如跨越兩個表的公共列或可聯(lián)接列。例如,用于“factorytoconsumer::sale_country_codegeo”邊的聯(lián)接路徑如下:“factorytoconsumer::sale_country_codegeo::country_code”;“factorytoconsumer::sale_country_codegeo::country_name”;以及“factorytoconsumer::sale_country_codegeo::country_region”。用于生成聯(lián)接路徑的示例性算法如下:1.current_tables={setof(table,joinlineage)pairsfortablesthatdonotappearastheparenttableforanyjoinmappings}。用于這些表的“joinlineage”與表匹配。ex:[(buyerseller,“buyerseller”)]2.在current_tables非空時:a.從current_tables中將(t,t.join_lineage)出列。b.產(chǎn)生用于該表“instance”的超邊并將其添加到超圖。hyperedge(t,t.join_lineage,hypernodes={})c.對于表t,找到不出現(xiàn)的所有列作為任何聯(lián)接映射中的主鍵。對于每個列t.c,產(chǎn)生超節(jié)點并將其添加到超圖。注意,我們是首次看到這些屬性并且這是為什么我們產(chǎn)生用于它們的節(jié)點。此外,將超節(jié)點添加到超節(jié)點的列表,用于在以上步驟中產(chǎn)生的超邊。d.對于表t,找到出現(xiàn)的所有列作為任何聯(lián)接映射中的主鍵。當(dāng)我們在聯(lián)接系屬中處理先前的表時,我們已經(jīng)基本上產(chǎn)生用于這些的超節(jié)點。我們只是將這些現(xiàn)有超節(jié)點的參考添加到用于以上步驟中產(chǎn)生的超邊的超節(jié)點的列表。e.對于所有聯(lián)接映射(ft,fk,pt,pk),其中向當(dāng)前表中enqueue(pt,append(t.join_lineage,“::fkpt”)。以上示例性算法將終止,除非存在循環(huán)聯(lián)接關(guān)系。通過檢查表是否已經(jīng)在聯(lián)接路徑中出現(xiàn),可以容易地檢測循環(huán)聯(lián)接關(guān)系。在構(gòu)造聯(lián)接路徑時也允許預(yù)定數(shù)量的循環(huán),不會導(dǎo)致算法暫停。下面是以上示例性算法的輸出,將圖7至-圖8所示的圖示詞匯用作輸入。1.current_tables={(buyerseller,“buyerseller”)},hyperedges={},hypernodes={}2.在處理(buyerseller,“buyerseller”)之后:a.新的超邊:i.e1(buyerseller,“buyerseller”,{n1,n2,n3,n4,n5})b.新的超節(jié)點: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而較早產(chǎn)生的,buyerseller是聯(lián)接鍵)b.新的超節(jié)點: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”)自然語言查詢處理系統(tǒng)可以根據(jù)圖1所示數(shù)據(jù)模式100生成圖4所示超圖400。子語境的分析子語境概念變換一旦生成超圖,自然語言查詢處理系統(tǒng)就可以分析與特定領(lǐng)域相關(guān)聯(lián)的領(lǐng)域詞匯中指定的子語境,并通過子語境傳播聯(lián)接路徑。處理自然語言查詢的其中一個挑戰(zhàn)來自于自然語言的靈活性,因為可以按照多種不同的行文方式來表達相同的含義。這樣會將依賴關(guān)系分析復(fù)雜化。例如,自然語言處理系統(tǒng)可以根據(jù)自然語言查詢中包括的短語或單詞生成相同的概念,但是這些概念之間的依賴關(guān)系可以不同,取決于分析器怎樣分析自然語言查詢。此外,因為自然語言查詢處理系統(tǒng)可以依靠外部分析器提供的分析輸出——例如概念樹,并且不能控制外部分析器的操作,所以為了傳播聯(lián)接路徑,系統(tǒng)需要將它接收的分析器輸出變換為可通過系統(tǒng)處理的形式。為此,自然語言查詢處理系統(tǒng)可以利用啟發(fā)法或變換規(guī)則來變換概念樹,從而產(chǎn)生其結(jié)構(gòu)可通過系統(tǒng)處理的概念樹,以生成聯(lián)接路徑。例如,以下自然語言查詢承載相同的含義:1.計算買方個人地址在nevada(內(nèi)華達)的銷售額;2.計算買方在nevada有他的個人地址的銷售額;以及3.對于在nevada有他們的個人地址的買方而言總銷售額是多少。圖5是示出示例性概念樹502、504和506的簡圖500。具體而言,分析器可以根據(jù)具有不同結(jié)構(gòu)的上述三個自然語言查詢來產(chǎn)生三個概念樹502、504和506。作為處理這些概念樹的一部分,系統(tǒng)例如可以基于字符串匹配來比較具有領(lǐng)域詞匯中指令的值的節(jié)點,并將“buyer”節(jié)點514和“personaladdress”節(jié)點516識別為子語境節(jié)點;將“nevada”節(jié)點518識別為反向索引匹配概念;以及將“sale”節(jié)點512識別為數(shù)據(jù)庫屬性節(jié)點,數(shù)據(jù)庫屬性節(jié)點需要來自兩個以上表的數(shù)據(jù)的集結(jié)。如上所述,可將自然語言查詢處理系統(tǒng)限制為基于具有特定格式的概念樹來處理聯(lián)接路徑。例如,自然語言查詢處理系統(tǒng)可能只能處理子語境節(jié)點位于父系等級或者位于從根部到概念節(jié)點的“ancestry”(譜系)路徑上的概念樹,以使得可以正確地建立從該概念到這些節(jié)點的依賴性。例如,考慮概念樹502。系統(tǒng)需要確定nevada節(jié)點對應(yīng)什么。系統(tǒng)可通過查看它譜系中的子語境節(jié)點來實現(xiàn)這一點。但是,“personaladdress”節(jié)點516(是子語境節(jié)點)并非位于從根部到“nevada”節(jié)點的路徑上,并且會阻止系統(tǒng)正確地建立“nevada是買方個人地址的地址所在的州”。對于504中的概念樹而言存在類似的問題,但此時系統(tǒng)不一定能夠在處理“nevada”節(jié)點516時涉及“buyer”子語境節(jié)點514。自然語言查詢處理系統(tǒng)可將概念樹的原始結(jié)構(gòu)變換為可通過系統(tǒng)處理的不同結(jié)構(gòu)。例如,自然語言查詢處理系統(tǒng)可通過在概念樹504中將“buyer”節(jié)點514移動為更靠近根部一個等級,將概念樹504變換為概念樹508,這使得“buyer”節(jié)點514成為“personaladdress”節(jié)點516的父系節(jié)點。在經(jīng)過變換的概念樹508中,子語境節(jié)點514位于從節(jié)點518到根部的路徑上,并且系統(tǒng)現(xiàn)在可將514用于處理518。一個示例性變換算法如下:對于基于寬度優(yōu)先遍歷的概念樹中的每個概念:1.如果概念并非子語境概念,則跳過。2.如果概念是子語境概念:a.如果子語境節(jié)點沒有任何子節(jié)點,或者如果在概念樹中它僅有的后代都是子語境節(jié)點:i.將子語境節(jié)點上移,成為它父系的父系。一旦上移子語境節(jié)點的變換發(fā)生,系統(tǒng)就生成這些子語境所表示的可能聯(lián)接系屬。生成聯(lián)接系屬包括利用另一個變換,另一個變換導(dǎo)致子語境概念節(jié)點通過一個或多個可能的聯(lián)接系屬擴增。如果非子語境節(jié)點將子語境概念節(jié)點作為它的父系,則系統(tǒng)可以核實,是否存在對于節(jié)點中參考的屬性而言合理的單個聯(lián)接系屬。如果有多個合理的聯(lián)接系屬,則系統(tǒng)可以確定畸形的查詢。生成可能的聯(lián)接系屬的示例性變換示出如下:對于基于寬度優(yōu)先遍歷的概念樹中的每個概念(c):1.如果概念并非子語境概念,或者并非數(shù)據(jù)庫屬性概念,則跳過。2.如果概念c是數(shù)據(jù)庫屬性概念(對數(shù)據(jù)庫屬性的直接參考),則進行以下步驟(讓我們假定屬性是表“t”的“a”)a.如果屬性沒有與其相關(guān)聯(lián)的子語境,則跳過。b.對于(表t的)每個子語境s,屬性是:i.如果s不具有任何外鍵屬性,則跳過ii.對于子語境s(存在聯(lián)接映射(t,fk,pt,pk))中的每個外鍵屬性(fk):1.將聯(lián)接系屬“t::fkpt”添加到c.join_lineagesc.注意,數(shù)據(jù)庫屬性只能添加聯(lián)接系屬的第一鏈接。3.如果概念c是子語境概念:a.joinsforsubcontext={}。c的子語境是s。與該子語境相關(guān)的表是tb.對于概念的子語境(存在聯(lián)接映射(t,fk,pt,pk))中的每個外鍵屬性(fk),將聯(lián)接映射添加到j(luò)oinsforsubcontext。c.如果joinsforsubcontext為空,則我們沒有什么可做。該子語境中沒有任何外鍵。d.檢查概念c(pc)的父系是否為子語境節(jié)點。i.對于joinsforsubcontext中的每個聯(lián)接映射,如果pc并非子語境,或者如果它沒有存儲任何join_lineages(t,fk,pt,pk):1.將聯(lián)接系屬“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中的每個聯(lián)接映射(t,fk,pt,pk):a.如果tn==t,我們通過“tn::fkpt”在末端延伸j,并將其添加到c.join_lineages。b.如果t1==pt,我們通過“t::fk”在首端延伸j,并將其添加到c.join_lineages。3.對于joinsforsubcontext中的每個聯(lián)接映射(t,fk,pt,pk):a.將聯(lián)接系屬“t::fkpt”添加到c.join_lineages。例如,在處理圖5所示的概念樹506時,自然語言查詢處理系統(tǒng)——例如按照根到葉的方式——找到樹506中的第一屬性語境節(jié)點,隨后“sale”節(jié)點512成為“buyer”節(jié)點514?!癰uyer”節(jié)點514被指定用于buyerseller表并且與屬性“buyer_id”相關(guān)聯(lián),屬性“buyer_id”是個人表的外鍵?;谠撟诱Z境,系統(tǒng)確定“buyerseller::buyer_idperson”是聯(lián)接路徑,并將該聯(lián)接路徑存儲在“buyer”節(jié)點514中。如果基于用于“buyer”節(jié)點514的該子語境可以確定一個以上聯(lián)接路徑,例如,當(dāng)“buyer”節(jié)點514與其他表的外鍵相關(guān)聯(lián)時,系統(tǒng)也可將這些聯(lián)接路徑存儲在“buyer”節(jié)點514中。在處理用于“buyer”節(jié)點514的聯(lián)接路徑之后,系統(tǒng)可以處理用于“personaladdress”節(jié)點516的聯(lián)接路徑。因為“personaladdress”節(jié)點516被指定用于個人表并且與作為是地址表的外鍵的列“personal_address_id”相關(guān)聯(lián),所以系統(tǒng)可以確定是否已經(jīng)構(gòu)造這種聯(lián)接路徑,例如“person::personal_address_idaddress”,并存儲在“buyer”節(jié)點514中。如果存在現(xiàn)有聯(lián)接路徑,則系統(tǒng)可以延伸現(xiàn)有聯(lián)接路徑,如果在現(xiàn)有聯(lián)接路徑中最后指定的表與新聯(lián)接路徑中指定的子語境表匹配的話。在該示例中,因為在聯(lián)接路徑“buyerseller::buyer_idperson”中最后指定的表是個人表(persontable),它與新聯(lián)接路徑“person::personal_address_idaddress”中的子語境表個人匹配,所以可將現(xiàn)有聯(lián)接路徑延伸為“buyerseller::buyer_idperson::personal_address_idaddress”。當(dāng)可以類似地延伸一個以上現(xiàn)有路徑時,系統(tǒng)也可以延伸這些聯(lián)接路徑。處理聯(lián)接路徑并延伸現(xiàn)有聯(lián)接路徑的以上示例在圖9中示出。用于超圖創(chuàng)建的算法基于圖式詞匯和聯(lián)接映射經(jīng)歷所有表以及它們的屬性。對于具有大量屬性的表而言,可以具有非常廣泛的詞匯覆蓋率。但是,給定的查詢一般只參考這些詞匯的小子集。系統(tǒng)可以對表和屬性進行大量修剪,以保證按照它捕捉所有表、屬性、以及與原始自然查詢相關(guān)的聯(lián)接映射的方式,將生成的超圖修剪成完整的形狀和形式。修剪可以提供將超圖顯著簡化的優(yōu)化效果。修剪的預(yù)備步驟包括在概念樹中找到所有參考表和屬性??赏ㄟ^進行以下操作來完成這個工作。所得的輸出是一組參考表以及一組參考表屬性。1.對于概念樹中的每個概念(遍歷的順序沒有影響)a.在概念(如果有的話)中找到參考表并將參考表插入一組參考表。b.在概念(如果有的話)中找到參考屬性并將參考屬性插入一組參考表屬性。示例性修剪算法示出如下:a.修剪聯(lián)接樹(jointree)的葉節(jié)點。a.boolpruned_node=trueb.當(dāng)pruned_node:i.pruned_node=falseii.如果存在葉節(jié)點n,其中n.table不在(通過以上算法計算的)參考表的組中:1.從樹去除到n的所有進入邊。這是一個葉節(jié)點,所以沒有外出邊。2.從樹去除節(jié)點n;以及3.pruned_node=true。(注意,算法可以重復(fù),直到它找到未參考的葉節(jié)點;以及修剪葉節(jié)點會生成新的葉節(jié)點作為結(jié)果)。b.修剪樹的根節(jié)點。a.當(dāng)root.table不在參考表的組中并且root只有一個外出邊時:i.令n成為root用它唯一的邊所連接的節(jié)點。ii.去除root的外出邊以及節(jié)點root。iii.令n成為新的root。將超圖節(jié)點與屬性參考匹配基于概念樹,自然語言查詢處理系統(tǒng)可以構(gòu)造新的聯(lián)接路徑或延伸現(xiàn)有的聯(lián)接路徑。系統(tǒng)可以基于與外表的屬性相對應(yīng)的概念,構(gòu)造新的聯(lián)接路徑或延伸現(xiàn)有的聯(lián)接路徑。在末端,對于正確形成的查詢,系統(tǒng)將每個屬性概念與單個聯(lián)接路徑匹配,這使得能夠通過明確的方式將此屬性參考轉(zhuǎn)化為sql。下面給出用于此的一個示例性處理:1.產(chǎn)生將屬性路徑映射到超節(jié)點的地圖。注意,對于每個超節(jié)點而言屬性路徑是唯一的。讓我們稱之為nodemap。2.為了方便起見,產(chǎn)生另一個地圖,其具有超邊總數(shù)對應(yīng)于特定表的計數(shù)。記住,因為可能有導(dǎo)致該表的多個不同聯(lián)接路徑,所以可能有為了一個表而產(chǎn)生的多個超邊。讓我們稱該地圖為hyperedgecount。3.對于基于寬度優(yōu)先遍歷的概念樹中的每個概念(c):a.找到在此概念c中參考的屬性。(如果參考了一個以上屬性,那么我們對每個屬性重復(fù)以下步驟)。假定這是t.x(表t的屬性x)。b.如果(hyperedgecount[t]==1),那么這意味著對于屬性參考沒有歧義。我們找到hyperedge(h)并將用于概念(c)中的屬性參考的完整屬性路徑設(shè)置為h.join_lineage+“x”。此外,存在與此屬性參考匹配的單個超節(jié)點。c.如果(hyperedgecount[t]>1),則我們需要找到哪一個是相關(guān)的。我們前往概念c的父系節(jié)點。讓我們稱父系節(jié)點為pc。i.如果pc.join_lineages為空,那么我們將不能唯一地識別完整的屬性路徑。這意味著查詢是畸形的,生成錯誤消息并將其提供給用戶。ii.如果pc.join_lineages非空,那么我們嘗試找到與用于屬性參考的超節(jié)點的唯一匹配。1.hypernode_matches={}2.對于以t結(jié)束的pc.join_lineages中的每個join_lineage(當(dāng)我們嘗試檢查用于t.x的可能屬性路徑時,我們忽略其他)a.生成用于t.x的的attribute_path作為(join_lineage+“x”)。在nodemap中查找該屬性,以檢查它是否實際上對應(yīng)于超節(jié)點。如果是,則將該節(jié)點添加到hypernode_matches。3.如果hypernode_matches仍然為空,那么這意味著我們將不能唯一地識別完整的屬性路徑。這意味著查詢是畸形的,生成錯誤消息并將其提供給用戶。4.如果hypernode_matches有一個以上元素,那么這意味著系統(tǒng)不能唯一地識別完整的屬性路徑。這意味著查詢是畸形的,生成錯誤消息并將其提供給用戶。5.如果hypernode_matches有單個元素,則我們唯一地找到了我們的匹配超節(jié)點。返回上述“對于在nevada有他們的個人地址的買方而言總銷售額是多少?”的示例性查詢,在應(yīng)用所有概念樹變換之后,其導(dǎo)致圖5所示概念樹的元素508。節(jié)點512對應(yīng)于buyerseller表的明確的“sale”屬性。節(jié)點514和節(jié)點516是通過聯(lián)接系屬擴增的子語境概念節(jié)點。節(jié)點518是用于地址表中的state列的反向索引匹配。這里,有地址表的多個實例,例如買方個人地址、賣方個人地址、買方公司地址及賣方公司地址,且節(jié)點518可將狀態(tài)屬性與這些表實例的其中任何一個匹配。系統(tǒng)確定實際上參考這些地址表實例的哪一個。這是通過檢查父系節(jié)點(516)是否具有可以使用的聯(lián)接路徑來實現(xiàn)的。節(jié)點516具有聯(lián)接路徑“buyerseller::buyer_idperson::personal_address_idaddress”,這允許系統(tǒng)識別對于節(jié)點518而言與買方個人地址的狀態(tài)的唯一匹配,消除了與用于“nevada”的概念相關(guān)聯(lián)的歧義。所得的查詢是:selectsum(buyerseller.sales_usd)asalias0_sales_usdfrombuyersellerinnerjoinpersonon(buyerseller.buyer_id=person.person_id)innerjoinaddresson(person.personal_address_id=address.address_id)whereaddress.state=nevada.在一些實施方式中,為了自然語言查詢將聯(lián)接路徑消岐的方法包括以下步驟:1.首先,應(yīng)用子語境變換a.子語境葉節(jié)點上移變換(movingsubcontextleafnodesuptransform)b.子語境聯(lián)接系屬變換(subcontextjoinlineagetransform)2.找到所有參考表和屬性(findingallreferencedtablesandattributes)。3.生成用于表的聯(lián)接樹(generatingthejointreefortables)。4.修剪聯(lián)接樹(pruningthejointree)。5.僅對于聯(lián)接樹(jointree)中的剩余表以及該組中的表之間的聯(lián)接映射進行超圖創(chuàng)建(hypergraphcreation)。a.對于步驟(2.c),我們僅對于在查詢中參考的列生成節(jié)點6.將超圖節(jié)點與屬性參考匹配(matchinghypergraphnodestoattributereferences)。7.標(biāo)記匹配的超節(jié)點并運行超圖縮減(利用公知技術(shù)),以進一步修剪超圖。8.為每個超邊生成表別名,然后根據(jù)超圖生成聯(lián)接。圖6是示出為了自然語言查詢將聯(lián)接路徑消岐的示例性系統(tǒng)600的簡圖。系統(tǒng)100包括自然語言(nl)查詢處理系統(tǒng)620和知識庫630。在一些實施方式中,知識庫630是對其執(zhí)行自然語言查詢的數(shù)據(jù)源。nl查詢處理系統(tǒng)620包括:可選擇的詞法分析器和語法分析器622、消岐子系統(tǒng)624、以及查詢執(zhí)行子系統(tǒng)626;知識庫630包括知識獲取模塊632和實體數(shù)據(jù)庫634。系統(tǒng)600接收源自一個或多個用戶裝置610——例如智能電話610-b或膝上型電腦610-a——的自然語言查詢,并將自然語言查詢轉(zhuǎn)換為要在知識庫630的應(yīng)用編程接口(api)上進行的結(jié)構(gòu)化操作——例如編程語句。在獲得查詢結(jié)果之后,系統(tǒng)600將它們回送到一個或多個用戶裝置610。nl查詢處理系統(tǒng)620將從用戶裝置610接收的自然語言查詢——例如簡明英語查詢——處理為結(jié)構(gòu)化操作,例如sql查詢,在知識庫630的api上執(zhí)行這些操作,以產(chǎn)生查詢結(jié)果,并將查詢結(jié)果返回用戶裝置610??蛇x擇的詞法分析器和語法分析器622將自然語言查詢處理為標(biāo)志,進而處理為語法樹,在本說明書中語法樹又稱為概念樹。此外,詞法分析器和語法分析器622可將概念樹變換為具有不同結(jié)構(gòu)的另一個概念樹,例如改變概念樹的結(jié)構(gòu)。消岐子系統(tǒng)624基于概念樹的節(jié)點上存儲的聯(lián)接路徑將自然語言查詢消岐。查詢執(zhí)行子系統(tǒng)626基于消岐子系統(tǒng)624以及詞法分析器和語法分析器622的輸出生成結(jié)構(gòu)化查詢。此外,查詢執(zhí)行子系統(tǒng)626對于知識庫630的api執(zhí)行結(jié)構(gòu)化查詢,以產(chǎn)生查詢結(jié)果。知識庫630將結(jié)構(gòu)化api提供給用戶使用,以查詢和更新實體數(shù)據(jù)庫634。知識獲取子系統(tǒng)632從外源——例如互聯(lián)網(wǎng)——獲得附加實體信息,并且與實體數(shù)據(jù)庫634中的現(xiàn)有實體信息相關(guān)聯(lián)地、根據(jù)知識庫的數(shù)據(jù)模式存儲它。知識獲取子系統(tǒng)可以直接與外源通信,避開nl前端620。實體數(shù)據(jù)庫634存儲實體信息,例如關(guān)于實體的信息,例如人們的生日、公司的地址,以及多個組織之間的關(guān)系。實體信息根據(jù)數(shù)據(jù)模式存儲在實體數(shù)據(jù)庫634中。在一些實施方式中,實體數(shù)據(jù)庫634利用表結(jié)構(gòu)存儲實體信息。在其他實施方式中,實體數(shù)據(jù)庫634將實體信息存儲在圖結(jié)構(gòu)中。通常,利用實體數(shù)據(jù)庫的數(shù)據(jù)庫管理系統(tǒng)(dbms)支持的形式語言來表達數(shù)據(jù)模式。當(dāng)在實體數(shù)據(jù)庫中通過邏輯方式構(gòu)造實體信息時,數(shù)據(jù)模式指定實體信息的組織,例如,當(dāng)實體數(shù)據(jù)庫是關(guān)系數(shù)據(jù)庫時將實體信息劃分為數(shù)據(jù)庫表。數(shù)據(jù)模式可包括表示專用于應(yīng)用的完全性約束條件的數(shù)據(jù),例如,在表中應(yīng)用可以訪問哪些列,以及應(yīng)當(dāng)怎樣組織輸入?yún)?shù)來查詢某個表。在關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)模式例如可以限定表、字段、關(guān)系、視圖、索引、包、過程、函數(shù)、隊列、觸發(fā)器、類型、序列、物化視圖、同義詞、數(shù)據(jù)庫鏈接、目錄、xml圖式、以及其他元素。主題內(nèi)容的實施例以及本說明書中所述功能操作可以在數(shù)字電子電路中、在通過有形方式具體實施的計算機軟件或固件中、在計算機硬件中實施,包括本說明書中公開的結(jié)構(gòu)以及它們的結(jié)構(gòu)等同物,或者在它們的一個或多個的組合中實施。本說明書所述主題內(nèi)容的實施例可以被實施為一個或多個計算機程序,即,在有形的非瞬時存儲介質(zhì)上編碼的計算機程序指令的一個或多個模塊,用于通過數(shù)據(jù)處理設(shè)備執(zhí)行,或者控制數(shù)據(jù)處理設(shè)備的操作。計算機存儲介質(zhì)可以是機器可讀存儲裝置、機器可讀存儲襯底、隨機存儲器裝置或串行訪問存儲器裝置、或者它們的一個或多個的組合。替代性或附加性地,可以在人為生成的傳播信號——例如機器生成的電信號、光信號或電磁信號——上將程序指令編碼,傳播信號被生成為將信息編碼,用于傳輸?shù)竭m當(dāng)?shù)慕邮掌髟O(shè)備,以通過數(shù)據(jù)處理設(shè)備執(zhí)行。術(shù)語“數(shù)據(jù)處理設(shè)備”表示數(shù)據(jù)處理硬件并涵蓋用于處理數(shù)據(jù)的所有類型設(shè)備、裝置和機器,作為示例,包括可編程處理器、計算機、或多個處理器或計算機。此外,設(shè)備可以是專用邏輯電路,例如fpga(現(xiàn)場可編程門陣列)或asic(專用集成電路),或進一步包括專用邏輯電路。除了硬件之外,設(shè)備可以選擇性地包括為計算機程序創(chuàng)造執(zhí)行環(huán)境的代碼,例如構(gòu)成處理器固件、協(xié)議堆棧、數(shù)據(jù)庫管理系統(tǒng)、操作系統(tǒng)、或者它們的一個或多個的組合的代碼。計算機程序——又稱為或者被描述為程序、軟件、軟件應(yīng)用、app、模塊、軟件模塊、腳本或代碼——可以按照任何形式的編程語言編寫,包括編譯或解釋語言、說明性或程序性語言;并且可以按照任何形式部署,包括作為獨立程序或者作為模塊、組件、子例程、或適合于在計算環(huán)境中使用的其它單元。程序可以但是不必對應(yīng)于文件系統(tǒng)中的文件。程序可以存儲在保存其他程序或數(shù)據(jù)的一部分文件中——例如在標(biāo)記語言文檔中存儲的一個或多個腳本,存儲在專用于所考慮的程序的單個文件、或者存儲在多個協(xié)調(diào)文件中——例如存儲一個或多個模塊、子程序、或一部分代碼的文件。計算機程序可以部署為在一個計算機上執(zhí)行,也可以部署為在位于一個地點或者分布于多個地點并通過數(shù)據(jù)通信網(wǎng)絡(luò)互連的多個計算機上執(zhí)行。本說明書所述處理和邏輯流程可通過執(zhí)行一個或多個計算機程序的一個或多個可編程計算機進行,以通過操作輸入數(shù)據(jù)并產(chǎn)生輸出來進行功能。處理和邏輯流程也可通過專用邏輯電路——例如fpga或asic——進行,或者通過專用邏輯電路以及一個或多個編程計算機的組合進行。適合于執(zhí)行計算機程序的計算機可以基于通用微處理器或?qū)S梦⑻幚砥骰蚨?、或者任何其他類型的中央處理器。一般而言,中央處理器從只讀存儲器或隨機訪問存儲器或二者接收指令和數(shù)據(jù)。計算機的核心元件是用于進行或執(zhí)行指令的中央處理器以及用于存儲指令和數(shù)據(jù)的一個或多個存儲器裝置。中央處理器和存儲器可通過專用邏輯電路來補充,或者合并在專用邏輯電路中。一般而言,計算機還包括用于存儲數(shù)據(jù)的一個或多個大型存儲裝置——例如磁盤、磁光盤、或光盤,或者可以操作性地連接為往來于大型存儲裝置接收或傳送數(shù)據(jù)或二者兼有。但是,計算機不需要有這些裝置。此外,可以在其他裝置中嵌入計算機,例如在移動電話、個人數(shù)字助理(pda)、移動音頻或視頻播放器、游戲機、全球定位系統(tǒng)(gps)接收器、或便攜存儲裝置——例如通用串行總線(usb)閃存驅(qū)動中,不一而足。適合于存儲計算機程序指令和數(shù)據(jù)的計算機可讀介質(zhì)包括所有形式的非易失性存儲器、介質(zhì)和存儲器裝置,作為示例,包括半導(dǎo)體存儲器裝置——例如eprom、eeprom、以及閃存裝置;磁盤——例如內(nèi)部硬盤或移動硬盤;磁光盤;以及cd-rom和dvd-rom盤。為了提供與用戶的交互,本說明書所述主題內(nèi)容的實施例可以在具有顯示裝置以及鍵盤和點擊裝置的計算機上實施,顯示裝置例如是crt(陰極射線管)或lcd(液晶顯示器)監(jiān)視器,用于向用戶顯示信息,鍵盤和點擊裝置例如是鼠標(biāo)或軌跡球,用戶可以由其向計算機提供輸入。也可以使用其他類型的裝置來提供與用戶的交互;例如,向用戶提供的反饋可以是任何形式的傳感器反饋,例如視覺反饋、聽覺反饋、或觸覺反饋;可以按照任何形式接收來自用戶的輸入,包括聲音、語音、或觸覺輸入。此外,計算機可通過向用戶使用的裝置發(fā)送文檔以及從用戶使用的裝置接收文檔,與用戶交互;例如,通過響應(yīng)于從網(wǎng)絡(luò)瀏覽器接收的請求,向用戶裝置上的網(wǎng)絡(luò)瀏覽器發(fā)送網(wǎng)頁。本說明書所述主題內(nèi)容的實施例可以在這樣的計算系統(tǒng)中實施:所述計算系統(tǒng)包括后端組件——例如作為數(shù)據(jù)服務(wù)器,或者所述計算系統(tǒng)包括中間組件——例如作為應(yīng)用服務(wù)器,或者所述計算系統(tǒng)包括前端組件——例如客戶端計算機,該客戶端計算機具有圖形用戶交互界面、網(wǎng)絡(luò)瀏覽器、或用戶可以按照與本說明書所述主題內(nèi)容的實施方式來交互的app,或者所述計算系統(tǒng)在包括這種后端組件、中間組件或前端組件的一個或多個的任意組合的計算系統(tǒng)中實施。系統(tǒng)組件可通過數(shù)字數(shù)據(jù)通信——例如通信網(wǎng)絡(luò)——的任何形式或介質(zhì)互連。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(lan)和廣域網(wǎng)(wan),例如互聯(lián)網(wǎng)。計算系統(tǒng)可包括客戶端和服務(wù)器??蛻舳撕头?wù)器通常相互遠離,一般通過通信網(wǎng)絡(luò)交互??蛻舳伺c服務(wù)器的關(guān)系由于在各個計算機上運行且相互具有客戶端-服務(wù)器關(guān)系的計算機程序而出現(xiàn)。在一些實施例中,服務(wù)器向用戶裝置傳輸數(shù)據(jù)——例如html網(wǎng)頁,例如為了向與充當(dāng)客戶端的裝置交互的用戶顯示數(shù)據(jù)以及接收來自用戶的用戶輸入。在用戶裝置產(chǎn)生的數(shù)據(jù)——例如用戶交互的結(jié)果——可以在服務(wù)器從裝置接收。雖然本說明書包含很多特定實施方式細節(jié),但是它們不應(yīng)視為對任何發(fā)明范圍或者權(quán)利要求書所主張的范圍的限制,而是對于特定發(fā)明的特定實施例所具體化的特征的描述。在單獨實施例背景下本說明書所述的某些特征也可以在單個實施例中組合實施。相反,在單個實施例背景下所述的各種特征也可以單獨地或者按照任何合適的子組合在多個實施例中實施。此外,雖然上面將特征描述為按照某些組合動作,甚至一開始也這樣主張,但是有時候來自所主張的組合的一個或多個特征可以從組合中刪除,并且所主張的組合可以指向子組合或者子組合的變型。類似地,雖然按照特定順序在附圖中示出操作,但是不應(yīng)將其理解為要求按照所示的特定順序或者按照連續(xù)順序進行這些操作,或者要求進行所有所示的操作,以實現(xiàn)期望的結(jié)果。在某些情況下,多任務(wù)和并行處理可能是有利的。此外,上述實施例中各種系統(tǒng)模塊和組件的分離不應(yīng)當(dāng)理解為在所有實施例中要求這種分離,而是應(yīng)當(dāng)理解為通??蓪⑺龀绦蚪M件和系統(tǒng)一起集成在單個軟件產(chǎn)品中或者封裝在多個軟件產(chǎn)品中。已經(jīng)描述了主題內(nèi)容的特定實施例。其他實施例均落入后附權(quán)利要求書的范圍。例如,可以按照不同的順序進行權(quán)利要求中引用的動作,仍然實現(xiàn)期望的結(jié)果。作為一個示例,附圖中所示的處理不一定要求所示的特定順序、或連續(xù)順序來實現(xiàn)期望的結(jié)果。在一些情況下,多任務(wù)和并行處理可能是有利的。當(dāng)前第1頁12當(dāng)前第1頁12