NL2SQL筆記(一)——SQLNet
SQLNet:Generating Structured Queries From Natural Language Without Reinforcement Learning
資料集WikiSQL dataset及其任務介紹
特點:
1。 資料量大
2。 由眾包收集得到,裡面的自然語言問題(natural language questions)都是由人創造的。
3。 任務生成的SQL基於NLQuestion和table schema
4。 訓練集,驗證集,測試集不共享table。
Natural Language Question沒有固定形式,但是這裡的SQL語句具有固定的形式
SQL的形式如下:
(注意:這裡一句SQL只對應於一張表) 1。 $AGG聚合操作:一般有五種:sum,max,min,std,count 2。 $COLUMN:表中的列名 3。 $OP:有>,<,=等 4。 $VALUE:是出現在Natural Language Questing中的substring
圖解任務:
該SQL句式的特點就是Where子句中,不同column排序不同,效果一樣,所以在where中採用Seq2Seq是不可行的(以前的方法)。
本文的貢獻
提出一種方法處理“序列到集合”的生成問題,避免where子句中的順序相關
提出一種全新的注意力結構,稱為columns attention
設計的SQLNet在WikiSQL資料集上提升了9-13個點
SQLNet
簡化模型:
1。 輸入:
- natural language question
- table(主要是列名)
2。 輸出:
SQL query
由於SQL query的句式具有一定的結構特點。所以SQL的生成並不是像機器翻譯任務那樣,而是採用像完型填空的形式填充$AGG,$Column,$OP,$VALUE(也就是預測這幾個位置的值)。
採用Column Attention的序列到集合的預測
其中
和
是column名字的embedding和natural language question的embedding,他們是由兩個BiLSTM的最後一個隱狀態表示。注意這兩個LSTM並不共享權重。
引入注意力機制
其中$
表示v的第i維,
是
的第i 列,而W是可訓練的dxd的矩陣。 這裡$H_Q$是natrual language question的hidden state組成的矩陣,形狀為dxL,其中L是natural language question的長度。 得到上述注意力權重W之後,將其重新與$H_Q$作用,
這裡用
來代替
作者經過嘗試後,發現下述預測公式效果更好
其中$u_a^{col}$是d維的可訓練向量。
完整模型及訓練細節
分為兩部分來預測: 1。 預測Where子句 2。 預測Select子句
Where子句中的Column slot
由於Where中可能不不止一個Column所以模型先進行預測column個數。
這裡預測的是0-N中的一個值,而N是表中的columns數。這裡K是top-k的column。
文中沒有說明$E_{Q|Q}$是什麼估計是attention 機制,需要看程式碼
Where子句中的OP slot
預測三個操作{=,>,<} 計算:
Where子句中的VALUE slot
這裡需要預測來自natural language question中的substring。考慮用seq2seq結構來生成substring。VALUE中的token是順序相關的。
其中
是d-dimensional的訓練向量,這裡
使用了column attention 機制,類似於
的計算
預測SELECT子句
SELECT子句中的 Column slot
其中i 是1~C,C表示表中總列數。
SELECT子句中的 AGG slot
訓練細節
注意不同slots之間不共享權重,但要共享embedding
允許embedding更新,實驗證明效果更好
上述各個子模組都採用的標準的交叉熵loss。
結果
當前模型與之前模型的比較
2。該模型做些許細節上的改變的比較
PDF整理: