李青,鐘將,李立力,李琪
(1.重慶大學計算機學院,重慶 400044;2.重慶大學土木工程學院,重慶 400044;3.紹興文理學院計算機科學與工程系,浙江 紹興 312000)
隨著現代知識服務業的發展,海量跨領域知識信息封裝存儲于關系數據庫中,面向內容資源的知識信息存在嚴重過載現象。如何創新現代服務科學,攻克關鍵核心技術,重塑現代知識服務業技術體系和價值鏈,提高內容資源在現代知識服務業增加值中的貢獻度,創新發展現代知識服務新生態已成為研究熱點與難點。針對內容資源的智能化、知識化、精細化和重組化的碎片性管理需求,建立新技術范式下的復雜語義分析方法成為重要的研究目標。
復雜語義分析的任務是將人類自然語言轉換為對應的結構化查詢語言(SQL,structured query language),即Text-to-SQL。如何高效地表達隱層知識、技術、經驗與信息,則是復雜語義分析領域的研究熱點與難點。同時,復雜語義分析是自然語言處理中重要的子任務之一,可為智能問答[1-3]、機器翻譯[4]和復雜事件處理[5-6]等重要應用提供理論基礎。因此,本文重點關注如何將自然語言映射到結構化查詢語言SQL語句。
一直以來,復雜語義分析模型因缺乏高標準的標注數據集而難以訓練發展。2018年,來自耶魯大學的Yu等[7]成功構造了第一個具有復雜跨領域文本到SQL的標記數據集——Spider。2019年,Yu等[8]創新性地構造具有連貫查詢的另一大型復雜跨領域文本到SQL的標記數據集——SParC。Spider數據集中語義解析任務的示例如圖1所示。在此之前,幾乎所有傳統數據集(WikiSQL[9]、ATIS[10-11]、GeoQuery[12])都僅關注簡單的SQL查詢,進而導致訓練模型僅滿足匹配語義解析結果的需求,無法真正理解自然語言的含義[12]。
鑒于以上分析,本文提出自然語言查詢的形式化語義表示模型——PT-Sem2SQL(pretraining semantic parsing to SQL)。為證明在面向真實內容資源中模型是有效的,采用Spider數據集和SParC數據集進行測試。本文模型構建思路是在以BERT[13]為主干的MT-DNN[14-15]預訓練技術基礎上,結合KL(Kullback-Leibler)差異技術[16]設計預訓練模塊。同時,為了捕獲順序信息滿足復雜的SQL查詢,提出帶有多個子句和附加句內上下文信息的增強模塊。最后,采用自修正學習優化的思想生成優化模型的執行過程,解決解碼過程中的錯誤輸出。
綜上所述,本文的主要貢獻如下。
首先,本文設計結合KL差異技術增加[Zero]列的MT-DNN預訓練模塊,構建結合多任務學習與標記數據的PT-Sem2SQL模型。這部分模塊的建立可有效解決文本到SQL任務的零列[WHERE]子句的預測挑戰,滿足復雜跨領域文本到SQL的數據集查詢任務要求。
其次,本文提出增加額外的增強模塊來捕獲句內上下文語義信息。通過增強模塊,子任務可采用細粒度語義分析方式進行刻畫,同時底層子任務的構建可為上層任務表示提供基礎。通過實驗驗證,句內上下文語義信息對于結構化數據的語言任務同樣起到至關重要的作用。

圖1 Spider數據集中語義解析任務的示例
最后,針對解碼過程中的錯誤輸出問題,PT-Sem2SQL模型構建自修正方法優化生成模型的執行過程。將通過模型產生偽Text-to-SQL查詢與真實的Text-to-SQL查詢視為一對修正任務,采用自修正的思想優化真偽數據間差距,進而達到自修正優化的目的。
針對Text-to-SQL語義解析問題的研究已經持續幾十年。同時,相關領域專家已經提出各種對應的語義解析器模型[17-22]。
早期研究重點是將Text-to-SQL任務映射為序列生成的建模問題,主要構建具有自注意機制的神經網絡序列到序列模型[23-24]。雖然此類方法僅取得初步效果,但無法確保生成語法的有效輸出。其中,以TypeSQL為代表,它是2018年由Yu等[25]提出的依存語法分析模型,可以滿足基礎查詢語言需求獨立生成目標SQL查詢的SELECT和WHERE子句。同年,Dong等[26]提出Coarse2Fine模型,通過優先輸出一組草圖,采用插槽填充的方法優化子句解碼的結果。另一種Pointer-SQL模型則展現出新思路,提出sequence-to-action的方法,該方法使用基于注意機制的復制方法和基于值構造丟失函數的方法[27]。通過構造具有注釋功能的seq2seq模型,試圖確保模型在解碼過程中各個階段語法的正確性。
盡管上述以自然語言為基礎的語義解析器模型成功地解決了簡單語義到形式化SQL查詢語句的問題,但因簡單語義的單一性缺陷問題導致難以擴展,無法生成復雜的SQL查詢語句。同時,此類僅在傳統的WikiSQL數據集[9]上訓練的模型難以捕獲各種自然語言變體。2018年,耶魯大學的Yu等成功開發Spider數據集[7],囊括困難層面的SQL查詢(同時包含2個以上的[SELECT]、[WHERE]和[GROUP BY]子句)。2019年,Yu等為彌補Spider數據集中未關注上下文語境信息的不足,進一步地開發出大型上下文相關跨領域SParC數據集。它包含138個領域、具有復雜上下文依存關系、囊括復雜語義多樣性的Text-to-SQL數據集。本文將Spider數據集與SParC數據集進行對比,如表1所示。
由此可見,解決復雜跨領域的數據集上Text-to-SQL語義解析問題,需要模型訓練生成復雜的文本到SQL查詢。同時,此類任務也更類似于自然場景下的查詢。2019年提出的預處理技術,極大地增強了以詞表示為主的外部語料庫(如Glove模型[28])。受到此類預處理技術的發展啟發,Hwang等[29]針對文本到SQL查詢建立新型預訓練的BERT模型。此外,一些工作也同樣證明預訓練外部語料庫的模型在文本到SQL任務中具有顯著改進的價值[13-14,30]。最優預訓練技術MT-DNN[14]則更顯著地體現了這一優勢,成功用多任務學習將2類語料庫(標注和未標注的語料庫)進行深度融合。由此可知,未標注語料庫的訓練可有效增強模型的通用性。
本文將模型的總體結構劃分為4個描述模塊深入解構PT-Sem2SQL模型,即編碼模塊、增強模塊、輸出模塊和自修正模塊。PT-Sem2SQL模型的整體結構與基礎模塊如圖2所示。
為了使PT-Sem2SQL模型更適合于復雜跨領域查詢任務,模型重新設計MT-DNN預處理模塊,增加[Zero]和[CON-TI]增強句內語義信息。編碼模塊主要為以下3個部分,如圖3所示。
1)句內語義信息部分([CON-TI])
本文設計[CON-TI]來捕獲句內上下文語義信息的位置。同時,每個構造的Token包括3個部分:Token embedding(ET)、Type embedding(EY)和Position embedding(EP)。

表1 Spider與SParC數據集對比

圖2 PT-Sem2SQL模型的整體結構與基礎模塊

圖3 PT-Sem2SQL模型的編碼模塊
2)零列部分([Zero])
本文擴展原有用于編碼自然語言查詢的預訓練模型,添加表頭列表。同時采用[SEP]將查詢子句與表頭列表分離,在每個列表模式中增加[Zero]部分。同時,本文也對KW-COL的交叉熵損失函數進行優化,重新定義KL值,使其KL值介于D(Q|PKW-COL)之中,即

3)MT-DNN初始化部分
將編碼器與MT-DNN預訓練技術共同使用,使其編碼器具有多個自然語言查詢任務的功能。最終為模型對齊的有效查詢提供支持。
利用PT-Sem2SQL模型的編碼模塊輸出用于編碼的向量,即

其中,x[CON-TI]代表捕獲的句內上下文語義信息;每個查詢句輸入為xq,1,…,xq,n(n是查詢字的數量);是第i列第j個Token的輸出;表示增強模塊的輸出。所有向量都屬于?d,d是MT-DNN編碼器的隱藏維度(在大型MT-DNN模型中d=1 024)。
由于在編碼模塊中各部分捕獲上下文影響力不夠強,本文建立增強模塊以加強句內的上下文影響。增強模塊使用x[CON-TI]來更新架構內各個部分,同時與輸出模塊不同模塊相互對齊連接。用softmax分類器將對齊模型分類,如式(2)所示。

其中,αij為匹配全局上下文的列的第j個標記的輸出;??偨Y每列結果,采用式(3)計算增強模塊。

本文采用與式(2)和式(3)相類似的方式,統計增強模塊預測關鍵字數。為了防止出現嵌套模塊,本文添加終端模塊的預測,具體將在第3.4節中詳述。

本文引入Yu等[31]在Text-to-SQL任務的分解方式,將其分解為9個子模塊。各模塊都預測最終SQL查詢語句的一部分。但是,與Yu等所提SyntaxSQLNet模型不同的是,本文的PT-Sem2SQL模型定義編碼模塊和增強模塊,各個模塊的計算方式也相應產生變化。同時,也注意到使用一個堆棧來運行本文的解碼過程,直到其置空。
1)$ IUEN子模塊
其關鍵字選自{INTERSECT,UNION,EXCEPT,NONE}中及概率計算式,為

2)$ KW子模塊
為結合復雜跨領域查詢的特性,PT-Sem2SQL模型需要先預測SQL查詢語句中的關鍵字數,并在3種可能的關鍵詞中進行選擇{WHERE,GROUP BY,ORDER BY}。

3)$ OP子模塊
子模塊關鍵字選自{=,>,<,>=,<=,!=,LIKE,NOT IN,IN,BETWEEN}。$ OP子模塊同樣需要先預測關鍵字數,其概率計算式為

4)$ AGG子模塊
子模塊關鍵字選自{MAX,MIN,SUM,COUNT,AVG,NONE}。同樣,它取決于聚合器的數量,計算式為

5)$ COL子模塊
采用$ COL子模塊來預測表中各列,其概率計算式為

6)$ ROOT/TERMINAL子模塊
為了結合復雜跨領域查詢的特性,本文添加預測跨度以方便預測是否有新的子模塊。這種方法能有效預測跨度的開始和結束位置。同時,模型需要首先調用$ OP子模塊,然后確定它何時是$ ROOT子模塊。

7)$ AND/OR子模塊
子模塊關鍵字選自{AND,OR}中,其概率計算式為

8)$ DESC/ASC/LIMIT子模塊
同樣,模塊選自母模塊ORDER BY下的{DESC,ASC,DESC LIMIT,ASC LIMIT}中,概率計算式為

9)$ HAVING子模塊
模塊選自母模塊GROUP BY下的{HAVING},概率計算式為

將輸出模塊生成的SQL查詢語句反向生成偽查詢問題(back-question),傳入自修正模塊。通過偽查詢與真實的查詢問題(real-question)間進行二元極大博弈,以達到模型自修正的目的。自修正模塊解析如圖4所示。

圖4 PT-Sem2SQL模型的自修正模塊
修正函數定義為

本文使用復雜跨領域的Spider數據集[7]進行初步驗證,包括11 840個查詢問題,其中有6 445個獨特的復雜跨領域SQL查詢和206個具有多個表的數據庫。同時,這也是一個具有復雜跨域SQL查詢的新型Text-to-SQL數據集。Spider數據集同時匯聚6個現有數據集中的數據,分別為Restaurants[32-33]、GeoQuery[34]、Scholar[35]、Academic[36]、Yelp和IMDB[37]。本文將Spider數據集隨機劃分為3個部分進行實驗,即訓練集(8 659個查詢問題)、驗證集(1 034個查詢問題)、測試集(2 147個查詢問題)。為進一步驗證PT-Sem2SQL模型在上下文相關跨領域Text-to-SQL數據集中的效果,本文使用SParC數據集進行更進一步實驗。在SParC數據集中同樣采用隨機劃分進行實驗,即訓練集(3 024個查詢問題)、驗證集(422個查詢問題)、測試集(842個查詢問題)。
本文的PT-Sem2SQL模型是在Python 3.6上采用PyTorch并在MT-DNN之上構建實現的。具體來說,模型使用全局學習率為10–5的Adam優化器,其中,β1=0.9或β1=0.999。同時,根據2017年Smith等[38]提出的增加訓練過程中的Batch Size,能夠在訓練集和測試集上取得類似學習率衰減表現的思想,設置Batch Size大小為32。PT-Sem2SQL模型采用全鏈接層的注意力機制,Dropout參數選自{0.1,0.2,0.3,0.4,0.5,0.6},并通過參數調整性實驗訓練10輪,選擇在驗證集上的最佳匹配模型將Dropout設置為0.2。
4.2.1 Spider準確度測量
本文通過對比先前的模型來評估PT-Sem2SQL模型的執行效果。表2為模型在驗證集和測試集上文本到SQL查詢的準確性。為了對比展現自修正模塊的影響程度,在表2中添加消融性實驗結果展示行。

表2 Spider數據集中不同難度水平下各模型的準確度測量
由表2實驗結果可知,對比其他基線Text-to-SQL模型(包括最新的SQLove模型),在Spider數據集上本文模型都表現出較好的準確性。同時在PT-Sem2SQL模型中,使用自修正技術導致執行精度在測試集中從原先的36.8%提高到40.9%,在驗證集從原先的33.7%提高到38.1%。由此可見,采用自修正方法可以顯著改善效果。
4.2.2 各模塊準確度測量
2018年,Yu等將SQL子句分解為5個部分(如“SELECT”“WHERE”“GROUP BY”“ORDER BY”和“KEYWORDS”)來計算組件匹配F1分數[7]。本文模型也效仿該方式,檢查各個組件是否完全匹配,如表3所示。
從表3的結果可以看出,本文設計的PT-Sem2SQL模型是第一個在各個模塊都超過60%準確度的模型。特別地,PT-Sem2SQL模型在最具挑戰性的[WHERE]子句上取得很好的準確率。這主要歸功于重新設計增加[Zero]和[CON-TI]的編碼模塊。該模塊在MT-DNN預處理的基礎上重新結合Kullback-Leibler差異技術定義KL值增加[Zero],再利用[CON-TI]部分增強句內語義信息,為模型提供更多的示例,貼合滿足復雜跨領域數據的查詢需求。
同時,本文認真分析錯誤檢索表中的錯誤輸出問題。關注到主要是因為在使用模板自動生成查詢時,概率性引入一些錯誤。例如,問題“What is the maximum percentage grown 2000—2008 in burundi?”與“year”有關,錯誤輸出SQL查詢包含不必要的“COUNT”。同時,另外一個值得注意的錯誤是因為人們設計的訓練數據中沒有考慮自然語言的模糊性表達問題。雖然針對Spider數據集此類問題不是關鍵性問題,但對于其他大多數任務卻是共性問題。比如針對同樣的自然語言查詢,一些人傾向于使用自然語言“和”,而另外一些人傾向于使用自然語言“或”進行表達。
4.2.3 各訓練數據量準確度測量
為觀測各模型在不同訓練數據量下的表現,本文選擇在{20%,40%,60%,80%,100%}訓練集下刻畫準確度趨勢,如圖5所示。

圖5 各模型在不同訓練數據量下的準確度趨勢
實驗結果表明,在不同訓練數據量下,PT-Sem2SQL的性能都優于其他6個基線模型。此外,隨著訓練數據量的增加,PT-Sem2SQL可以實現的性能改進尤為突出,準確度測量高于其他模型。其主要原因是隨著訓練數據資源的增加,PT-Sem2SQL可以更好地訓練問題分解器并進行信息提取,進而生成更準確的查詢子模塊以及準確填充提取的關鍵詞信息。這些有助于PT-Sem2SQL在Text-to-SQL語義解析過程中獲得更好的邏輯形式結果,提升模型準確度。

表3 Spider測試集上各組件匹配的F1分數

表4 SParC數據集中不同難度水平下各模型的準確度測量
4.3.1 SParC準確度測量
與Spider數據集類似,本文的模型準確度測量重點對比2018—2019年Yu等所提出的基線SyntaxSQLNet[31]、CD-Seq2Seq[39]模型與2019年Hwang等所提出的基線SQLove模型[29]。Spider數據集上不同難度水平占比分別為:Easy(40%)、Medium(37%)、Hard(12%)、Extra Hard(11%)。對比實驗結果如表4所示。
從表4的結果可以看出,PT-Sem2SQL的測試集準確度性能首次達到26.6%。進行自修正模塊消融實驗后模型在驗證集和測試集上的準確性仍優于其他基線模型,可以基本解決上下文相關Text-to-SQL任務。通過消融實驗可以看出,自修正模塊對模型性能貢獻度較高,在測試集中執行精度從原先的22.5%提高到26.6%,在驗證集中執行精度從原先的19.7%提高到24.1%。
4.3.2 問題匹配度與上下文相關交互匹配度測量
2019年,Yu等將上下文感知模型的性能測試分解為2個部分(問題匹配度測量和上下文相關交互匹配度測量),以此計算上下文相關跨領域Text-to-SQL的模型匹配度[8]。本文模型也效仿該方式,檢查模型是否完全匹配,具體如表5所示。
實驗結果表明,PT-Sem2SQL模型性能優于其他基線模型,問題匹配度高達34.1%,而上下文相關交互匹配度達13.4%,相比最佳歷史基線CD-Seq2Seq模型提升5.9%。當模型進行消融實驗后,問題匹配度由34.1%降低到32.7%,上下文相關交互匹配度由13.4%降低到11.9%。主要是因為模型在自修正模塊可以分析歷史問題差異性,經過修正模塊后可解析問題間交互差異,有效擴展上下文相關交互通路。同時,通過表5可以看出,由于SParC數據集復雜度大幅增加,各模型匹配度表現欠佳,仍有很大的改進空間。

表5 問題匹配度與上下文相關交互匹配度測量
本文提出了PT-Sem2SQL模型,重新解構復雜語義解析問題,強化Text-to-SQL任務的上下文信息。同時,本文基于最先進的MT-DNN預訓練技術重新設計模型的編碼模塊,成功解決在復雜語義Text-to-SQL任務數據集中的列預測問題。針對解碼過程中的錯誤輸出問題,PT-Sem2SQL模型自修正模塊優化模型。通過Spider和SParC數據集的不同模型對比實驗結果表明,本文的模型展示優于所有基線模型,表現出卓越性能。這些新的嘗試為復雜的跨域Text-to-SQL任務提供有效技術支持,也希望下一步引入知識圖譜表征方法,解決局部子句查詢出錯的問題。