王秋月,程路易,徐 波,王志軍
(東華大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,上海 201620)
關(guān)系型數(shù)據(jù)庫(kù)是信息系統(tǒng)的基礎(chǔ)和核心。用戶可以用SQL查詢來(lái)檢索數(shù)據(jù)庫(kù)中的數(shù)據(jù),但這通常對(duì)用戶的SQL掌握水平有一定要求。而通過(guò)自然語(yǔ)言直接與數(shù)據(jù)庫(kù)交互可以幫助非技術(shù)用戶獲取到關(guān)系型數(shù)據(jù)庫(kù)中的信息,提高用戶的使用效率和體驗(yàn)。因此,本文研究的任務(wù)是將自然語(yǔ)言問(wèn)句轉(zhuǎn)化為SQL查詢(NL2SQL)。目前解決此任務(wù)的主流方法是基于草圖的模型,其考慮了SQL的句法模式,通過(guò)SQL語(yǔ)句中的關(guān)鍵詞如“SELECT”、“FROM”、“WHERE”等將原任務(wù)拆解為多個(gè)子任務(wù)。草圖框架具體實(shí)例如圖1所示,以問(wèn)句“How many number does Fordham school have?”為例,其對(duì)應(yīng)的表包含列名Player(選手)、No.(編號(hào))、Position(位置)、School/Club Team(學(xué)校/俱樂(lè)部球隊(duì))等。按照草圖框架,需要完成6個(gè)子任務(wù)的預(yù)測(cè),根據(jù)模板進(jìn)行槽填充構(gòu)建完整的SQL語(yǔ)句。第一,需要預(yù)測(cè)SELECT從句中出現(xiàn)的列(SELECT-COLUMN子任務(wù)),此例中預(yù)測(cè)結(jié)果“No.”;第二,需要預(yù)測(cè)SELECT從句中出現(xiàn)的列對(duì)應(yīng)的聚合操作(SELECT-AGGREGATION子任務(wù)),此例中預(yù)測(cè)結(jié)果為“COUNT”;第三,需要預(yù)測(cè)WHERE從句中條件的數(shù)量(WHERE-NUMBER子任務(wù)),此例中預(yù)測(cè)結(jié)果為1個(gè);第四,需要預(yù)測(cè)WHERE從句中出現(xiàn)的列(WHERE-COLUMN子任務(wù)),此例中預(yù)測(cè)結(jié)果為“School/Club Team”;第五,需要預(yù)測(cè)WHERE從句中條件列對(duì)應(yīng)的操作(WHERE-OPERATOR子任務(wù)),此例中預(yù)測(cè)結(jié)果為“=”;第六,需要預(yù)測(cè)WHERE從句中條件列對(duì)應(yīng)的條件值(WHEREVALUE子任務(wù)),此例中預(yù)測(cè)結(jié)果為“Fordham”。
圖1 基于草圖的方法Fig.1 Sketch-based approach
雖然目前NL2SQL任務(wù)上提出的方法達(dá)到了比較好的效果,但仍然不足,這些方法都是對(duì)問(wèn)句進(jìn)行直接編碼,缺乏語(yǔ)義信息,不能充分地理解問(wèn)句。
針對(duì)自然語(yǔ)言問(wèn)句存在語(yǔ)義缺失的問(wèn)題,本文考慮利用外部知識(shí)圖譜來(lái)對(duì)自然語(yǔ)言問(wèn)句進(jìn)行語(yǔ)義增強(qiáng),使其包括充分的語(yǔ)義信息?;谥R(shí)增強(qiáng)的NL2SQL方法主要面臨3個(gè)挑戰(zhàn):
(1)對(duì)問(wèn)句的哪些部分進(jìn)行增強(qiáng);
(2)用外部知識(shí)圖譜中的哪類知識(shí)進(jìn)行增強(qiáng);
(3)如何進(jìn)行增強(qiáng)。
針對(duì)第一個(gè)挑戰(zhàn),本文提出對(duì)問(wèn)句中出現(xiàn)的命名實(shí)體進(jìn)行增強(qiáng),并使用現(xiàn)有的實(shí)體鏈接技術(shù),將問(wèn)句中的命名實(shí)體鏈接到外部知識(shí)圖譜中;針對(duì)第二個(gè)挑戰(zhàn),本文將知識(shí)圖譜中的知識(shí)類別分為摘要(Abstract)、類型(Type)、標(biāo)簽(Category)、語(yǔ)義關(guān)系(Infobox)4種,并系統(tǒng)調(diào)研了各種類型知識(shí)的增強(qiáng)效果;針對(duì)第三個(gè)挑戰(zhàn),本文分別提出了一種基于符號(hào)化知識(shí)的增強(qiáng)方法和兩種基于向量化知識(shí)的增強(qiáng)方法。在公開的大規(guī)模的NL2SQL數(shù)據(jù)集WiKiSQL上進(jìn)行實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果證明了本文提出的增強(qiáng)方法的有效性。
NL2SQL的方法主要分為兩大類。
第一類是基于Seq2seq模型,采用“編碼器-解碼器”將此任務(wù)轉(zhuǎn)化為從文本到SQL的翻譯任務(wù),代表方法是Seq2SQL,將SQL語(yǔ)句劃分為SELECT從句和WHERE從句兩部分,并分開獨(dú)立生成,這類方法存在兩種缺陷:第一種是WHERE從句中可能包含多個(gè)條件三元組,多個(gè)條件三元組之間的順序并不影響最終的執(zhí)行結(jié)果,但會(huì)極大地影響以之前的標(biāo)記預(yù)測(cè)下一個(gè)標(biāo)記的方式進(jìn)行預(yù)測(cè)的Seq2seq模型的性能,Seq2SQL使用強(qiáng)化學(xué)習(xí)來(lái)消除順序問(wèn)題,但準(zhǔn)確率依然不高;第二種缺陷是Seq2seq模型沒(méi)有充分利用SQL句法結(jié)構(gòu)來(lái)限制輸出空間,模型復(fù)雜且準(zhǔn)確率不高。
第二類方法是基于草圖的方法。文獻(xiàn)[1]基于此想法提出了SQLNet模型,根據(jù)SQL語(yǔ)句的句法結(jié)構(gòu)將SQL查詢分解為6個(gè)子任務(wù)。預(yù)定義草圖包含各個(gè)子任務(wù)的依賴關(guān)系,每個(gè)子任務(wù)的預(yù)測(cè)只基于其所依賴的部分。與Seq2SQL不同,SQLNet采用了順序到集合的方法和基于列字段的注意力機(jī)制,消除了順序問(wèn)題,提高了準(zhǔn)確率。在此基礎(chǔ)上,文獻(xiàn)[2]提出執(zhí)行指導(dǎo)編碼(Execution-Guided Decoding),可以理解為一種后驗(yàn)操作,假設(shè)生成的SQL查詢可以執(zhí)行,通過(guò)執(zhí)行結(jié)果來(lái)排除錯(cuò)誤的候選SQL查詢。隨著動(dòng)態(tài)表示學(xué)習(xí)的發(fā)展,更多的方法選擇預(yù)訓(xùn)練語(yǔ)言模型作為編碼器。文獻(xiàn)[3]提出的SQLova使用表感知的BERT作為編碼器,在編碼后提出了3種不同的解碼器變體,其中一種變體類似SQLNet,3種解碼器之間的精度差也論證了預(yù)訓(xùn)練語(yǔ)言模型的有效性;文獻(xiàn)[4]提出X-SQL,使用MT-DNN作為編碼器,將全局上下文信息融合到表模式中,為下游任務(wù)提供更好的表達(dá),顯著地提高了性能。不同于連接問(wèn)句和表中所有列名作為輸入的SQLova和X-SQL,文獻(xiàn)[5]提出的HydraNet將問(wèn)句和表中的各個(gè)列名單獨(dú)拼接送入編碼器,不需要額外的池化操作或長(zhǎng)短期記憶網(wǎng)絡(luò)來(lái)獲得一個(gè)列的向量表示,可以更好地獲得列的表示。
基于知識(shí)增強(qiáng)的NL2SQL任務(wù)定義:給定一個(gè)數(shù)據(jù)庫(kù),還有一個(gè)外部知識(shí)圖譜,包括實(shí)體的各類知識(shí),如:摘要、類型、標(biāo)簽和語(yǔ)義關(guān)系等,如圖2所示。其中,摘要是對(duì)實(shí)體的描述,類型說(shuō)明了實(shí)體的所屬類型,標(biāo)簽簡(jiǎn)要介紹了實(shí)體的特征,而語(yǔ)義關(guān)系包含了實(shí)體的屬性及屬性值。在不使用表中字段值的前提下,輸入一個(gè)自然語(yǔ)言問(wèn)句,輸出對(duì)應(yīng)的SQL語(yǔ)句。
圖2 實(shí)體的相關(guān)知識(shí)Fig.2 Related knowledge of entity
本文工作的核心思想是利用知識(shí)來(lái)增強(qiáng)問(wèn)句的語(yǔ)義信息,實(shí)現(xiàn)問(wèn)句到SQL語(yǔ)句的轉(zhuǎn)化。本文提出基于知識(shí)增強(qiáng)的NL2SQL模型KESQL,模型結(jié)構(gòu)如圖3所示。
圖3 KESQL模型結(jié)構(gòu)圖Fig.3 Structure diagram of KESQL model
本文的系統(tǒng)框架主要包含3個(gè)部分:首先對(duì)問(wèn)句進(jìn)行實(shí)體鏈接,找到問(wèn)句中出現(xiàn)的命名實(shí)體,將其鏈接到知識(shí)圖譜中,以獲得這些命名實(shí)體的更多語(yǔ)義信息;其次,在知識(shí)增強(qiáng)模塊從符號(hào)化和向量化兩個(gè)角度實(shí)現(xiàn)增強(qiáng),將問(wèn)句與知識(shí)融合對(duì)齊,使模型更充分的理解問(wèn)句;最后,利用知識(shí)增強(qiáng)后的編碼層輸出來(lái)解碼草圖結(jié)構(gòu)中的各個(gè)子任務(wù)。
目前已經(jīng)有很多成熟的實(shí)體鏈接工具,本文選擇了主流的實(shí)體鏈接工具DBpedia Spotlight,將自然語(yǔ)言文本中的命名實(shí)體鏈接到知識(shí)圖譜DBpedia中。
給定一個(gè)問(wèn)句,問(wèn)句對(duì)應(yīng)的實(shí)體的某類知識(shí)以及相應(yīng)的表t,對(duì)表中的每個(gè)候選列c,考慮其字段類型信息t y pe,組成輸入序列((t y p e,c),,)。 其中,(·)表示一個(gè)將多個(gè)句子連接成一個(gè)字符串的函數(shù)。
本文從符號(hào)化和向量化兩個(gè)角度進(jìn)行知識(shí)增強(qiáng),包含一種符號(hào)化增強(qiáng)方法和兩種向量化增強(qiáng)方法。
3.2.1 符號(hào)化知識(shí)的增強(qiáng)方法
符號(hào)化知識(shí)的增強(qiáng)是指將實(shí)體知識(shí)表示為一個(gè)字符串,直接與自然語(yǔ)言問(wèn)句拼接,再進(jìn)行后續(xù)的編碼等操作。本文將結(jié)構(gòu)化和非結(jié)構(gòu)化的實(shí)體知識(shí)統(tǒng)一轉(zhuǎn)化為自然語(yǔ)言作為實(shí)體的符號(hào)化知識(shí)描述,見(jiàn)表1。
表1 實(shí)體符號(hào)化知識(shí)描述的生成Tab.1 The generation of entity symbolic knowledge description
直接拼接問(wèn)句和實(shí)體符號(hào)化知識(shí)描述,作為編碼器的輸入,輸入序列為[][],[], 其 中,,是列信息(t ype,c)、問(wèn)句、實(shí)體符號(hào)化知識(shí)分詞后的形式,本文將此方法稱為符號(hào)化知識(shí)增強(qiáng)(Knowledge Enhancement with Symbolic Knowledge),如圖4所示。
圖4 符號(hào)化知識(shí)增強(qiáng)Fig.4 Knowledge enhancement with symbolic knowledge
3.2.2 向量化知識(shí)的增強(qiáng)方法
向量化知識(shí)的增強(qiáng)方法是指將實(shí)體知識(shí)轉(zhuǎn)化為向量化表示,再與問(wèn)句中所對(duì)應(yīng)的實(shí)體指稱項(xiàng)(mention)的向量化表示進(jìn)行融合。具體來(lái)說(shuō),對(duì)于問(wèn)句中出現(xiàn)的每個(gè)實(shí)體e,假設(shè)其對(duì)應(yīng)的問(wèn)句中的實(shí)體指稱項(xiàng)為[p:q],p、q分別表示實(shí)體指稱項(xiàng)的起始索引和結(jié)束索引。首先,通過(guò)不同的方法來(lái)獲得實(shí)體e的向量化表示h,然后將其輸入到一個(gè)線性層中,再與向量化后的實(shí)體指稱項(xiàng)對(duì)齊;其次,通過(guò)線性組合實(shí)體指稱項(xiàng)和實(shí)體的向量化表示來(lái)獲得知識(shí)增強(qiáng)的實(shí)體指稱項(xiàng)的向量化表示,計(jì)算方式如公式(1)所示。
其中,為增強(qiáng)后的實(shí)體指稱項(xiàng)的向量化表示,()為語(yǔ)言模型的嵌入層,在訓(xùn)練過(guò)程中從0退火到,∈[0,1]。
本文提出了兩種不同的實(shí)體向量化方法。第一種方法,即圖向量化知識(shí)增強(qiáng)(Knowledge Enhancement with Graph Embedding),在給定圖結(jié)構(gòu)知識(shí)的情況下,包含實(shí)體與實(shí)體之間的語(yǔ)義關(guān)系,來(lái)自于全部實(shí)體的語(yǔ)義關(guān)系,對(duì)圖結(jié)構(gòu)的實(shí)體知識(shí)進(jìn)行編碼,獲得實(shí)體的向量化知識(shí)表示。使用知識(shí)圖譜向量化(Knowledge Graph Embedding,KGE)的方法來(lái)獲得每個(gè)實(shí)體的向量化表示。本文使用提出的TransE模型來(lái)進(jìn)行知識(shí)圖譜向量化,稱為圖向量化知識(shí)增強(qiáng)(Knowledge Enhancement with Graph Embedding),如圖5所示。
圖5 圖向量化知識(shí)增強(qiáng)Fig.5 Knowledge enhancement with graph embedding
第二種方法指在缺乏圖結(jié)構(gòu)知識(shí)的情況下,通過(guò)語(yǔ)言模型對(duì)文本形式的實(shí)體知識(shí)進(jìn)行編碼,獲得實(shí)體的向量化知識(shí)表示。因?yàn)閷?shí)體知識(shí)總是以被描述的實(shí)體開頭,如“Theresa Rebeck:Theresa Rebeck(born February 19,1958)is an American playwright,television writer,and novelist.”,所以采用實(shí)體知識(shí)描述的第一個(gè)標(biāo)記的詞向量作為實(shí)體知識(shí)的向量化表示,此方法稱為文本向量化知識(shí)增強(qiáng)(Knowledge Enhancement with Textual Embedding),如圖6所示。
圖6 文本向量化知識(shí)增強(qiáng)Fig.6 Knowledge enhancement with textual embedding
在問(wèn)句和知識(shí)融合后,再對(duì)增強(qiáng)后的問(wèn)句進(jìn)行編碼,為下游子任務(wù)提供更好的表示。
此模型采用HydraNet模型的解碼方式,采用草圖框架,將SQL查詢劃分為6個(gè)子任務(wù),根據(jù)各個(gè)子任務(wù)是否依賴具體的列,將其劃分為全局任務(wù)和局部任務(wù)兩類。
全局任務(wù)主要包含3個(gè)子任務(wù)SELECTCOLUMN、WHERE-NUMBER、WHERE-COLUMN。SELECT-COLUMN子任務(wù)的目標(biāo)是預(yù)測(cè)SELECT從句中出現(xiàn)的列,本研究SELECT從句中出現(xiàn)的列固定為1個(gè)。所以,對(duì)所有候選列計(jì)算其出現(xiàn)在SELECT從句的分?jǐn)?shù),選擇分?jǐn)?shù)最高的列,式(2):
WHERE-NUMBER子任務(wù)的目標(biāo)是預(yù)測(cè)WHERE從句中條件列的數(shù)量。本文任務(wù)中WHERE從句中條件列可以為空,至多出現(xiàn)4個(gè)條件列,將問(wèn)題轉(zhuǎn)化為五分類任務(wù)。問(wèn)句對(duì)應(yīng)的SQL中的WHERE從句包含多少條件列,主要取決于問(wèn)句,但是本模型中的問(wèn)句和表中每個(gè)列單獨(dú)交互,得到的多個(gè)全局表示都可以預(yù)測(cè)出WHERENUMBER,需要根據(jù)每個(gè)列的相關(guān)度來(lái)對(duì)預(yù)測(cè)結(jié)果加權(quán),式(3)~式(5):
其中,P(c)為第列出現(xiàn)在SQL中的分?jǐn)?shù),P(num|c(diǎn))為第列與問(wèn)句交互后得到的全局表示預(yù)測(cè)WHERE從句中列數(shù)量為的概率,將P(c)和P(num|c(diǎn))加權(quán)求和,取概率最高的數(shù)為WHERE-NUMBER。
WHERE-COLUMN子任務(wù)的目標(biāo)是預(yù)測(cè)WHERE從句中出現(xiàn)的列,對(duì)所有候選列計(jì)算其出現(xiàn)在WHERE從句的分?jǐn)?shù),選擇分?jǐn)?shù)最高的前WHERE-NUMBER個(gè)列,式(6)。
局部任務(wù)依賴從句中的列的預(yù)測(cè)結(jié)果,包括SELECT-AGGREGATION、WHERE-OPERATOR、WHERE-VALUE。SELECT-AGGREGATION子任務(wù)的目標(biāo)是預(yù)測(cè)SELECT從句中的列對(duì)應(yīng)的聚合操作,從A=[′′,′MAX′,′MIN′,′COUNT′,′SUM′,′AVG′]中選擇概率最大的聚合操作,式(7)。
WHERE-OPERATOR子任務(wù)的目標(biāo)是預(yù)測(cè)WHERE從句中的條件列對(duì)應(yīng)的操作符,從[′=′,′>′,′<′]中選擇概率最大的操作符,式(8)。
WHERE-VALUE子任務(wù)的目標(biāo)是預(yù)測(cè)WHERE從句中條件列對(duì)應(yīng)的條件值,可以被理解為從問(wèn)句中抽取一段文本,預(yù)測(cè)條件值在自然語(yǔ)言問(wèn)句中的起始位置,式(9)和式(10):
實(shí)驗(yàn)使用的WikiSQL數(shù)據(jù)集是大型NL2SQL數(shù)據(jù)集之一,基于維基百科文章構(gòu)造自然語(yǔ)言問(wèn)句和對(duì)應(yīng)的SQL查詢。訓(xùn)練集、驗(yàn)證集、測(cè)試集基于不同的表,分別包含56 355,8 421,15 878個(gè)問(wèn)句-SQL查詢對(duì)。本文選用RoBERTa-base作為基礎(chǔ)編碼器,AdamW為優(yōu)化器。
執(zhí)行指導(dǎo)編碼(Execution-Guided Decoding),簡(jiǎn)稱EG,利用SQL查詢的執(zhí)行結(jié)果來(lái)指導(dǎo)編碼過(guò)程。如果預(yù)測(cè)的SQL執(zhí)行結(jié)果出錯(cuò)或返回空結(jié)果,EG將認(rèn)為此條SQL預(yù)測(cè)錯(cuò)誤,會(huì)將其排除選擇概率次高的SQL。在模型預(yù)測(cè)結(jié)束后,運(yùn)用EG,進(jìn)一步提升模型的效果。
使用目前主流的兩種評(píng)估指標(biāo),即邏輯形式準(zhǔn)確率()和執(zhí)行結(jié)果準(zhǔn)確率(),來(lái)評(píng)估模型的效果。邏輯形式準(zhǔn)確率是指預(yù)測(cè)生成的SQL與真實(shí)標(biāo)注的SQL匹配的比例(這里匹配指SQL語(yǔ)句完全一致);執(zhí)行結(jié)果準(zhǔn)確率是指執(zhí)行預(yù)測(cè)生成的SQL的結(jié)果與執(zhí)行真實(shí)標(biāo)注的SQL的結(jié)果匹配的比例。
本文以當(dāng)前最優(yōu)模型HydraNet作為基礎(chǔ)模型,將問(wèn)句與相應(yīng)表中的所有列名分別交互,得到編碼層輸出,再根據(jù)草圖框架,利用列排序等方法對(duì)各個(gè)子任務(wù)進(jìn)行解碼預(yù)測(cè)。
本文以RoBERTa-base作為基礎(chǔ)編碼器復(fù)現(xiàn)了HydraNet模型,將其作為實(shí)驗(yàn)的基線。統(tǒng)一運(yùn)用EG,對(duì)得到的實(shí)驗(yàn)結(jié)果做進(jìn)一步的比較。
本文模型的邏輯形式準(zhǔn)確率和執(zhí)行結(jié)果準(zhǔn)確率均優(yōu)于基線,在摘要、類型、標(biāo)簽、語(yǔ)義關(guān)系上分別運(yùn)用符號(hào)化知識(shí)增強(qiáng)(SK)、文本向量化知識(shí)增強(qiáng)(TE)、圖向量化知識(shí)增強(qiáng)(GE)得到邏輯形式準(zhǔn)確率和執(zhí)行結(jié)果準(zhǔn)確率見(jiàn)表2、表3。
表2 測(cè)試集上邏輯形式準(zhǔn)確率Tab.2 Logical form accuracy(%)on WikiSQL test set of various methods
表3 測(cè)試集上執(zhí)行結(jié)果準(zhǔn)確率Tab.3 Execution accuracy(%)on WikiSQL test set of various methods
通過(guò)表2和表3,可以觀察到:
(1)類型和語(yǔ)義關(guān)系可以更充分地補(bǔ)全NL2SQL任務(wù)中缺失的語(yǔ)義,對(duì)效果的提升最明顯。因?yàn)轭愋托畔H是幾個(gè)具體類型的拼接,語(yǔ)義關(guān)系包含的是關(guān)鍵的鍵值對(duì),相對(duì)來(lái)說(shuō)帶來(lái)的干擾更小;而摘要的第一句話雖然非常重要,但太過(guò)精練反而可能會(huì)漏掉一些信息;
(2)向量化知識(shí)增強(qiáng)的方法都比符號(hào)化知識(shí)增強(qiáng)的方法好,因?yàn)榉?hào)化知識(shí)增強(qiáng)的方法過(guò)于簡(jiǎn)單直接,融入外部知識(shí)反而帶來(lái)一定的噪聲干擾。
本文針對(duì)自然語(yǔ)言問(wèn)句存在語(yǔ)義缺失的問(wèn)題,使用了外部知識(shí)圖譜來(lái)對(duì)自然語(yǔ)言問(wèn)句進(jìn)行語(yǔ)義增強(qiáng),使其包括充分的語(yǔ)義信息。本文提出對(duì)問(wèn)句中出現(xiàn)的命名實(shí)體進(jìn)行增強(qiáng),使用現(xiàn)有的實(shí)體鏈接技術(shù)來(lái)將問(wèn)句中的命名實(shí)體鏈接到外部知識(shí)圖譜中,并提出了一種基于符號(hào)化知識(shí)的增強(qiáng)方法和兩種向量化知識(shí)的增強(qiáng)方法。同時(shí),系統(tǒng)調(diào)研了摘要(Abstract)、類型(Type)、標(biāo)簽(Category)、語(yǔ)義關(guān)系(Infobox)等4種類型知識(shí)的增強(qiáng)效果,最終發(fā)現(xiàn)使用類型和語(yǔ)義關(guān)系兩種類型的知識(shí)來(lái)進(jìn)行文本向量化知識(shí)增強(qiáng)的效果最好。