Seq2SQL :使用強化學習通過自然語言生成SQL



          Seq2SQL屬於natural language interface (NLI)的領域,方便普通用戶接入並查詢數據庫中的內容,即用戶不需要了解SQL語句,只需要通過自然語言,就可查詢所需內容。
       Seq2SQL借鑒的是Seq2Seq的思想,與Seq2Seq應用於機器翻譯與Chatbot類似,Seq2SQL將輸入的語句encode后再decode成結構化的SQL語言輸出,強化學習是在 Seq2SQL中的最后一個模塊中應用。同時,這篇論文還推出一個數據集WikiSQL,數據集內有人工標注好的問句及其對應SQL語句。
         試驗結果顯示,Seq2SQL的准確率也不是特別的高,只有60.3%
 
 

      Seq2SQL結構:
     
 
       Seq2SQL由三部分組成:
    第一部分:  Aggregation classifier    這一部分其實是一個分類器,將用戶輸入的語句分類成是select count/max/min 等統計相關的約束條件
    在此處采用的Augmented Pointer Network, Augmented Pointer Network 總體而言也是ecoder-to-decoder的結構,
    encoder采用的是兩層的bi-LSTM, decoder 采用的是兩層的unidirectional LSTM,
    encoder輸出h,ht對應的是第t個詞的輸出狀態
    decoder的每一步是,輸入y s-1,輸出狀態gs,接着,decoder為每個位置t生成一個attention的score
    ,最終生成  
     在Seq2SQL中,首先為input生成一個表征向量 (agg:aggregation clasifier, inp:input,enc:encoder)
 
      首先為 Augmented Pointer Network類似,計算出一個attention的分數
      量化后,通過softmax函數  
      input的表征向量  
      通過一個多層的網絡和softmax完成分類任務
             
    第二部分: select column   這一部分是看用戶輸入的問句命中了哪個column
     首先將每個column name 通過LSTM encode
     將用戶輸入encode成與第一部分 類似的
     最終通過一個多層的神經元和softmax確定是命中哪一行
     
      
    第三部分:where clause  確定約束條件,因為最終生成的SQL可能與標注中的不太一樣,但是依舊有一樣的結果,所以不能像前兩部分一樣使用交叉熵作為loss訓練,因此使用強化訓練中reward函數 (g: ground-truth), loss使用梯度
 

 
       WikiSQL:
    WikiSQL包含一系列與SQL相關的問題集以及SQL table
    
 

 

 
 
 


 
 

 
    






























       





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM