国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于深度學(xué)習(xí)的數(shù)據(jù)庫自然語言接口綜述

2021-09-13 01:54徐思涵蔡祥睿溫延龍袁曉潔
關(guān)鍵詞:解碼語義句式

潘 璇 徐思涵 蔡祥睿 溫延龍 袁曉潔

1(南開大學(xué)計(jì)算機(jī)學(xué)院 天津 300350) 2(南開大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 天津 300350) 3(天津市網(wǎng)絡(luò)與數(shù)據(jù)安全技術(shù)重點(diǎn)實(shí)驗(yàn)室(南開大學(xué)) 天津 300350)

關(guān)系型數(shù)據(jù)庫自1970年[1]被提出以來,經(jīng)過數(shù)十年的發(fā)展,已然成為數(shù)據(jù)存儲(chǔ)的主流工具,被廣泛應(yīng)用在政府部門以及商業(yè)、學(xué)術(shù)等各種領(lǐng)域中.結(jié)構(gòu)化查詢語言(structured query language,SQL)是用戶或應(yīng)用程序與數(shù)據(jù)庫交流的重要手段.自然語言接口的出現(xiàn),打破了用戶和終端之間的交互屏障,是人工智能研究領(lǐng)域的重要分支之一,其中面向數(shù)據(jù)庫接口的實(shí)現(xiàn)也受到了研究人員的廣泛關(guān)注.數(shù)據(jù)庫自然語言接口(natural language interface to data-base,NLIDB)是一種通過自然語言實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫查詢的接口,它能消除用戶在查詢數(shù)據(jù)庫時(shí)遇到的技術(shù)壁壘,即解除了用戶必須掌握SQL語法知識(shí)的限制,實(shí)現(xiàn)了通過自然語言的描述就可以查詢數(shù)據(jù)庫的功能.總的來說,NLIDB的目標(biāo)就是實(shí)現(xiàn)自然語言查詢到SQL的轉(zhuǎn)化.

自20世紀(jì)70年代[2]以來,就有LUNAR[3],LADDER[4],Chat-80[5],ASK[6]等早期NLIDB系統(tǒng)相繼問世.這里引用Affolter等人[7]的總結(jié),可以將這些系統(tǒng)根據(jù)技術(shù)方法劃分為4類:1)基于關(guān)鍵字(keyword-based)的系統(tǒng),以SODA[8],QUICK[9]等為代表.這類系統(tǒng)以數(shù)據(jù)庫中的基本數(shù)據(jù)與元數(shù)據(jù)的倒排索引作為檢索對(duì)象,將它們和自然語言查詢進(jìn)行匹配,以識(shí)別出查詢中提到的關(guān)鍵字.但是其缺點(diǎn)在于該方法無法識(shí)別出自然語言中未直接出現(xiàn)的潛在語義.2)基于模式(pattern-based)的系統(tǒng),以QuestIO[10],NLQ/A[11]等為代表,這類系統(tǒng)能夠?qū)⑸詮?fù)雜的自然語言模式映射到預(yù)先指定的查詢句式中.3)基于解析(parsing-based)的系統(tǒng),以ATHENA[12],NaLIR[13]等為代表,這類系統(tǒng)引入了更多自然語言處理技術(shù),比如借助語法分析樹解析自然語言問句.因此這類方法能將問句中的語義映進(jìn)一步射到預(yù)設(shè)的SQL模板中.4)基于語法(grammar-based)的系統(tǒng),以Ginseng[14],TR Discover[15]等為代表,這類系統(tǒng)具有一組預(yù)設(shè)的語法規(guī)則,用它限制用戶的輸入行為,以形成格式規(guī)范的自然語言查詢,易于系統(tǒng)分析.這4類方法可以歸結(jié)為基于規(guī)則(rule-based)的生成方法.基于這4類方法的系統(tǒng)只能根據(jù)固定的數(shù)據(jù)庫格式以及預(yù)設(shè)的查詢模板,才能實(shí)現(xiàn)SQL的輸出.但是自然語言中普遍存在多歧義和描述多樣性現(xiàn)象,這就會(huì)導(dǎo)致在實(shí)際應(yīng)用中預(yù)設(shè)的匹配規(guī)則或查詢模板無法覆蓋到更多更復(fù)雜的自然語言查詢中.上述方法大部分只能處理固定領(lǐng)域的數(shù)據(jù)庫,即NLIDB只能根據(jù)固定的表結(jié)構(gòu)來設(shè)計(jì)實(shí)現(xiàn),所以系統(tǒng)一般無法移植到其他數(shù)據(jù)庫中使用.至今還沒通用的商業(yè)化解決方案或原型系統(tǒng),其主要原因還是由于目前尚無適用于不同數(shù)據(jù)庫表結(jié)構(gòu)的NLIDB[16].

近年來深度學(xué)習(xí)的應(yīng)用極大提高了語音識(shí)別、視覺物體識(shí)別、生物信息等許多人工智能領(lǐng)域的技術(shù)水平[17].深度學(xué)習(xí)模型基于神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn),而其中一類重要的網(wǎng)絡(luò)結(jié)構(gòu)——循環(huán)神經(jīng)網(wǎng)絡(luò)(recurrent neural network,RNN)在處理如文本和語音等序列數(shù)據(jù)中發(fā)揮著重要作用.基于RNN的編碼器-解碼器(encoder-decoder)框架是一種端到端的深度神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),被廣泛應(yīng)用于機(jī)器翻譯、語義分析、文本摘要、對(duì)話生成等許多自然語言處理的任務(wù)中.其中語義分析(semantic parsing)任務(wù)的目標(biāo)是將自然語言轉(zhuǎn)化成邏輯形式(logical form).這種邏輯形式是以自然語言作為驅(qū)動(dòng)的語義表示形式,能夠映射自然語言的含義[18].比如Lambda Calculus,SQL和機(jī)械控制指令等程序語言,或者Python,Java等通用編程語言,都屬于邏輯形式的范疇.因此基于編碼器-解碼器框架實(shí)現(xiàn)的NLIDB可以視為一類語義分析模型,輸入為自然語言查詢,通過編碼器-解碼器的分析,最終輸出語義對(duì)應(yīng)的SQL,總體流程如圖1所示.

Fig.1 NLIDB based on encoder-decoder framework圖1 基于編碼器-解碼器框架的NLIDB

編碼器-解碼器框架中,編碼器將自然語言查詢轉(zhuǎn)化成中間語義向量,解碼器再將中間向量解碼成邏輯形式.這樣的處理過程能降低語義分析模型對(duì)預(yù)設(shè)詞匯、模板以及人工特征的依賴,可以讓模型不再局限于固定領(lǐng)域的數(shù)據(jù)庫或特定的邏輯形式表達(dá).因此深度學(xué)習(xí)模型能夠讓支持跨數(shù)據(jù)庫或跨語言NLIDB的實(shí)現(xiàn)成為可能.

雖然已有相關(guān)綜述總結(jié)了機(jī)器學(xué)習(xí)在數(shù)據(jù)庫系統(tǒng)中的應(yīng)用[19],但是并沒有專門針對(duì)NLIDB進(jìn)行探討.因此本文對(duì)近年來利用深度學(xué)習(xí)方法實(shí)現(xiàn)NLIDB的成果進(jìn)行梳理,尤其針對(duì)輸入是自然語言、輸出是SQL的這類模型進(jìn)行總結(jié).由于還有一類研究是以執(zhí)行數(shù)據(jù)庫查詢后的結(jié)果作為模型的輸出目標(biāo)[20-21],這類研究并不作為本文討論的重點(diǎn),因?yàn)閺姆椒ǖ目蓴U(kuò)展性來看,以查詢的邏輯形式作為目標(biāo)輸出,可以在任意時(shí)間以及面對(duì)任意量級(jí)的表內(nèi)容的情況下實(shí)現(xiàn)方法的重用[22].

相關(guān)文獻(xiàn)成果的搜索與分析過程如圖2所示:首先在Google Scholar中分別以“natural language+neural network+sql”“natural language+deep learning+sql”“deep learning+text to sql”這3種關(guān)鍵詞配置方案初步檢索出209篇文獻(xiàn);再分別以實(shí)現(xiàn)途徑是深度學(xué)習(xí)模型和輸出目標(biāo)是邏輯形式作為進(jìn)一步判斷標(biāo)準(zhǔn),篩選出87篇文獻(xiàn);然后以解碼方法為依據(jù),將成果歸納成4個(gè)解碼類別,分別為基于序列的生成方法、基于固定模板的生成方法、框架-細(xì)節(jié)的分階段生成方法和基于語法的層級(jí)式生成方法.

Fig.2 Literature search and analysis process圖2 文獻(xiàn)查詢與分析流程

1 基于深度學(xué)習(xí)的NLIDB任務(wù)描述和總體流程

1.1 任務(wù)描述

基于深度學(xué)習(xí)的NLIDB可以描述為,以自然語言問句(natural language question,NLQ)以及其他已知信息(如數(shù)據(jù)庫表結(jié)構(gòu)信息)作為輸入,通過深度學(xué)習(xí)的語義分析模型生成與NLQ語義對(duì)應(yīng)的SQL.SQL是一種用于數(shù)據(jù)庫交互的程序設(shè)計(jì)語言,能實(shí)現(xiàn)對(duì)關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的存取、查詢和更新等管理操作.以數(shù)據(jù)集WikiSQL[23]為例,其中的SQL一般遵循基本查詢句式:“SELECTaggselcolWHEREwhecolopval(ANDwhecolopval)*”.其中的幾個(gè)變量有:“agg”為COUNT,MIN,MAX等聚合函數(shù)關(guān)鍵字,可以為空;“selcol”表示SELECT子句中被選中的列(SELECTcolumn,selcol);“whecolopval”表示W(wǎng)HERE子句中的1個(gè)查詢條件,其中“whecol”為查詢條件中被選中的列(WHEREcolumn,whecol);“op”表示=,<,>等運(yùn)算符;“val”表示條件值;“*”為WHERE子句中條件個(gè)數(shù)大于1的情況.例如已知NLQ為“What is the height of Willis Tower in Chicago?”,以及已知數(shù)據(jù)庫中有如下列:Rank,Name,Location,Height(ft),F(xiàn)loor,Year,則這句NLQ對(duì)應(yīng)的SQL為“SELECTHeight(ft)WHEREName=‘Willis Tower’ANDLocation=‘Chicago’”.Spider[24]數(shù)據(jù)集中除了包含SQL的基本查詢句式,還會(huì)涉及GROUP BY,HAVING以及嵌套查詢等查詢句式.NLIDB實(shí)現(xiàn)SQL的生成不同于Python等編程語言的生成,其數(shù)據(jù)庫中的表結(jié)構(gòu)也是已知信息,因此可以根據(jù)設(shè)計(jì)的需要而作為模型的輸入信息.

NLIDB的實(shí)現(xiàn)具有一定挑戰(zhàn).1)查詢關(guān)鍵詞或數(shù)據(jù)庫表信息有時(shí)不會(huì)在NLQ中直接出現(xiàn),因此容易造成查詢意圖與SQL元素的錯(cuò)誤匹配.比如有NLQ:“Show the names of students who have a grade higher than 5 and have at least 2 friends.”,其對(duì)應(yīng)的SQL中,就包含GROUP BY子句:“GROUP BYfriend.student_idHAVING COUNT(*)>=2”,而查詢關(guān)鍵字GROUP BY或列名student_id沒有在NLQ中顯式地體現(xiàn)出來.這項(xiàng)挑戰(zhàn)的本質(zhì)在于,SQL是以有效查詢關(guān)系數(shù)據(jù)庫為目的而設(shè)計(jì)的,并不具備自然語言意義表征的功能.因此NLIDB需要具有識(shí)別NLQ中無法顯式映射到SQL的那部分信息的能力.2)NLIDB需克服以往系統(tǒng)只能處理特定領(lǐng)域數(shù)據(jù)庫的問題,這就需要深度學(xué)習(xí)模型具備解析未見過的NLQ或數(shù)據(jù)庫表的泛化能力.這項(xiàng)挑戰(zhàn)的困難在于模型在生成SQL的過程中,比如遇到列名的輸出時(shí),需處理未能在訓(xùn)練集中出現(xiàn)的領(lǐng)域外(out-of-domain,OOD)詞匯,而OOD詞匯在已經(jīng)訓(xùn)練好的模型中缺乏準(zhǔn)確的相關(guān)表示[25],這項(xiàng)挑戰(zhàn)也被稱為零樣本(zero-shot)挑戰(zhàn).

1.2 深度學(xué)習(xí)方法與傳統(tǒng)方法的對(duì)比分析

1)方法對(duì)比

基于深度學(xué)習(xí)方法相比傳統(tǒng)rule-based方法,其最大的優(yōu)勢(shì)在于前者能夠支持更豐富的自然語言變化環(huán)境[7].由于rule-based方法在生成SQL時(shí),需要遵循預(yù)先設(shè)定的規(guī)則和查詢框架.因此對(duì)于NLQ中豐富而變化的查詢語義,rule-based方法理解起來是比較局限的,只能利用附加方法彌補(bǔ)缺陷.例如Li等人[26]針對(duì)系統(tǒng)在遇到無法理解的查詢語義時(shí),采用生成查詢建議的方式引導(dǎo)用戶重組查詢,直至查詢符合規(guī)范為止.而基于深度學(xué)習(xí)方法的NLIDB能夠處理更為靈活多變的查詢描述,不僅能解析自然語言中的隱含語義,而且具有更強(qiáng)的NLQ到SQL的組件映射能力,從而使生成的SQL準(zhǔn)確度獲得大幅提高.為了比較這2種方法,將Kim等人[27]的比較實(shí)驗(yàn)進(jìn)行整合,分別在2種方法中選擇2個(gè)模型進(jìn)行比較,如表1所示.比較所用的數(shù)據(jù)集為WikiSQL,其中Accall是在生成的結(jié)果中,語義正確的SQL在所有結(jié)果中的比例.Accselcol,Accagg,Accwhecol,Accop,Accval分別表示SELECT子句的列、聚合函數(shù)、WHERE子句的列、運(yùn)算符和條件值這5個(gè)SQL元素的生成準(zhǔn)確率.

Table 1 Accuracy Comparison of Deep Learning-Based Methods and Rule-Based Methods表1 深度學(xué)習(xí)方法與rule-based方法的準(zhǔn)確率比較

從表1中可以看出,深度學(xué)習(xí)方法在所有評(píng)估指標(biāo)中的結(jié)果都遠(yuǎn)高于rule-based方法,從而展現(xiàn)出前者在語義映射中的準(zhǔn)確度高、穩(wěn)定性好的優(yōu)勢(shì).

2)新的任務(wù)挑戰(zhàn)

深度學(xué)習(xí)方法較傳統(tǒng)rule-based方法,存在新的挑戰(zhàn):①基于深度學(xué)習(xí)方法的NLIDB是一類有監(jiān)督的機(jī)器學(xué)習(xí)模型,因此對(duì)訓(xùn)練數(shù)據(jù)的依賴性較強(qiáng).為了保證生成SQL的準(zhǔn)確率,需要向模型提供大量樣本,也就是由NLQ和與之語義對(duì)應(yīng)的SQL組成的訓(xùn)練數(shù)據(jù).②在模型的訓(xùn)練方面,基于深度學(xué)習(xí)的NLIDB較rule-based方法包含更多的訓(xùn)練參數(shù),比如詞向量或神經(jīng)網(wǎng)絡(luò)參數(shù)等.因此模型的計(jì)算需要花費(fèi)更久的時(shí)間,以及占用更多的內(nèi)存空間.③從研究重點(diǎn)來看,rule-based方法側(cè)重詞表的質(zhì)量、SQL句式模板的設(shè)計(jì)以及NLQ的特征轉(zhuǎn)化等;而深度學(xué)習(xí)方法是基于編碼器-解碼器的表示學(xué)習(xí)框架,其研究重點(diǎn)轉(zhuǎn)化為自然語言的編碼表示方法、解碼過程中的SQL生成方法、多方法的融合技術(shù)以及神經(jīng)網(wǎng)絡(luò)優(yōu)化技術(shù)等,所以研究內(nèi)容更為廣泛和開放.

1.3 基于深度學(xué)習(xí)模型的NLIDB處理流程

利用深度學(xué)習(xí)模型實(shí)現(xiàn)NLQ到SQL的轉(zhuǎn)化總體分為5個(gè)步驟,如圖3所示:

Fig.3 NLIDB implementation process based on deep learning framework圖3 基于深度學(xué)習(xí)框架的NLIDB處理流程

1)準(zhǔn)備數(shù)據(jù)集.數(shù)據(jù)集包括作為輸入信息的NLQ、目標(biāo)數(shù)據(jù)庫以及作為監(jiān)督信息的SQL.數(shù)據(jù)集按照一定比例分割成訓(xùn)練集、驗(yàn)證集和測(cè)試集.

2)預(yù)處理.以英文數(shù)據(jù)集的處理為例,在預(yù)處理中首先對(duì)文本分別進(jìn)行小寫化、糾正拼寫、提取詞根等處理,再利用分詞工具(如Stanford CoreNLP[31])做分詞處理.分詞后樣本中的每個(gè)原子級(jí)表達(dá)為一個(gè)標(biāo)記(token).

3)詞嵌入(word embedding).將分詞化后的樣本進(jìn)行詞嵌入處理.比如使用預(yù)訓(xùn)練模型Glove[32]對(duì)所有標(biāo)記初始化為詞嵌入向量.嵌入向量可以根據(jù)模型的設(shè)計(jì)需要同編碼器-解碼器一起訓(xùn)練,也可以將其固定不進(jìn)行訓(xùn)練.

4)訓(xùn)練深度學(xué)習(xí)模型.對(duì)編碼器-解碼器使用基于梯度的優(yōu)化方法(如Adam[33]或RMSProp[34]等)進(jìn)行迭代訓(xùn)練,編碼器的輸入端一般為NLQ和數(shù)據(jù)庫信息,解碼器輸出SQL.數(shù)據(jù)集中的SQL作為監(jiān)督信息用于目標(biāo)函數(shù)的計(jì)算.

5)模型評(píng)估.根據(jù)模型輸出的SQL,利用執(zhí)行準(zhǔn)確度或邏輯形式準(zhǔn)確度等指標(biāo)評(píng)估模型.

2 數(shù)據(jù)集與評(píng)估方式

2.1 數(shù)據(jù)集

深度學(xué)習(xí)模型需要大規(guī)模語料數(shù)據(jù)作為驅(qū)動(dòng)而實(shí)現(xiàn)訓(xùn)練,本節(jié)總結(jié)了可以作為NLIDB模型訓(xùn)練的數(shù)據(jù)集,共計(jì)20個(gè),每個(gè)數(shù)據(jù)集除了NLQ和數(shù)據(jù)庫,都明確提供了查詢語句的邏輯形式描述,基本情況如表2所示.

Table 2 Basic Information of the Datasets表2 數(shù)據(jù)集基本情況

以下分別從單領(lǐng)域和跨領(lǐng)域數(shù)據(jù)集、語言類型、查詢句式以及語義分析任務(wù)這4個(gè)角度對(duì)數(shù)據(jù)集進(jìn)行介紹.

1)單領(lǐng)域和跨領(lǐng)域數(shù)據(jù)集

單領(lǐng)域數(shù)據(jù)集是指全部樣本建立的查詢均面向固定的表結(jié)構(gòu),因此數(shù)據(jù)集涉及的領(lǐng)域較為封閉,這使深度學(xué)習(xí)模型有足夠能力學(xué)習(xí)針對(duì)特定領(lǐng)域數(shù)據(jù)庫的信息表示.比如ATIS[35]是航班預(yù)定主題的數(shù)據(jù)集,一共涉及32張表,所有的樣本全部在這些表的基礎(chǔ)上建立.交叉領(lǐng)域數(shù)據(jù)集(cross-domain)中,每個(gè)樣本有各自的數(shù)據(jù)庫結(jié)構(gòu),比如:WikiSQL[23]數(shù)據(jù)集中,數(shù)據(jù)庫來自Wikipedia的24241張HTML表格,涉及的主題比較廣泛,每個(gè)樣本建立的查詢分別能夠?qū)?yīng)到數(shù)據(jù)集中的一個(gè)數(shù)據(jù)庫;Spider[24]也是交叉領(lǐng)域數(shù)據(jù)集,包含了200個(gè)數(shù)據(jù)庫,涵蓋138個(gè)領(lǐng)域.這類數(shù)據(jù)集也稱為zero-shot數(shù)據(jù)集,因?yàn)樗枰P湍軌蛟诓煌I(lǐng)域數(shù)據(jù)庫形成的上下文中,實(shí)現(xiàn)NLQ到SQL的語義映射,因此模型應(yīng)具備處理未知領(lǐng)域數(shù)據(jù)庫的能力.

2)語言類型

從輸出的語言類型來看,以上數(shù)據(jù)集涵蓋了多種邏輯形式:比如ATIS[35]是以Lambda Calculus作為目標(biāo)語言的數(shù)據(jù)集,之后被Iyer等人[36]改寫成了SQL的版本;JOBS[37]則是以Prolog作為目標(biāo)語言;LC-QuAD[43]是以SPARQL作為目標(biāo)語言,是以查詢DBpedia知識(shí)庫為目的而設(shè)計(jì)的數(shù)據(jù)集.不過目前還是以SQL作為目標(biāo)語言的數(shù)據(jù)集居多.從NLQ的語言類型來看,英文數(shù)據(jù)集居多.針對(duì)此現(xiàn)狀,Min等人[46]提出了CSpider數(shù)據(jù)集,該數(shù)據(jù)集將Spider數(shù)據(jù)集中的NLQ以中文形式呈現(xiàn),而數(shù)據(jù)庫部分仍保留原來的英文版本.CSpider作為為數(shù)不多的跨語言數(shù)據(jù)集,為語義分析的研究引入了多語言環(huán)境下的跨語言語義理解等有意義的研究方向.1)和2)這2部分的相關(guān)總結(jié)如表3所示.

Table 3 Summary of the Datasets表3 數(shù)據(jù)集總結(jié)

3)查詢句式

大部分?jǐn)?shù)據(jù)集的創(chuàng)建流程是先建立一定數(shù)量的SQL句式模板,再通過手工標(biāo)注填補(bǔ)模板預(yù)留的空白形成樣本.所以句式模板決定了SQL的復(fù)雜程度.比如WikiSQL[23]數(shù)據(jù)集的樣本大部分為SQL的基本查詢句式,并且只涉及單表查詢,SCHOLAR[36]數(shù)據(jù)集則預(yù)設(shè)了22種模板來創(chuàng)建樣本,Spider[24]數(shù)據(jù)集包含的SQL句式較為豐富,除了基本查詢句式,還涉及GROUP BY,HAVING,JOIN,INTERSECT,EXCEPT,UNION,NOT IN,EXIXTS,LIKE等子句,此外還有嵌套查詢的樣本.有的數(shù)據(jù)集會(huì)根據(jù)SQL句式復(fù)雜程度標(biāo)注樣本的難度等級(jí),比如Academic[13]數(shù)據(jù)集根據(jù)SQL的agg類型和嵌套查詢數(shù)量,將數(shù)據(jù)集劃分成easy,medium,hard這3個(gè)等級(jí),Spider[24]數(shù)據(jù)集通過綜合評(píng)估子句類型,將SQL關(guān)鍵字按數(shù)量由低至高將數(shù)據(jù)集劃分成easy,medium,hard,extra hard這4個(gè)等級(jí),借助難度等級(jí)信息有助于全面評(píng)估模型在處理不同SQL句式中的語義分析能力.

4)語義分析任務(wù)

隨著新數(shù)據(jù)集的不斷推出,相關(guān)語義分析任務(wù)正朝著以下2個(gè)方面發(fā)展:1)數(shù)據(jù)集的復(fù)雜程度逐漸提高,導(dǎo)致任務(wù)的難度也逐漸提高.數(shù)據(jù)集的發(fā)展趨勢(shì)體現(xiàn)在:單領(lǐng)域向跨領(lǐng)域數(shù)據(jù)集發(fā)展;單語言向跨語言數(shù)據(jù)集發(fā)展;NLQ由單問句向基于交互的問句形式發(fā)展,比如SparC[47]數(shù)據(jù)集改變了以往樣本中1個(gè)NLQ只對(duì)應(yīng)1個(gè)SQL的形式,它將Spider[24]數(shù)據(jù)集的樣本擴(kuò)展成多輪對(duì)話的形式,每個(gè)樣本包含多個(gè)NLQ,并且前后NLQ之間存在上下文依賴關(guān)系.因此模型不僅需要提高跨領(lǐng)域、跨語言的語義分析能力,而且在處理對(duì)話式數(shù)據(jù)集時(shí),模型需要追蹤歷史對(duì)話信息來識(shí)別當(dāng)前查詢的意圖,因此還需具備上下文依賴的對(duì)話追蹤能力.2)任務(wù)類型朝多元化發(fā)展.比如模型在處理CoSQL[48]數(shù)據(jù)集時(shí)除了需要處理語義分析任務(wù),還要實(shí)現(xiàn)對(duì)話生成任務(wù).因此模型需要同時(shí)具備3種功能:基于對(duì)話跟蹤的SQL生成功能;將SQL執(zhí)行結(jié)果反饋給用戶的對(duì)話生成功能;用戶意圖的監(jiān)測(cè)與消歧功能.以下針對(duì)3)和4)提到的單表查詢、多表查詢和涉及上下文依賴的數(shù)據(jù)集,分別進(jìn)行樣本的舉例,如表4所示:

Table 4 Examples of Dataset Samples表4 數(shù)據(jù)集樣本示例

2.2 評(píng)估方式

模型評(píng)估方法的可歸納為7種.評(píng)估時(shí)通常采取2個(gè)以上方法,才能實(shí)現(xiàn)多角度的綜合評(píng)估.

1)執(zhí)行準(zhǔn)確度(execution accuracy)Accex.Accex=Nex/N,其中Nex表示SQL執(zhí)行結(jié)果正確的樣本數(shù),N表示樣本總數(shù).該方式的缺點(diǎn)在于盡管有的樣本執(zhí)行結(jié)果正確,但是無法確保生成的SQL是語義正確的.

2)邏輯形式準(zhǔn)確度(logical form accuracy)Acclf.Acclf=Nlf/N,其中Nlf表示能夠精確匹配真實(shí)值字符串的樣本數(shù),N表示樣本總數(shù).該方式的缺點(diǎn)在于會(huì)過濾掉不能精確匹配,但是執(zhí)行結(jié)果正確的樣本.

3)查詢匹配準(zhǔn)確度(query-match accuracy)Accqm.對(duì)于SQL的WHERE子句包含多個(gè)條件的情況,條件的順序并不影響查詢的邏輯含義,比如“SELECTnameFROMinsuranceWHEREage>18 ANDgender=‘male’”這句SQL就與“SELECTnameFROMinsuranceWHEREgender=‘male’ANDage>18”在邏輯含義上是完全一致的.因此Accqm是在Acclf的基礎(chǔ)上消除了預(yù)測(cè)值和真實(shí)值之間因?yàn)闂l件順序不一致而被判定為false negative的情況.

4)子句準(zhǔn)確度.為了評(píng)估模型在不同子句上的表現(xiàn),需要將完整的SQL拆解成不同子句,分別進(jìn)行邏輯形式準(zhǔn)確度的評(píng)估.比如用于評(píng)估agg的預(yù)測(cè)準(zhǔn)確率Accagg、評(píng)估selcol的預(yù)測(cè)準(zhǔn)確率Accselcol等.由于評(píng)估對(duì)象的細(xì)化,有的模型[16]還利用Precision,Recall,F(xiàn)1分?jǐn)?shù)評(píng)估SQL各子句的生成情況.

5)樹的精確匹配準(zhǔn)確度(tree exact match accuracy)[49].在一些使用抽象語法樹(abstract syntax trees,ASTs)實(shí)現(xiàn)解碼(詳見3.4節(jié))的模型中,ASTs是生成SQL過程中的具有樹結(jié)構(gòu)的中間產(chǎn)物.該方法是將模型生成的ASTs作為評(píng)估對(duì)象,真實(shí)值則是按照統(tǒng)一方式,將SQL轉(zhuǎn)化成由規(guī)范化樹節(jié)點(diǎn)組成的ASTs,然后對(duì)兩者的匹配程度進(jìn)行評(píng)估.

6)問題匹配(question match)準(zhǔn)確率與交互匹配(interaction match)準(zhǔn)確率[47]這2種評(píng)估方法適用于評(píng)估模型在對(duì)話式數(shù)據(jù)集(如SParC)中的表現(xiàn).問題匹配準(zhǔn)確率是指以問題為單位,其預(yù)測(cè)正確的問題數(shù)量占全部問題數(shù)量的比例.交互匹配準(zhǔn)確率是指以樣本為單位,其預(yù)測(cè)正確的樣本數(shù)量占全部樣本數(shù)量的比例.

7)語言模型評(píng)估指標(biāo) NLQ到SQL的轉(zhuǎn)化可以看作是一種機(jī)器翻譯任務(wù),因此有的模型[16,50]通過計(jì)算BLEU分?jǐn)?shù)[51]或Perplexity分?jǐn)?shù)評(píng)估預(yù)測(cè)結(jié)果.但是由于SQL序列的字符排列順序?qū)τ诓樵兊挠行詠碚f至關(guān)重要,因此將BLEU分?jǐn)?shù)作為評(píng)估指標(biāo)并不完全可靠[50].

3 不同解碼方法下的SQL生成模型

基于深度學(xué)習(xí)模型的NLIDB絕大部分是建立在端到端的機(jī)器翻譯框架之上的,而編碼器-解碼器作為框架的實(shí)現(xiàn)方法,其中針對(duì)各個(gè)環(huán)節(jié)的改進(jìn)成為了NLIDB研究的重點(diǎn).在相關(guān)成果的歸納整理中發(fā)現(xiàn)許多模型的優(yōu)化路線聚焦在解碼環(huán)節(jié)中,因此以解碼方法為依據(jù)進(jìn)行分類是有意義的,這樣不僅能將目前的研究成果清晰地加以區(qū)分,還能夠突出每個(gè)類別下模型各自的特點(diǎn).本節(jié)根據(jù)歸納分析得出的4類解碼方法分別進(jìn)行總結(jié),其概念圖如圖4所示.

Fig.4 Concept graph for 4 categories of decoding methods圖4 4類解碼方法概念圖

3.1 基于序列的生成方法

3.1.1 方法概述

基于序列的生成方法是利用序列-序列[52](sequence to sequence)的機(jī)器翻譯框架實(shí)現(xiàn)SQL的生成,該方法是將NLQ和SQL均作為序列進(jìn)行處理.其中NLQ作為輸入,分別通過編碼器和解碼器,最后輸出SQL.編碼器與解碼器是2個(gè)互不共享訓(xùn)練參數(shù)的多層RNN,大部分采用長短期記憶(long short-term memory,LSTM)[53]單元或者其他門控循環(huán)單元(gated recurrent unit,GRU)[54]作為網(wǎng)絡(luò)基本單元,以1個(gè)時(shí)間步處理1個(gè)標(biāo)記的方式循環(huán)處理整個(gè)序列,如圖5所示.

Fig.5 Sequence to sequence model圖5 序列-序列模型

圖5中編碼器處理|q|個(gè)時(shí)間步,|q|表示輸入NLQ中的標(biāo)記個(gè)數(shù),每步編碼一個(gè)標(biāo)記,處理順序可以單向,也可以雙向.然后解碼器處理|a|個(gè)時(shí)間步,|a|表示輸出SQL的標(biāo)記個(gè)數(shù),每步輸出一個(gè)標(biāo)記,處理順序?yàn)閱蜗騺肀WC輸出序列需具有可讀性.

以LSTM單元舉例,編碼器的處理流程就是把向量化的輸入序列逐一通過LSTM函數(shù)計(jì)算后得到隱向量(也稱中間語義編碼向量)的過程.解碼器的處理流程為:在每步輸出中,根據(jù)當(dāng)前隱向量計(jì)算得到輸出空間中所有標(biāo)記的概率分布,然后利用Softmax函數(shù)輸出最大概率對(duì)應(yīng)的標(biāo)記.模型的最終輸出是最大化SQL序列的條件概率,即輸出序列中所有標(biāo)記的概率之乘積,如式(1)所示.其中q=x1x2…x|q|為NLQ標(biāo)記序列,a=y1y2…y|a|為SQL標(biāo)記序列.為了使模型在解碼進(jìn)程中選擇性地突出輸入序列中不同的細(xì)節(jié),通常在每一步解碼時(shí)利用注意力機(jī)制強(qiáng)調(diào)輸入中特定的局部信息.

(1)

預(yù)測(cè)階段中,SQL序列的生成通常使用集束搜索(beam search)完成.由于解碼器在輸出時(shí)對(duì)應(yīng)的詞匯表規(guī)模比較大,而過于龐大的搜索空間會(huì)降低序列輸出的準(zhǔn)確度.比如Brad等人[16]提到即便只保留了高頻詞,編碼器和解碼器對(duì)應(yīng)的詞匯表內(nèi)容也都非常龐大,其詞匯量分別是500和2 000.因此基本的序列-序列模型的表現(xiàn)力非常局限,需要改進(jìn)中間流程或借助其他輔助方法以提高SQL輸出的準(zhǔn)確度.

3.1.2 改進(jìn)方法

針對(duì)基本序列-序列模型的缺陷,許多研究都提出了改進(jìn)方案,在此歸納為6個(gè)改進(jìn)方向.

1)限制解碼搜索空間.Zhong等人[23]提出了基于Pointer Networks[55]的序列-序列的改進(jìn)模型.Pointer Networks被廣泛應(yīng)用于文本摘要[56]和問答任務(wù)[57]中,它的作用是將輸入信息和上下文中的標(biāo)記拷貝至輸出序列中.改進(jìn)模型通過使用Pointer Networks把解碼的搜素空間限制在輸入端的NLQ序列范圍內(nèi),或者還可以擴(kuò)展為由數(shù)據(jù)庫列名、SQL關(guān)鍵字詞匯表和NLQ這3部分組成的搜索空間.這樣不僅大幅度降低了解碼器的搜素范圍,還解決了解碼器無法生成詞匯表未登錄詞(out-of-vocabulary,OOV)的問題,類似方法還有Copy Mechanism[58].

Jia等人[59]提出了基于注意力的動(dòng)態(tài)拷貝機(jī)制,解碼過程中先用Softmax選擇下一步輸出的“動(dòng)作”類型,再用選擇的動(dòng)作進(jìn)行解碼.其中“寫”動(dòng)作是指從解碼對(duì)應(yīng)的詞匯表中進(jìn)行輸出;“拷貝”動(dòng)作則依據(jù)注意力分?jǐn)?shù)拷貝輸入序列中的標(biāo)記.該方法融合了普通序列-序列的輸出方法和基于Pointer Network的輸出方法,突破了2種方法各自的局限,這種思路也為后續(xù)ASTs解碼方法的出現(xiàn)奠定了基礎(chǔ).

2)數(shù)據(jù)庫元素的匿名化.Utama等人[60-61]提出了DBPal系統(tǒng),該系統(tǒng)通過匿名化樣本中WHERE子句val的出現(xiàn)方式,來減輕模型的學(xué)習(xí)負(fù)擔(dān).DBPal中專門設(shè)立了參數(shù)處理器,它負(fù)責(zé)將NLQ中提及的val用占位符替代.模型生成SQL后再將其中的占位符還原成NLQ中的描述.這種處理使模型在訓(xùn)練中能從數(shù)據(jù)庫的實(shí)際內(nèi)容中獨(dú)立出來,避免了模型無法輸出OOD或OOV詞匯的問題.

3)強(qiáng)調(diào)NLQ中的數(shù)據(jù)庫元素.與匿名化做法不同的是,Wang等人[62]是將NLQ中提及到的數(shù)據(jù)庫列名或條件值(以下統(tǒng)稱為數(shù)據(jù)庫元素)標(biāo)注在輸入序列中.標(biāo)注過程分為2步:第1步借助編輯距離、詞嵌入空間距離、元知識(shí)匹配等方法搜尋NLQ中所有可能關(guān)聯(lián)的數(shù)據(jù)庫元素,并作為候選;第2步對(duì)NLQ構(gòu)建語法分析樹,并對(duì)分析樹利用最大二分匹配算法得到符合全局一致性的標(biāo)簽分配方案.之后Wang[63]又對(duì)標(biāo)注過程做了改進(jìn),先以基于RNN的二分類器逐一對(duì)所有與NLQ可能相關(guān)的數(shù)據(jù)庫元素進(jìn)行語義層面判斷,確定存在關(guān)聯(lián)的元素集合,然后用對(duì)抗文本方法定位這些元素在NLQ中出現(xiàn)的位置來完成標(biāo)注.

4)數(shù)據(jù)增強(qiáng).Jia等人[59]在序列-序列模型的訓(xùn)練階段引入“數(shù)據(jù)重組”的數(shù)據(jù)增強(qiáng)方法,專門建立一個(gè)生成模型來擴(kuò)充訓(xùn)練集的規(guī)模,進(jìn)而更多地向深度學(xué)習(xí)模型注入先驗(yàn)知識(shí)來提高SQL的生成能力.與以往只在輸入數(shù)據(jù)中添加噪音,卻不改變輸出結(jié)果的模式不同,該方法通過設(shè)計(jì)“上下文無關(guān)”的語法作為數(shù)據(jù)生成規(guī)則,為每組樣本同步改變輸入和輸出中的細(xì)節(jié)內(nèi)容,從而成為新的樣本.

5)神經(jīng)網(wǎng)絡(luò)的優(yōu)化.Yin等人[50]在3個(gè)SPARQL數(shù)據(jù)集(Monument,LC-QuAD,DBNQA)中分別測(cè)試了RNN、卷積神經(jīng)網(wǎng)絡(luò)(convolutional neural networks,CNN)和Transformer[64]這3類不同的網(wǎng)絡(luò)架構(gòu).在所有數(shù)據(jù)集的表現(xiàn)中,基于CNN架構(gòu)的改進(jìn)模型ConvS2S[65]獲得了最高BLEU分?jǐn)?shù),而且達(dá)到了最快收斂速度.ConvS2S的多卷積層的分層處理機(jī)制能緩解RNN的長程依賴問題,而且其并行的計(jì)算方式在訓(xùn)練速度上占據(jù)優(yōu)勢(shì).

Shaw等人[66]在序列-序列模型中引入了圖神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)(graph neural network,GNN),編碼器和解碼器使用了含有多層自注意力的Trans-former[64]結(jié)構(gòu),其中以GNN層替換掉其中1個(gè)自注意力層,使模型能很好地捕捉到序列節(jié)點(diǎn)之間的關(guān)系.因此基于圖的表示方法能將NLQ、數(shù)據(jù)表實(shí)體以及實(shí)體間的關(guān)系系統(tǒng)地關(guān)聯(lián)起來,消解了語義分析任務(wù)中數(shù)據(jù)庫實(shí)體和自然語言表達(dá)之間的潛在沖突.

6)注意力的加工.TREQS[67]在序列-序列模型中添加了基于注意力的Translate-Edit機(jī)制和查表修正這2方面的改進(jìn).Translate-Edit使用了2個(gè)注意力來引導(dǎo)解碼:①通過使用時(shí)序注意力[68]來避免解碼時(shí)重復(fù)關(guān)注NLQ中的相同信息;②使用動(dòng)態(tài)注意力,以靈活機(jī)動(dòng)的方式強(qiáng)調(diào)解碼歷史中已出現(xiàn)過的表名或列名等數(shù)據(jù)庫信息,以提高生成SQL的邏輯有效性.

Zhang等人[69]的序列-序列模型為了更好地適應(yīng)SParC[47]數(shù)據(jù)集的樣本特征,做了4處注意力的設(shè)計(jì):1)利用聯(lián)合注意力(co-attention)將NLQ編碼和數(shù)據(jù)表的編碼互相添加注意力;2)為當(dāng)前NLQ編碼添加歷史NLQ的注意力(turn attention);3)解碼過程中,將融合有數(shù)據(jù)表信息和歷史NLQ注意力的上下文向量添加到計(jì)算中;4)在解碼的上下文向量中添加歷史輸出的SQL的注意力,這樣在新SQL的生成過程中,可以參考到歷史SQL的信息.

3.1.3 方法總結(jié)

此類方法的缺陷與機(jī)器翻譯任務(wù)表現(xiàn)出來的問題一致,即存在輸入序列越長,模型預(yù)測(cè)效果越差的情況,以及龐大的搜索空間會(huì)削弱模型的解碼能力等.因此相關(guān)改進(jìn)方案也是針對(duì)這些缺點(diǎn)進(jìn)行優(yōu)化,比如使用Pointer Networks縮減解碼搜索空間的方法,就適用于生成SQL這種需要從輸入中摘取信息的任務(wù),同時(shí)還能解決模型無法生成OOD和OOV問題.其他優(yōu)化方法還包括:引入注意力機(jī)制突出輸入端的局部信息;解碼方法向多元形式轉(zhuǎn)化,比如將詞匯表抽取和輸入序列抽取結(jié)合起來進(jìn)行處理;利用不同程度的數(shù)據(jù)增強(qiáng)手段加強(qiáng)模型的適應(yīng)力;強(qiáng)調(diào)或弱化NLQ中的數(shù)據(jù)庫元素等.基于上述優(yōu)化方法,可以使模型從強(qiáng)制學(xué)習(xí)輸入信息的形式特征中解放出來,從而更多地投入到結(jié)構(gòu)特征的挖掘.

3.2 基于固定模板的生成方法

3.2.1 方法概述

SQL作為一種結(jié)構(gòu)化語言,不僅能以序列的方式來處理,還可以將SQL的結(jié)構(gòu)考慮進(jìn)來作為生成方式,這樣較序列-序列模型能更進(jìn)一步縮減輸出空間[23],從而獲得更準(zhǔn)確、邏輯性更強(qiáng)的結(jié)果.本節(jié)主要介紹基于固定模板的生成方法,其核心思想是加強(qiáng)SQL生成過程的控制操作,使解碼在SQL句式結(jié)構(gòu)的框架指引之下進(jìn)行輸出.

3.2.2 實(shí)現(xiàn)方法

此類模型的實(shí)現(xiàn),大部分以基于SQL語法的Slot-filling方法作為基本框架.該方法是指在既定的SQL句式結(jié)構(gòu)(也稱為模板)中,通過填補(bǔ)預(yù)留的空白來實(shí)現(xiàn)SQL的輸出.模板的定制是根據(jù)任務(wù)中具體涉及的SQL句式來設(shè)計(jì)的,可以是數(shù)據(jù)庫元素,如表名或列名,也可以是SQL關(guān)鍵字,還可以是NLQ中映射到val的關(guān)鍵詞序列.

Seq2SQL[23]是Zhong等人根據(jù)WikiSQL數(shù)據(jù)集中的SQL句式特點(diǎn),在序列-序列模型的基礎(chǔ)上添加了輸出模板的模型.具體將原來生成完整SQL序列的形式,拆解成為3個(gè)子任務(wù),分別為agg的生成、selcol的生成和WHERE子句的生成.其中agg和selcol通過分類器方式輸出,WHERE子句仍以序列方式輸出.考慮到WHERE子句中,多個(gè)條件的順序無關(guān)性特點(diǎn),Seq2SQL采用了強(qiáng)化學(xué)習(xí)方式,以最大化累計(jì)獎(jiǎng)勵(lì)的方式作為訓(xùn)練方法.

之后Xu等人[29]在Seq2SQL的基礎(chǔ)上提出了改進(jìn)模型SQLNet,在子任務(wù)設(shè)計(jì)上做了進(jìn)一步的細(xì)化,將WHERE子句拆解為4個(gè)子任務(wù),分別負(fù)責(zé)生成WHERE條件數(shù)whenum,whecol,op,val.子任務(wù)之間存在依賴關(guān)系,如圖6所示:其中每個(gè)虛線框表示一種子任務(wù);每個(gè)箭頭代表一種依賴關(guān)系,箭頭的尾部為被依賴的子任務(wù)或信息,比如op和val的預(yù)測(cè)均依賴whecol和輸入端的信息.

Fig.6 SQLNet’s sub-tasks and their dependencies圖6 SQLNet的子任務(wù)及其之間的依賴關(guān)系

3.2.3 改進(jìn)方法

1)編碼和注意力的優(yōu)化.SQLNet就是利用基于列的注意力強(qiáng)調(diào)了NLQ中涉及列名的信息.之后Gao等人[70]在SQLNet的基礎(chǔ)上引入了Bidirectional Attention[71]機(jī)制,與列注意力的單向計(jì)算不同,它通過對(duì)NLQ和列名分別計(jì)算前向和后向的2輪注意力來捕捉NLQ和列名之間的關(guān)聯(lián),實(shí)現(xiàn)2種信息相互強(qiáng)調(diào)的作用.此外,還在詞嵌入中引入了CNN,通過對(duì)字符級(jí)詞嵌入向量使用3個(gè)卷積核得到詞表示,再和Glove的詞嵌入串接起來,形成更為豐富的詞向量表示.

隨著Transformer[64]和BERT[72]編碼模型的相繼提出,將序列的上下文表達(dá)融入到編碼之中,使編碼結(jié)果獲得了帶有豐富上下文信息的詞向量表示,進(jìn)而令基于Slot-filling模型的預(yù)測(cè)效果得到進(jìn)一步提高.在Hwang等人[73]提出的SQLOVA模型中,將BERT編碼NLQ后的輸出視為詞嵌入向量,再將其作為后續(xù)子任務(wù)網(wǎng)絡(luò)的輸入.子任務(wù)類別與SQLNet類似,每個(gè)子任務(wù)有自己的編碼解碼模塊,其中負(fù)責(zé)生成val的子任務(wù)從以往的序列化輸出,改進(jìn)為分別預(yù)測(cè)val在NLQ中的起始與結(jié)束的位置的形式.SQLOVA在WikiSQL數(shù)據(jù)集中的生成準(zhǔn)確度達(dá)到了該數(shù)據(jù)集準(zhǔn)確度的上限,甚至稍好于人類表現(xiàn).因此上下文表示技術(shù)的引入,大幅提升了模型的語義分析能力.

He等人[74]提出的X-SQL模型中,首先在BERT的選擇上,使用了MT-DNN[75]代替了SQLOVA使用的BERT-Large,獲得了更好的生成效果.此外X-SQL對(duì)列名編碼添加了“全局上下文注意力”,也就是在每個(gè)列名的編碼中添加了上下文信息,以此強(qiáng)化列名之間的關(guān)聯(lián),擴(kuò)大了BERT的自注意力覆蓋范圍,使編碼的全局上下文表示能力更加完備.X-SQL在子任務(wù)上的設(shè)計(jì)比SQLOVA更為簡單,但是基于以上的優(yōu)化,使其在WikiSQL數(shù)據(jù)集上的表現(xiàn)進(jìn)一步提高.

以往模型在用BERT編碼時(shí),習(xí)慣將NLQ和所有列名串接起來進(jìn)行處理,Lyu等人[76]提出的HydraNet模型對(duì)此做了改進(jìn),將NLQ與每個(gè)列名分別串接起來進(jìn)行編碼,這樣使每個(gè)列名都能融合NLQ信息,可以省去建立用于捕捉NLQ和列名關(guān)聯(lián)的相關(guān)處理流程,比如池化或添加編碼層的操作.

2)基于模板規(guī)則的解碼.與3.1.2節(jié)1)中提到的分類解碼方法類似,此類改進(jìn)方法是根據(jù)SQL句式結(jié)構(gòu),將解碼過程劃分成不同階段分別處理.Wang等人[77]在序列-序列模型基礎(chǔ)上,在解碼過程中根據(jù)WikiSQL數(shù)據(jù)集中涉及的SQL句式結(jié)構(gòu)來決定每步解碼的輸出方式,共計(jì)3種方式,分別用于輸出SQL關(guān)鍵字、列名和val,每種解碼的實(shí)現(xiàn)方式各不相同.因此若以T1,T2,T3表示3種解碼方式,則輸出過程就可以形式化表示為 “T1T1T2T1T2T1(T1T2T3)*”.該方法不僅細(xì)粒度地控制解碼輸出,還保證了序列模型的簡潔性和語法結(jié)構(gòu)的正確性.

STAMP[78]模型依據(jù)SQL語法也將解碼設(shè)計(jì)成為3種生成通道,分別用于SQL關(guān)鍵字、列名和val的生成.每步的輸出先利用選擇器判斷當(dāng)前的通道,再根據(jù)對(duì)應(yīng)的解碼方法輸出,以此來保證SQL的有效性.

Xu等人[22,79]在序列-序列模型的基礎(chǔ)上引入了一組邏輯控制的外部方法,用于追蹤解碼過程中的語法狀態(tài),實(shí)現(xiàn)SQL的生成約束.該方法以一組由BNF(backus normal form)范式描述的生成規(guī)則為指導(dǎo),解碼環(huán)節(jié)的每一步輸出都會(huì)匹配當(dāng)前標(biāo)記對(duì)應(yīng)的規(guī)則中的符號(hào),以此來跟蹤輸出結(jié)果在語法層面的語義信息.

每步解碼時(shí),根據(jù)當(dāng)前對(duì)應(yīng)的語法狀態(tài),以一種“輸出屏蔽”機(jī)制過濾掉無效的搜索空間,來保證SQL輸出的有效性和搜索的高效性.基于BNF范式描述的規(guī)則是在SQL語法的基礎(chǔ)上設(shè)計(jì)的,具有上下文無關(guān)的特征,所以可以視作更細(xì)化的模板,如圖7所示:

Fig.7 The SQL sketch rules based on BNF[22]圖7 基于BNF的SQL模板[22]

3)添加標(biāo)注.與3.1.2節(jié)中3)提到的改進(jìn)方法類似,此類方法也有在NLQ中添加標(biāo)注以實(shí)現(xiàn)改進(jìn).標(biāo)注信息作為外部知識(shí),能讓模型更容易理解輸入信息的語義.Yu等人[80]提出的TypeSQL模型就設(shè)置了對(duì)NLQ注釋的預(yù)處理操作.注釋類型涉及數(shù)據(jù)庫元素、數(shù)字、日期和實(shí)體名稱.其中實(shí)體名稱的注釋,是通過對(duì)NLQ關(guān)鍵詞查詢并匹配至Freebase知識(shí)庫的方式來實(shí)現(xiàn),匹配類型涵蓋人物、地點(diǎn)、國家、組織、運(yùn)動(dòng)(WikiSQL數(shù)據(jù)集含大量體育主題的樣本)等.此外,對(duì)于數(shù)據(jù)庫元素的注釋,不僅包括列名,還通過對(duì)表的查詢,將NLQ中能匹配到的數(shù)據(jù)庫記錄的內(nèi)容也進(jìn)行了注釋,以上做法將外部知識(shí)最大限度地注入到了語義分析流程中.

3.2.4 方法總結(jié)

基于固定模板的生成方法是一種比較模式化的解碼方法,在處理WikiSQL這類只涉及單表查詢和固定SQL句式的數(shù)據(jù)集中能得到很好的效果,甚至能超越人類表現(xiàn)[73].這類方法的缺陷在于不能生成更多復(fù)雜多變的SQL句式.對(duì)于新句式的生成,還需要預(yù)設(shè)更豐富的模板,或者設(shè)計(jì)更加靈活的生成方法才能滿足實(shí)際應(yīng)用中的需求.

3.3 框架-細(xì)節(jié)的分階段生成方法

3.3.1 方法概述

在3.2節(jié)中,解碼利用的模板對(duì)訓(xùn)練數(shù)據(jù)集的SQL句式是強(qiáng)依賴的,這就使模型能夠生成的SQL句式比較固定和局限,導(dǎo)致模型即使在某個(gè)數(shù)據(jù)集中具有良好表現(xiàn),也不一定能在其他數(shù)據(jù)集中發(fā)揮同樣的性能.因?yàn)镹LIDB需要同時(shí)保證生成的SQL在句法和語義2方面都是有效的,所以模型可以把這2方面的學(xué)習(xí)過程從完整的框架中分離開來,通過獨(dú)立建模的方式分別進(jìn)行訓(xùn)練.因此本節(jié)方法的特點(diǎn)是把SQL的生成分解為2個(gè)步驟:第1步是根據(jù)NLQ動(dòng)態(tài)識(shí)別出粗粒度的SQL框架,作為最終輸出的基本句法結(jié)構(gòu);第2步是利用類似Slot-filling的方法,填補(bǔ)框架中缺失的細(xì)節(jié)信息.因此模型在第1步中只需要學(xué)習(xí)SQL的句法結(jié)構(gòu),比如SQL關(guān)鍵字的排列順序、不同子句之間的優(yōu)先順序以及各種操作符的用法等.由于該階段只負(fù)責(zé)生成邏輯層面內(nèi)容,不涉及細(xì)節(jié)信息,因此解碼時(shí)的搜索空間能大幅度縮減;第2步是在第1步的基礎(chǔ)上細(xì)化結(jié)果,因此能保證SQL結(jié)果在結(jié)構(gòu)上的規(guī)范性.這類方法也經(jīng)常被利用在NL2API[81]等其他語義分析任務(wù)中.

3.3.2 實(shí)現(xiàn)方法

根據(jù)第1步框架部分生成方法的不同,具體可分為“分類式”和“生成式”這2類.分類式是在已知框架全部類別的基礎(chǔ)上,通過分類方法輸出框架;生成式則是以序列生成的方式輸出框架.

1)分類式框架.Coarse2Fine[30]模型是這類方法的代表.其中分階段生成模式在WHERE子句的生成中得到了體現(xiàn).在處理第1步的框架部分時(shí),通過前期對(duì)WikiSQL數(shù)據(jù)集的整理,歸納出35種WHERE子句的句式框架,在具體生成中利用Softmax分類器實(shí)現(xiàn)類別預(yù)測(cè).在第2步細(xì)節(jié)生成中,填補(bǔ)框架中的whecol和val這2部分信息.其中在處理whecol時(shí),輸入端除了必需的NLQ信息,還引入了第1步生成的框架信息,這樣就能在框架信息的指導(dǎo)之下進(jìn)行解碼;val的生成則通過分別輸出其在NLQ中的起始與結(jié)束的位置的方式實(shí)現(xiàn),因此這部分任務(wù)轉(zhuǎn)化成了最大化2個(gè)位置索引的概率分布乘積的形式.圖8舉例說明了一個(gè)WHERE子句的生成過程,下方是該句框架部分信息:“WHERE >AND =”,上方是對(duì)框架做進(jìn)一步填充,最終完整的子句為:“WHEREYear_of_Recording>1996 ANDConductor=‘Mikhail Snitko’”.

Fig.8 WHERE clause decoding in Coarse2Fine[30]圖8 Coarse2Fine中WHERE子句的解碼[30]

Lee[82]則采用了“面向子句”的框架生成方式.模型按照句式類型設(shè)計(jì)了8種可以組成各種SQL句式框架的子模塊,分別為SELECT,WHERE,GROUP BY,HAVING,ORDER BY,LIMIT,IUEN,NESTED QUERY.其中IUEN代表INTERSECT,UNION,EXCEPT,NONE這4種查詢關(guān)鍵字.在第1步框架生成階段中,利用Softmax分類器挑選出和NLQ匹配的SQL句式模塊組成框架.在第2步面向子句的細(xì)節(jié)解碼過程中,具體填補(bǔ)各模塊的細(xì)節(jié)信息.每個(gè)模塊對(duì)應(yīng)解碼方式各不相同,當(dāng)解碼到嵌套查詢NESTED QUERY模塊時(shí),先輸出“[SUB_QUERY]”作為臨時(shí)標(biāo)記,當(dāng)主句解碼完成后,再以上述方式遞歸地完成嵌套查詢的部分.支持生成嵌套查詢的模型還有RYANSQL[83],它也是先利用分類方法生成SQL框架,在此基礎(chǔ)上提出一種“位置聲明碼”來定義嵌套查詢.解碼時(shí)先輸出位置聲明碼,再遞歸生成相應(yīng)的子查詢.基于模塊化框架輸出方式,將原始SQL細(xì)節(jié)之間的序列化依賴關(guān)系改進(jìn)成基于上下文的模塊化依賴關(guān)系,使模型可以學(xué)習(xí)到結(jié)構(gòu)級(jí)別的表達(dá).

2)生成式框架.Hosu等人[84]分別借助2個(gè)序列生成模型實(shí)現(xiàn)2個(gè)階段的解碼.第1步的框架部分,是一個(gè)融合了全局注意力的序列生成模型,其中NLQ為輸入,SQL框架為輸出.涉及具體的表名、列名、常量等非SQL關(guān)鍵字的部分均以占位符輸出,如圖9所示:

Fig.9 SQL sketch generation based on sequence to sequence method[84]圖9 基于序列-序列方法的SQL框架生成[84]

在第2步的細(xì)節(jié)解碼中,以雙重編碼(dual-encoder)處理輸入信息,即編碼的輸入由NLQ和第1步生成的SQL框架這2部分組成.該階段只負(fù)責(zé)生成細(xì)節(jié)信息,比如填入表名或列名等數(shù)據(jù)庫實(shí)體名稱.此外模型還可以根據(jù)生成的實(shí)體名稱修正第1步生成的框架結(jié)構(gòu).

Shi等人[85]提出的IncSQL模型是分階段生成方法的變形,它可概括為一種“序列-行動(dòng)”的解析方法.IncSQL中設(shè)置了“增長式解析器”,能從“行動(dòng)倉庫”選取需要的“行動(dòng)”.解碼時(shí)根據(jù)解析策略,利用解析器先增長式地選擇需要的行動(dòng),再逐步完善行動(dòng)序列,最終形成序列化的解析決策,即SQL結(jié)果.IncSQL結(jié)合了序列-序列模型的優(yōu)勢(shì),既包含了序列形式的內(nèi)部依賴,也實(shí)現(xiàn)了模塊化輸出.

Zhong等人[86]提出的GAZP模型進(jìn)一步引入了一致性驗(yàn)證機(jī)制,其模型由向前的語義分析器和向后的NLQ生成器組成.GAZP首先根據(jù)數(shù)據(jù)庫信息和SQL句式采樣生成新的SQL,生成器再根據(jù)新的SQL輸出相應(yīng)的NLQ,達(dá)到擴(kuò)充樣本的目的;之后利用新樣本訓(xùn)練負(fù)責(zé)生成SQL的語義分析器.因此分析器和生成器相輔相成,最終達(dá)到“循環(huán)一致”的效果.由于GAZP可以對(duì)不同的數(shù)據(jù)庫進(jìn)行采樣,所以該模型可用于擴(kuò)充Spider,Sparc,CoSQL等zero-shot數(shù)據(jù)集的樣本.

3.3.3 方法總結(jié)

框架-細(xì)節(jié)的分階段生成方法和基于固定模板的生成方法相比,前者的解碼輸出更為靈活化和精細(xì)化,并且能夠適應(yīng)更多的SQL句式結(jié)構(gòu).Dong等人[30]總結(jié)了此類方法的3個(gè)優(yōu)勢(shì):1)它能夠把抽象的高級(jí)語義信息從低級(jí)語義中抽離出來,相比基于整句級(jí)的一次性輸出方式,該方法使解碼更易于實(shí)現(xiàn)不同粒度語義層面的輸出,而且生成的框架信息也更為緊湊;2)2步生成方法更易于捕捉SQL句法的語義框架,雖然不同樣本中的細(xì)節(jié)內(nèi)容也不盡相同,但是在具有相同句法框架的樣本之間,其抽象結(jié)構(gòu)是可以共享的;3)第1步生成的框架信息,能夠讓解碼器提前掌握最終結(jié)果的基本概況,它可以作為全局上下文信息,輔助細(xì)節(jié)部分的生成.不過該方法的缺點(diǎn)在于,框架輸出的形式大部分仍依賴訓(xùn)練數(shù)據(jù)包含的SQL句式或預(yù)設(shè)的輸出方案,因此輸出方案的完備程度直接決定了SQL的生成效果.

3.4 基于語法的層級(jí)式生成方法

3.4.1 方法概述

此類方法中,模型以SQL語法為依據(jù)來約束解碼過程,解碼時(shí)通過一種自上而下的方式,逐層拓展目標(biāo)輸出的子序列,最終形成樹狀結(jié)構(gòu)的結(jié)果,因此可以稱為樹解碼方法.本節(jié)中總結(jié)3種樹解碼方法以及介紹相關(guān)改進(jìn)方法.

3.4.2 自上而下的層級(jí)式樹解碼

Dong等人[87]在2016年提出了序列-樹(seqence-to-tree,SEQ2TREE)模型,采用了層級(jí)式樹解碼方法,用于捕捉邏輯形式的組成結(jié)構(gòu).SEQ2TREE不同于以往的序列-序列模型的輸出形式,而是以自上而下的方式(top-down manner)輸出結(jié)果.模型通過定義“非終結(jié)符”表示序列中的子結(jié)構(gòu),當(dāng)生成包含子結(jié)構(gòu)的部分時(shí),其內(nèi)容會(huì)從原始序列中分離出來,向下拓展形成子樹,因此完整的輸出最終會(huì)以樹狀結(jié)構(gòu)呈現(xiàn).樹解碼器通過RNN實(shí)現(xiàn),從第1層開始自上而下逐層解碼.每一層的解碼直至輸出結(jié)束符出現(xiàn)為止,當(dāng)前層中所有子結(jié)構(gòu)以非終結(jié)符表示.當(dāng)前層完成解碼后,再轉(zhuǎn)向序列中的子結(jié)構(gòu)部分,向下繼續(xù)解碼子序列.子結(jié)構(gòu)的解碼采用parent-feeding機(jī)制,即根據(jù)上一層非終結(jié)符的隱向量作為輸入來解碼.當(dāng)全部序列不再有未解碼的非終結(jié)符,且當(dāng)前層已輸出結(jié)束符時(shí),就結(jié)束解碼.SEQ2TREE方法為后續(xù)其他層級(jí)式解碼模型奠定了基礎(chǔ).之后Xiong等人[88]在此基礎(chǔ)上使用了帶有SQL關(guān)鍵字的起始標(biāo)記來表示不同子句結(jié)構(gòu),比如解碼到SELECT子句或WHERE子句時(shí),分別以〈select〉和〈where〉作為起始標(biāo)記,更利于SQL的結(jié)構(gòu)化表示.

3.4.3 抽象語法樹解碼

為了更準(zhǔn)確地捕捉程序語言內(nèi)部語法結(jié)構(gòu),有的模型引入了邏輯形式的語法(syntax)作為層級(jí)式解碼的依據(jù),從而形成ASTs解碼方法.而且與SEQ2TREE中的序列化子結(jié)構(gòu)不同,由語法引導(dǎo)的解碼是以ASTs作為中間表達(dá),再進(jìn)一步過渡到最終的邏輯形式.因?yàn)锳STs可以借助分析工具確定地轉(zhuǎn)化成程序語言,并且能以較少的模式表示豐富的語法信息,所以被許多基于樹解碼的模型采用.能以ASTs解碼的前提是目標(biāo)程序語言的語法可以歸納成抽象語法,并且能夠用一組生成規(guī)則(production rules)進(jìn)行描述,從而能利用生成規(guī)則將程序語言確定地表示成由頭部節(jié)點(diǎn)和子節(jié)點(diǎn)組成的ASTs結(jié)構(gòu)[89].生成規(guī)則是一種抽象化的程序語言語法描述,每條規(guī)則一般由左右2端組成,右端內(nèi)容是由左端根據(jù)語法而衍生出來的.這樣基于語法指引的ASTs解碼,能極大程度地約束與規(guī)范解碼的搜索空間,適用于生成語法結(jié)構(gòu)較為復(fù)雜的程序語言.

Yin等人[89]提出的代碼生成模型就是基于ASTs解碼實(shí)現(xiàn).雖然目標(biāo)語言為Python,但是其具備很好的可移植性,所以被很多NLIDB模型應(yīng)用.其解碼器根據(jù)輸入端NLQ的語義,序列化調(diào)用“動(dòng)作節(jié)點(diǎn)(action nodes)”,最終形成“派生AST(derivation AST)”.動(dòng)作節(jié)點(diǎn)的類型和調(diào)用規(guī)則都根據(jù)程序語言的生成規(guī)則而設(shè)計(jì),具體分為2類:第1類是AR(apply rule actions)節(jié)點(diǎn),屬于非終結(jié)節(jié)點(diǎn),用于表示當(dāng)前節(jié)點(diǎn)在衍生時(shí)調(diào)用的生成規(guī)則,即用于描述程序語言的結(jié)構(gòu),比如邏輯形式的描述或聲明,所以ASTs中的所有節(jié)點(diǎn),都是由AR節(jié)點(diǎn)衍生而來;第2類是GT(gentoken actions)節(jié)點(diǎn),屬于終結(jié)節(jié)點(diǎn),它用于輸出程序語言中具體的操作符、變量或常量等標(biāo)記.解碼時(shí)從根節(jié)點(diǎn)開始構(gòu)造ASTs,通過在語法規(guī)則中選擇相應(yīng)的AR節(jié)點(diǎn)形成程序結(jié)構(gòu),以深度優(yōu)先和從左至右的原則添加新節(jié)點(diǎn),該過程也稱為拓展邊緣節(jié)點(diǎn)(frontier node,FN).直至FN為GT節(jié)點(diǎn)時(shí),模型再實(shí)例化對(duì)應(yīng)的常量或變量等標(biāo)記,直至輸出結(jié)束標(biāo)記為止.然后解碼器繼續(xù)處理其他FN節(jié)點(diǎn),直至所有子樹都輸出結(jié)束標(biāo)記為止.最終得到的AST通過分析器明確地轉(zhuǎn)化成程序語言,作為最終結(jié)果.其實(shí)AST展開后,實(shí)際上就是由多個(gè)時(shí)間步解碼得到的串行化動(dòng)作節(jié)點(diǎn)序列,RNN的隱狀態(tài)用于追蹤和引導(dǎo)序列的生成過程,也就是決定輸出的節(jié)點(diǎn)類型.ASTs解碼可以根據(jù)不同目標(biāo)程序語言,設(shè)計(jì)相應(yīng)的生成規(guī)則,所以基于ASTs解碼的模型不受邏輯形式輸出類型的限制,即具有程序語言無關(guān)性(program language-agnostic).

之后Brad等人[90]利用Yin等人[89]的方法在SQL的生成中得到了實(shí)踐,證實(shí)了ASTs解碼的可移植性特點(diǎn).模型中除指定了SQL的生成規(guī)則,還添加了針對(duì)數(shù)據(jù)庫表結(jié)構(gòu)的處理功能.這里以其中一項(xiàng)SQL生成規(guī)則舉例:“SELECT→COLUMN FROM WHERE”,其中的SQL關(guān)鍵字屬于AR節(jié)點(diǎn),基于該規(guī)則的一個(gè)實(shí)例化SQL為:“SELECTsalaryFROMemployeesWHEREage>5”,對(duì)應(yīng)的動(dòng)作節(jié)點(diǎn)序列為“SELECT→COLUMN FROM WHERE,COLUMN→‘salary’,‘salary’→FROM,FROM→TABLE,…,CONSTANT→‘5’”,其中“salary”和“5”是由終結(jié)節(jié)點(diǎn)衍生出來的實(shí)例,此例對(duì)應(yīng)的AST如圖10所示.

Fig.10 An example of an AST for SQL generation圖10 用于SQL生成的AST實(shí)例

Rabinovich等人[49]提出的ASNs(abstract syntax networks)也是基于ASTs解碼的模型,節(jié)點(diǎn)類型的設(shè)計(jì)引入了ASDL(abstract syntax description language)[91]框架.ASNs中的ASTs是以邏輯形式模塊為節(jié)點(diǎn)構(gòu)成的解碼樹,每個(gè)模塊代表一個(gè)程序語言的片段.解碼過程中,同樣是從根節(jié)點(diǎn)開始,根據(jù)程序語言語法的約束,自上而下遞歸選擇需要啟用的模塊.生成的模塊若包含子結(jié)構(gòu),再分別調(diào)用子模塊向下拓展,因此ASTs其實(shí)是一種程序語言遞歸調(diào)用的結(jié)構(gòu)圖.

GANCoder[92]是引入了GAN(generative adver-sarial networks)架構(gòu)的ASTs解碼模型,其目的在于以對(duì)抗訓(xùn)練的方式,使生成器掌握更多數(shù)據(jù)分布特征,以提高生成準(zhǔn)確度.

TRANX是Yin等人[18]在之前模型[89]的基礎(chǔ)上,參考ASDL框架做了進(jìn)一步規(guī)范的SQL生成模型.其中在AR節(jié)點(diǎn)引入了ASDL的構(gòu)造器結(jié)構(gòu),F(xiàn)N變成了組合式的前端域(frontier field)結(jié)構(gòu),GT節(jié)點(diǎn)增設(shè)了列的輸出類型,使節(jié)點(diǎn)的拓展更加開放和靈活,也更適配SQL的語法結(jié)構(gòu).

IRNet[25]在前面的基礎(chǔ)上做了3個(gè)方面優(yōu)化:1)表連接(schema linking),通過標(biāo)注NLQ中涉及的數(shù)據(jù)庫信息,來增強(qiáng)NLQ與數(shù)據(jù)庫之間的關(guān)聯(lián);2)豐富了SQL的生成規(guī)則設(shè)計(jì),在語法描述上更加完備,比如合并了部分細(xì)節(jié)性語法結(jié)構(gòu),提高模型學(xué)習(xí)效率,以及建立了強(qiáng)調(diào)數(shù)據(jù)庫元素的相關(guān)規(guī)則;3)拓展GT節(jié)點(diǎn)類型,進(jìn)一步對(duì)列名和表名進(jìn)行區(qū)分;4)ASTs的生成采用了Coarse2Fine[30]的處理流程,即先解碼所有AR節(jié)點(diǎn)作為框架信息,再解碼GT節(jié)點(diǎn)填充細(xì)節(jié)信息.

Lin等人[93]指出在ASTs解碼中,生成規(guī)則的設(shè)計(jì)需要權(quán)衡語法的復(fù)雜度和模型的可學(xué)習(xí)性.因?yàn)獒槍?duì)SQL的生成,有些輸出規(guī)則是依賴于表結(jié)構(gòu)的具體信息的,而僅憑上下文無關(guān)(context free)的規(guī)則是無法涵蓋這部分生成的.因此需要添加數(shù)據(jù)庫表依賴的語法(schema-dependent grammar),構(gòu)成上下文相關(guān)的規(guī)則,以補(bǔ)充以往規(guī)則中無法實(shí)現(xiàn)的部分,從而完善ASTs解碼規(guī)則的完備性.

3.4.4 基于堆棧的語法樹解碼

Yu等人[94]提出的SyntaxSQLNet模型是在樹解碼基礎(chǔ)上,利用堆棧來控制解碼的進(jìn)程.與ASTs作為過渡信息不同的是,SyntaxSQLNet在解碼中省去了中間表達(dá),而是直接輸出SQL片段.Syntax-SQLNet和ASNs[49]相似,也是根據(jù)SQL語法預(yù)設(shè)了9種可遞歸調(diào)用的程序模塊,其中Root模塊表示查詢的開始,可用于引出嵌套查詢.模塊的調(diào)用也遵循預(yù)設(shè)的生成規(guī)則.解碼時(shí)根據(jù)歷史狀態(tài)決定調(diào)用的模塊類型,有些規(guī)則需要向前回溯多個(gè)時(shí)間步,才能準(zhǔn)確判斷后續(xù)的輸出.解碼過程使用了堆棧機(jī)制,從Root模塊開始調(diào)用新模塊,被調(diào)用的模塊實(shí)例化后壓入棧,之后在每一步解碼中,先從棧彈出當(dāng)前實(shí)例化的模塊,再根據(jù)生成規(guī)則激活新的模塊,實(shí)例化后再壓入棧,以此往復(fù)直至??諡橹?基于堆棧的模塊調(diào)用機(jī)制能實(shí)現(xiàn)嵌套查詢這種復(fù)雜句式的生成.

Min等人[46]利用SyntaxSQLNet[94]模型對(duì)跨語言數(shù)據(jù)集CSpider[46]進(jìn)行了實(shí)踐,評(píng)估了不同的詞嵌入方法和分詞工具對(duì)生成結(jié)果的影響.結(jié)果證明跨語言的詞嵌入方法好于將不同語言分別進(jìn)行詞嵌入的方法.說明將輸入信息映射至相同維度的嵌入分布中,相比分別映射的方式,更能強(qiáng)化NLQ和表結(jié)構(gòu)之間的關(guān)聯(lián).此外在中文NLQ的處理中,分詞效果對(duì)SQL生成有重要影響,分詞誤差和OOV很大程度影響語義分析的正確率.此外中文句式結(jié)構(gòu)的識(shí)別和代詞指代問題也給語義分析任務(wù)帶來了新的挑戰(zhàn).

3.4.5 基于關(guān)聯(lián)表示的改進(jìn)方法

許多基于ASTs解碼的模型,其改進(jìn)方向都聚焦在強(qiáng)化NLQ與數(shù)據(jù)庫元素的關(guān)聯(lián),使之成為提高SQL生成準(zhǔn)確度的關(guān)鍵因素.其中HSRNet模型[95]重點(diǎn)設(shè)計(jì)了NLQ和數(shù)據(jù)庫表的關(guān)聯(lián)表示方法,其中將表的類型特征、表的關(guān)系特征和NLQ的詞序特征這3個(gè)層次的特征表示成圖結(jié)構(gòu),稱之為層次化的表圖譜(hierarchical schema graph,HSG),它實(shí)際上是一種強(qiáng)化的標(biāo)注形式.之后HSG與NLQ共同被編碼,提高了樣本的表示能力.

Bogin等人[96]利用GNN對(duì)數(shù)據(jù)庫表結(jié)構(gòu)形成全局表示,進(jìn)一步強(qiáng)調(diào)了對(duì)表結(jié)構(gòu)語義進(jìn)行表示的重要性,提高了模型處理zero-shot樣本的能力.之后Bogin等人[97]又提出了GLOBAL-GNN,并做了2方面改進(jìn):1)在圖表達(dá)基礎(chǔ)上增設(shè)全局節(jié)點(diǎn),強(qiáng)化了NLQ和表結(jié)構(gòu)全局化的特征;2)設(shè)置了重排機(jī)制(re-ranker),以全局的角度對(duì)集束搜索中的候選值進(jìn)行2次評(píng)估,進(jìn)一步突出與數(shù)據(jù)庫元素關(guān)聯(lián)較高的候選結(jié)果.

RAT-SQL[98]模型也是從輸入信息的特征表達(dá)角度進(jìn)行優(yōu)化,通過一種面向關(guān)系的自注意力機(jī)制(ralation-aware self-attention,RAT),以提高模型的全局推理能力.RAT-SQL編碼器實(shí)現(xiàn)對(duì)輸入信息共計(jì)33種關(guān)系特征的表示,這些關(guān)系不僅涵蓋NLQ與數(shù)據(jù)庫元素的關(guān)系,還包括數(shù)據(jù)庫內(nèi)部各元素之間的關(guān)系,關(guān)系特征作為嵌入向量融入RAT的表示之中.當(dāng)ASTs解碼到GT節(jié)點(diǎn),需要實(shí)例化數(shù)據(jù)庫元素時(shí),利用攜帶關(guān)系信息的RAT分別建立表和列的對(duì)齊矩陣(alignment matrix),實(shí)現(xiàn)數(shù)據(jù)庫內(nèi)部關(guān)聯(lián)的再次強(qiáng)化.RAT不僅建立了NLQ和數(shù)據(jù)庫元素之間的關(guān)系,還實(shí)現(xiàn)了數(shù)據(jù)庫內(nèi)部元素之間預(yù)定義關(guān)系的組織與表示.這種聯(lián)合式的表示學(xué)習(xí),對(duì)輸入信息存在預(yù)定義關(guān)系的語義分析任務(wù)來說十分重要.

3.4.6 方法總結(jié)

基于語法的層級(jí)式解碼方法的優(yōu)勢(shì)在于:1)利用目標(biāo)程序語言的語法結(jié)構(gòu)引導(dǎo)解碼,可以進(jìn)一步限制搜索空間,從而保證輸出的內(nèi)容是規(guī)范的.語法在模型中作為先驗(yàn)知識(shí)被設(shè)計(jì)成一組已知的動(dòng)作節(jié)點(diǎn),使模型不用再根據(jù)有限的訓(xùn)練數(shù)據(jù)去還原SQL語法,從而讓模型專注于學(xué)習(xí)語義合成特征.2)層級(jí)化信息有助于神經(jīng)網(wǎng)絡(luò)信息流的建立,同時(shí)也能自然地反映程序語言的遞歸結(jié)構(gòu)[18].3)層級(jí)式解碼方法有較高的概括性,相同的模型可以用于多種程序語言的生成,只需要重塑基于抽象語法的生成規(guī)則,就能實(shí)現(xiàn)模型的移植.因此基于層級(jí)式解碼模型在概括性、可拓展性、有效性和可操作性均具有不錯(cuò)表現(xiàn).在改進(jìn)方案中,強(qiáng)化NLQ和數(shù)據(jù)庫元素的關(guān)聯(lián)映射是提高模型表現(xiàn)的關(guān)鍵.不過和分階段的生成方法表現(xiàn)出的問題類似,此類模型的性能表現(xiàn)取決于生成規(guī)則的完備程度.

3.5 基于4種解碼方法的模型總結(jié)

本節(jié)對(duì)基于3.1~3.4節(jié)所述的4種解碼方法(分別簡稱為序列、模板、分階段和層級(jí)式)的模型進(jìn)行了匯總,如表5所示:

Table 5 Summary of the Models Based on 4 Decoding Methods表5 基于4種解碼方法的模型總結(jié)

4 輔助方法

本節(jié)總結(jié)在基于深度學(xué)習(xí)的NLIDB模型中使用的7種輔助方法,除了在3.1.2節(jié)出現(xiàn)過的標(biāo)簽化輸入、匿名化輸入、數(shù)據(jù)增強(qiáng)這3種方法以外,還包括引入用戶反饋、不同訓(xùn)練模式、程序語言特性以及對(duì)編碼-解碼過程的優(yōu)化這4種輔助方法.

4.1 基于標(biāo)簽化輸入的輔助方法

與3.1.2節(jié)提到的一致,該方法以添加標(biāo)簽的方式,對(duì)NLQ注入數(shù)據(jù)庫相關(guān)的外部知識(shí),從而增強(qiáng)NLQ和數(shù)據(jù)庫之間的關(guān)聯(lián).標(biāo)簽的引入一定程度地減弱了處理zero-shot樣本的困難.對(duì)于標(biāo)簽的添加,除了3.1.2節(jié)提到的方法,還有利用條件隨機(jī)場(chǎng)(conditional random fields,CRFs)分類器[22]、字符串匹配[25,80]、多層卷積分類器[88]或建立專門的映射模型[100]等方法.

4.2 基于匿名化輸入的輔助方法

與添加標(biāo)簽的做法相反,匿名化輸入的目的是減少語義分析模型對(duì)新領(lǐng)域樣本的學(xué)習(xí)負(fù)擔(dān),同時(shí)起到簡化編碼詞匯表的作用[93].一般的做法為識(shí)別NLQ中包含的數(shù)據(jù)庫元素,作為輸入時(shí),以占位符代替這部分信息,模型先以包含占位符形式輸出,再恢復(fù)成原始NLQ中的字符.數(shù)據(jù)庫元素的識(shí)別方法包括:基于TF-IDF方法[36];字符串匹配[93];基于CRFs的2分類器[101];還有的方法先識(shí)別NLQ中涉及數(shù)據(jù)庫信息的類型,再對(duì)其具體關(guān)系(如whecol和val的從屬關(guān)系)進(jìn)行判斷[102].

4.3 數(shù)據(jù)增強(qiáng)的輔助方法

數(shù)據(jù)增強(qiáng)緩解了因?yàn)闃颖緮?shù)量不足導(dǎo)致模型得不到充分訓(xùn)練的問題.基本思路是利用已知數(shù)據(jù)集,自主生成更多訓(xùn)練樣本,以提高模型對(duì)數(shù)據(jù)集的適應(yīng)度.具體的實(shí)現(xiàn)方法包括:設(shè)計(jì)文本生成模型實(shí)現(xiàn)NLQ的擴(kuò)充[88,103];利用外部資源(比如paraphrase database)對(duì)已知樣本中的NLQ進(jìn)行改述,實(shí)現(xiàn)樣本的增加[61];還有的方法通過歸納數(shù)據(jù)集中的SQL句式,形成SQL模板,然后填入不同的實(shí)體名稱來實(shí)現(xiàn)樣本的擴(kuò)充[36,59,94].

4.4 基于用戶反饋的輔助方法

由于NLQ中經(jīng)常包含歧義或模糊表述的情況,所以要求模型一次性生成準(zhǔn)確的SQL是比較困難的.而通過交互方式,通過用戶反饋確認(rèn)查詢意圖,是符合邏輯的做法.

因此以拓展外部知識(shí)和加強(qiáng)語義理解為目的,將用戶角色添加到模型的處理流程中[104]是值得考慮的改進(jìn)路線.引入用戶能夠消除NLQ中的歧義,提高語義分析的準(zhǔn)確率.并且在實(shí)際應(yīng)用場(chǎng)景中,通過人機(jī)互動(dòng)方式能夠提高用戶對(duì)平臺(tái)的信任[105].

Iyer等人[36]將用戶角色融入到數(shù)據(jù)增強(qiáng)中,其實(shí)現(xiàn)流程為:先利用基本的訓(xùn)練數(shù)據(jù)學(xué)得初始的語義分析模型.再讓模型線上回答用戶新提出的NLQ,并且讓用戶對(duì)生成的SQL結(jié)果給出判斷.若用戶認(rèn)為結(jié)果正確,則把本輪問答作為新樣本加入訓(xùn)練集中;若用戶認(rèn)為結(jié)果錯(cuò)誤,則從后臺(tái)利用人工標(biāo)注的方式更正結(jié)果,然后將修正后的數(shù)據(jù)作為新樣本添加到訓(xùn)練集中.模型在擴(kuò)充后的數(shù)據(jù)集中重新訓(xùn)練,之后再從線上收集新樣本,以此循環(huán)往復(fù)來提高模型性能.

事實(shí)上從人機(jī)交互的角度來看,在用戶不熟悉數(shù)據(jù)庫結(jié)構(gòu)或SQL語法的情況下,要求用戶判斷生成SQL的準(zhǔn)確性是不友好的.DialSQL[104]則是一個(gè)適用于所有用戶的輔助框架,它通過與用戶進(jìn)行多輪對(duì)話,逐步修正并確認(rèn)SQL中的細(xì)節(jié).在每輪對(duì)話中,相關(guān)模塊識(shí)別并提取輸出結(jié)果中潛在的錯(cuò)誤片段,然后針對(duì)錯(cuò)誤片段生成相關(guān)的候選項(xiàng)反饋給用戶進(jìn)行選擇,以此來消除NLQ中的歧義,修正輸出的結(jié)果.

對(duì)話輔助框架MISP[105](model-based interactive semantic parsing)也是通過用戶反饋來修正語義分析結(jié)果中的錯(cuò)誤解析,而且MISP不拘泥于數(shù)據(jù)集的具體邏輯形式,是一個(gè)能通用于不同語義分析任務(wù)的通用框架.其處理流程是通過數(shù)個(gè)組件協(xié)作實(shí)現(xiàn),如圖11所示:

Fig.11 MISP framework[105]圖11 MISP框架[105]

以SQL的處理流程為例,首先從外部引入語義分析模型,負(fù)責(zé)生成初始的SQL結(jié)果;期間MISP會(huì)跟蹤解碼中的細(xì)節(jié)信息,當(dāng)“錯(cuò)誤探測(cè)器”識(shí)別到解碼在決策時(shí)存在較大的不確定性時(shí),就啟動(dòng)向用戶征求反饋的機(jī)制,“執(zhí)行器”生成對(duì)應(yīng)的自然語言問題來向用戶提問.之后“全局模型”負(fù)責(zé)接收用戶反饋信號(hào),并遞送至語義分析模型,使解碼器消除不確定內(nèi)容,修正輸出結(jié)果.MISP框架中的每個(gè)組件在互相關(guān)聯(lián)的同時(shí)也保證了各自的獨(dú)立性.

4.5 引入不同訓(xùn)練模式的輔助方法

傳統(tǒng)的學(xué)習(xí)模式是訓(xùn)練一個(gè)模型來匹配數(shù)據(jù)集中的所有樣本.為了使模型在面對(duì)大規(guī)模數(shù)據(jù)集時(shí),能對(duì)不同樣本實(shí)施有針對(duì)性的參數(shù)策略,Huang等人[106]引入了“元學(xué)習(xí)”模式,先訓(xùn)練一個(gè)基本模型,再用另外少量樣本在基本模型中訓(xùn)練“偽模型”,以滿足不同“偽任務(wù)”的需要.偽任務(wù)的產(chǎn)生是在原始數(shù)據(jù)集中,通過相關(guān)性函數(shù)將原始任務(wù)拆解成子任務(wù),每個(gè)子任務(wù)只對(duì)應(yīng)少量樣本,因此偽模型的訓(xùn)練能更有針對(duì)性地適應(yīng)目標(biāo)樣本的特點(diǎn).各偽任務(wù)的訓(xùn)練不僅耗時(shí)短,而且結(jié)果的準(zhǔn)確性也比單模型高.

MQAN[57]是一個(gè)多任務(wù)協(xié)同學(xué)習(xí)的模型,除了包含SQL生成的語義分析任務(wù),還結(jié)合了問答、翻譯、摘要、文本推理、情感分析、語義標(biāo)注、關(guān)系抽取、會(huì)話跟蹤和指代消解共計(jì)10種任務(wù).模型將所有子任務(wù)都整合成為問答模式,全部在一個(gè)編碼器-解碼器模型中訓(xùn)練,每個(gè)任務(wù)沒有特定的模塊或參數(shù),實(shí)現(xiàn)了單模型支持多元任務(wù)的需求.基于10種任務(wù)的預(yù)訓(xùn)練模型適用于遷移學(xué)習(xí)和元學(xué)習(xí)的場(chǎng)景.

4.6 基于程序語言特性的輔助方法

此類輔助方法是利用SQL特有屬性或組件來輔助結(jié)果的生成.例如曹金超等人[107]使用了基于數(shù)據(jù)庫模式圖的斯坦納樹,作為輔助JOIN路徑的生成工具.理論上該方法生成的路徑是全局最優(yōu)解,所以能保證FROM子句的準(zhǔn)確性.Baik等人[28]利用SQL查詢?nèi)罩咀鳛檩o助工具,提高NLQ與數(shù)據(jù)庫元素的關(guān)鍵詞映射以及JOIN路徑推導(dǎo)的準(zhǔn)確性,日志中的歷史查詢用于構(gòu)建一種查詢片段圖(query fragment graph),它可以反映出現(xiàn)在日志中的各種查詢片段之間的共現(xiàn)情況,將共現(xiàn)率高的組合作為SQL生成決策的參考.

執(zhí)行引導(dǎo)解碼(execution-guided decoding)是利用了SQL可執(zhí)行特性的一種輔助方法.它的設(shè)計(jì)思路是在解碼的過程中,只要產(chǎn)生了部分可執(zhí)行的SQL,就實(shí)時(shí)地執(zhí)行它來驗(yàn)證輸出的有效性.若執(zhí)行后返回的是無效查詢或結(jié)果為空,就判定這部分SQL為無效的解碼,然后回溯到之前的狀態(tài)繼續(xù)搜索其他可能的結(jié)果,直至解碼出有效的SQL為止.該輔助方法能及時(shí)過濾掉無效的輸出,從輸出SQL的準(zhǔn)確度來看,為許多模型都帶來了輔助提高的效果.

4.7 編碼-解碼過程中的輔助方法

此類輔助方法是在編碼-解碼框架中,通過一些輔助機(jī)制,將模型評(píng)分低但是比較有潛力的候選結(jié)果進(jìn)一步挖掘出來.除了3.4.5節(jié)介紹的GLOBAL-GNN[97]在解碼階段引入了重排機(jī)制,Bertrand-DR[108]模型在編碼輸入信息之后設(shè)置了重排辨別器.其形式為二分類器,在訓(xùn)練階段使其只對(duì)真實(shí)值判定為真,然后在預(yù)測(cè)階段使其對(duì)beam search輸出的候選結(jié)果進(jìn)行重排,從而把解碼中分值較低但是接近真實(shí)結(jié)果的SQL強(qiáng)調(diào)出來.它可以作為一種輔助工具添加到基于預(yù)訓(xùn)練BERT的模型中,被證實(shí)在GNN[96],EditSQL[69]等模型中實(shí)現(xiàn)了輔助提高的效果.

5 未來研究方向

本節(jié)根據(jù)目前基于深度學(xué)習(xí)方法的NLIDB模型中尚存在的不足與缺陷,指出未來仍需集中關(guān)注的6個(gè)研究方向.

5.1 NLQ和數(shù)據(jù)庫的對(duì)齊機(jī)制

很多模型在誤差分析中指出,大部分生成偏差來自于NLQ與數(shù)據(jù)庫列名或表名的錯(cuò)誤匹配.Hwang等人[73]總結(jié)了2個(gè)產(chǎn)生誤匹配的原因:1)出現(xiàn)在SQL中的列名信息有時(shí)并不會(huì)在NLQ中對(duì)應(yīng)出現(xiàn);2)NLQ中存在敘述歧義.因此模型不僅要提高消除NLQ敘述歧義方面的能力,還需加強(qiáng)實(shí)體名稱的識(shí)別以及數(shù)據(jù)庫元素的映射能力,比如OOV、稀有詞或特定屬性的專有名詞(如時(shí)間)等詞匯和名稱的識(shí)別與提取.

改進(jìn)方案可以從3個(gè)方面入手:1)從編碼的角度,可以利用圖或其他映射工具建立NLQ和數(shù)據(jù)庫元素之間的關(guān)聯(lián)信息,其中數(shù)據(jù)庫元素除了常見的表名和列名信息,還可以進(jìn)一步建立屬性類型、表內(nèi)與表間關(guān)系等內(nèi)部特征的關(guān)聯(lián),再將以上關(guān)系信息融合到編碼流程中;2)從NLQ預(yù)處理的角度,可以設(shè)計(jì)有針對(duì)性的標(biāo)簽添加法,將實(shí)體、關(guān)系等信息更顯式地體現(xiàn)在NLQ中,例如引入外部知識(shí)庫,甄別NLQ中的各類實(shí)體名稱,或者設(shè)計(jì)包容性更強(qiáng)的識(shí)別算法;3)從數(shù)據(jù)庫利用的角度,目前許多模型由于考慮隱私保護(hù)的問題,并沒有將數(shù)據(jù)庫表中的記錄融入到語義分析中,也就無法更進(jìn)一步理解查詢意圖和有效識(shí)別數(shù)據(jù)庫元素.因此可以考慮在條件允許情況下,將表中記錄作為模型的部分輸入.例如ColloQL[109]考慮到實(shí)際應(yīng)用中的NLQ存在噪聲問題,提出一種面向數(shù)據(jù)庫記錄的采樣方法.編碼時(shí),對(duì)數(shù)據(jù)庫每一列的記錄進(jìn)行采樣,將采樣得到的內(nèi)容注入BERT中,使模型更深入地掌握數(shù)據(jù)特征.所以數(shù)據(jù)庫記錄的融合方法也可以作為進(jìn)一步研究的內(nèi)容.

5.2 訓(xùn)練數(shù)據(jù)的加工與利用

目前模型在處理zero-shot樣本的泛化能力仍需加強(qiáng),這部分能力的提高,需要向模型提供更多、更復(fù)雜的訓(xùn)練數(shù)據(jù).數(shù)據(jù)集給語義分析模型造成的限制體現(xiàn)在2個(gè)方面:1)訓(xùn)練數(shù)據(jù)的SQL句式類型不夠豐富.Finegan-Dollak等人[44]比較評(píng)估了不同模型分別在不同數(shù)據(jù)集和不同數(shù)據(jù)分割方式(即訓(xùn)練集與測(cè)試集的配置方案)下的表現(xiàn).在以SQL句式為分割依據(jù)的評(píng)估中,模型整體性能表現(xiàn)遠(yuǎn)遠(yuǎn)低于以NLQ特征為依據(jù)的分割方式.因?yàn)榍罢呖简?yàn)的是模型在SQL知識(shí)層面的泛化能力,其很大程度增加了語義分析任務(wù)的難度,揭露了模型在對(duì)SQL框架層次的zero-shot處理能力還有待提高.2)訓(xùn)練數(shù)據(jù)數(shù)量存在嚴(yán)重不足.Guo等人[25]指出Spider數(shù)據(jù)集中extra hard等級(jí)的樣本數(shù)量在所有等級(jí)中的占比最少,使模型在嵌套查詢等復(fù)雜句式的處理方面得不到充分的訓(xùn)練.因此增加訓(xùn)練樣本數(shù)量,尤其針對(duì)復(fù)雜SQL樣本和跨領(lǐng)域數(shù)據(jù)庫樣本的擴(kuò)充是很有必要的.目前在數(shù)據(jù)增強(qiáng)方法中,常見做法是替換已知樣本中的實(shí)體名稱,該方法只能在原始數(shù)據(jù)集基礎(chǔ)上,擴(kuò)充固定SQL句式的樣本.因此可以嘗試跨數(shù)據(jù)庫、跨SQL句式,甚至跨數(shù)據(jù)集的數(shù)據(jù)增強(qiáng)方法.此外,在通過改述NLQ來增加樣本的方法中,存在新樣本偏離原始查詢意圖的問題[103].針對(duì)此問題,可以引入反向監(jiān)督機(jī)制,即建立SQL為輸入、NLQ為輸出的語義分析模塊,實(shí)現(xiàn)NLQ的生成質(zhì)量的控制,保障數(shù)據(jù)增強(qiáng)效果.

5.3 完善模型評(píng)估策略

5.2節(jié)提到,模型在不同的樣本分割方式下,其性能表現(xiàn)也不盡相同.因此通過建立更加完善的評(píng)估機(jī)制,才能了解模型的真實(shí)能力.具體有4個(gè)建議:1)擴(kuò)大評(píng)估目標(biāo)的覆蓋面.例如Suhr等人[110]提出一種基于zero-shot與非zero-shot數(shù)據(jù)集的交叉評(píng)估方法,揭示目前的模型雖然在固定的數(shù)據(jù)集上表現(xiàn)良好,但是在基于數(shù)據(jù)集的交叉評(píng)估中,就進(jìn)一步顯示出模型在實(shí)體識(shí)別、語義消歧以及數(shù)據(jù)庫映射方面的能力仍存在不足.因此通過設(shè)計(jì)更全面的評(píng)估方法,有利于及時(shí)發(fā)現(xiàn)語義分析模型泛化能力中的不足.2)完善數(shù)據(jù)集分割策略.建議基于不同的數(shù)據(jù)集分割方式[44],多方位地評(píng)估模型.3)開展更多的遷移實(shí)驗(yàn).例如Sun等人[78]將WikiSQL數(shù)據(jù)集中訓(xùn)練得到的模型,在WIKITABLEQUESTIONS[111]數(shù)據(jù)集中進(jìn)行遷移測(cè)試,來評(píng)估模型性能.因此開展跨數(shù)據(jù)集的評(píng)估實(shí)驗(yàn),可以全面檢驗(yàn)?zāi)P汪敯粜?4)引入人類評(píng)估相關(guān)指標(biāo).人類評(píng)估除了可以作為模型評(píng)價(jià)指標(biāo),在交互模型中也是衡量對(duì)話生成質(zhì)量的重要參考.Hwang等人[73]、Yao等人[105]均指出在人類評(píng)估中,目前由于人對(duì)數(shù)據(jù)庫結(jié)構(gòu)的了解不足,造成對(duì)NLQ查詢意圖的理解存在偏差的問題.所以在人類評(píng)估指標(biāo)的設(shè)計(jì)中,除了需要提高評(píng)估的有效性,還需要考慮人為因素的不確定性.

5.4 復(fù)雜SQL句式的生成

目前模型在生成復(fù)雜SQL句式中的不足,主要體現(xiàn)在2個(gè)方面:1)模型缺乏對(duì)表內(nèi)和表間關(guān)系的理解能力.具體表現(xiàn)在處理包含自連接、多表連接等組合式查詢的樣本能力存在不足.比如Guo等人[25]提出的生成規(guī)則中,就缺乏自連接查詢的相關(guān)規(guī)則.而在多表連接方面,外鍵關(guān)系越多,其JOIN子句中涉及的表就越多,從而導(dǎo)致模型匹配數(shù)據(jù)庫元素的準(zhǔn)確率也越低[24].2)嵌套查詢的生成能力有待加強(qiáng).目前在實(shí)現(xiàn)嵌套查詢的生成中,較多采用的是基于層級(jí)式的解碼方法,但是其準(zhǔn)確率仍然不高,而且層級(jí)式解碼也存在NLQ與數(shù)據(jù)庫元素在實(shí)體映射方面的誤匹配問題.

針對(duì)以上不足,完善層級(jí)式解碼方法是一種改進(jìn)的方向.其中以ASTs解碼為代表的方法,在遞歸程序的生成和程序片段的拼接方面具有明顯優(yōu)勢(shì),因此目前仍是生成復(fù)雜SQL句式的重要實(shí)現(xiàn)途徑.其中改進(jìn)ASTs的生成規(guī)則是一種重要的優(yōu)化路線,可嘗試的改進(jìn)方向有4方面:1)借鑒其他程序語言的語法框架,以彌補(bǔ)在SQL生成中缺失的規(guī)則;2)Brad等人[90]提到在人工定義生成規(guī)則之前,可以在大量樣本中先進(jìn)行無監(jiān)督預(yù)訓(xùn)練,使模型預(yù)先學(xué)習(xí)樣本中潛在的ASTs生成規(guī)則;3)Lin等人[93]提出在輸出ASTs時(shí),為了避免模型擬合困難的問題,應(yīng)盡量避免過度生成和AST的樹高過深,因此可以設(shè)計(jì)基于更短路徑的派生規(guī)則,以便于模型的學(xué)習(xí);4)提高生成規(guī)則的靈活度和動(dòng)態(tài)性,比如設(shè)計(jì)基于具體樣本的表結(jié)構(gòu)特征的動(dòng)態(tài)規(guī)則,因地制宜地控制解碼輸出.

5.5 交互模型的研究

目前模型在處理SparC和CoSQL這類對(duì)話式數(shù)據(jù)集的能力還有待提高.因?yàn)槊總€(gè)樣本由對(duì)話構(gòu)成,僅憑其中單句的NLQ是不足以理解查詢意圖的,而且脫離了上下文的NLQ,難免會(huì)存在一些邏輯缺陷,尤其在對(duì)話中越靠后出現(xiàn)的NLQ,其敘述方式越省略,也就越容易出現(xiàn)歧義,從而導(dǎo)致這部分SQL結(jié)果的準(zhǔn)確率較低.并且模型針對(duì)CoSQL數(shù)據(jù)集時(shí),需要同時(shí)處理對(duì)話追蹤、對(duì)話生成以及用戶行為預(yù)判這3種任務(wù),所以未來NLIDB的設(shè)計(jì),需更多考慮實(shí)際應(yīng)用中的對(duì)話場(chǎng)景,提高模型基于上下文依賴(context-dependent)的分析能力.具體可以考慮2個(gè)方向的研究:1)提高NLQ消歧能力.通過優(yōu)化基于關(guān)聯(lián)表示的上下文依賴機(jī)制,提高模型對(duì)歷史對(duì)話信息的利用能力,達(dá)到從全局的角度理解查詢意圖的效果.2)引入用戶反饋機(jī)制,并強(qiáng)化反饋環(huán)節(jié)的設(shè)計(jì).具體可以在交互過程注入限制性措施,引導(dǎo)用戶在對(duì)話中提供更有價(jià)值的線索,來達(dá)到細(xì)化查詢和消除歧義的目的.引入用戶反饋是一種持久的輔助機(jī)制,因此在保證模型穩(wěn)定性的前提下,可以開展終生學(xué)習(xí)(lifelong learning)的語義分析相關(guān)研究.

5.6 方法的創(chuàng)新與新領(lǐng)域的探索

針對(duì)5.1~5.5節(jié)提到的諸多挑戰(zhàn),可以跳出針對(duì)深度學(xué)習(xí)模型細(xì)節(jié)部分的優(yōu)化,考慮從整體角度進(jìn)行方法的創(chuàng)新,例如:1)嘗試多方法的融合.比如在3.1.2節(jié)和4.6節(jié)提到的輔助方法中,就有將查詢?nèi)罩尽⒄Z法分析樹、程序可執(zhí)行特性等元素融合至深度學(xué)習(xí)模型的做法.此外,其他啟發(fā)式成果也可以考慮在未來實(shí)現(xiàn)進(jìn)一步融合,例如有的成果通過建立孿生網(wǎng)絡(luò),分析NLQ和SQL之間潛在的語義相似性[112],如果把它融合至語義分析模型中,就可以實(shí)現(xiàn)在編碼-解碼之前,先識(shí)別NLQ潛在的SQL句式結(jié)構(gòu),再將它作為指導(dǎo)解碼輸出的決策;還有的成果利用有向圖表示SQL,實(shí)現(xiàn)了基于“圖-序列”的NLQ生成模型[113],此類逆向任務(wù)可以作為實(shí)現(xiàn)數(shù)據(jù)增強(qiáng)的輔助方法.2)優(yōu)化神經(jīng)網(wǎng)絡(luò)的學(xué)習(xí)方式.目前已有相關(guān)成果引入了多任務(wù)學(xué)習(xí)、元學(xué)習(xí)、強(qiáng)化學(xué)習(xí)等訓(xùn)練方式,其中許多環(huán)節(jié)都可以進(jìn)一步優(yōu)化.例如在McCann等人[57]提出的基于多任務(wù)課程學(xué)習(xí)(curriculum learning)模式中,就可以嘗試更多不同任務(wù)之間的組合方式,從而優(yōu)化階段式訓(xùn)練過程.Huang等人[106]提出的基于少樣本(few-shot)元學(xué)習(xí)模型中,作為偽任務(wù)建立依據(jù)的相關(guān)性函數(shù),是決定元學(xué)習(xí)表現(xiàn)的關(guān)鍵,對(duì)此也可以進(jìn)一步優(yōu)化.在引入強(qiáng)化學(xué)習(xí)的模型中,可以考慮結(jié)合SQL特性設(shè)計(jì)更有針對(duì)性的期望獎(jiǎng)勵(lì)方法.此外還可以參考基于語義分析的弱監(jiān)督模型[114],利用其中的模型優(yōu)化策略改進(jìn)訓(xùn)練過程等.在研究領(lǐng)域的拓展方面,擴(kuò)展跨語言模型的相關(guān)研究是重要的發(fā)展方向.因?yàn)槟壳澳P腿允且蕴幚碛⑽腘LQ為主,而在實(shí)際應(yīng)用中,跨語言NLQ的處理對(duì)模型來說是必須具備的功能.其中跨語言句式結(jié)構(gòu)的識(shí)別和代詞指代問題給語義分析任務(wù)帶來新的挑戰(zhàn)[46],因此分詞優(yōu)化技術(shù)和跨語言語義映射方法等都是未來值得進(jìn)一步研究的方向.

6 總 結(jié)

在NLIDB的實(shí)現(xiàn)中,基于編碼器-解碼器的深度學(xué)習(xí)模型在表示學(xué)習(xí)、語義分析、跨領(lǐng)域數(shù)據(jù)挖掘等方面表現(xiàn)突出,較傳統(tǒng)rule-based方法更具優(yōu)勢(shì),因此仍是一類很有前景的解決方案.根據(jù)目前的研究現(xiàn)狀,深度學(xué)習(xí)模型在各環(huán)節(jié)的設(shè)計(jì)中還存在一定的提升空間,并且未來還可以積極嘗試多方法的交叉融合,以實(shí)現(xiàn)模型的優(yōu)化.本文以解碼方法為依據(jù),梳理了基于深度學(xué)習(xí)方法的NLIDB成果,分析了尚待解決的問題以及提出未來發(fā)展方向,希望能對(duì)該領(lǐng)域的相關(guān)研究提供一定的參考.

作者貢獻(xiàn)聲明:潘璇負(fù)責(zé)文獻(xiàn)搜集、文獻(xiàn)歸納和文章撰寫工作;徐思涵負(fù)責(zé)文獻(xiàn)篩選和論文修改工作;蔡祥睿負(fù)責(zé)提供研究思路和補(bǔ)充參考文獻(xiàn)工作;溫延龍參與設(shè)計(jì)論文框架和提出論文修改意見;袁曉潔負(fù)責(zé)文章選題工作,以及對(duì)文章撰寫提出指導(dǎo)意見.

猜你喜歡
解碼語義句式
真實(shí)場(chǎng)景水下語義分割方法及數(shù)據(jù)集
滿文簡單句式之陳述句
解碼 四十五度仰望天空
文化解碼
文化 解碼
文明 解碼
漢語依憑介詞的語義范疇
特殊句式
關(guān)心健康狀況的問答
普兰县| 新营市| 丽水市| 湛江市| 柳林县| 嵊泗县| 长武县| 阿巴嘎旗| 咸宁市| 涿州市| 武隆县| 甘孜| 桓仁| 昌图县| 绍兴县| 来安县| 新乡县| 绥宁县| 新安县| 洛宁县| 肥东县| 新沂市| 阿拉善盟| 汉中市| 文水县| 苍溪县| 五莲县| 枣强县| 重庆市| 绥化市| 光山县| 甘德县| 当涂县| 理塘县| 科尔| 北京市| 宣恩县| 安多县| 金沙县| 仁化县| 荣成市|