• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

    2021-09-13 01:54:14徐思涵蔡祥睿溫延龍袁曉潔
    計算機(jī)研究與發(fā)展 2021年9期
    關(guān)鍵詞:解碼句式語義

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

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

    關(guān)系型數(shù)據(jù)庫自1970年[1]被提出以來,經(jīng)過數(shù)十年的發(fā)展,已然成為數(shù)據(jù)存儲的主流工具,被廣泛應(yīng)用在政府部門以及商業(yè)、學(xué)術(shù)等各種領(lǐng)域中.結(jié)構(gòu)化查詢語言(structured query language,SQL)是用戶或應(yīng)用程序與數(shù)據(jù)庫交流的重要手段.自然語言接口的出現(xiàn),打破了用戶和終端之間的交互屏障,是人工智能研究領(lǐng)域的重要分支之一,其中面向數(shù)據(jù)庫接口的實現(xiàn)也受到了研究人員的廣泛關(guān)注.數(shù)據(jù)庫自然語言接口(natural language interface to data-base,NLIDB)是一種通過自然語言實現(xiàn)關(guān)系數(shù)據(jù)庫查詢的接口,它能消除用戶在查詢數(shù)據(jù)庫時遇到的技術(shù)壁壘,即解除了用戶必須掌握SQL語法知識的限制,實現(xiàn)了通過自然語言的描述就可以查詢數(shù)據(jù)庫的功能.總的來說,NLIDB的目標(biāo)就是實現(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ù)的倒排索引作為檢索對象,將它們和自然語言查詢進(jìn)行匹配,以識別出查詢中提到的關(guān)鍵字.但是其缺點在于該方法無法識別出自然語言中未直接出現(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è)的查詢模板,才能實現(xiàn)SQL的輸出.但是自然語言中普遍存在多歧義和描述多樣性現(xiàn)象,這就會導(dǎo)致在實際應(yīng)用中預(yù)設(shè)的匹配規(guī)則或查詢模板無法覆蓋到更多更復(fù)雜的自然語言查詢中.上述方法大部分只能處理固定領(lǐng)域的數(shù)據(jù)庫,即NLIDB只能根據(jù)固定的表結(jié)構(gòu)來設(shè)計實現(xiàn),所以系統(tǒng)一般無法移植到其他數(shù)據(jù)庫中使用.至今還沒通用的商業(yè)化解決方案或原型系統(tǒng),其主要原因還是由于目前尚無適用于不同數(shù)據(jù)庫表結(jié)構(gòu)的NLIDB[16].

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

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

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

    雖然已有相關(guān)綜述總結(jié)了機(jī)器學(xué)習(xí)在數(shù)據(jù)庫系統(tǒng)中的應(yīng)用[19],但是并沒有專門針對NLIDB進(jìn)行探討.因此本文對近年來利用深度學(xué)習(xí)方法實現(xiàn)NLIDB的成果進(jìn)行梳理,尤其針對輸入是自然語言、輸出是SQL的這類模型進(jìn)行總結(jié).由于還有一類研究是以執(zhí)行數(shù)據(jù)庫查詢后的結(jié)果作為模型的輸出目標(biāo)[20-21],這類研究并不作為本文討論的重點,因為從方法的可擴(kuò)展性來看,以查詢的邏輯形式作為目標(biāo)輸出,可以在任意時間以及面對任意量級的表內(nèi)容的情況下實現(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);再分別以實現(xiàn)途徑是深度學(xué)習(xí)模型和輸出目標(biāo)是邏輯形式作為進(jìn)一步判斷標(biāo)準(zhǔn),篩選出87篇文獻(xiàn);然后以解碼方法為依據(jù),將成果歸納成4個解碼類別,分別為基于序列的生成方法、基于固定模板的生成方法、框架-細(xì)節(jié)的分階段生成方法和基于語法的層級式生成方法.

    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語義對應(yīng)的SQL.SQL是一種用于數(shù)據(jù)庫交互的程序設(shè)計語言,能實現(xiàn)對關(guān)系數(shù)據(jù)庫中數(shù)據(jù)的存取、查詢和更新等管理操作.以數(shù)據(jù)集WikiSQL[23]為例,其中的SQL一般遵循基本查詢句式:“SELECTaggselcolWHEREwhecolopval(ANDwhecolopval)*”.其中的幾個變量有:“agg”為COUNT,MIN,MAX等聚合函數(shù)關(guān)鍵字,可以為空;“selcol”表示SELECT子句中被選中的列(SELECTcolumn,selcol);“whecolopval”表示W(wǎng)HERE子句中的1個查詢條件,其中“whecol”為查詢條件中被選中的列(WHEREcolumn,whecol);“op”表示=,<,>等運算符;“val”表示條件值;“*”為WHERE子句中條件個數(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對應(yīng)的SQL為“SELECTHeight(ft)WHEREName=‘Willis Tower’ANDLocation=‘Chicago’”.Spider[24]數(shù)據(jù)集中除了包含SQL的基本查詢句式,還會涉及GROUP BY,HAVING以及嵌套查詢等查詢句式.NLIDB實現(xiàn)SQL的生成不同于Python等編程語言的生成,其數(shù)據(jù)庫中的表結(jié)構(gòu)也是已知信息,因此可以根據(jù)設(shè)計的需要而作為模型的輸入信息.

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

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

    1)方法對比

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

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

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

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

    利用深度學(xué)習(xí)模型實現(xiàn)NLQ到SQL的轉(zhuǎn)化總體分為5個步驟,如圖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)練集、驗證集和測試集.

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

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

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

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

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

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

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

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

    以下分別從單領(lǐng)域和跨領(lǐng)域數(shù)據(jù)集、語言類型、查詢句式以及語義分析任務(wù)這4個角度對數(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í)針對特定領(lǐng)域數(shù)據(jù)庫的信息表示.比如ATIS[35]是航班預(yù)定主題的數(shù)據(jù)集,一共涉及32張表,所有的樣本全部在這些表的基礎(chǔ)上建立.交叉領(lǐng)域數(shù)據(jù)集(cross-domain)中,每個樣本有各自的數(shù)據(jù)庫結(jié)構(gòu),比如:WikiSQL[23]數(shù)據(jù)集中,數(shù)據(jù)庫來自Wikipedia的24241張HTML表格,涉及的主題比較廣泛,每個樣本建立的查詢分別能夠?qū)?yīng)到數(shù)據(jù)集中的一個數(shù)據(jù)庫;Spider[24]也是交叉領(lǐng)域數(shù)據(jù)集,包含了200個數(shù)據(jù)庫,涵蓋138個領(lǐng)域.這類數(shù)據(jù)集也稱為zero-shot數(shù)據(jù)集,因為它需要模型能夠在不同領(lǐng)域數(shù)據(jù)庫形成的上下文中,實現(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ù)集.不過目前還是以SQL作為目標(biāo)語言的數(shù)據(jù)集居多.從NLQ的語言類型來看,英文數(shù)據(jù)集居多.針對此現(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ù)集會根據(jù)SQL句式復(fù)雜程度標(biāo)注樣本的難度等級,比如Academic[13]數(shù)據(jù)集根據(jù)SQL的agg類型和嵌套查詢數(shù)量,將數(shù)據(jù)集劃分成easy,medium,hard這3個等級,Spider[24]數(shù)據(jù)集通過綜合評估子句類型,將SQL關(guān)鍵字按數(shù)量由低至高將數(shù)據(jù)集劃分成easy,medium,hard,extra hard這4個等級,借助難度等級信息有助于全面評估模型在處理不同SQL句式中的語義分析能力.

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

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

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

    2.2 評估方式

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

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

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

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

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

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

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

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

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

    基于深度學(xué)習(xí)模型的NLIDB絕大部分是建立在端到端的機(jī)器翻譯框架之上的,而編碼器-解碼器作為框架的實現(xiàn)方法,其中針對各個環(huán)節(jié)的改進(jìn)成為了NLIDB研究的重點.在相關(guān)成果的歸納整理中發(fā)現(xiàn)許多模型的優(yōu)化路線聚焦在解碼環(huán)節(jié)中,因此以解碼方法為依據(jù)進(jìn)行分類是有意義的,這樣不僅能將目前的研究成果清晰地加以區(qū)分,還能夠突出每個類別下模型各自的特點.本節(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ī)器翻譯框架實現(xiàn)SQL的生成,該方法是將NLQ和SQL均作為序列進(jìn)行處理.其中NLQ作為輸入,分別通過編碼器和解碼器,最后輸出SQL.編碼器與解碼器是2個互不共享訓(xùn)練參數(shù)的多層RNN,大部分采用長短期記憶(long short-term memory,LSTM)[53]單元或者其他門控循環(huán)單元(gated recurrent unit,GRU)[54]作為網(wǎng)絡(luò)基本單元,以1個時間步處理1個標(biāo)記的方式循環(huán)處理整個序列,如圖5所示.

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

    圖5中編碼器處理|q|個時間步,|q|表示輸入NLQ中的標(biāo)記個數(shù),每步編碼一個標(biāo)記,處理順序可以單向,也可以雙向.然后解碼器處理|a|個時間步,|a|表示輸出SQL的標(biāo)記個數(shù),每步輸出一個標(biāo)記,處理順序為單向來保證輸出序列需具有可讀性.

    以LSTM單元舉例,編碼器的處理流程就是把向量化的輸入序列逐一通過LSTM函數(shù)計算后得到隱向量(也稱中間語義編碼向量)的過程.解碼器的處理流程為:在每步輸出中,根據(jù)當(dāng)前隱向量計算得到輸出空間中所有標(biāo)記的概率分布,然后利用Softmax函數(shù)輸出最大概率對應(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é),通常在每一步解碼時利用注意力機(jī)制強(qiáng)調(diào)輸入中特定的局部信息.

    (1)

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

    3.1.2 改進(jìn)方法

    針對基本序列-序列模型的缺陷,許多研究都提出了改進(jìn)方案,在此歸納為6個改進(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]提出了基于注意力的動態(tài)拷貝機(jī)制,解碼過程中先用Softmax選擇下一步輸出的“動作”類型,再用選擇的動作進(jìn)行解碼.其中“寫”動作是指從解碼對應(yīng)的詞匯表中進(jìn)行輸出;“拷貝”動作則依據(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ù)庫的實際內(nèi)容中獨立出來,避免了模型無法輸出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步借助編輯距離、詞嵌入空間距離、元知識匹配等方法搜尋NLQ中所有可能關(guān)聯(lián)的數(shù)據(jù)庫元素,并作為候選;第2步對NLQ構(gòu)建語法分析樹,并對分析樹利用最大二分匹配算法得到符合全局一致性的標(biāo)簽分配方案.之后Wang[63]又對標(biāo)注過程做了改進(jìn),先以基于RNN的二分類器逐一對所有與NLQ可能相關(guān)的數(shù)據(jù)庫元素進(jìn)行語義層面判斷,確定存在關(guān)聯(lián)的元素集合,然后用對抗文本方法定位這些元素在NLQ中出現(xiàn)的位置來完成標(biāo)注.

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

    5)神經(jīng)網(wǎng)絡(luò)的優(yōu)化.Yin等人[50]在3個SPARQL數(shù)據(jù)集(Monument,LC-QuAD,DBNQA)中分別測試了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的長程依賴問題,而且其并行的計算方式在訓(xùn)練速度上占據(jù)優(yōu)勢.

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

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

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

    3.1.3 方法總結(jié)

    此類方法的缺陷與機(jī)器翻譯任務(wù)表現(xiàn)出來的問題一致,即存在輸入序列越長,模型預(yù)測效果越差的情況,以及龐大的搜索空間會削弱模型的解碼能力等.因此相關(guān)改進(jìn)方案也是針對這些缺點進(jìn)行優(yōu)化,比如使用Pointer Networks縮減解碼搜索空間的方法,就適用于生成SQL這種需要從輸入中摘取信息的任務(wù),同時還能解決模型無法生成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 實現(xiàn)方法

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

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

    之后Xu等人[29]在Seq2SQL的基礎(chǔ)上提出了改進(jìn)模型SQLNet,在子任務(wù)設(shè)計上做了進(jìn)一步的細(xì)化,將WHERE子句拆解為4個子任務(wù),分別負(fù)責(zé)生成WHERE條件數(shù)whenum,whecol,op,val.子任務(wù)之間存在依賴關(guān)系,如圖6所示:其中每個虛線框表示一種子任務(wù);每個箭頭代表一種依賴關(guān)系,箭頭的尾部為被依賴的子任務(wù)或信息,比如op和val的預(yù)測均依賴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ī)制,與列注意力的單向計算不同,它通過對NLQ和列名分別計算前向和后向的2輪注意力來捕捉NLQ和列名之間的關(guān)聯(lián),實現(xiàn)2種信息相互強(qiáng)調(diào)的作用.此外,還在詞嵌入中引入了CNN,通過對字符級詞嵌入向量使用3個卷積核得到詞表示,再和Glove的詞嵌入串接起來,形成更為豐富的詞向量表示.

    隨著Transformer[64]和BERT[72]編碼模型的相繼提出,將序列的上下文表達(dá)融入到編碼之中,使編碼結(jié)果獲得了帶有豐富上下文信息的詞向量表示,進(jìn)而令基于Slot-filling模型的預(yù)測效果得到進(jìn)一步提高.在Hwang等人[73]提出的SQLOVA模型中,將BERT編碼NLQ后的輸出視為詞嵌入向量,再將其作為后續(xù)子任務(wù)網(wǎng)絡(luò)的輸入.子任務(wù)類別與SQLNet類似,每個子任務(wù)有自己的編碼解碼模塊,其中負(fù)責(zé)生成val的子任務(wù)從以往的序列化輸出,改進(jìn)為分別預(yù)測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對列名編碼添加了“全局上下文注意力”,也就是在每個列名的編碼中添加了上下文信息,以此強(qiáng)化列名之間的關(guān)聯(lián),擴(kuò)大了BERT的自注意力覆蓋范圍,使編碼的全局上下文表示能力更加完備.X-SQL在子任務(wù)上的設(shè)計比SQLOVA更為簡單,但是基于以上的優(yōu)化,使其在WikiSQL數(shù)據(jù)集上的表現(xiàn)進(jìn)一步提高.

    以往模型在用BERT編碼時,習(xí)慣將NLQ和所有列名串接起來進(jìn)行處理,Lyu等人[76]提出的HydraNet模型對此做了改進(jìn),將NLQ與每個列名分別串接起來進(jìn)行編碼,這樣使每個列名都能融合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)來決定每步解碼的輸出方式,共計3種方式,分別用于輸出SQL關(guān)鍵字、列名和val,每種解碼的實現(xiàn)方式各不相同.因此若以T1,T2,T3表示3種解碼方式,則輸出過程就可以形式化表示為 “T1T1T2T1T2T1(T1T2T3)*”.該方法不僅細(xì)粒度地控制解碼輸出,還保證了序列模型的簡潔性和語法結(jié)構(gòu)的正確性.

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

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

    每步解碼時,根據(jù)當(dāng)前對應(yīng)的語法狀態(tài),以一種“輸出屏蔽”機(jī)制過濾掉無效的搜索空間,來保證SQL輸出的有效性和搜索的高效性.基于BNF范式描述的規(guī)則是在SQL語法的基礎(chǔ)上設(shè)計的,具有上下文無關(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)注以實現(xiàn)改進(jìn).標(biāo)注信息作為外部知識,能讓模型更容易理解輸入信息的語義.Yu等人[80]提出的TypeSQL模型就設(shè)置了對NLQ注釋的預(yù)處理操作.注釋類型涉及數(shù)據(jù)庫元素、數(shù)字、日期和實體名稱.其中實體名稱的注釋,是通過對NLQ關(guān)鍵詞查詢并匹配至Freebase知識庫的方式來實現(xiàn),匹配類型涵蓋人物、地點、國家、組織、運動(WikiSQL數(shù)據(jù)集含大量體育主題的樣本)等.此外,對于數(shù)據(jù)庫元素的注釋,不僅包括列名,還通過對表的查詢,將NLQ中能匹配到的數(shù)據(jù)庫記錄的內(nèi)容也進(jìn)行了注釋,以上做法將外部知識最大限度地注入到了語義分析流程中.

    3.2.4 方法總結(jié)

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

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

    3.3.1 方法概述

    在3.2節(jié)中,解碼利用的模板對訓(xùn)練數(shù)據(jù)集的SQL句式是強(qiáng)依賴的,這就使模型能夠生成的SQL句式比較固定和局限,導(dǎo)致模型即使在某個數(shù)據(jù)集中具有良好表現(xiàn),也不一定能在其他數(shù)據(jù)集中發(fā)揮同樣的性能.因為NLIDB需要同時保證生成的SQL在句法和語義2方面都是有效的,所以模型可以把這2方面的學(xué)習(xí)過程從完整的框架中分離開來,通過獨立建模的方式分別進(jìn)行訓(xùn)練.因此本節(jié)方法的特點是把SQL的生成分解為2個步驟:第1步是根據(jù)NLQ動態(tài)識別出粗粒度的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é)信息,因此解碼時的搜索空間能大幅度縮減;第2步是在第1步的基礎(chǔ)上細(xì)化結(jié)果,因此能保證SQL結(jié)果在結(jié)構(gòu)上的規(guī)范性.這類方法也經(jīng)常被利用在NL2API[81]等其他語義分析任務(wù)中.

    3.3.2 實現(xiàn)方法

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

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

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

    Lee[82]則采用了“面向子句”的框架生成方式.模型按照句式類型設(shè)計了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é)信息.每個模塊對應(yīng)解碼方式各不相同,當(dāng)解碼到嵌套查詢NESTED QUERY模塊時,先輸出“[SUB_QUERY]”作為臨時標(biāo)記,當(dāng)主句解碼完成后,再以上述方式遞歸地完成嵌套查詢的部分.支持生成嵌套查詢的模型還有RYANSQL[83],它也是先利用分類方法生成SQL框架,在此基礎(chǔ)上提出一種“位置聲明碼”來定義嵌套查詢.解碼時先輸出位置聲明碼,再遞歸生成相應(yīng)的子查詢.基于模塊化框架輸出方式,將原始SQL細(xì)節(jié)之間的序列化依賴關(guān)系改進(jìn)成基于上下文的模塊化依賴關(guān)系,使模型可以學(xué)習(xí)到結(jié)構(gòu)級別的表達(dá).

    2)生成式框架.Hosu等人[84]分別借助2個序列生成模型實現(xiàn)2個階段的解碼.第1步的框架部分,是一個融合了全局注意力的序列生成模型,其中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ù)庫實體名稱.此外模型還可以根據(jù)生成的實體名稱修正第1步生成的框架結(jié)構(gòu).

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

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

    3.4 基于語法的層級式生成方法

    3.4.1 方法概述

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

    3.4.2 自上而下的層級式樹解碼

    Dong等人[87]在2016年提出了序列-樹(seqence-to-tree,SEQ2TREE)模型,采用了層級式樹解碼方法,用于捕捉邏輯形式的組成結(jié)構(gòu).SEQ2TREE不同于以往的序列-序列模型的輸出形式,而是以自上而下的方式(top-down manner)輸出結(jié)果.模型通過定義“非終結(jié)符”表示序列中的子結(jié)構(gòu),當(dāng)生成包含子結(jié)構(gòu)的部分時,其內(nèi)容會從原始序列中分離出來,向下拓展形成子樹,因此完整的輸出最終會以樹狀結(jié)構(gòu)呈現(xiàn).樹解碼器通過RNN實現(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é)束符時,就結(jié)束解碼.SEQ2TREE方法為后續(xù)其他層級式解碼模型奠定了基礎(chǔ).之后Xiong等人[88]在此基礎(chǔ)上使用了帶有SQL關(guān)鍵字的起始標(biāo)記來表示不同子句結(jié)構(gòu),比如解碼到SELECT子句或WHERE子句時,分別以〈select〉和〈where〉作為起始標(biāo)記,更利于SQL的結(jié)構(gòu)化表示.

    3.4.3 抽象語法樹解碼

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

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

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

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

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

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

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

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

    Lin等人[93]指出在ASTs解碼中,生成規(guī)則的設(shè)計需要權(quán)衡語法的復(fù)雜度和模型的可學(xué)習(xí)性.因為針對SQL的生成,有些輸出規(guī)則是依賴于表結(jié)構(gòu)的具體信息的,而僅憑上下文無關(guān)(context free)的規(guī)則是無法涵蓋這部分生成的.因此需要添加數(shù)據(jù)庫表依賴的語法(schema-dependent grammar),構(gòu)成上下文相關(guān)的規(guī)則,以補(bǔ)充以往規(guī)則中無法實現(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ī)則.解碼時根據(jù)歷史狀態(tài)決定調(diào)用的模塊類型,有些規(guī)則需要向前回溯多個時間步,才能準(zhǔn)確判斷后續(xù)的輸出.解碼過程使用了堆棧機(jī)制,從Root模塊開始調(diào)用新模塊,被調(diào)用的模塊實例化后壓入棧,之后在每一步解碼中,先從棧彈出當(dāng)前實例化的模塊,再根據(jù)生成規(guī)則激活新的模塊,實例化后再壓入棧,以此往復(fù)直至??諡橹?基于堆棧的模塊調(diào)用機(jī)制能實現(xiàn)嵌套查詢這種復(fù)雜句式的生成.

    Min等人[46]利用SyntaxSQLNet[94]模型對跨語言數(shù)據(jù)集CSpider[46]進(jìn)行了實踐,評估了不同的詞嵌入方法和分詞工具對生成結(jié)果的影響.結(jié)果證明跨語言的詞嵌入方法好于將不同語言分別進(jìn)行詞嵌入的方法.說明將輸入信息映射至相同維度的嵌入分布中,相比分別映射的方式,更能強(qiáng)化NLQ和表結(jié)構(gòu)之間的關(guān)聯(lián).此外在中文NLQ的處理中,分詞效果對SQL生成有重要影響,分詞誤差和OOV很大程度影響語義分析的正確率.此外中文句式結(jié)構(gòu)的識別和代詞指代問題也給語義分析任務(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]重點設(shè)計了NLQ和數(shù)據(jù)庫表的關(guān)聯(lián)表示方法,其中將表的類型特征、表的關(guān)系特征和NLQ的詞序特征這3個層次的特征表示成圖結(jié)構(gòu),稱之為層次化的表圖譜(hierarchical schema graph,HSG),它實際上是一種強(qiáng)化的標(biāo)注形式.之后HSG與NLQ共同被編碼,提高了樣本的表示能力.

    Bogin等人[96]利用GNN對數(shù)據(jù)庫表結(jié)構(gòu)形成全局表示,進(jìn)一步強(qiáng)調(diào)了對表結(jié)構(gòu)語義進(jìn)行表示的重要性,提高了模型處理zero-shot樣本的能力.之后Bogin等人[97]又提出了GLOBAL-GNN,并做了2方面改進(jìn):1)在圖表達(dá)基礎(chǔ)上增設(shè)全局節(jié)點,強(qiáng)化了NLQ和表結(jié)構(gòu)全局化的特征;2)設(shè)置了重排機(jī)制(re-ranker),以全局的角度對集束搜索中的候選值進(jìn)行2次評估,進(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編碼器實現(xiàn)對輸入信息共計33種關(guān)系特征的表示,這些關(guān)系不僅涵蓋NLQ與數(shù)據(jù)庫元素的關(guān)系,還包括數(shù)據(jù)庫內(nèi)部各元素之間的關(guān)系,關(guān)系特征作為嵌入向量融入RAT的表示之中.當(dāng)ASTs解碼到GT節(jié)點,需要實例化數(shù)據(jù)庫元素時,利用攜帶關(guān)系信息的RAT分別建立表和列的對齊矩陣(alignment matrix),實現(xiàn)數(shù)據(jù)庫內(nèi)部關(guān)聯(lián)的再次強(qiáng)化.RAT不僅建立了NLQ和數(shù)據(jù)庫元素之間的關(guān)系,還實現(xiàn)了數(shù)據(jù)庫內(nèi)部元素之間預(yù)定義關(guān)系的組織與表示.這種聯(lián)合式的表示學(xué)習(xí),對輸入信息存在預(yù)定義關(guān)系的語義分析任務(wù)來說十分重要.

    3.4.6 方法總結(jié)

    基于語法的層級式解碼方法的優(yōu)勢在于:1)利用目標(biāo)程序語言的語法結(jié)構(gòu)引導(dǎo)解碼,可以進(jìn)一步限制搜索空間,從而保證輸出的內(nèi)容是規(guī)范的.語法在模型中作為先驗知識被設(shè)計成一組已知的動作節(jié)點,使模型不用再根據(jù)有限的訓(xùn)練數(shù)據(jù)去還原SQL語法,從而讓模型專注于學(xué)習(xí)語義合成特征.2)層級化信息有助于神經(jīng)網(wǎng)絡(luò)信息流的建立,同時也能自然地反映程序語言的遞歸結(jié)構(gòu)[18].3)層級式解碼方法有較高的概括性,相同的模型可以用于多種程序語言的生成,只需要重塑基于抽象語法的生成規(guī)則,就能實現(xiàn)模型的移植.因此基于層級式解碼模型在概括性、可拓展性、有效性和可操作性均具有不錯表現(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é)對基于3.1~3.4節(jié)所述的4種解碼方法(分別簡稱為序列、模板、分階段和層級式)的模型進(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)練模式、程序語言特性以及對編碼-解碼過程的優(yōu)化這4種輔助方法.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    5 未來研究方向

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

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

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

    改進(jìn)方案可以從3個方面入手: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è)計有針對性的標(biāo)簽添加法,將實體、關(guān)系等信息更顯式地體現(xiàn)在NLQ中,例如引入外部知識庫,甄別NLQ中的各類實體名稱,或者設(shè)計包容性更強(qiáng)的識別算法;3)從數(shù)據(jù)庫利用的角度,目前許多模型由于考慮隱私保護(hù)的問題,并沒有將數(shù)據(jù)庫表中的記錄融入到語義分析中,也就無法更進(jìn)一步理解查詢意圖和有效識別數(shù)據(jù)庫元素.因此可以考慮在條件允許情況下,將表中記錄作為模型的部分輸入.例如ColloQL[109]考慮到實際應(yīng)用中的NLQ存在噪聲問題,提出一種面向數(shù)據(jù)庫記錄的采樣方法.編碼時,對數(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個方面:1)訓(xùn)練數(shù)據(jù)的SQL句式類型不夠豐富.Finegan-Dollak等人[44]比較評估了不同模型分別在不同數(shù)據(jù)集和不同數(shù)據(jù)分割方式(即訓(xùn)練集與測試集的配置方案)下的表現(xiàn).在以SQL句式為分割依據(jù)的評估中,模型整體性能表現(xiàn)遠(yuǎn)遠(yuǎn)低于以NLQ特征為依據(jù)的分割方式.因為前者考驗的是模型在SQL知識層面的泛化能力,其很大程度增加了語義分析任務(wù)的難度,揭露了模型在對SQL框架層次的zero-shot處理能力還有待提高.2)訓(xùn)練數(shù)據(jù)數(shù)量存在嚴(yán)重不足.Guo等人[25]指出Spider數(shù)據(jù)集中extra hard等級的樣本數(shù)量在所有等級中的占比最少,使模型在嵌套查詢等復(fù)雜句式的處理方面得不到充分的訓(xùn)練.因此增加訓(xùn)練樣本數(shù)量,尤其針對復(fù)雜SQL樣本和跨領(lǐng)域數(shù)據(jù)庫樣本的擴(kuò)充是很有必要的.目前在數(shù)據(jù)增強(qiáng)方法中,常見做法是替換已知樣本中的實體名稱,該方法只能在原始數(shù)據(jù)集基礎(chǔ)上,擴(kuò)充固定SQL句式的樣本.因此可以嘗試跨數(shù)據(jù)庫、跨SQL句式,甚至跨數(shù)據(jù)集的數(shù)據(jù)增強(qiáng)方法.此外,在通過改述NLQ來增加樣本的方法中,存在新樣本偏離原始查詢意圖的問題[103].針對此問題,可以引入反向監(jiān)督機(jī)制,即建立SQL為輸入、NLQ為輸出的語義分析模塊,實現(xiàn)NLQ的生成質(zhì)量的控制,保障數(shù)據(jù)增強(qiáng)效果.

    5.3 完善模型評估策略

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

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

    目前模型在生成復(fù)雜SQL句式中的不足,主要體現(xiàn)在2個方面:1)模型缺乏對表內(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).目前在實現(xiàn)嵌套查詢的生成中,較多采用的是基于層級式的解碼方法,但是其準(zhǔn)確率仍然不高,而且層級式解碼也存在NLQ與數(shù)據(jù)庫元素在實體映射方面的誤匹配問題.

    針對以上不足,完善層級式解碼方法是一種改進(jìn)的方向.其中以ASTs解碼為代表的方法,在遞歸程序的生成和程序片段的拼接方面具有明顯優(yōu)勢,因此目前仍是生成復(fù)雜SQL句式的重要實現(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時,為了避免模型擬合困難的問題,應(yīng)盡量避免過度生成和AST的樹高過深,因此可以設(shè)計基于更短路徑的派生規(guī)則,以便于模型的學(xué)習(xí);4)提高生成規(guī)則的靈活度和動態(tài)性,比如設(shè)計基于具體樣本的表結(jié)構(gòu)特征的動態(tài)規(guī)則,因地制宜地控制解碼輸出.

    5.5 交互模型的研究

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

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

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

    6 總 結(jié)

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

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

    猜你喜歡
    解碼句式語義
    《解碼萬噸站》
    語言與語義
    解碼eUCP2.0
    中國外匯(2019年19期)2019-11-26 00:57:32
    NAD C368解碼/放大器一體機(jī)
    Quad(國都)Vena解碼/放大器一體機(jī)
    基本句式走秀場
    例析wh-ever句式中的常見考點
    “上”與“下”語義的不對稱性及其認(rèn)知闡釋
    認(rèn)知范疇模糊與語義模糊
    特殊句式
    色老头精品视频在线观看| 欧美黄色片欧美黄色片| 老鸭窝网址在线观看| 日本vs欧美在线观看视频| 亚洲欧美日韩高清在线视频 | 欧美激情极品国产一区二区三区| 激情在线观看视频在线高清 | 日韩视频一区二区在线观看| 国产成人av教育| 高潮久久久久久久久久久不卡| av免费在线观看网站| 日韩成人在线观看一区二区三区| 亚洲性夜色夜夜综合| 成年人黄色毛片网站| 国产片内射在线| 曰老女人黄片| 国产免费av片在线观看野外av| 亚洲国产精品一区二区三区在线| 亚洲精品国产一区二区精华液| 亚洲中文日韩欧美视频| 99久久人妻综合| 日本黄色日本黄色录像| av福利片在线| 成人精品一区二区免费| av天堂在线播放| 美女高潮到喷水免费观看| 久久人妻熟女aⅴ| 亚洲国产精品一区二区三区在线| 汤姆久久久久久久影院中文字幕| av片东京热男人的天堂| 夫妻午夜视频| 久久热在线av| 丰满人妻熟妇乱又伦精品不卡| 国产精品免费大片| 黄色丝袜av网址大全| av不卡在线播放| 涩涩av久久男人的天堂| 黄色视频,在线免费观看| 99热国产这里只有精品6| 脱女人内裤的视频| 自线自在国产av| 19禁男女啪啪无遮挡网站| 男女下面插进去视频免费观看| 亚洲一区二区三区欧美精品| 成人黄色视频免费在线看| 亚洲国产欧美一区二区综合| 这个男人来自地球电影免费观看| 国产国语露脸激情在线看| 丰满迷人的少妇在线观看| 国产精品免费视频内射| 国产伦理片在线播放av一区| 久久性视频一级片| 黄色怎么调成土黄色| 国产精品久久久久久精品古装| 人妻一区二区av| 大香蕉久久成人网| 啦啦啦在线免费观看视频4| 亚洲精品国产区一区二| 国产免费现黄频在线看| 色婷婷av一区二区三区视频| av电影中文网址| 91成人精品电影| 黄色视频,在线免费观看| 极品人妻少妇av视频| 亚洲中文日韩欧美视频| 午夜免费成人在线视频| 久久99一区二区三区| 中文字幕色久视频| 超碰成人久久| 亚洲国产看品久久| 十八禁人妻一区二区| 国产一区二区 视频在线| 久久久久久免费高清国产稀缺| 久久中文看片网| 最近最新免费中文字幕在线| 精品一区二区三区av网在线观看 | 久久中文字幕一级| 国产成人欧美在线观看 | 精品一区二区三卡| 久久久久国内视频| 99精品在免费线老司机午夜| 女人被躁到高潮嗷嗷叫费观| 国产欧美亚洲国产| 精品熟女少妇八av免费久了| 国产1区2区3区精品| 黄色 视频免费看| 欧美日本中文国产一区发布| 亚洲人成伊人成综合网2020| 在线观看舔阴道视频| 亚洲色图av天堂| www.自偷自拍.com| 国产欧美日韩精品亚洲av| 国产成人精品无人区| 免费观看a级毛片全部| 国产精品 欧美亚洲| 少妇猛男粗大的猛烈进出视频| 亚洲午夜精品一区,二区,三区| 12—13女人毛片做爰片一| 捣出白浆h1v1| 女警被强在线播放| 欧美精品啪啪一区二区三区| 91麻豆精品激情在线观看国产 | 亚洲,欧美精品.| 天天添夜夜摸| 在线观看免费日韩欧美大片| 女人精品久久久久毛片| 黄片播放在线免费| 精品高清国产在线一区| 欧美 亚洲 国产 日韩一| 午夜两性在线视频| 极品少妇高潮喷水抽搐| 国产有黄有色有爽视频| 高清在线国产一区| 嫩草影视91久久| 黄色视频,在线免费观看| 成年女人毛片免费观看观看9 | 另类精品久久| videosex国产| 性少妇av在线| 又黄又粗又硬又大视频| av在线播放免费不卡| 国产精品 国内视频| 9色porny在线观看| 新久久久久国产一级毛片| 亚洲av日韩在线播放| 黄色丝袜av网址大全| 国产无遮挡羞羞视频在线观看| 国产在线免费精品| 成人三级做爰电影| 亚洲男人天堂网一区| 一级片免费观看大全| 国产高清国产精品国产三级| 18禁观看日本| 亚洲国产欧美一区二区综合| 青青草视频在线视频观看| 午夜视频精品福利| 久久久久久久精品吃奶| xxxhd国产人妻xxx| 十八禁高潮呻吟视频| 免费观看人在逋| 久久久久国产一级毛片高清牌| 九色亚洲精品在线播放| 日韩熟女老妇一区二区性免费视频| 女人精品久久久久毛片| 国产精品98久久久久久宅男小说| 久久久国产精品麻豆| 首页视频小说图片口味搜索| 妹子高潮喷水视频| 国产免费现黄频在线看| 正在播放国产对白刺激| 少妇粗大呻吟视频| 亚洲av第一区精品v没综合| 久久久久国产一级毛片高清牌| 国产精品国产高清国产av | 在线天堂中文资源库| 人人妻人人澡人人看| 王馨瑶露胸无遮挡在线观看| 美女午夜性视频免费| 国产精品 国内视频| 久久午夜综合久久蜜桃| 伊人久久大香线蕉亚洲五| 人人妻人人澡人人爽人人夜夜| 操美女的视频在线观看| 精品福利观看| 十八禁网站网址无遮挡| 18禁裸乳无遮挡动漫免费视频| 美国免费a级毛片| 国产高清视频在线播放一区| 国产xxxxx性猛交| 久久久久精品人妻al黑| 一本一本久久a久久精品综合妖精| 捣出白浆h1v1| 日本a在线网址| 国产av又大| www.精华液| 午夜福利影视在线免费观看| 日韩欧美一区视频在线观看| 午夜精品久久久久久毛片777| 亚洲av片天天在线观看| 一区二区日韩欧美中文字幕| 精品熟女少妇八av免费久了| 亚洲专区字幕在线| 欧美精品高潮呻吟av久久| 五月开心婷婷网| 亚洲精华国产精华精| 日本一区二区免费在线视频| 丰满迷人的少妇在线观看| 黄色视频在线播放观看不卡| 一本一本久久a久久精品综合妖精| 极品人妻少妇av视频| 国产精品1区2区在线观看. | 69av精品久久久久久 | 俄罗斯特黄特色一大片| 中文字幕最新亚洲高清| tube8黄色片| 亚洲精品自拍成人| 国产在视频线精品| 久久久水蜜桃国产精品网| 国产成人欧美在线观看 | 欧美黑人欧美精品刺激| 欧美成人免费av一区二区三区 | 嫩草影视91久久| 日韩视频一区二区在线观看| 日本黄色日本黄色录像| 美女高潮喷水抽搐中文字幕| 久久99一区二区三区| 精品午夜福利视频在线观看一区 | 飞空精品影院首页| 女人久久www免费人成看片| 国产麻豆69| 黑人操中国人逼视频| 乱人伦中国视频| 99国产综合亚洲精品| aaaaa片日本免费| 少妇猛男粗大的猛烈进出视频| 好男人电影高清在线观看| 国产成人欧美| 欧美日本中文国产一区发布| 99香蕉大伊视频| 丁香六月欧美| 男人舔女人的私密视频| 90打野战视频偷拍视频| 菩萨蛮人人尽说江南好唐韦庄| 亚洲av片天天在线观看| 免费看a级黄色片| 免费观看av网站的网址| 国产单亲对白刺激| 色婷婷久久久亚洲欧美| 亚洲欧美色中文字幕在线| 国产免费福利视频在线观看| 老司机福利观看| 国产精品久久久久久精品电影小说| av在线播放免费不卡| 亚洲国产欧美一区二区综合| 丰满迷人的少妇在线观看| 每晚都被弄得嗷嗷叫到高潮| 精品人妻熟女毛片av久久网站| 波多野结衣一区麻豆| 亚洲精品久久午夜乱码| 老熟妇仑乱视频hdxx| 免费高清在线观看日韩| 一区二区av电影网| 欧美乱码精品一区二区三区| 波多野结衣av一区二区av| 肉色欧美久久久久久久蜜桃| 色综合欧美亚洲国产小说| 国产亚洲av高清不卡| 亚洲第一青青草原| 亚洲人成电影观看| 黄色a级毛片大全视频| 亚洲中文字幕日韩| 捣出白浆h1v1| 日韩有码中文字幕| 窝窝影院91人妻| 久久人人97超碰香蕉20202| 在线永久观看黄色视频| 亚洲五月婷婷丁香| 天堂8中文在线网| 欧美日韩黄片免| 日韩三级视频一区二区三区| 又紧又爽又黄一区二区| 日本a在线网址| 真人做人爱边吃奶动态| 天堂动漫精品| 欧美精品av麻豆av| av视频免费观看在线观看| 国产97色在线日韩免费| av线在线观看网站| 汤姆久久久久久久影院中文字幕| 淫妇啪啪啪对白视频| 久久精品国产a三级三级三级| 国产免费福利视频在线观看| www.精华液| 午夜激情av网站| 十八禁网站免费在线| 狂野欧美激情性xxxx| 亚洲色图av天堂| 成年人免费黄色播放视频| 国产极品粉嫩免费观看在线| 精品国内亚洲2022精品成人 | 色综合婷婷激情| 日本五十路高清| 久久人妻福利社区极品人妻图片| 亚洲精品乱久久久久久| 狠狠精品人妻久久久久久综合| 最新的欧美精品一区二区| 高清欧美精品videossex| 99国产精品免费福利视频| 日本vs欧美在线观看视频| 777久久人妻少妇嫩草av网站| 国产视频一区二区在线看| 老熟女久久久| 大香蕉久久成人网| 9191精品国产免费久久| 另类亚洲欧美激情| 日韩人妻精品一区2区三区| 99久久99久久久精品蜜桃| avwww免费| 制服诱惑二区| 岛国在线观看网站| 天堂动漫精品| 99久久国产精品久久久| 激情在线观看视频在线高清 | 国产主播在线观看一区二区| 最黄视频免费看| 中文字幕精品免费在线观看视频| 美女高潮喷水抽搐中文字幕| 成人国语在线视频| 久热爱精品视频在线9| 极品教师在线免费播放| 国产精品免费大片| 日韩免费av在线播放| 亚洲性夜色夜夜综合| 777米奇影视久久| 亚洲欧美日韩另类电影网站| 久久久久精品人妻al黑| 夜夜夜夜夜久久久久| 9热在线视频观看99| 人妻一区二区av| 亚洲免费av在线视频| 国产日韩欧美视频二区| 亚洲第一青青草原| 精品久久蜜臀av无| 午夜福利视频在线观看免费| 夜夜夜夜夜久久久久| 日韩制服丝袜自拍偷拍| 亚洲国产av新网站| 丝瓜视频免费看黄片| av福利片在线| 大型黄色视频在线免费观看| 日本wwww免费看| 在线亚洲精品国产二区图片欧美| 精品熟女少妇八av免费久了| 狠狠精品人妻久久久久久综合| 欧美日韩视频精品一区| 亚洲三区欧美一区| 一级,二级,三级黄色视频| 久久久久网色| 久久久久久久精品吃奶| 97人妻天天添夜夜摸| 男女下面插进去视频免费观看| 两性午夜刺激爽爽歪歪视频在线观看 | 国产老妇伦熟女老妇高清| 大香蕉久久网| 午夜成年电影在线免费观看| 亚洲国产成人一精品久久久| 亚洲熟妇熟女久久| 99re6热这里在线精品视频| 亚洲国产av影院在线观看| 日韩免费高清中文字幕av| 在线观看一区二区三区激情| 亚洲精华国产精华精| 国产精品电影一区二区三区 | 国产亚洲av高清不卡| 亚洲精品美女久久av网站| 最新在线观看一区二区三区| 岛国在线观看网站| 亚洲熟妇熟女久久| 夫妻午夜视频| 一进一出好大好爽视频| 国产在线精品亚洲第一网站| 深夜精品福利| 国精品久久久久久国模美| 国产精品二区激情视频| 啦啦啦在线免费观看视频4| 亚洲熟妇熟女久久| 成人精品一区二区免费| 99精国产麻豆久久婷婷| 精品久久久精品久久久| 国产免费福利视频在线观看| 精品福利观看| 亚洲一区二区三区欧美精品| 在线观看www视频免费| 久久性视频一级片| 老熟妇仑乱视频hdxx| 最黄视频免费看| 中文字幕制服av| 国产精品美女特级片免费视频播放器 | 亚洲精品中文字幕一二三四区 | 成年人黄色毛片网站| 久久久久久免费高清国产稀缺| 欧美乱妇无乱码| 丰满饥渴人妻一区二区三| 久久九九热精品免费| 成人特级黄色片久久久久久久 | 9热在线视频观看99| 亚洲av欧美aⅴ国产| 九色亚洲精品在线播放| 国产精品偷伦视频观看了| 成人特级黄色片久久久久久久 | 国产精品1区2区在线观看. | 99热网站在线观看| 国产xxxxx性猛交| 亚洲avbb在线观看| 亚洲精品一二三| 国产aⅴ精品一区二区三区波| 国产91精品成人一区二区三区 | 大陆偷拍与自拍| 午夜91福利影院| 黄色视频,在线免费观看| 国产在视频线精品| 啪啪无遮挡十八禁网站| 亚洲欧美日韩另类电影网站| tocl精华| 黄色 视频免费看| 女警被强在线播放| 免费黄频网站在线观看国产| 国产精品免费大片| 午夜福利,免费看| xxxhd国产人妻xxx| 日韩视频一区二区在线观看| 老司机亚洲免费影院| 电影成人av| 国产日韩欧美视频二区| 最黄视频免费看| 国产在线一区二区三区精| 极品人妻少妇av视频| 国产av精品麻豆| 夜夜骑夜夜射夜夜干| 男女之事视频高清在线观看| 老司机在亚洲福利影院| 一区二区三区精品91| 悠悠久久av| 操出白浆在线播放| 少妇精品久久久久久久| 男女高潮啪啪啪动态图| 精品人妻熟女毛片av久久网站| 久久国产亚洲av麻豆专区| 老汉色av国产亚洲站长工具| 99九九在线精品视频| 国产免费福利视频在线观看| 欧美成人午夜精品| 免费在线观看黄色视频的| 久久久久久免费高清国产稀缺| 男女之事视频高清在线观看| 久久 成人 亚洲| 人妻一区二区av| 国产成人啪精品午夜网站| 18禁观看日本| 久久精品亚洲av国产电影网| 一级a爱视频在线免费观看| 亚洲黑人精品在线| 国产精品1区2区在线观看. | 久久久精品免费免费高清| 国产区一区二久久| 18禁观看日本| 久久香蕉激情| 午夜福利视频在线观看免费| 久久久精品94久久精品| 99re6热这里在线精品视频| 成人精品一区二区免费| 满18在线观看网站| 国产亚洲一区二区精品| 一进一出抽搐动态| 搡老岳熟女国产| 国产高清videossex| 国产欧美日韩精品亚洲av| 9191精品国产免费久久| av网站免费在线观看视频| 在线观看www视频免费| 无人区码免费观看不卡 | 国产精品一区二区免费欧美| 亚洲七黄色美女视频| 亚洲一区中文字幕在线| 欧美乱妇无乱码| 乱人伦中国视频| 大片电影免费在线观看免费| 欧美激情 高清一区二区三区| 啦啦啦视频在线资源免费观看| 久久人妻福利社区极品人妻图片| 在线观看66精品国产| 香蕉国产在线看| 日韩制服丝袜自拍偷拍| 亚洲精品国产一区二区精华液| 午夜福利,免费看| 精品少妇内射三级| 夜夜爽天天搞| 蜜桃国产av成人99| 在线av久久热| 亚洲第一青青草原| 午夜91福利影院| 久久亚洲真实| 丝袜在线中文字幕| 狂野欧美激情性xxxx| 亚洲视频免费观看视频| 久久 成人 亚洲| 久久精品国产亚洲av高清一级| 国产亚洲av高清不卡| 日本一区二区免费在线视频| 国产不卡一卡二| 丰满迷人的少妇在线观看| 成人亚洲精品一区在线观看| 激情在线观看视频在线高清 | 看免费av毛片| 性色av乱码一区二区三区2| 亚洲专区国产一区二区| 99久久国产精品久久久| 成年动漫av网址| 久久青草综合色| 男女之事视频高清在线观看| 久久久久久免费高清国产稀缺| 日本撒尿小便嘘嘘汇集6| 人妻 亚洲 视频| 久久青草综合色| 亚洲av第一区精品v没综合| 天堂俺去俺来也www色官网| 黄色片一级片一级黄色片| 精品视频人人做人人爽| 亚洲色图综合在线观看| 亚洲一码二码三码区别大吗| 12—13女人毛片做爰片一| 亚洲第一欧美日韩一区二区三区 | 亚洲精品国产一区二区精华液| 十八禁网站免费在线| 又黄又粗又硬又大视频| 久久九九热精品免费| 亚洲成人免费av在线播放| 制服人妻中文乱码| 俄罗斯特黄特色一大片| 亚洲熟女毛片儿| 两人在一起打扑克的视频| 一进一出好大好爽视频| 午夜91福利影院| 丝袜人妻中文字幕| 国产男靠女视频免费网站| 国产精品 欧美亚洲| 性高湖久久久久久久久免费观看| 美女福利国产在线| 一个人免费在线观看的高清视频| 亚洲午夜理论影院| 色94色欧美一区二区| 少妇猛男粗大的猛烈进出视频| 日韩熟女老妇一区二区性免费视频| 91精品国产国语对白视频| 十八禁网站网址无遮挡| 脱女人内裤的视频| 五月开心婷婷网| 99久久99久久久精品蜜桃| 国内毛片毛片毛片毛片毛片| 两性午夜刺激爽爽歪歪视频在线观看 | av电影中文网址| 免费人妻精品一区二区三区视频| 亚洲成人免费av在线播放| 欧美久久黑人一区二区| 狠狠婷婷综合久久久久久88av| 亚洲精品在线美女| 91麻豆av在线| 国产欧美亚洲国产| 水蜜桃什么品种好| aaaaa片日本免费| 亚洲成人国产一区在线观看| 日韩免费高清中文字幕av| 青草久久国产| 欧美在线黄色| 国产1区2区3区精品| a级毛片在线看网站| 久久精品国产a三级三级三级| 国产高清videossex| 极品教师在线免费播放| 精品一区二区三区视频在线观看免费 | 国产又色又爽无遮挡免费看| 精品国内亚洲2022精品成人 | 欧美日韩视频精品一区| 国产真人三级小视频在线观看| 国产精品电影一区二区三区 | 久久久久精品国产欧美久久久| 久久国产精品大桥未久av| 成人特级黄色片久久久久久久 | 丝瓜视频免费看黄片| 成人影院久久| 免费观看av网站的网址| 飞空精品影院首页| 多毛熟女@视频| 色94色欧美一区二区| 麻豆乱淫一区二区| 成人国产av品久久久| 欧美大码av| 肉色欧美久久久久久久蜜桃| 飞空精品影院首页| 夫妻午夜视频| 欧美日韩亚洲综合一区二区三区_| 精品一区二区三区视频在线观看免费 | 另类亚洲欧美激情| 成人永久免费在线观看视频 | 在线观看人妻少妇| 免费在线观看日本一区| a级毛片在线看网站| 精品亚洲成a人片在线观看| 久久人人爽av亚洲精品天堂| 亚洲一码二码三码区别大吗| 伊人久久大香线蕉亚洲五| 久久午夜综合久久蜜桃| 国产免费福利视频在线观看| 好男人电影高清在线观看| av天堂久久9| 亚洲av第一区精品v没综合| 18禁观看日本| 久久人妻av系列| 国产成人精品久久二区二区91| 黑人巨大精品欧美一区二区蜜桃| 久久热在线av| 欧美在线一区亚洲| 极品少妇高潮喷水抽搐| 免费在线观看日本一区| 免费看十八禁软件| 搡老岳熟女国产| 热re99久久国产66热| 欧美成狂野欧美在线观看| av欧美777| 美国免费a级毛片| 午夜精品久久久久久毛片777| 日韩欧美一区二区三区在线观看 | 亚洲欧美日韩另类电影网站| 少妇的丰满在线观看| 日韩熟女老妇一区二区性免费视频|