黃君揚(yáng),王振宇,梁家卿,肖仰華
(1.復(fù)旦大學(xué) 軟件學(xué)院,上海 200433;2.信息系統(tǒng)工程重點(diǎn)實(shí)驗(yàn)室,南京 210007)
隨著自然語(yǔ)言處理技術(shù)的發(fā)展,智能問(wèn)答系統(tǒng)在無(wú)人駕駛、語(yǔ)音識(shí)別、人臉識(shí)別等領(lǐng)域[1-3]得到廣泛應(yīng)用。智能問(wèn)答系統(tǒng)通常以一問(wèn)一答形式,精確定位用戶所需要的提問(wèn)知識(shí),通過(guò)與用戶進(jìn)行交互,為用戶提供個(gè)性化的信息服務(wù)。近幾年,基于自然語(yǔ)言轉(zhuǎn)換為結(jié)構(gòu)化查詢(xún)語(yǔ)言(Natural Language to Structured Query Language,NL2SQL)的問(wèn)答系統(tǒng)成為了研究的熱點(diǎn)[4-5],相比基于檢索式、基于閱讀理解的其他問(wèn)答系統(tǒng),NL2SQL 先生成結(jié)構(gòu)化查詢(xún)語(yǔ)句(Structured Query Language,SQL),再提供答案的推理路徑,因此具有更好的可解釋性。NL2SQL 任務(wù)即將自然語(yǔ)言問(wèn)句解析為結(jié)構(gòu)化查詢(xún)語(yǔ)句,并用這條查詢(xún)語(yǔ)句得到問(wèn)題的答案。例如,給定問(wèn)題“請(qǐng)列出圖書(shū)俱樂(lè)部中1989 年之后至少有兩本書(shū)的圖書(shū)分類(lèi)類(lèi)別?!盢L2SQL 需要將其解析成SQL 查詢(xún)語(yǔ)句“SELECT category FROM book_club WHERE year>1989 GROUPBY category HAVING count(*)>=2”。由于相同的問(wèn)題在不同的數(shù)據(jù)庫(kù)模式上會(huì)有不同的SQL 查詢(xún)語(yǔ)句,因此設(shè)計(jì)一種能同時(shí)學(xué)習(xí)問(wèn)句表示和數(shù)據(jù)庫(kù)模式表示的模型對(duì)于提高NL2SQL 模型的邏輯準(zhǔn)確率和執(zhí)行準(zhǔn)確率十分重要。
現(xiàn)有研究通過(guò)在注意力機(jī)制的基礎(chǔ)上構(gòu)建一個(gè)異構(gòu)圖[6]來(lái)聯(lián)合編碼數(shù)據(jù)庫(kù)模式和問(wèn)句,隨后再使用SQL 語(yǔ)法指引的樹(shù)狀解碼器[7]來(lái)解析SQL 語(yǔ)句。這種方法將數(shù)據(jù)庫(kù)模式和問(wèn)句視為一個(gè)異構(gòu)圖,建立問(wèn)句、列名和表名中字符之間的關(guān)系。隨后學(xué)習(xí)這些關(guān)系的嵌入作為模式信息,并將其編碼到模型中。然而,該方法根據(jù)整個(gè)數(shù)據(jù)庫(kù)模式構(gòu)建一個(gè)異構(gòu)圖,將導(dǎo)致兩個(gè)主要問(wèn)題:其一,當(dāng)數(shù)據(jù)庫(kù)模式較大時(shí),異構(gòu)圖太大,模型難以捕捉并學(xué)習(xí)到正確的特征;其二,該方法會(huì)忽略數(shù)據(jù)庫(kù)模式中的每一個(gè)元素的重要性。例如,當(dāng)詢(xún)問(wèn)一個(gè)人的身高時(shí),實(shí)際上數(shù)據(jù)庫(kù)模式中人實(shí)體的所有屬性中只有身高是有用的,年齡、性別等屬性都是無(wú)用的,所以在構(gòu)圖時(shí),年齡與性別這兩個(gè)屬性不應(yīng)該與身高有相同的權(quán)重。一般而言,模型需要根據(jù)問(wèn)句判斷數(shù)據(jù)庫(kù)模式中所有元素的重要程度,而不是單純地將數(shù)據(jù)庫(kù)模式中所有的元素加入到異構(gòu)圖中。
為了解決上述問(wèn)題,本文提出基于自裁剪異構(gòu)圖與相對(duì)位置注意力機(jī)制的NL2SQL 模型,簡(jiǎn)稱(chēng)為SPRELA。SPRELA 模型采用序列到序列的框架,主要包括異構(gòu)圖構(gòu)建、編碼器和解碼器三部分。異構(gòu)圖構(gòu)建模塊使用預(yù)先定義的專(zhuān)家知識(shí)構(gòu)建一個(gè)初步的異構(gòu)圖。SPRELA 編碼器裁剪異構(gòu)圖的部分邊來(lái)剔除數(shù)據(jù)庫(kù)模式中不重要的元素,并使用相對(duì)位置注意力機(jī)制來(lái)聯(lián)合學(xué)習(xí)問(wèn)句和數(shù)據(jù)庫(kù)模式的向量表示,其中相對(duì)位置就是異構(gòu)圖中邊的特征,詞特征使用ELECTRA[8]預(yù)訓(xùn)練語(yǔ)言模型進(jìn)行初始化。SPRELA解碼器借助預(yù)先定義的SQL 語(yǔ)法規(guī)則,使用樹(shù)型解碼器分步解碼出樹(shù)狀結(jié)構(gòu)的抽象語(yǔ)法樹(shù),并通過(guò)槽填充將SQL 語(yǔ)句的信息補(bǔ)全。
目前,NL2SQL 的相關(guān)工作可以根據(jù)模型中的模塊大致分為問(wèn)句與數(shù)據(jù)庫(kù)模式聯(lián)合編碼、結(jié)構(gòu)化查詢(xún)語(yǔ)言解碼和預(yù)訓(xùn)練詞表征增強(qiáng)3 類(lèi)。
針對(duì)問(wèn)句與數(shù)據(jù)庫(kù)模式聯(lián)合編碼的問(wèn)題,SQLNet[9]通過(guò)列名注意力機(jī)制來(lái)解決問(wèn)題和數(shù)據(jù)庫(kù)模式的聯(lián)合編碼問(wèn)題,然后在預(yù)定義的SQL 模板上使用指針網(wǎng)絡(luò)補(bǔ)全SQL信息。IRNet[10]引入中間表示層,以解決自然語(yǔ)言表達(dá)的意圖與SQL 中的實(shí)現(xiàn)細(xì)節(jié)不匹配的問(wèn)題,首先將數(shù)據(jù)庫(kù)模式與問(wèn)句建立鏈接,識(shí)別出問(wèn)句中提到的表名、列名和值,隨后用神經(jīng)網(wǎng)絡(luò)把問(wèn)句按照數(shù)據(jù)庫(kù)模式分成不同的問(wèn)句區(qū)間并使用BiLSTM 進(jìn)行編碼。RAT-SQL[11]針對(duì)數(shù)據(jù)庫(kù)模式和問(wèn)句通過(guò)構(gòu)建一個(gè)異構(gòu)圖建立數(shù)據(jù)庫(kù)模式與問(wèn)句中詞之間的聯(lián)系,然后將異構(gòu)圖中各個(gè)節(jié)點(diǎn)之間的邊進(jìn)行向量化表示,最后使用相對(duì)位置自注意力機(jī)制將異構(gòu)圖信息編碼到模型中。然而,上述方法都沒(méi)有考慮對(duì)數(shù)據(jù)庫(kù)模式信息進(jìn)行過(guò)濾,無(wú)用的模式信息會(huì)放大模型編碼過(guò)程中的噪聲。
針對(duì)結(jié)構(gòu)化查詢(xún)語(yǔ)言解碼問(wèn)題,近期的工作通常使用樹(shù)形結(jié)構(gòu)的解碼器來(lái)解碼SQL 語(yǔ)句,即在定義目標(biāo)語(yǔ)言的基礎(chǔ)語(yǔ)法作為先驗(yàn)知識(shí)后,生成一棵抽象語(yǔ)法樹(shù)來(lái)表示SQL 語(yǔ)言。樹(shù)形結(jié)構(gòu)解碼策略的應(yīng)用非常廣泛[12-13],特別是在解決數(shù)學(xué)問(wèn)題和自然語(yǔ)言轉(zhuǎn)換為各類(lèi)編程語(yǔ)言等任務(wù)中。RAT-SQL 使用LSTM 以深度優(yōu)先的遍歷順序生成SQL 的抽象語(yǔ)法樹(shù),然后使用指針網(wǎng)絡(luò)填槽補(bǔ)全SQL 語(yǔ)法樹(shù)中缺失的表名和列名。SmBoP[14]使用自下而上的解碼策略,在第t個(gè)步驟構(gòu)建高度小于等于t的top-K 子樹(shù),由于每次解碼時(shí)每個(gè)子樹(shù)都是并行解碼的,因此該方法提高了解碼效率。
還有一些工作側(cè)重于為NL2SQL 任務(wù)提供預(yù)訓(xùn)練詞增強(qiáng)表征。GraPPa[15]首先學(xué)習(xí)Spider 數(shù)據(jù)集中的語(yǔ)法和SQL 規(guī)則,然后利用這些規(guī)則在其他數(shù)據(jù)庫(kù)上生成與Spider 構(gòu)建規(guī)則相似的高質(zhì)量問(wèn)句-SQL對(duì),然后設(shè)定預(yù)訓(xùn)練任務(wù)讓模型根據(jù)問(wèn)句和數(shù)據(jù)庫(kù)模式直接生成SQL,以捕捉問(wèn)句和數(shù)據(jù)庫(kù)模式之間的結(jié)構(gòu)信息。GAP[16]通過(guò)3 個(gè)不同的預(yù)訓(xùn)練任務(wù)提高詞表征:第1 個(gè)預(yù)訓(xùn)練任務(wù)判斷數(shù)據(jù)庫(kù)表中的列是否出現(xiàn)在問(wèn)句中;第2 個(gè)預(yù)訓(xùn)練任務(wù)隨機(jī)把問(wèn)句中的列名替換成該列單元格的值,模型需要恢復(fù)被替換的列名;第3 個(gè)預(yù)訓(xùn)練任務(wù)需要模型根據(jù)問(wèn)句與數(shù)據(jù)庫(kù)模式直接生成SQL 語(yǔ)句。然而上述方法使用的預(yù)訓(xùn)練語(yǔ)料質(zhì)量無(wú)法保證,且模型訓(xùn)練需要大量算力支持。
NL2SQL 任務(wù)的輸入是一句自然語(yǔ)言問(wèn)句和數(shù)據(jù)庫(kù)模式,輸出是一個(gè)結(jié)構(gòu)化查詢(xún)語(yǔ)句Z。
具體而言,模型需要根據(jù)給定的一個(gè)長(zhǎng)度為|Q|個(gè)字符的問(wèn)句Q=[q1,q2,…,q|Q|]和數(shù)據(jù)庫(kù)模式S=<T,C>生成結(jié)構(gòu)化查詢(xún)語(yǔ)句Z。數(shù)據(jù)庫(kù)模式由表名T=[t1,t2,…,t|T|]和列名C={c1,c2,…,c|C|}組成,其中,表名有|T| 個(gè),列名有|C| 個(gè)。每一個(gè)列名ci={ci,1,ci,2,…,ci,|ci|}由|ci|個(gè)字符組成,每一個(gè)表名ti={ti,1,ti,2,…,ti,|ti|}由|ti|個(gè)字符組成。生成的結(jié)構(gòu)化查詢(xún)語(yǔ)句Z以抽象語(yǔ)法樹(shù)(Abstract Syntax Tree,AST)的形式來(lái)表示。
模式中的一些列被稱(chēng)為主鍵,主鍵是一個(gè)數(shù)據(jù)庫(kù)表中的一行數(shù)據(jù)的唯一索引。還有一些列被稱(chēng)為外鍵,用于索引不同表中的主鍵列。此外,表中每一列的單元值均由數(shù)字或文本組成。
本文提出的SPRELA 模型采用序列到序列的框架,如圖1 所示,主要由3 個(gè)模塊組成:1)異構(gòu)圖構(gòu)建,使用專(zhuān)家知識(shí),動(dòng)態(tài)地將輸入的問(wèn)句和數(shù)據(jù)庫(kù)模式構(gòu)建為一個(gè)異構(gòu)圖,更好地建立了問(wèn)句與數(shù)據(jù)庫(kù)模式之間的聯(lián)系;2)編碼器,使用相對(duì)位置注意力機(jī)制,將問(wèn)句、數(shù)據(jù)庫(kù)模式信息和異構(gòu)圖聯(lián)合編碼為高維隱層向量表示;3)解碼器,使用樹(shù)型解碼器將高維隱層向量解碼成高質(zhì)量、可執(zhí)行的SQL 語(yǔ)句。
本節(jié)介紹如何使用問(wèn)句Q和數(shù)據(jù)庫(kù)模式S構(gòu)建異構(gòu)圖G=<V,E >。異構(gòu)圖的節(jié)點(diǎn)集合由數(shù)據(jù)庫(kù)模式中的列名、表名和問(wèn)句中的詞語(yǔ)組成,以字符的形式來(lái)標(biāo)記,即V=C?T?Q。針對(duì)表示列名的節(jié)點(diǎn),需要在標(biāo)簽前加入額外特征來(lái)表示其類(lèi)型是字符還是數(shù)字。加入問(wèn)句中的詞語(yǔ)作為節(jié)點(diǎn)能將問(wèn)句中的詞語(yǔ)與數(shù)據(jù)庫(kù)模式中的信息對(duì)齊,豐富了異構(gòu)圖的信息表示能力,使異構(gòu)圖有效地建立了問(wèn)句與數(shù)據(jù)庫(kù)模式之間的聯(lián)系。異構(gòu)圖的邊集E 是由專(zhuān)家根據(jù)數(shù)據(jù)庫(kù)模式來(lái)定義的,其中一部分是通過(guò)數(shù)據(jù)庫(kù)特有結(jié)構(gòu)(例如外鍵、主鍵等關(guān)系)而得出,另一部分是通過(guò)對(duì)驗(yàn)證集上錯(cuò)誤的案例進(jìn)行分析,并多次迭代歸納總結(jié)得出。專(zhuān)家定義的異構(gòu)圖邊構(gòu)建規(guī)則如表1 所示。
表1 專(zhuān)家定義的異構(gòu)圖邊構(gòu)建規(guī)則Table 1 Heterogeneous graph edge construction rules defined by experts
在表1 中,DISTANCE-D 代表Y 是X 中第D 個(gè)字符,SAME-TABLE代表X 和Y 屬于同一張表,F(xiàn)OREIGN-F 代表X 是Y的外鍵,F(xiàn)OREIGN-R 代表Y是X 的外鍵,PRIMARY-KEY-F 代表X 是Y 的外鍵,HAS-F 代 表X 是的一個(gè)列,PRIMARY-KEY-R 代表Y 是X 的主鍵,HAS-R代表Y是X的一個(gè)列,F(xiàn)OREIGN-TAB-F 代表X 在表Y 中存在外鍵,F(xiàn)OREIGN-TAB-R 代表Y在表X中存在外鍵,F(xiàn)OREIGN-TAB-B 代表X 和Y 中互相存 在外鍵,NOMATCH 代表X和Y中沒(méi)有重疊的字符,PARTIALMATCH代表X 是Y的子串,EXACT-MATCH 代表X和Y完全一致,HAS-VALUE 代表X 是Y 列中某個(gè)單元格的值。
SPRELA 編碼器首先使用ELECTRA 預(yù)訓(xùn)練語(yǔ)言模型作為骨干網(wǎng)絡(luò)獲取向量表示cinit、tinit和qinit,其中,cinit代表異構(gòu)圖中列名的詞向量表示,tinit代表異構(gòu)圖中表的詞向量表示,qinit代表問(wèn)句的詞向量表示,然后將這3 個(gè)向量表示連接成一個(gè)向量X作為輸入。
通過(guò)該方式,數(shù)據(jù)庫(kù)模式中所有與問(wèn)句相關(guān)的詞都被連接起來(lái),形成了最終的向量表示。為了使模型能學(xué)習(xí)邊的特征,編碼器將異構(gòu)圖構(gòu)建模塊構(gòu)建出的初步異構(gòu)圖的每一個(gè)邊初始化為一個(gè)向量表示。然后編碼器使用相對(duì)位置編碼的自注意力[17]機(jī)制對(duì)輸入進(jìn)行編碼,使得模型能聯(lián)合學(xué)習(xí)問(wèn)題和知識(shí)庫(kù)模式之間的關(guān)系。與傳統(tǒng)方法不同的是,SPRELA 編碼器以異構(gòu)圖的邊向量作為相對(duì)位置編碼,以此將異構(gòu)圖的信息融入到SPRELA 中,如式(2)~式(7)所示:
其中:邊的種類(lèi)一共有R種,第s條邊定義為E(s)?X×X(1 ≤s≤R),X代表節(jié)點(diǎn)數(shù)量;是邊的一個(gè)可學(xué)習(xí)的邊向量表示;是一個(gè)自裁剪變量,根據(jù)輸入的自然語(yǔ)言問(wèn)句對(duì)異構(gòu)圖中每個(gè)邊si進(jìn)行二分類(lèi),來(lái)記錄這條邊是否需要保留,如果不需要保留則利用將該邊的向量表示置為一個(gè)全為0 組成的同維度向量。
本文構(gòu)建了一個(gè)二分類(lèi)模型來(lái)實(shí)現(xiàn)該自裁剪子模型。首先,模型利用多頭注意力機(jī)制,并使用自然語(yǔ)言問(wèn)句的嵌入表示Xq為異構(gòu)圖中每條邊si計(jì)算向量表示,如式(9)、式(10)所示:
然后,使用Biaffine[18]二分類(lèi)器來(lái)判斷經(jīng)過(guò)編碼的向量表示和邊的嵌入表示xsi是否有關(guān)聯(lián),如式(11)、式(12)所示:
如果si出現(xiàn)在真實(shí)SQL 語(yǔ)句中,則邊的標(biāo)簽為1。本文將該任務(wù)與語(yǔ)義解析任務(wù)以多任務(wù)訓(xùn)練的方式進(jìn)行聯(lián)合訓(xùn)練,目標(biāo)函數(shù)如式(13)所示:
解碼器使用IRNet 模型中基于長(zhǎng)短期記憶(Long Short-Term Memory,LSTM)網(wǎng)絡(luò)的樹(shù)型解碼器解碼SQL 語(yǔ)句。首先以深度優(yōu)先遍歷的順序?qū)QL 生成為一棵抽象語(yǔ)法樹(shù)。然后通過(guò)LSTM 網(wǎng)絡(luò)輸出一連串的動(dòng)作(action),動(dòng)作主要分為以下2 類(lèi):1)生成的節(jié)點(diǎn)為非葉子節(jié)點(diǎn),則將該節(jié)點(diǎn)擴(kuò)展為一條語(yǔ)法規(guī)則,稱(chēng)為擴(kuò)展規(guī)則(Extend Rule);2)生成的節(jié)點(diǎn)為葉子節(jié)點(diǎn),從數(shù)據(jù)庫(kù)模式中選擇一個(gè)列名或表名,分別稱(chēng)為列選擇(Select Column)或表選擇(Select Table)。
樹(shù)型解碼器中的LSTM 使用如式(14)所示的方式更新?tīng)顟B(tài):
其中:mt是LSTM 的核(cell)狀態(tài);ht是LSTM 在t時(shí)刻的輸出;at-1是上一個(gè)動(dòng)作的嵌入表示;pt是語(yǔ)法樹(shù)中當(dāng)前節(jié)點(diǎn)的父節(jié)點(diǎn);nft是當(dāng)前節(jié)點(diǎn)類(lèi)型的嵌入表示。
擴(kuò)展規(guī)則的計(jì)算方式如式(15)所示:
其中:σ(·)是Softmax 函數(shù);g(·)是多層 感知機(jī)層并以tanh 作為激活函數(shù)。
列選擇的計(jì)算方式如式(16)所示,表選擇的計(jì)算方式與列選擇類(lèi)似。
使用Spider[19]數(shù)據(jù)集驗(yàn) 證SPRELA 模型性能。Spider 是一個(gè)評(píng)估NL2SQL 系統(tǒng)的常見(jiàn)數(shù)據(jù)集,包含8 659 個(gè)訓(xùn)練條目和1 034 個(gè)驗(yàn)證條目,以及復(fù)雜的SQL 查詢(xún)和1 個(gè)冷啟動(dòng)設(shè)置,其中測(cè)試集中的數(shù)據(jù)庫(kù)模式與訓(xùn)練集和驗(yàn)證集是不同的。使用兩個(gè)通用的指標(biāo)評(píng)測(cè)SPRELA 模型在Spider 數(shù)據(jù)集上的效果,分別為:1)不含槽位值的邏輯準(zhǔn)確率(EM);2)含槽位值的執(zhí)行準(zhǔn)確率(EXEC)。EM 主要評(píng)測(cè)SQL語(yǔ)句的語(yǔ)法結(jié)構(gòu),測(cè)試腳本將每個(gè)SQL 分解成多個(gè)子句并進(jìn)行集合匹配,而不是簡(jiǎn)單地將預(yù)測(cè)出來(lái)的SQL 和標(biāo)簽SQL 進(jìn)行字符串比較。EXEC 主要評(píng)測(cè)執(zhí)行結(jié)果,測(cè)試腳本將直接執(zhí)行預(yù)測(cè)出來(lái)的SQL 和標(biāo)簽SQL 進(jìn)行比較判斷能否查詢(xún)到相同的結(jié)果。
針對(duì)編碼器,設(shè)置相對(duì)位置注意力機(jī)制的多頭數(shù) 量H=8,其共包含24個(gè)自注意力層。Dropout[20]層損失的信息比例設(shè)置為0.2。針對(duì)解碼器,使用集束搜索策略并設(shè)置集束大小K=30,在預(yù)測(cè)時(shí)的解碼步驟最大值設(shè)置為T(mén)=9。ELECTRA 預(yù)訓(xùn)練語(yǔ)言模型和SPRELA 解碼器的學(xué)習(xí)率分別設(shè)置為3e-6 和0.000 186。模型在RTX3090 顯卡上訓(xùn)練了500 輪,批次大小設(shè)置為16,并采取梯度積累策略,其中梯度累積參數(shù)設(shè)置為4。
使 用RAT-SQL[11]、GAZP[21]、COMBINE[22]、BRIDGE[23]、RaSaP[24]、RATSQL+GAP+NatSQL[25]和PICARD[26]作為基線模型進(jìn)行對(duì)比,其中RATSQL+GAP+NatSQL 和PICARD 模型的規(guī)模遠(yuǎn)大于本文SPRELA 模型和其他基線模型。表2 給出了基線模型與SPRELA 模型在Spider 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果。由于RAT-SQL 模型不能生成可執(zhí)行的SQL 語(yǔ)句,因此執(zhí)行準(zhǔn)確率使用N/A 表示。由表2 中實(shí)驗(yàn)結(jié)果可以看出,SPRELA 模型在兩個(gè)評(píng)價(jià)指標(biāo)上都超越了現(xiàn)有的相同參數(shù)量級(jí)別的模型,特別是在執(zhí)行準(zhǔn)確率指標(biāo)上超越了RaSaP模型1.1個(gè)百分點(diǎn)。RATSQL+GAP+NatSQL 模型的EXEC 指標(biāo)效果要好于SPRELA 模型,原因是該模型集成了一個(gè)槽位預(yù)測(cè)模型,旨在提高槽位預(yù)測(cè)的準(zhǔn)確率,而多個(gè)模型的集成也使該模型在EXEC 指標(biāo)上表現(xiàn)優(yōu)秀。PICARD模型在EM 和EXEC 指標(biāo)上的效果都比SPRELA 模型好,原因是該模型骨干網(wǎng)絡(luò)使用了T5-3B[27]預(yù)訓(xùn)練語(yǔ)言模型,T5-3B 的參數(shù)量遠(yuǎn)多于現(xiàn)有所有模型,所以其效果為目前最優(yōu)。但是模型集成(如RATSQL+GAP+NatSQL)和大規(guī)模模型(如PICARD)意味著需要更大的算力支持、更長(zhǎng)的訓(xùn)練時(shí)間,這些模型的效果理論上會(huì)更好,但是成本太高,由于實(shí)際工程應(yīng)用場(chǎng)景對(duì)模型的并發(fā)量、成本控制都有所要求,因此無(wú)法支持超大規(guī)模的模型。
表2 NL2SQL 模型在Spider 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果Table 2 Experimental results of the NL2SQL models on the Spider dataset %
圖2 是SPRELA 模型與BRIDGE 模型的實(shí)驗(yàn)結(jié)果的案例分析,可以看出BRIDGE 模型生成了錯(cuò)誤的SQL,SPRELA 模型生成了正確的SQL。圖2 中的解釋是對(duì)BRIDGE 模型生成錯(cuò)誤SQL 的原因分析,可見(jiàn)SPRELA 模型可以更好地將自然語(yǔ)言問(wèn)句與數(shù)據(jù)庫(kù)模式對(duì)齊,也能更好地理解自然語(yǔ)言查詢(xún)中的語(yǔ)義信息。因此,SPRELA 模型不論是在生成SQL語(yǔ)句的結(jié)構(gòu)上,還是槽位值的選擇上均具有更好的性能表現(xiàn)。
圖2 SPRELA 與BRIDGE 模型的實(shí)驗(yàn)結(jié)果案例分析Fig.2 Case analysis of experimental results of SPRELA and BRIDGE models
為了更細(xì)致地分析模型在不同SQL 子句上的性能表現(xiàn),本文使用精確率、召回率和F1 值3 個(gè)指標(biāo)對(duì)模型子句性能做進(jìn)一步實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果如表3 所示,可以看出SPRELA 模型在group 子句上的泛化能力與查詢(xún)性能仍有提升的空間,在select、order 和and/or 子句上具有較好的泛化能力,在where 子句上的查詢(xún)性能也仍有提升空間。
表3 SPRELA 模型子句性能Table 3 Clause performance of the SPRELA model %
為了分析不同模塊給SPRELA 模型帶來(lái)的效果增益,本節(jié)針對(duì)SPRELA 模型進(jìn)行消融實(shí)驗(yàn)來(lái)驗(yàn)證異構(gòu)圖構(gòu)建模塊中的專(zhuān)家知識(shí)子模塊和編碼器模塊中的自裁剪子模塊對(duì)模型性能的影響。消融實(shí)驗(yàn)結(jié)果如表4 所示。
表4 SPERLA 模型的消融實(shí)驗(yàn)結(jié)果Table 4 Ablation experiment results of the SPRELA model %
從表4 中的實(shí)驗(yàn)結(jié)果可以看出,完整的模型相比于不同的消融模型取得了最優(yōu)的效果。對(duì)比移除專(zhuān)家知識(shí)模塊前后,不論是EM 指標(biāo)還是EXEC 指標(biāo)都有所下降。在移除自裁剪模塊后,模型在兩個(gè)指標(biāo)上效果同樣有所下降。當(dāng)同時(shí)移除專(zhuān)家知識(shí)和自裁剪模塊后,模型效果則會(huì)進(jìn)一步下降。為了解釋消融模型效果下降的原因,本文借助圖3 所示的案例進(jìn)行分析,其中錯(cuò)誤SQL 來(lái)自不包含專(zhuān)家知識(shí)與自裁剪模塊的消融模型,正確SQL 來(lái)自完整的SPRELA 模型。此外,圖3 中還列出了數(shù)據(jù)庫(kù)模式信息。
圖3 專(zhuān)家知識(shí)與自裁剪模塊的有效性分析結(jié)果Fig.3 Effectiveness analysis results of expert knowledge and self-pruning modules
由圖3 可以看出,錯(cuò)誤SQL 未能識(shí)別出“amc hornet sportabout(sw)”是一個(gè)完整的槽位值的原因在于“sw”恰好是“model_list”表中“model”列的一個(gè)值而“amc hornet”恰好也是“car_names”表中“Make”列的一個(gè)值。因此,“amc hornet sportabout(sw)”就被拆分為“amc hornet”和“sw”兩個(gè)槽位值并匹配到其相應(yīng)的列名。
在利用專(zhuān)家知識(shí)構(gòu)建異構(gòu)圖后,“amc hornet sportabout(sw)”和列名“Make”會(huì)與標(biāo)記為EXACTMATCH 的邊連接,而“amc hornet”和列名“Make”會(huì)與標(biāo)記為PARTIAL-MATCH 的邊連接。通過(guò)該方式構(gòu)建的異構(gòu)圖可使模型能建立問(wèn)句與數(shù)據(jù)庫(kù)模式之間更細(xì)粒度的關(guān)系。
由于問(wèn)句中的語(yǔ)義信息明顯是查詢(xún)裝備“amc hornet sportabout(sw)”套件轎車(chē)的加速度,與轎車(chē)的模組(Model)無(wú)關(guān),因此自裁剪模塊會(huì)將與列名“Model”相關(guān)的邊裁去。通過(guò)該方式,模型能夠更好地剔除與問(wèn)句無(wú)關(guān)的圖信息,保留相對(duì)有關(guān)的信息,減少了噪聲的引入。
在結(jié)合專(zhuān)家知識(shí)與自裁剪模塊后,由于異構(gòu)圖的不同邊具有較強(qiáng)的特征信息,使得自裁剪模塊在該案例中還能學(xué)習(xí)到當(dāng)存在標(biāo)記為EXACT-MATCH的邊時(shí)優(yōu)先裁剪標(biāo)記為PARTIAL-MATCH 的邊的行為。因此兩個(gè)模塊的組合可以進(jìn)一步提升模型的效果,這也與消融實(shí)驗(yàn)的結(jié)果一致。從上述實(shí)驗(yàn)結(jié)果與案例分析證明了本文設(shè)計(jì)的專(zhuān)家知識(shí)與自裁剪機(jī)制對(duì)于模型性能提升的有效性。
本文提出一種基于自裁剪異構(gòu)圖的自然語(yǔ)言轉(zhuǎn)換為結(jié)構(gòu)化查詢(xún)語(yǔ)言模型SPRELA,采用ELECTRA預(yù)訓(xùn)練模型獲取詞表征作為骨干網(wǎng)絡(luò)并利用專(zhuān)家知識(shí)構(gòu)建異構(gòu)圖,通過(guò)相對(duì)位置注意力機(jī)制聯(lián)合編碼問(wèn)句與數(shù)據(jù)庫(kù)模式,使用樹(shù)狀解碼器解碼生成結(jié)構(gòu)化查詢(xún)語(yǔ)句。在Spider 數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果表明,相比于經(jīng)典模型和同類(lèi)模型,SPRELA 模型利用自裁剪機(jī)制裁剪異構(gòu)圖中的部分邊,使得模型能夠剔除與問(wèn)句相對(duì)無(wú)關(guān)的信息,保留相對(duì)有關(guān)的信息,達(dá)到更細(xì)粒度的數(shù)據(jù)過(guò)濾,減少異構(gòu)圖中的無(wú)用信息,同時(shí)通過(guò)引入專(zhuān)家知識(shí)構(gòu)建異構(gòu)圖來(lái)建模結(jié)構(gòu)化數(shù)據(jù)中的模式信息,能更好地輔助模型學(xué)習(xí)結(jié)構(gòu)化查詢(xún)語(yǔ)言的相關(guān)特征。今后將嘗試尋找挖掘?qū)<抑R(shí)的自動(dòng)化或半自動(dòng)化方法,進(jìn)一步提高SPRELA 模型在級(jí)聯(lián)查詢(xún)、嵌套子查詢(xún)等復(fù)雜SQL 解析任務(wù)下的執(zhí)行準(zhǔn)確率。