您當前的位置:首頁 > 詩詞

NL2SQL筆記(一)——SQLNet

作者:由 yif 發表于 詩詞時間:2019-07-03

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的形式如下:

NL2SQL筆記(一)——SQLNet

(注意:這裡一句SQL只對應於一張表) 1。 $AGG聚合操作:一般有五種:sum,max,min,std,count 2。 $COLUMN:表中的列名 3。 $OP:有>,<,=等 4。 $VALUE:是出現在Natural Language Questing中的substring

圖解任務:

NL2SQL筆記(一)——SQLNet

該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的序列到集合的預測

P_{wherecol}(col|Q)=\sigma(u_c^TE_{col}+u_q^TE_Q)

其中

E_{col}

E_{Q}

是column名字的embedding和natural language question的embedding,他們是由兩個BiLSTM的最後一個隱狀態表示。注意這兩個LSTM並不共享權重。

引入注意力機制

v_i=(E_{col})^TWH_Q^i

w=softmax(v)

其中$

v_i

表示v的第i維,

H_Q^i

H_Q

的第i 列,而W是可訓練的dxd的矩陣。 這裡$H_Q$是natrual language question的hidden state組成的矩陣,形狀為dxL,其中L是natural language question的長度。 得到上述注意力權重W之後,將其重新與$H_Q$作用,

E_{Q|col}=H_Qw

這裡用

E_{Q|col}

來代替

E_Q

P_{wherecol}(col|Q)=\sigma(u_c^TE_{col}+u_q^TE_{Q|col})

作者經過嘗試後,發現下述預測公式效果更好

P_{wherecol}(col|Q)=\sigma((u_a^{col})^Ttanh(U_c^{col}E_{col}+U_q^{col}E_{Q|col}))

其中$u_a^{col}$是d維的可訓練向量。

完整模型及訓練細節

分為兩部分來預測: 1。 預測Where子句 2。 預測Select子句

Where子句中的Column slot

由於Where中可能不不止一個Column所以模型先進行預測column個數。

P_{\#col}(K|Q)=softmax(U_1^{\#col}tanh(U_2^{\#col}E_{Q|Q}))

這裡預測的是0-N中的一個值,而N是表中的columns數。這裡K是top-k的column。

文中沒有說明$E_{Q|Q}$是什麼估計是attention 機制,需要看程式碼

Where子句中的OP slot

預測三個操作{=,>,<} 計算:

P_{op}(i|Q,col)=softmax(U_1^{op}tanh(U_c^{op}E_{col}+U_q^{op}E_{Q|col}))_ i

Where子句中的VALUE slot

這裡需要預測來自natural language question中的substring。考慮用seq2seq結構來生成substring。VALUE中的token是順序相關的。

P_{val}(i|Q,col,h)=softmax(a(h))

a(h)_i=(u^{val})^Ttanh(U_1^{val}H_Q^i+U_2^{val}E{col}+U_3^{val}h)

其中

u_q^{val}

是d-dimensional的訓練向量,這裡

a(h)_i

使用了column attention 機制,類似於

E_{Q|col}

的計算

預測SELECT子句

SELECT子句中的 Column slot

P_{selcol}(i|Q)=softmax(sel)_i

sel_i=(u_a^{sel})^Ttanh(U_c^{sel}E{col_i}+U_q^{sel}E_{Q|col_i})

其中i 是1~C,C表示表中總列數。

SELECT子句中的 AGG slot

P_{agg}(i|Q,col)=softmax(U^{agg}tanh(U_aE_{Q|col}))_ i

訓練細節

注意不同slots之間不共享權重,但要共享embedding

允許embedding更新,實驗證明效果更好

上述各個子模組都採用的標準的交叉熵loss。

結果

當前模型與之前模型的比較

NL2SQL筆記(一)——SQLNet

2。該模型做些許細節上的改變的比較

NL2SQL筆記(一)——SQLNet

PDF整理:

標簽: 子句  SQL  language  where  預測