陳琳,范元?jiǎng)P,何震瀛,劉曉清,楊陽(yáng),湯路民
(1.復(fù)旦大學(xué)計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,上海 200433;2.星環(huán)信息科技(上海)股份有限公司,上海 200233)
隨著信息技術(shù)的高速發(fā)展,各類應(yīng)用產(chǎn)生大量數(shù)據(jù),關(guān)系數(shù)據(jù)庫(kù)被廣泛用于數(shù)據(jù)的存儲(chǔ)和管理。用戶在與關(guān)系數(shù)據(jù)庫(kù)交互時(shí),常使用結(jié)構(gòu)化查詢語言(SQL)。然而,SQL 的使用受限于用戶對(duì)SQL 的熟練程度和對(duì)關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的了解程度,導(dǎo)致SQL 的使用門檻相對(duì)較高。針對(duì)這一問題,根據(jù)自然語言的翻譯到SQL(text-to-SQL)[1]和根據(jù)SQL 到自然語言的翻譯(SQL-to-text)成為降低SQL 使用門檻、提高數(shù)據(jù)庫(kù)易用性的重要嘗試,引起了研究人員的關(guān)注。其中,SQL-to-text 能夠幫助用戶理解查詢的含義,在需要解釋SQL 語義的場(chǎng)景下具有重要意義[2],并且有助于強(qiáng)化搜索引擎的SQL 程序查找能力,還可以用于搭建數(shù)據(jù)庫(kù)的自然語言交互接口[3]。
雖然SQL-to-text 已逐漸成為業(yè)界關(guān)注的熱點(diǎn)問題之一,但就其效果而言,在現(xiàn)階段還難以達(dá)到廣泛應(yīng)用的程度。其主要原因有翻譯模型的能力不足、對(duì)數(shù)據(jù)庫(kù)應(yīng)用中的數(shù)據(jù)理解程度不足和對(duì)數(shù)據(jù)庫(kù)應(yīng)用中的知識(shí)使用不足。其中,翻譯模型的能力不足是一個(gè)重要原因,鑒于組合泛化能力對(duì)翻譯模型的重要性,需要對(duì)SQL-to-text 模型的組合泛化能力展開研究。
組合泛化一詞由語言學(xué)家提出,是通過已知的成分理解和產(chǎn)生無限新組合的代數(shù)能力[4],此概念于近年來被引入機(jī)器學(xué)習(xí)領(lǐng)域。對(duì)神經(jīng)網(wǎng)絡(luò)模型而言,若學(xué)習(xí)得到的知識(shí)以不同的方式組合后仍能理解其含義,則表明該模型具有組合泛化能力。此能力不足的模型一般只學(xué)習(xí)到模式間的映射,需要大量訓(xùn)練數(shù)據(jù)才能達(dá)到人們用少量數(shù)據(jù)即可達(dá)到的學(xué)習(xí)效果[5]。
針對(duì)SQL-to-text 任務(wù),當(dāng)模型在訓(xùn)練時(shí)學(xué)習(xí)的SQL 子句以不同的方式組合后,若模型仍能理解其含義并提供正確翻譯,則說明此模型具有組合泛化能力。例如,模型已學(xué)習(xí)了SELECT first_name,last_name FROM players WHERE hand=‘L’和SELECT first_name,last_name FROM players ORDER BY birth_date 如何翻譯,具有組合泛化能力的模型應(yīng)能正確翻譯SELECT first_name,last_name FROM players WHERE hand=‘L’ ORDER BY birth_date。在實(shí)際應(yīng)用場(chǎng)景中,模型使用者通常更需要模型為復(fù)雜SQL 提供翻譯,而提供的訓(xùn)練數(shù)據(jù)對(duì)復(fù)雜SQL 的覆蓋程度較低。此情況要求SQL-totext 模型從簡(jiǎn)單的SQL 中學(xué)習(xí)到當(dāng)前應(yīng)用場(chǎng)景所需的基礎(chǔ)知識(shí),并在面對(duì)復(fù)雜SQL 時(shí)通過對(duì)基礎(chǔ)知識(shí)的重組得到正確的理解,即具備組合泛化能力。
雖然SQL-to-text 領(lǐng)域的研究已取得一定成果,但現(xiàn)有的數(shù)據(jù)集缺乏對(duì)模型組合泛化能力的考察,模型難以發(fā)揮其組合泛化能力。鑒于此,本文提出一種評(píng)估SQL-to-text 模型組合泛化能力的方法。該方法對(duì)現(xiàn)有數(shù)據(jù)集中的SQL 和相應(yīng)的自然語言翻譯(SQL-自然語言對(duì))進(jìn)行切分再組合,并按照生成的SQL-自然語言對(duì)所含SQL 子句的個(gè)數(shù)將其劃分為訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù),以此達(dá)到評(píng)估模型組合泛化能力的目的。最終基于Spider[6]數(shù)據(jù)集創(chuàng)建SpiderCompose 數(shù)據(jù)集,選取序列到序列、樹到序列、圖到序列3 種類型的SQL-to-text 模型進(jìn)行實(shí)驗(yàn),對(duì)比模型的組合泛化能力強(qiáng)弱,并對(duì)模型的翻譯錯(cuò)誤進(jìn)行分析。
文獻(xiàn)[7]于2018 年提出了組合泛化數(shù)據(jù)集SCAN(Simplified version of the CommAI Navigation tasks)。該數(shù)據(jù)集包含一組簡(jiǎn)單的導(dǎo)航命令以及對(duì)應(yīng)的動(dòng)作序列,模型的學(xué)習(xí)目標(biāo)是將簡(jiǎn)潔描述的命令翻譯成表示動(dòng)作的序列。文獻(xiàn)[8]于2020 年提出COGS(COmpositional Generalization challenge based on Semantic interpretation)數(shù)據(jù)集。該數(shù)據(jù)集的任務(wù)是將英文句子通過語義解析映射成邏輯形式。文獻(xiàn)[9]提出DBCA(Distribution-Based Compositionality Assessment)方法,并用此方法構(gòu)造出 CFQ(Compositional Freebase Questions)數(shù)據(jù)集。它為每個(gè)問題提供針對(duì)Freebase 知識(shí)庫(kù)[10]的相應(yīng)查詢。文獻(xiàn)[11]則對(duì)組合泛化進(jìn)行更細(xì)致的定義與分類,并提出PCFG(Probabilistic Context Free Grammar)數(shù)據(jù)集,其任務(wù)是在輸入序列上遞歸應(yīng)用字符串編輯函數(shù),得到輸出序列。
由于SQL-to-text 與text-to-SQL 領(lǐng)域的數(shù)據(jù)集主要內(nèi)容都是SQL-自然語言對(duì),因此兩個(gè)領(lǐng)域的研究可以共用數(shù)據(jù)集。目前text-to-SQL 領(lǐng)域的數(shù)據(jù)集主要包括ATIS[12-13]、GeoQuery[14]、Restaurants[15-16]、Scholar[17]、Academic[18]、Advising[19]、WikiSQL[20]、Spider[6]等。由 于WikiSQL 和Spider 數(shù)據(jù)集 規(guī)模較大,SQL-to-text 領(lǐng)域一般使用這兩個(gè)數(shù)據(jù)集進(jìn)行研究。
SQL-to-text 任務(wù)的輸入是一個(gè)SQL 和SQL 所屬的數(shù)據(jù)庫(kù)相關(guān)信息,輸出是一個(gè)自然語言翻譯。為評(píng)估SQL-to-text 模型的組合泛化能力,需要改變已有的SQL-to-text 數(shù)據(jù)集,使其測(cè)試數(shù)據(jù)中的組合泛化基本單元(SQL 子句)皆以不同的組合方式在訓(xùn)練數(shù)據(jù)中出現(xiàn)。
圖1 所示為提出SQL-to-text 模型組合泛化能力評(píng)估方法的整體框架,主要分為3 個(gè)部分,包含了4 個(gè)主要步驟。數(shù)據(jù)轉(zhuǎn)化是評(píng)估方法的核心部分,負(fù)責(zé)輸入的數(shù)據(jù)集,構(gòu)造出一個(gè)能夠評(píng)估SQL-to-text模型組合泛化能力的新數(shù)據(jù)集,其核心思路是將現(xiàn)有的數(shù)據(jù)集中的SQL 與自然語言進(jìn)行切分再組合,得到新數(shù)據(jù)集中的SQL-自然語言對(duì),再通過數(shù)據(jù)劃分操作分出用于訓(xùn)練和測(cè)試的數(shù)據(jù)。模型訓(xùn)練及能力評(píng)估是方法的重要部分,此部分基于數(shù)據(jù)轉(zhuǎn)化部分創(chuàng)建出的新數(shù)據(jù)集用于評(píng)估的SQL-to-text 模型,并基于新數(shù)據(jù)集對(duì)模型進(jìn)行能力評(píng)估,得到最終的模型組合泛化能力評(píng)估結(jié)果。

圖1 SQL-to-text 模型組合泛化能力評(píng)估方法整體框架Fig.1 Overall framework of compositional generalization ability evaluation method for SQL-to-text models
為使現(xiàn)有的SQL-to-text 數(shù)據(jù)集轉(zhuǎn)化為能夠評(píng)估模型組合泛化能力的新數(shù)據(jù)集,評(píng)估方法先對(duì)現(xiàn)有數(shù)據(jù)集中的SQL 與自然語言進(jìn)行切分再組合。為方便說明,使用Spider 數(shù)據(jù)集中的一個(gè)SQL-自然語言對(duì)作為輸入,對(duì)此步驟內(nèi)的具體操作進(jìn)行詳細(xì)介紹。
SQL:SELECT first_name,last_name FROM players WHERE hand=‘L’ ORDER BY birth_date。
自然語言翻譯:What are the full names of all left handed players in the order of birth date。
由于組合泛化考察的是以一種與訓(xùn)練不同的方式組合基本單元時(shí)模型能否理解其含義,因此需要對(duì)任務(wù)中的基本單元進(jìn)行定義。本文將SQL-to-text任務(wù)中組合泛化的基本單元定義為按SELECT、WHERE、GROUP BY、ORDER BY、INTERSECT、UNION、EXCEPT 關(guān)鍵字切分SQL 得到的子句,稱為SQL 子句。其中,查詢連接和嵌套子查詢不會(huì)額外切分SQL 子句,如此設(shè)置的原因是:自然語言比SQL 更加凝練,往往一句話就能夠表達(dá)出整句SQL的含義,如果更細(xì)地劃分SQL 子句,將導(dǎo)致自然語言片段難以切分。為了與其他SQL 關(guān)鍵字進(jìn)行區(qū)分,將用于SQL 子句切分的關(guān)鍵字稱為頂層關(guān)鍵字。表1 所示為切分后SQL 子句的類型及示例。

表1 SQL 子句的類型及示例Table 1 Types and examples of SQL clauses
對(duì)SQL-to-text 任務(wù)中組合泛化的基本單元進(jìn)行定義后,即可完成對(duì)SQL 的切分操作。以上述SQL為例,使用SELECT、WHERE 和ORDER BY 3 個(gè)頂層關(guān)鍵字將其切分為SELECT first_name,last_name FROM players、WHERE hand=‘L’以及ORDER BY birth_date 3 個(gè)子句。SQL-to-text 模型在測(cè)試時(shí)將面臨與訓(xùn)練時(shí)不同的SQL 子句的組合。
為了確定訓(xùn)練及測(cè)試時(shí)的正確翻譯結(jié)果,將SQL 切分為SQL 子句,在得到組合泛化的基本單元后,需要將自然語言也切分為與SQL 子句語義相符的片段,即令自然語言片段對(duì)齊到SQL 子句。表2所示為自然語言片段到SQL 子句對(duì)齊的示例,示例中的自然語言被切分為3 個(gè)片段,每個(gè)自然語言片段都與一個(gè)SQL 子句語義相符。

表2 自然語言片段到SQL 子句對(duì)齊的示例Table 2 Examples of aligning natural language fragments to SQL clauses
由于自然語言比SQL 更加凝練,往往一句話表達(dá)出整句SQL 的含義,因此自然語言比SQL 的切分更為復(fù)雜,并且切分出的自然語言片段可能存在重疊的部分。例如,表2 中的players 一詞既屬于SELECT 子句對(duì)應(yīng)片段,又屬于WHERE 和ORDER BY 子句對(duì)應(yīng)片段。在一些情況下,即使采取人工切分的方式仍難以得到與SQL 子句一一對(duì)應(yīng)的自然語言片段。
自然語言片段到SQL 子句對(duì)齊是SQL 與自然語言的切分再組合過程中的主要難點(diǎn)。此操作有2 種實(shí)現(xiàn)手段:通過啟發(fā)式規(guī)則進(jìn)行切分與借助神經(jīng)網(wǎng)絡(luò)模型進(jìn)行切分。由于此領(lǐng)域缺乏自然語言切分模型所需的數(shù)據(jù)集,因此選擇使用啟發(fā)式規(guī)則進(jìn)行此操作,具體可細(xì)分為關(guān)鍵字標(biāo)注和自然語言單詞拼接兩步。
3.2.1 關(guān)鍵字標(biāo)注
圖2 所示為關(guān)鍵字標(biāo)注的一個(gè)示例。此操作是依據(jù)SQL 和數(shù)據(jù)庫(kù)模式等相關(guān)信息,通過一系列規(guī)則對(duì)自然語言中的部分單詞標(biāo)注上對(duì)應(yīng)SQL 中的頂層關(guān)鍵字,它是自然語言片段到SQL 子句對(duì)齊的基礎(chǔ)。在圖2 中,SQL 的SELECT 子句查詢的是球員的全名,因此給自然語言中的names 和players 單詞加上標(biāo)注,表示這2 個(gè)單詞與SELECT 子句有關(guān)。WHERE 子句則提到查詢限定的是使用左手的球員,因此給自然語言中的left、handed、players 單詞加上標(biāo)注,表示這3 個(gè)單詞與WHERE 子句有關(guān)。ORDER BY 子句則提到查詢的球員是按照生日排序的,因此給players、birth、date 單詞加上標(biāo)注,表示這2 個(gè)單詞與ORDER BY 子句有關(guān)。最后,觀察到自然語言中的What 疑問代詞一般對(duì)應(yīng)SQL 的SELECT 子句,以及in the order of 詞組一般對(duì)應(yīng)SQL 的ORDER BY 子句,也為這些單詞加上相應(yīng)的標(biāo)注。

圖2 關(guān)鍵字標(biāo)注示例Fig.2 Example of keyword tagging
由于頂層關(guān)鍵字與SQL 子句一一對(duì)應(yīng),因此關(guān)鍵字標(biāo)注的本質(zhì)是SQL 子句與自然語言單詞的匹配。受文獻(xiàn)[21-23]的啟發(fā),為了盡可能地縮小SQL與自然語言間的語義差距,首先從SQL 出發(fā),為每個(gè)SQL 子句生成一個(gè)備選詞集合,再使用SQL 子句對(duì)應(yīng)的備選詞集合與自然語言中的單詞進(jìn)行匹配,為匹配成功的單詞標(biāo)注上引導(dǎo)該SQL 子句的頂層關(guān)鍵字,最后再對(duì)標(biāo)注的結(jié)果進(jìn)行調(diào)整,目的是使最終得到的自然語言片段更優(yōu)。
SQL 子句的備選詞為:該SQL 子句若翻譯為自然語言表達(dá)可能會(huì)使用到的詞。SQL 子句的備選詞集合中包含兩類詞:第1 類是與當(dāng)前特定查詢相關(guān)的詞,例如SQL 子句涉及的表名、列名、取值等;第2 類是適用于所有場(chǎng)景的詞,例如SQL 子句在自然語言中通常對(duì)應(yīng)的疑問代詞、連詞等。要獲取與當(dāng)前特定查詢相關(guān)的詞,需要先對(duì)SQL 進(jìn)行解析。在Spider 數(shù)據(jù)集中,每句SQL 都對(duì)應(yīng)了一個(gè)名為SQL 的字典[6](下文簡(jiǎn)稱為SQL 字典),該字典能夠無歧義地表達(dá)SQL 的含義,因此能夠從SQL 字典中提取出與當(dāng)前特定查詢相關(guān)的詞,放入相應(yīng)的SQL子句的備選詞集合中。而要獲取適用于所有場(chǎng)景的詞,需要依靠對(duì)Spider 數(shù)據(jù)集中大量SQL 及自然語言的觀察與歸納。例如:SELECT 子句一般對(duì)應(yīng)自然語言中的疑問代詞、與查詢或返回相關(guān)的動(dòng)詞,WHERE 子句一般對(duì)應(yīng)定語從句引導(dǎo)詞以及表示條件的介詞等。
為SQL 的每個(gè)子句生成備選詞集合后,即可使用此集合與SQL 對(duì)應(yīng)的自然語言中的單詞進(jìn)行匹配,為匹配成功的單詞標(biāo)注上引導(dǎo)該SQL 子句的頂層關(guān)鍵字。在進(jìn)行匹配之前,需要先對(duì)單詞進(jìn)行預(yù)處理,將單詞的時(shí)態(tài)、單復(fù)數(shù)、比較級(jí)、最高級(jí)等去除,只留下其主干部分,方便后續(xù)的匹配。例如將had 轉(zhuǎn)為have,dogs 轉(zhuǎn)為dog。
經(jīng)過匹配后,自然語言中的部分單詞被標(biāo)注了一個(gè)或多個(gè)頂層關(guān)鍵字,但是標(biāo)注的結(jié)果還能通過進(jìn)一步調(diào)整達(dá)到更好的效果。基于對(duì)Spider 數(shù)據(jù)集和實(shí)際標(biāo)注情況的觀察,設(shè)置了一系列標(biāo)注結(jié)果調(diào)整規(guī)則,設(shè)置規(guī)則的目的是減少關(guān)鍵字誤標(biāo)注并提高后續(xù)單詞拼接得到的自然語言片段的連貫性。標(biāo)注調(diào)整規(guī)則的具體示例如下:
若單詞為when、where、which、who、why 其中之一,且不是句子中的第一個(gè)單詞,當(dāng)前一個(gè)詞為and且SQL 的頂層關(guān)鍵字中沒有INTERSECT 時(shí),將and和此單詞的標(biāo)注設(shè)置為只有SELECT;當(dāng)前一個(gè)詞是名詞時(shí),將此單詞的SELECT 標(biāo)注去除。此規(guī)則的目的是盡可能地減少疑問代詞上的多重標(biāo)注情況,考慮到查詢多個(gè)列以及疑問代詞作為定語從句引導(dǎo)詞2 種情況。查詢多個(gè)列,例如:SELECT T1.emp_lname,T1.emp_hiredate FROM employee AS T1 JOIN professor AS T2 ON T1.emp_num=T2.emp_num WHERE T2.prof_office=“DRE 102”。對(duì)應(yīng)的自然語言翻譯為:What is the last name of the professor whose office is located in DRE 102,and when were they hired。在初步匹配后,when 的標(biāo)注為 SELECT 和WHERE,經(jīng)過規(guī)則的調(diào)整,when 的標(biāo)注為SELECT。在自然語言翻譯中使用疑問代詞作為定語從句引導(dǎo)詞,例如:What are the id of students who registered course 301。對(duì) 應(yīng)SQL 為:SELECT student_id FROM student_course_attendance WHERE course_id=301。在初步 匹配后,who 的標(biāo)注 為SELECT 和WHERE,經(jīng)過規(guī)則的調(diào) 整,who 的標(biāo)注為WHERE。
3.2.2 自然語言單詞拼接
為自然語言翻譯中的部分單詞標(biāo)注對(duì)應(yīng)SQL 的頂層關(guān)鍵字后,即可依據(jù)標(biāo)注對(duì)自然語言中的單詞進(jìn)行拼接,得到與SQL 子句語義相符的自然語言片段。此操作需要考慮:并非在每個(gè)單詞上都帶有標(biāo)注,在部分單詞上帶有多個(gè)標(biāo)注,同一種標(biāo)注可能在句子中不連續(xù)。通過算法1 為一個(gè)SQL 子句生成自然語言片段,此算法的關(guān)鍵是依據(jù)關(guān)鍵字標(biāo)注確定自然語言片段對(duì)應(yīng)的單詞位置區(qū)間。經(jīng)過關(guān)鍵字標(biāo)注后,自然語言翻譯中的每個(gè)位置都標(biāo)注了0 或多個(gè)頂層關(guān)鍵字,算法1 將這些分散的位置連接成區(qū)間,SQL 子句對(duì)應(yīng)的自然語言片段正是由這些區(qū)間內(nèi)的單詞拼接而成。算法1 的輸入為自然語言翻譯中的單詞、單詞的標(biāo)注以及引導(dǎo)當(dāng)前SQL 子句的頂層關(guān)鍵字,輸出為關(guān)鍵字對(duì)應(yīng)的單詞列表以及單詞位置區(qū)間列表(方便后續(xù)自然語言片段的組合)。算法偽代碼如下:
算法1自然語言單詞拼接
算法1從左到右遍歷自然語言翻譯,找到第1 個(gè)標(biāo)注有輸入的關(guān)鍵字的位置,將其設(shè)置為區(qū)間的開頭。從區(qū)間開頭往右繼續(xù)遍歷,若某個(gè)位置上存在關(guān)鍵字標(biāo)注,但不含輸入的關(guān)鍵字,則將其定為區(qū)間的結(jié)尾。由于關(guān)鍵字對(duì)應(yīng)的位置區(qū)間可能不止一個(gè),因此還需繼續(xù)向右遍歷,重復(fù)上述方法尋找新的區(qū)間。若遍歷結(jié)束后當(dāng)前區(qū)間只有開頭沒有結(jié)尾,則將其結(jié)尾定為自然語言翻譯的結(jié)尾,得到最后一個(gè)區(qū)間。假設(shè)一個(gè)SQL 對(duì)應(yīng)的自然語言翻譯中有N個(gè)詞,則算法1 的時(shí)間復(fù)雜度為O(N)。
將SQL 切分為SQL 子句,即得到組合泛化的基本單元后,便能得出基本單元的多種組合,作為模型需要翻譯的內(nèi)容。如表3 的第1 列所示,將切分出的SQL 子句進(jìn)行拼接組合即可得到多種組合結(jié)果。為保證組合結(jié)果的合理性,并避免人工書寫新的自然語言翻譯,僅對(duì)來自同一個(gè)SQL 的子句進(jìn)行組合。以Spider 數(shù)據(jù)集中的SQL 為例,若對(duì)來自SELECT avg(age),min(age),max(age)FROM singer WHERE country=“France”以 及SELECT DISTINCT country FROM singer WHERE age >20 中 的SQL 子句進(jìn)行組合,可得到SELECT avg(age),min(age),max(age)FROM singer WHERE age >20 以 及SELECT DISTINCT country FROM singer WHERE country=“France”。在此情況下,第1 個(gè)SQL 雖然符合語法,但是沒有實(shí)際意義,2 個(gè)SQL 都需要人工書寫新的自然語言翻譯。相比在同一SQL 內(nèi)進(jìn)行SQL子句的組合,能避免為組合出的SQL 人工書寫對(duì)應(yīng)的自然語言翻譯,且更容易組合出具有實(shí)際意義的SQL。這些SQL 子句的組合結(jié)果即為模型需要翻譯的內(nèi)容。

表3 SQL 子句和自然語言片段的組合示例Table 3 Examples of combinations of SQL clauses and natural language fragments
確定了模型需要翻譯的內(nèi)容后,還需要確定正確的翻譯結(jié)果。因此,在組合SQL 子句時(shí)還需要將SQL 子句所對(duì)應(yīng)的自然語言片段以相同方式進(jìn)行拼接組合。表3 的第2 列展示了與第1 列相對(duì)應(yīng)的自然語言片段的組合結(jié)果。由于僅對(duì)來自同一個(gè)SQL 的子句進(jìn)行組合,因此也只對(duì)來自同一個(gè)翻譯結(jié)果的自然語言片段進(jìn)行組合,保證自然語言片段組合結(jié)果的合理性。需要注意的是,一些自然語言片段間存在重疊部分,例如從表3 可以看出,SELECT 子句和WHERE 子句對(duì)應(yīng)的兩個(gè)自然語言片段都含有players 一詞,需避免在組合的結(jié)果中重復(fù)出現(xiàn)。
得到SQL 子句的組合及對(duì)應(yīng)的自然語言片段的組合后,就確定了模型需要翻譯的內(nèi)容及相應(yīng)的正確翻譯結(jié)果。如表3 所示,第1 列是模型需要翻譯的內(nèi)容,第2 列是正確的翻譯結(jié)果,由一個(gè)翻譯內(nèi)容和其翻譯結(jié)果構(gòu)成的一組數(shù)據(jù)為一個(gè)SQL-自然語言對(duì),是SQL-to-text 模型組合泛化能力評(píng)估數(shù)據(jù)集的主要組成成分。
通過對(duì)SQL 與自然語言的切分再組合,得到了大量的SQL-自然語言對(duì),為評(píng)估SQL-to-text 模型的組合泛化能力,按SQL-自然語言對(duì)中含有的SQL 子句個(gè)數(shù)對(duì)數(shù)據(jù)進(jìn)行劃分,得到用于模型訓(xùn)練和測(cè)試的兩種數(shù)據(jù)。如表4 所示,令SQL 子句個(gè)數(shù)小于3 的數(shù)據(jù)作為模型的訓(xùn)練數(shù)據(jù),令SQL 子句個(gè)數(shù)大于等于3 的數(shù)據(jù)作為模型的測(cè)試數(shù)據(jù)。
數(shù)據(jù)劃分后,組成測(cè)試數(shù)據(jù)的SQL 子句會(huì)以不同的組合方式在訓(xùn)練數(shù)據(jù)中出現(xiàn),采用這種數(shù)據(jù)劃分方式可以得知,當(dāng)訓(xùn)練時(shí)學(xué)習(xí)的知識(shí)以不同方式組合后,模型是否仍能理解其含義,即模型是否具有組合泛化能力。并且,模型測(cè)試時(shí)需要翻譯的內(nèi)容與訓(xùn)練時(shí)相比,SQL 子句個(gè)數(shù)更多,普遍長(zhǎng)度更長(zhǎng)且復(fù)雜度更高,此設(shè)置更加貼近SQL-to-text 模型的實(shí)際應(yīng)用場(chǎng)景,也更符合研究SQL-to-text 模型組合泛化能力的初衷。
通過對(duì)SQL 與自然語言的切分再組合得到大量的SQL-自然語言對(duì),再按所含的SQL 子句個(gè)數(shù)對(duì)數(shù)據(jù)進(jìn)行劃分,便完成了評(píng)估方法的數(shù)據(jù)轉(zhuǎn)化部分,創(chuàng)建出了用于評(píng)估SQL-to-text 模型組合泛化能力的新數(shù)據(jù)集。
5.1.1 對(duì)比方法
對(duì)比方法主要有以下2 種:
1)Template 方法[19]。此方法將SQL 中的地名、人名、數(shù)字等內(nèi)容進(jìn)行匿名化處理,得到SQL 對(duì)應(yīng)的查詢模板,并按模板劃分訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù),使同一模板對(duì)應(yīng)的SQL 只能同時(shí)出現(xiàn)在訓(xùn)練數(shù)據(jù)或測(cè)試數(shù)據(jù)中。
2)TMCD 方法[24]。此方法將SQL 中的單詞視為組合泛化的基本單元,保證每個(gè)單元至少在訓(xùn)練數(shù)據(jù)中出現(xiàn)一次,并使訓(xùn)練與測(cè)試數(shù)據(jù)中的分布差異盡可能大。
5.1.2 參與評(píng)估的SQL-to-text 模型
根據(jù)目前SQL-to-text 以及組合泛化領(lǐng)域的研究工作,選擇對(duì)文獻(xiàn)[3]在研究中所使用的SQL-to-text模型進(jìn)行組合泛化能力的評(píng)估,并沿用了該研究使用的模型名稱。這些模型都是編碼器-解碼器架構(gòu)的模型,涵蓋了序列到序列、樹到序列、圖到序列3 大類型,是SQL-to-text 領(lǐng)域常用的神經(jīng)網(wǎng)絡(luò)模型。由于這些模型都使用了基于注意力機(jī)制的長(zhǎng)短期記憶(LSTM)模型[25]作為解碼器,因此按其使用的編碼器類型命名。以下為參與評(píng)估的5 個(gè)模型:
1)BiLSTM:序列到序列模型。編碼器為雙向長(zhǎng)短期記憶(BiLSTM)模型[26],輸入為SQL 序列。
2)Transformer-Absolute position(ABS):序列到序列模型。編碼器為使用絕對(duì)位置編碼的Transformer 模型[27],為表述方便簡(jiǎn)稱為ABS 模型,輸入為SQL 序列。
3)Transformer-Relative position(REL):序列到序列模型。編碼器為使用相對(duì)位置編碼[28]的Transformer 模型,為表述方便簡(jiǎn)稱為REL 模型。輸入為SQL 序列。
4)TreeLSTM:樹到序列模型。編碼器為子結(jié)點(diǎn)的TreeLSTM 模型[29],輸入為SQL 構(gòu)造出的樹。
5)RGT:圖到序列模型。編碼器為文獻(xiàn)[3]提出的RGT 模型,輸入為SQL 構(gòu)造出的樹。
5.1.3 數(shù)據(jù)集
根據(jù)提出的SQL-to-text 模型[30-31]組合泛化能力評(píng)估方法,基于Spider 數(shù)據(jù)集構(gòu)造出評(píng)估SQL-totext 模型組合泛化能力的新數(shù)據(jù)集,將其命名為SpiderCompose 數(shù)據(jù)集。由于Spider 數(shù)據(jù)集的測(cè)試集未公開,輸入數(shù)據(jù)來自Spider 訓(xùn)練集與驗(yàn)證集,訓(xùn)練集包含7 000 個(gè)SQL-自然語言對(duì),驗(yàn)證集包含1 034 個(gè)SQL-自然語言對(duì)。為了評(píng)估模型的組合泛化能力,按SQL 子句的個(gè)數(shù)對(duì)數(shù)據(jù)進(jìn)行劃分,因此SpiderCompose 訓(xùn)練集包含了所有SQL 子句個(gè)數(shù)為1 和2 的數(shù)據(jù),共有25 709 個(gè)SQL-自然語言對(duì);驗(yàn)證集包含所有由Spider 訓(xùn)練集得到的SQL 子句個(gè)數(shù)為3 和4 的數(shù)據(jù),共有1 584 個(gè)SQL-自然語言對(duì);測(cè)試集包含所有由Spider 驗(yàn)證集得到的SQL 子句個(gè)數(shù)為3 和4 的數(shù)據(jù),共有200 個(gè)SQL-自然語言對(duì)。
在此數(shù)據(jù)劃分設(shè)置下,SpiderCompose 數(shù)據(jù)集與Spider 數(shù)據(jù)集具有不同的數(shù)據(jù)長(zhǎng)度分布情況。表5和表6 分別展示了Spider 數(shù)據(jù)集和SpiderCompose數(shù)據(jù)集中SQL 和自然語言的長(zhǎng)度分布情況。Spider數(shù)據(jù)集在設(shè)計(jì)時(shí)并未考慮到評(píng)估模型組合泛化能力的需求,其訓(xùn)練集和驗(yàn)證集具有相似的SQL 長(zhǎng)度分布和自然語言長(zhǎng)度分布。由于SpiderCompose 訓(xùn)練集中的SQL 包含1~2 個(gè)子句,而驗(yàn)證集和測(cè)試集中的SQL 包含3~4 個(gè)子句,因此訓(xùn)練集中的SQL 和自然語言普遍較短,而驗(yàn)證集和測(cè)試集中的SQL 和自然語言普遍較長(zhǎng)。整體上SpiderCompose 數(shù)據(jù)集的訓(xùn)練集、驗(yàn)證集和測(cè)試集具有不同的SQL 和自然語言長(zhǎng)度分布,這種分布更貼近模型的實(shí)際應(yīng)用場(chǎng)景,符合評(píng)估模型組合泛化能力的需求[11]。

表5 Spider 數(shù)據(jù)集的SQL 和自然語言長(zhǎng)度分布Table 5 SQL and natural language length distribution of Spider dataset

表6 SpiderCompose 數(shù)據(jù)集的SQL 和自然語言長(zhǎng)度分布Table 6 SQL and natural language length distribution of SpiderCompose dataset
為了將本文提出的評(píng)估方法與Template 和TMCD 方法進(jìn)行實(shí)驗(yàn)對(duì)比,使用文獻(xiàn)[24]的開源代碼將 Spider 數(shù)據(jù)集轉(zhuǎn)化為 SpiderTemplate 和SpiderTMCD 數(shù)據(jù)集。表7 展示了SpiderTemplate 數(shù)據(jù)集中SQL 和自然語言的長(zhǎng)度分布情況。由于Template 方法將查詢模板隨機(jī)地劃分到數(shù)據(jù)集的不同部分,使其訓(xùn)練集、驗(yàn)證集、測(cè)試集具有相似的SQL 和自然語言長(zhǎng)度分布。表 8 展示了SpiderTMCD 數(shù)據(jù)集中SQL 和自然語言的長(zhǎng)度分布情況。由于TMCD 方法使訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)間的組合分布差異盡可能得大,其訓(xùn)練集、驗(yàn)證集和測(cè)試集具有不同的SQL 和自然語言長(zhǎng)度分布,然而此方法未對(duì)數(shù)據(jù)的長(zhǎng)度進(jìn)行控制,導(dǎo)致驗(yàn)證集和測(cè)試集中的SQL 普遍較短,這種分布不符合SQL-to-text 模型的實(shí)際應(yīng)用場(chǎng)景。

表7 SpiderTemplate數(shù)據(jù)集的SQL 和自然語言長(zhǎng)度分布Table 7 SQL and natural language length distribution of SpiderTemplate dataset

表8 SpiderTMCD 數(shù)據(jù)集的SQL 和自然語言長(zhǎng)度分布Table 8 SQL and natural language length distribution of SpiderTMCD dataset
5.1.4 評(píng)估指標(biāo)
模型的能力評(píng)估實(shí)驗(yàn)使用了BLEU-4 評(píng)分[32]、人工評(píng)分、完全匹配率3 種指標(biāo),并取平均值作為評(píng)估結(jié)果。
雙語評(píng)估替補(bǔ)(BLEU)是目前常用的翻譯模型自動(dòng)評(píng)估方法。它采用N元組匹配的規(guī)則計(jì)算模型翻譯結(jié)果與參考翻譯結(jié)果之間的相似度,結(jié)果的值域范圍是[0,1],值域越大表示模型的翻譯質(zhì)量越好。
由于BLEU 算法只計(jì)算精度而不關(guān)心召回率,并且僅從字符串匹配的角度評(píng)估模型的翻譯質(zhì)量,無法重點(diǎn)關(guān)注對(duì)語義影響程度較大的詞,未考慮到同義表達(dá)的情況,因此加入了人工評(píng)分以彌補(bǔ)這些缺陷。
完全匹配率指模型翻譯結(jié)果與數(shù)據(jù)集提供的參考翻譯結(jié)果完全相同的比例,在計(jì)算時(shí)不會(huì)引入誤差,能夠較好地反映出模型提供完全正確的翻譯的能力,是模型能否投入實(shí)際應(yīng)用的關(guān)鍵指標(biāo)。
5.2.1 基于SpiderCompose 數(shù)據(jù)集的評(píng)估實(shí)驗(yàn)
使用SpiderCompose 測(cè)試集對(duì)5 個(gè)SQL-to-text模型的組合泛化能力進(jìn)行評(píng)估。為得到更準(zhǔn)確的評(píng)估結(jié)果,此部分包含2 組實(shí)驗(yàn),在實(shí)驗(yàn)1 中模型能發(fā)揮其組合泛化能力,在實(shí)驗(yàn)2 中模型無法發(fā)揮其組合泛化能力。通過2 組實(shí)驗(yàn)排除模型其他翻譯能力對(duì)評(píng)估結(jié)果的影響。
在實(shí)驗(yàn)1 中,5 個(gè)模型皆基于SpiderCompose 訓(xùn)練集進(jìn)行學(xué)習(xí),基于SpiderCompose 測(cè)試集進(jìn)行評(píng)估,測(cè)試集中的SQL 子句皆以不同組合方式在訓(xùn)練集中出現(xiàn),保證模型能夠發(fā)揮其組合泛化能力。鑒于組合泛化能力僅為模型翻譯能力的一部分,需要進(jìn)一步確認(rèn)實(shí)驗(yàn)1 中模型在測(cè)試集上提供正確翻譯的原因以及其中依靠組合泛化能力的占比。因此,在實(shí)驗(yàn)2 中同樣使用SpiderCompose 測(cè)試集對(duì)5 個(gè)模型進(jìn)行評(píng)估,區(qū)別是去除了訓(xùn)練集中與測(cè)試集含有相同SQL 子句的SQL-自然語言對(duì)。在實(shí)驗(yàn)2 的設(shè)置下,SQL-to-text 模型無法發(fā)揮其組合泛化能力,它們?yōu)镾QL 提供正確翻譯依靠的是其他翻譯能力。對(duì)比實(shí)驗(yàn)1 與實(shí)驗(yàn)2 的結(jié)果,即可進(jìn)一步確認(rèn)模型的組合泛化能力。表9 展示了實(shí)驗(yàn)1 和實(shí)驗(yàn)2 中5 個(gè)模型在SpiderCompose 測(cè)試集上翻譯的BLEU-4 評(píng)分、人工評(píng)分和完全匹配率的平均值以及2 次實(shí)驗(yàn)結(jié)果的差值,使用此落差作為最終的組合泛化能力評(píng)估結(jié)果。

表9 基于SpiderCompose 數(shù)據(jù)集的評(píng)估結(jié)果Table 9 Evaluation results based on Spider Compose dataset %
如表9 所示,5 個(gè)模型在實(shí)驗(yàn)2 中的表現(xiàn)和實(shí)驗(yàn)1 相比都存在較大的落差。此結(jié)果反映出模型在SpiderCompose 測(cè)試集上提供正確翻譯主要依靠其組合泛化能力,且模型組合泛化能力的發(fā)揮依賴于數(shù)據(jù)集的設(shè)置。在實(shí)驗(yàn)2 中所有模型的完全匹配率均為0,說明組合泛化能力在模型提供完全正確的翻譯方面起到了重要作用,而能否提供完全正確的翻譯對(duì)于模型能否投入正式的使用具有重要的影響。結(jié)合實(shí)驗(yàn)1 與實(shí)驗(yàn)2 的結(jié)果可知,ABS、BiLSTM、REL 3 個(gè)模型的組合泛化能力相對(duì)較高,RGT 模型的組合泛化能力最低,而它在實(shí)驗(yàn)2 中表現(xiàn)最好,說明現(xiàn)有的專為SQL-to-text 任務(wù)設(shè)計(jì)的模型(RGT 模型)雖具有較強(qiáng)的其他翻譯能力,但其組合泛化能力仍有較大的提升空間。
5.2.2 基于多個(gè)數(shù)據(jù)集的評(píng)估對(duì)比實(shí)驗(yàn)
使用5 個(gè)SQL-to-text 模型在SpiderTemplate、SpiderTMCD、Spider 數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn),與基于SpiderCompose 數(shù)據(jù)集的評(píng)估實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比。其中,Spider 數(shù)據(jù)集并非為評(píng)估模型組合泛化能力而設(shè)計(jì),其余3 個(gè)數(shù)據(jù)集則是為了評(píng)估模型組合泛化能力由Spider 數(shù)據(jù)集轉(zhuǎn)化得到。表10 展示了5 個(gè)模型在4 個(gè)數(shù)據(jù)集上的評(píng)估結(jié)果。如表10 所示,4 個(gè)數(shù)據(jù)集上的評(píng)估結(jié)果并不一致,在總體上,SpiderCompose 數(shù)據(jù)集與SpiderTMCD 數(shù)據(jù)集上的模型表現(xiàn)排序較為接近,SpiderTemplate 數(shù)據(jù)集與Spider 數(shù)據(jù)集上的模型表現(xiàn)排序較為接近。

表10 5 個(gè)模型在4 個(gè)數(shù)據(jù)集上的評(píng)估結(jié)果對(duì)比Table 10 Comparison of evaluation results of five models on four datasets %
由于完全匹配率對(duì)于模型能否投入實(shí)際應(yīng)用影響較大,表11 對(duì)5 個(gè)模型在4 個(gè)數(shù)據(jù)集上的完全匹配率進(jìn)行了對(duì)比。如表11 所示,在SpiderCompose數(shù)據(jù)集上模型的完全匹配率遠(yuǎn)高于其他2 個(gè)數(shù)據(jù)集,其中在Spider 數(shù)據(jù)集上模型的完全匹配率都為0。受完全匹配率影響,在表10 中SpiderCompose 數(shù)據(jù)集上的模型總體表現(xiàn)也優(yōu)于其他數(shù)據(jù)集上的模型總體表現(xiàn)。

表11 5 個(gè)模型在4 個(gè)數(shù)據(jù)集上的完全匹配率對(duì)比Table 11 Comparison of perfect match rates of five models on four datasets %
以下對(duì)3 種組合泛化能力評(píng)估方法進(jìn)行對(duì)比分析,說明結(jié)果存在差異的原因以及本文提出方法的優(yōu)勢(shì)。
首先,查詢知識(shí)的使用程度不同。Template 和TMCD 方法提出時(shí)的初衷是評(píng)估text-to-SQL 模型的組合泛化能力,受此影響,Template 和TMCD 方法未使用到SQL 子句的概念,導(dǎo)致模型在SpiderTemplate和SpiderTMCD 數(shù)據(jù)集上無法學(xué)習(xí)到SQL 子句的含義,對(duì)查詢相關(guān)知識(shí)的學(xué)習(xí)程度不足。雖然模型在SpiderTemplate 訓(xùn)練集中學(xué)習(xí)到了一些查詢模板的含義,但難以從中學(xué)習(xí)到模板的每個(gè)組件的含義,導(dǎo)致模型難以泛化到其他查詢模板。而TMCD 方法將SQL 包含的單詞設(shè)置為組合的基本單元,未充分考慮到同一單詞在不同的SQL 上下文中具有不同含義,使模型難以學(xué)習(xí)到完整的查詢知識(shí)。本文所提的方法則通過SQL 與自然語言的切分再組合,顯式地引導(dǎo)模型學(xué)習(xí)SQL 子句的含義以及子句間組合后的含義,幫助模型加深對(duì)SQL 結(jié)構(gòu)和查詢知識(shí)的理解,因此SpiderCompose 數(shù)據(jù)集上模型的翻譯表現(xiàn)優(yōu)于其他數(shù)據(jù)集。并且,模型翻譯結(jié)果的完全匹配率取得了大幅的提升,為模型投入實(shí)際應(yīng)用提供了啟發(fā)。
其次,劃分?jǐn)?shù)據(jù)的方式不同。Template 方法首先提取出SQL 對(duì)應(yīng)的查詢模板,然后將屬于同一查詢模板的SQL 一起隨機(jī)地劃分到訓(xùn)練數(shù)據(jù)或測(cè)試數(shù)據(jù)中,雖然保證了訓(xùn)練數(shù)據(jù)與測(cè)試數(shù)據(jù)中的SQL 具有不同的組合方式,但隨機(jī)劃分無法保證兩類數(shù)據(jù)間的關(guān)系。而本文方法依據(jù)SQL 子句的個(gè)數(shù)對(duì)數(shù)據(jù)進(jìn)行劃分,排除了隨機(jī)劃分帶來的問題,不僅符合組合泛化的要求,而且貼近SQL-to-text 模型的實(shí)際應(yīng)用場(chǎng)景。
最后,組合泛化能力對(duì)評(píng)估結(jié)果的影響不同。Template 和TMCD 方法未排除組合泛化能力以外的其他翻譯能力對(duì)模型評(píng)估結(jié)果的影響,即無法確認(rèn)模型提供正確翻譯的原因中依靠組合泛化能力的占比,導(dǎo)致評(píng)估結(jié)果不夠客觀準(zhǔn)確。相比之下,本文提出的方法不僅通過兩組實(shí)驗(yàn)排除了模型其他翻譯能力對(duì)結(jié)果的影響,得到了更為準(zhǔn)確的組合泛化能力評(píng)估結(jié)果,而且通過對(duì)SQL 和自然語言的切分再組合保證了模型在訓(xùn)練時(shí)能夠?qū)W習(xí)到所需的基礎(chǔ)知識(shí),不受來自原始數(shù)據(jù)集的限制,因此在基于SpiderCompose 數(shù)據(jù)集的實(shí)驗(yàn)中組合泛化能力對(duì)評(píng)估結(jié)果的影響較為明確。
綜上所述,本文所提方法對(duì)查詢知識(shí)的使用程度更高,劃分?jǐn)?shù)據(jù)的方式更加合理,得到的數(shù)據(jù)集更符合評(píng)估組合泛化能力的需求且更貼近模型的實(shí)際應(yīng)用場(chǎng)景,受到原始數(shù)據(jù)集的限制程度更低,能使模型發(fā)揮出其組合泛化能力,得到的評(píng)估結(jié)果也更準(zhǔn)確,并且為模型投入實(shí)際應(yīng)用提供了啟發(fā)。因此,與其他評(píng)估方法相比,本文提出的方法更具有優(yōu)勢(shì)。
本文主要對(duì)SQL-to-text 模型的組合泛化能力評(píng)估進(jìn)行研究,分析組合泛化能力對(duì)于SQL-to-text 模型的重要性,提出一種評(píng)估SQL-to-text 模型組合泛化能力的方法,將Spider 數(shù)據(jù)集轉(zhuǎn)化為能夠評(píng)估模型組合泛化能力的SpiderCompose 數(shù)據(jù)集,并對(duì)SQL-to-text 模型進(jìn)行組合泛化能力評(píng)估,彌補(bǔ)現(xiàn)有數(shù)據(jù)集對(duì)模型能力考察的不足。實(shí)驗(yàn)結(jié)果表明,本文評(píng)估方法優(yōu)于Template 和TMCD 方法,且現(xiàn)有模型在組合泛化維度上仍有較大提升空間,對(duì)模型投入實(shí)際應(yīng)用具有較大影響。后續(xù)將加強(qiáng)數(shù)據(jù)集對(duì)模型的引導(dǎo),或?qū)δP徒Y(jié)構(gòu)及訓(xùn)練方式進(jìn)行改變,以提升SQL-to-text 模型的組合泛化能力。