1. 程式人生 > >Seq2SQL :使用強化學習通過自然語言生成SQL

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

ati ima sof div sta 領域 不能 分享 普通

論文: https://einstein.ai/static/images/layouts/research/seq2sql/seq2sql.pdf 數據集:https://github.com/salesforce/WikiSQL
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 技術分享技術分享




































null

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