• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于混合排序填充網絡的文本到指令序列翻譯

      2021-12-17 00:56:28張曉芳歐睿曾鈺城饒攀軍陳科鄭元張雷李明艷
      智能計算機與應用 2021年6期
      關鍵詞:子句語句排序

      張曉芳,歐睿,曾鈺城,饒攀軍,陳科,鄭元,張雷,李明艷

      (1 太極計算機股份有限公司,北京 100102;2 哈爾濱工業(yè)大學,哈爾濱 150001)

      0 引言

      在傳統(tǒng)的以業(yè)務流為基礎的軟件中,用戶會根據業(yè)務類型,調用業(yè)務對應的程序接口,完成業(yè)務需求。但隨著業(yè)務需求的多樣化,業(yè)務對應的程序接口也會變得愈加繁雜,此時用戶為完成一項業(yè)務所需的操作步驟就會增多,導致工作效率下降和增加出錯概率。針對于此,本文研究的指令序列轉換,是把用戶用自然語言表述的業(yè)務需求轉換為可供系統(tǒng)執(zhí)行的指令,通過執(zhí)行指令完成用戶所表達的業(yè)務需求,可以有效縮短操作步驟,提高工作效率和降低出錯概率。

      通常情況下,業(yè)務需求基本上都可以映射為對數據庫的增、刪、改、查。由于指令與SQL 語句類似,則可將其轉換成類似于SQL 語句的表達方式,進而用Text2SQL 和NL2SQL 相關技術完成自然語言到指令的轉換。

      自然語言序列到指令序列的轉換任務,在自然語言處理領域一直受到研究人員的關注,通常被稱為NLIDBs(Natural Language Interface to Databases)[1-2]。

      早期提出的系統(tǒng)大多都是基于人工編寫的特定轉換規(guī)則,只能應用到特定的數據庫中[3-5]。后來的工作著重于構建一個能夠泛化的轉換系統(tǒng),該系統(tǒng)可以用最少的人力即可用于多個數據庫[6-8]。近年來,隨著語義解析技術的進步,以端到端[9-10]模型為代表的方法,以及在此基礎之上構建的高級神經網絡的方法[11-12],在大規(guī)模跨領域Text-to-SQL 數據集上。例如,WikiSQL[13]和Spider[14],取得了非常好的效果。

      針對上述問題,結合近年來有關Text2SQL 的工作,本文對以往模型進行改進,提出了混合排序填充網絡模型(Hybrid Ranking Filling Network,H-Net)。混合排序填充網絡模型建模過程如下:

      (1)利用語言預訓練模型BERT[15]對一個列與問句進行聯(lián)合編碼,用以獲取列與問句之間的關系;

      (2)根據選擇的SQL 模板,將生成完整的SQL語句任務,劃分為若干個生成子SQL 語句任務;

      (3)計算列與問句在不同子SQL 語句中的相似度,并對計算的結果進行排序;

      (4)針對不同的子SQL 語句的生成任務,利用排序結果和其對應的解碼方式進行解碼,生成子SQL 語句。

      (5)利用子SQL 語句填充SQL 模板,生成完整的SQL 語句。

      混合排序填充模型與傳統(tǒng)端到端模型的不同在于,混合排序填充模型不需要額外的編碼器和解碼器,也不需要引入額外的中間表示層,這些特點降低了模型復雜度,提高了模型泛化能力。為了驗證本文提出方法的有效性,構建了文本序列到指令序列的數據集,在這一數據集上的實驗結果,驗證了本文方法的有效性。

      1 相關工作

      近年來,有關Text2SQL 的工作主要可以分為端到端翻譯、中間語義表示、SQL 子任務預測、中間語義表示等方法。下面分別介紹這4 類模型,并且評價其優(yōu)缺點,最后比較H-Net 與這4 類模型的聯(lián)系和區(qū)別。

      1.1 端到端翻譯模型

      端到端翻譯模型主要思想是,通過端到端模型生成具有SQL 語法結構的草圖,然后利用問句中的內容填充該草圖[13-16]。方法可以簡單概括為以下步驟:

      (1)將輸入問句和數據庫表分別進行編碼,計算問句對數據庫表的注意力,生成注意力表示作為模型輸入,然后通過解碼器生成一張粗略的草圖;

      (2)通過對齊問句與草圖,填充草圖中丟失的細節(jié)。端對端模型對語句順序敏感,但SQL 語句對順序不敏感。例如,條件語句中交換2 個條件順序,對SQL 語句并沒有影響,但卻會影響端對端模型的生成過程。

      1.2 中間語義表示模型

      中間語義表示模型主要思想是將問句和所有列拼接,進行編碼獲取輸入,然后通過基于語法(Grammar Based)的解碼器,生成樹狀結構的中間語義表示,最后基于中間表示再進行一次解碼,生成完整的SQL 語句[11-12,17]。方法可以簡單概括為以下步驟:

      (1)將問句與數據庫進行鏈接(Schema Linking),找出問句中的與數據庫對應的表、列和值序列,然后將數據庫表中所有列與問句各自進行編碼并且拼接作為輸入;

      (2)利用基于語法的解碼器,通過ApplyRule,GenToken 2 類規(guī)則,生成樹狀結構的中間語義表示;

      (3)對中間語義表示再進行一次解碼,生成完整的SQL。

      中間語義表示方法需要專門的基于語法的解碼器、引入專門的中間語義表示層,增加模型復雜度。此外,引入中間語義不能完全表示問句內容,會造成語義損失[18]。

      1.3 SQL 子任務預測模型

      SQL 子任務預測模型主要思想,是將SQL 語句拆解成若干個子SQL 語句,然后分別生成子SQL 語句,最后組合成一個完整的SQL 語句[19-20]。這類方法可以簡單概括為以下步驟:

      (1)將SQL 語句拆分為SELECT-column、SELECTaggregation、WHERE-number、WHERE-column、WHERE-operator、WHERE-value等子SQL 語句;

      (2)每個子SQL 語句都對應著一個子任務,每個子任務相當于一個分類任務。子任務之間各自獨立,各自生成對應的子SQL 語句,最后組合成一條完整的SQL 語句。

      SQL 子任務預測模型的子任務劃分,是通過人工定義規(guī)則完成的,無法拓展到復雜的SQL 語句;SQL 子任務預測模型沒有充分利用句與列之間的依賴關系,沒有充分利用任務之間的依賴關系。

      1.4 語言預訓練模型

      模型的主要思想,是用語言預練習模型BERT[15]捕捉問句與列之間的關系,利用問句與列之間的關系生成SQL 語句[21-23]。方法可以簡單概括為以下步驟:

      (1)將問句和所有列拼接[21-22],或者將問題與單個列進行拼接[23]作為輸入,利用語言預訓練模型獲取編碼得到輸出,獲取問句和列之間的關系;

      (2)用類似SQL 子任務預測的方法,將完整SQL 分成若干個子SQL 語句;

      (3)對于每一個子SQL 語句,通過對語言預處理模型的輸出,用線性神經網絡[23]或LSTM(Long Short-Term Memory)[24]進行解碼,填充子SQL 語句,最后合并子SQL 語句,得到完整的子SQL 語句。

      這類方法的缺點是:SQL 子任務的劃分是通過人工定義規(guī)則完成;無法拓展到復雜的SQL 語句;需要額外的LSTM 解碼器完成SQL 語句生成。

      1.5 H-Net 模型與上述4 類方法的聯(lián)系與區(qū)別

      本文提出混合排序填充網絡模型(H-Net)的方法與文獻[19-20,23]方法類似,采用了語言預訓練模型和SQL 語句子任務劃分。但主要有以下不同:

      (1)引入模板生成層,可以根據訓練數據中的SQL 語句,抽取出SQL 模板,讓模型可以根據輸入問句不同,選擇不同的模板,進而依據模板可以劃分出不同的SQL 子任務,在此基礎上生成結構復雜的SQL 語句;

      (2)拓展了填充SQL 子語句的方法,可以生成復雜的SQL 語句。

      2 混合排序填充網絡模型

      在本節(jié)中,將詳細介紹在混合排序填充模型如何進行模板抽取、模板選擇、子任務劃分和每類子任務的完成方式,最后介紹了如何進行模型訓練和SQL 語句預測。

      2.1 模板抽取

      首先,為SQL 語句定義上下文無關文法,如圖1所示。

      圖1 SQL 語句的上下文無關文法Fig.1 Context-free grammar for SQL

      與Grappa[25]類似,對于訓練集中SQL 語句s,用上下文無關文法對其進行解析。對于每一條SQL語句s,都會得到一個SQL 語句的語法結構。

      例如,對于SQL 語句:

      利用上下文無關文法進行解析后,得到如圖2所示的SQL 語句的語法結構,并依據該語法結構進行聚類。對于聚類結果中的每一類,取該類覆蓋率最高的SQL 語句的語法結構,作為一個模板Template,將所有模板記為一個模板集合T。

      圖2 SQL 語句的語法結構Fig.2 The syntax structure of an SQL

      2.2 輸入表示

      2.2.1 定義

      問句可以表示為:q

      數據庫中的一列可以表示為:

      其中:type表示列的類型,type∈{string,number,date,...};t為表名;c為列名;為注釋;為列注釋;Concat(·)表示連接操作。

      將問句q與列ci組合起來,得到輸入對(ci,q)。輸入對經過分詞后,得到一個詞序列:

      其中:x1,x2,...,xm表示列ci的詞序列;y1,y2,...,yn表示問句q的詞序列;將[CLS],x1,x2,...,xm,[SEP],y1,y2,...,yn,[SEP]作為模型輸入,記為input。

      2.2.2 編碼

      采用BERT 語言預訓練模型對輸入進行編碼,用于捕捉問句與列之間的關系,編碼后將獲得一個隱藏狀態(tài)序列。

      2.3 模型

      H-Net 模型由語言預訓練模型BERT、模板選擇和模板填充3 部分構成。模型結構如圖3 所示。

      圖3 H-Net 模型總體結構Fig.3 The structure of H-Net

      2.3.1 模板選擇

      模板選擇可以認為是一種分類任務,對于給定問句q,其對應模板記為τ,則有:

      P(ci∈Rc |q)是問句q與列ci在完整SQL 語句中相似度。

      2.3.2 子任務劃分

      假設一個SQL 語句模板如圖4 所示。

      圖4 一個SQL 語句模板樣例Fig.4 A template of SQL

      根據SQL 語句模板,可以將預測SQL 語句拆分為3 類子任務:

      (1)列獨立任務:預測選擇子句所涉及的列Sc,條件子句中所涉及的列Wc,排序子句中所涉及的列Oc和完整SQL 語句中所涉及的列Rc;

      (2)列相關任務:預測函數運算符aggregation、條件操作符operator、條件對應的值value、條件對應值的個數value_num等;

      (3)結構相關任務:預測集合運算符rel,連接運算符link等。

      2.3.3 列與問句相似度計算

      對于問句q,記Sc是在選擇子句select_clause中所涉及的列;Wc是在條件子句where_clause中所涉及的列;Oc是在排序子句order_clause中所涉及的列;Rc是在完整的SQL 語句中所涉及的列,Rc=Sc∪Wc∪Oc。

      對于列ci,需要計算列ci與問句q在不同SQL子句中的相似度,進而確定列ci在對應的SQL 子句中是否出現。以下是4 種不同相似度的計算方式:

      在選擇子句select_clause中,列ci與問句q相似度記為P(ci∈Sc |q):

      在條件子句where_clause中,列ci與問句q相似度記為P(ci∈Wc |q):

      在排序子句order_clause中,列ci與問句q相似度記為P(ci∈Oc |q):

      在完整的SQL 語句中,列ci與問句q相似度記為P(ci∈Rc |q):

      2.3.4 列獨立任務

      列無關任務,是指在預測不同SQL 子句中所涉及的列。如:Sc、Wc和Oc。2 種預測方式為:一是設置一個閾值,對于每一類子句,只保留與問句相似度超過閾值的列;二是對于每一類子句,預測一個n值,只保留與問句相似度排名前n的列。對于第二種方法,n的計算過程如下:

      (1)選擇子句中的列數量select_num,記為:

      其中,P(ns=k |ci,q)相當于一個分類任務。

      (2)條件子句中的列數量where_num,記為:

      其中,P(nw=k |ci,q)相當于一個分類任務。

      (3)排序子句中的列數量order_num,記為:

      其中,P(no=k |ci,q)相當于一個分類任務。

      2.3.5 列相關任務

      列相關任務,可以認為是一種分類任務,以下是4 種列相關任務的計算方式:

      (1)選擇子句中函數運算符aj:

      (2)條件子句中的條件操作符oj:

      (3)條件子句中的列對應的值value:

      首先,需要預測條件對應值的個數value_num記為nv,

      對于條件對應的第k個值valuek,只需要指出valuek在問句中開始位置和結束位置:

      開始位置:

      結束位置:

      (4)排序子句中的運算符orj:

      2.3.6 結構相關任務

      (1)對于集合運算符rel:

      (2)對于連接運算符link:

      其中,P(rel=k |ci,q)、P(link=k |ci,q)均相當于一個分類任務。

      2.4 訓練與預測

      2.4.1 訓練階段

      輸入(qi,cj)。其中,qi是第i個問句,UC={c1,c2,...,cL} 是數據庫表中所有列,cj∈UC。

      標簽:與qi對應的SQL 語句。

      優(yōu)化目標:最小化每一類子任務的交叉熵損失

      2.4.2 預測階段

      (1)通過式(2)選擇模板,進行SQL 語句子任務劃分;

      (2)根據式(4)計算列與問句在選擇子句中的相似度、排序;通過式(8)預測選擇子句中的列的數量,取相似度前的列(cs1,cs2,...,),根據式(14)計算每個列對應的函數運算符,得到選擇子句select_clause:

      (3)根據式(5)計算列與問句在條件子句中的相似度、排序;通過式(10)預測條件子句中列的數量,取相似度前的列(cw1,cw2,...,),根據式(15)計算每個列對應的條件操作符,根據式(16)~(18)計算每個列對應的值,得到條件子句where_clause:

      (4)根據式(6)計算列與問句在排序子句中的相似度;通過式(12)預測排序子句中列的數量,取相似度前的列(co1,co2,...,),根據式(19)計算每個列對應的操作符,得到排序子句order_clause:

      (5)通過式(20)和(22)預測SQL 語句的結構信息,得到;

      (6)根據上述子句所選擇出的列,可知這些列所對應的表。即S是上述子句所對應的表,S=[t1,t2,...,tnt],就可以得到from子句:

      (7)根據表S之間的外鍵和主鍵的關系,找到表S之間的最短路徑,將最短路徑上表之間的連接條件加入到條件子句中。

      經過上述步驟,可以得到不同SQL 的子句。根據SQL 子句類型,將SQL 子句填充到模板中對應的位置,最后得到完整的SQL 語句。

      2.5 執(zhí)行指導與SQL 語句剪枝

      在SQL 語句的預測階段,部分生成的SQL 語句也可以被執(zhí)行。可根據部分生成的SQL 語句,以及在數據庫上執(zhí)行的結果,調整SQL 語句的生成,這被稱為執(zhí)行指導(Execution Guided,EG)[26]。執(zhí)行指導的作用相當于剪枝,限制模型在解空間中的搜索范圍,去除不滿足要求的搜索路徑。

      3 指令序列轉換

      3.1 數據集說明

      本文構建的文本到指令序列數據集為JSON 格式,采用JSON 格式是為了方便表示指令序列。數據集包含2 312 條(問句與JSON 語句對)。其中,1 923條數據是一個問句對應一條JSON 語句,389條數據是一個問題對應2 條JSON 語句。問句類型多為基于多條件查詢匹配的答案檢索。

      JSON 語句由method、url、params 3 部分構成。params 內包含多個參數(param),每個參數param 又由name、option、value 組成。參數param 的2 種類型如下:

      (1)直接參數:value值直接出現在問句中。如圖5 中參數create_time 和create_org;

      (2)間接參數:value值不直接出現在問句中。如圖5 中的參數columns。

      對于這2 種參數,在指令轉換中有各自的處理方式。

      問句與JSON 語句對示例如圖5 所示。

      3.2 指令轉換

      為了使用Text2SQL 技術,需要將JSON 語句轉換成SQL 語句。轉換過程如下:

      3.2.1 構建表

      構建規(guī)則如下:

      根據圖5 中的JSON 語句,可以構建出的結構見表1。

      圖5 問句與JSON 語句示例Fig.5 (question,JSON)pair

      表1 圖5 中JSON 對應的數據表Tab.1 The table corresponding to JSON in Fig.5

      3.2.2 JSON 語句轉換為SQL 語句

      轉換規(guī)則如下所示:

      對于直接參數,轉換后參數被放置在條件子句where_clause 中;對于間接參數,轉換后的參數被放置在選擇子句select_clause 中;url 被放置在from 子句中。根據圖5 中的JSON 語句,可以轉換成如圖6所示的SQL 語句。

      圖6 圖5 中JSON 對應的SQL 語句Fig.6 The SQL corresponding to JSON in Fig.5

      3.2.3 數據整合

      經過從JSON 抽取并構建表,可以得到28 個表組成的數據庫表集合;經過將JSON 語句轉換為SQL 語句,可以得到新的2 312 條(問句與SQL 語句)對;將2 312條(問句,SQL 語句)對和數據庫表集合,作為新數據集,用于模型訓練、驗證和測試。

      4 實驗結果

      將2 312 條數據中的1 800 個數據對用于訓練集,100 個數據對用于驗證集,412 個數據對用于測試集。

      表2 展示模型使用不同語言預訓練模型[27],以及在使用執(zhí)行指導和不使用執(zhí)行指導的情況下,模型在驗證集和測試集上的邏輯準確率。邏輯準確率是指預測的SQL 語句和標簽SQL 語句完全一致的比例。

      表2 不同模型在數據驗證集和測試集上的邏輯準確率Tab.2 Logical form accuracy on dataset

      參考WikiSQL 數據集[13]和Spider 數據集[14]的評價方式,將SQL 語句劃分為不同子SQL 語句,分別評測模型在每類子SQL 語句對應的子任務上的準確率。表3 展示模型在每類子任務上、在使用和不使用執(zhí)行指導的情況下,模型在驗證集和測試集上邏輯準確率。

      表3 不同模型在數據驗證集和測試集上每類子任務的邏輯準確率Tab.3 Logical form accuracy of each task on dataset

      5 結束語

      本文研究利用語言預訓練模型和深度學習來進行文本到指令序列的翻譯,提出了一種混合排序填充網絡模型,該模型可以很好地利用語言預訓練模型的特點,并且能處理復雜的SQL 語句。經在自構建的文本到指令序列數據集上測試,取得了很好的實驗結果,翻譯結果的邏輯準確率可以達到89.1%。

      猜你喜歡
      子句語句排序
      命題邏輯中一類擴展子句消去方法
      排序不等式
      命題邏輯可滿足性問題求解器的新型預處理子句消去方法
      重點:語句銜接
      恐怖排序
      節(jié)日排序
      西夏語的副詞子句
      西夏學(2018年2期)2018-05-15 11:24:42
      刻舟求劍
      兒童繪本(2018年5期)2018-04-12 16:45:32
      精彩語句
      命題邏輯的子句集中文字的分類
      台湾省| 乌拉特后旗| 尼勒克县| 江城| 伊春市| 阿拉善盟| 沙坪坝区| 达日县| 鄂尔多斯市| 库车县| 兴安盟| 夏邑县| 丽水市| 新平| 上思县| 麻江县| 怀来县| 昌吉市| 高阳县| 封丘县| 阜宁县| 沈阳市| 桐乡市| 象山县| 元朗区| 闸北区| 宁晋县| 天台县| 建始县| 桃江县| 曲阜市| 开远市| 天长市| 平和县| 册亨县| 平武县| 基隆市| 巴彦县| 葵青区| 呼伦贝尔市| 文水县|