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
WikiSQL:

將用戶輸入encode成與第一部分
類似的


最終通過一個多層的神經元和softmax確定是命中哪一行


第三部分:where clause 確定約束條件,因為最終生成的SQL可能與標注中的不太一樣,但是依舊有一樣的結果,所以不能像前兩部分一樣使用交叉熵作為loss訓練,因此使用強化訓練中reward函數 (g: ground-truth), loss使用梯度

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

