Text2SQL學習整理(四)將預訓練語言模型引入WikiSQL任務

語言: CN / TW / HK

highlight: tomorrow theme: Chinese-red


「這是我參與2022首次更文挑戰的第4天,活動詳情查看:2022首次更文挑戰」。

導語

上篇博客:Text2SQL學習整理(三):SQLNet與TypeSQL模型簡要介紹了WikiSQL數據集提出後兩個早期的baseline,那時候像BERT之類的預訓練語言模型還未在各種NLP任務中廣泛應用,因而作者基本都是使用Bi-LSTM作為基本組件搭建模型。

本篇博客將介紹兩個藉助預訓練語言模型BERT來解決WIkiSQL數據集挑戰的方法:SQLOVA和X-SQL模型。其中,SQLOVA這篇工作更是發表在了2019年的NIPS上,可以看出這個任務被越來越多人所關注。

A Comprehensive Exploration on WikiSQL with Table-AwareWord Contextualization

創新點

SQLOVA工作的創新點有兩個: 1. 藉助預訓練模型,達到人類表現; 2. 給出了WikiSQL數據集上的人類表現。

模型架構

整個框架包含兩個部分: + Table-aware Encoding Layer,用於獲取表和上下文感知的question word表示; + NL2SQL Layer,用於從編碼表示生成SQL查詢。

輸入模塊

image.png

上圖為一個WikiSQL數據集中的問題-SQL示例。表格的schema(即圖中的表名、列名等)是一種結構性信息,而在利用BERT之類的預訓練模型時,需要將所有輸入全部轉為一個序列。SQLOVA的轉換方式如下:

image.png

可以看到,序列的開始部分是query(也即用户的自然語言問句Question),之後是數據庫的各個列的名字。因為WIkiSQL是單表的數據庫,所以不需要編碼表名。在序列化過程中,SQLOVA利用了BERT中的[CLS]、[SEP]等特殊token作為分隔符。

image.png

如上圖所示,輸入Table-aware Encoding Layer將自然語言查詢與整個表的所有header放在一起進行編碼,用來表示問題與表兩者信息之間存在交互。

NL2SQL模塊

與之前的SQLNet類似,SQLOVA在生成SQL語句時採用slot filling的思想,還是分別用6個子模塊來生成SQL語句的各個部分。

image.png

NL2SQL層的6個子模塊不共享參數、代替使用pointer network推斷Where_val,這裏訓練一個模塊來推斷start和end、where_val不僅依賴於where_col還依賴於where_op(比如text的類型不存在>或<)、當要結合question和header時,採用的是拼接操作而不是求和操作。

Execution-guided decoding

SQLOVA使用了Execution-guided decoding技術,以減少不可執行的query語句。

所謂Execution-guided decoding就是在輸出返回結果時對檢查生成的SQL序列是否是一條語法正確的SQL語句,使模型最終輸出的SQL語句一定是可以無語法錯誤執行的。它是通過將候選列表中的SQL查詢按順序提供給執行器來執行的,並丟棄那些執行失敗或返回空結果的查詢。該技術可以參考論文Robust Text-to-SQL Generation with Execution-Guided Decoding.

實驗結果

文章還給出了human的performance,從結果來看,SQLova已超過了人類表現。

image.png

Ablation Study

同時,文章還進行了充分的消融實驗以檢驗各個模塊的有效性。可以看出,預訓練模型BERT的引入對結果有很大提升。即使用詞語的上下文對logical form的acc有很大貢獻。

image.png

X-SQL: reinforce schema representation with context

創新點

X-SQL也是利用預訓練語言模型的方法。它使用BERT風格預訓練模型的上下文輸出來增強結構化schema表示,並在下游任務中與類型信息一起學習一個新的schema表示。同時,這裏不再使用BERT,而是使用MT-DNN(Multi-Task Deep Neural Networks for Natural Language Understanding一種多任務學習出來的語言模型,詳見https://fyubang.com/2019/05/23/mt-dnn/)預訓練模型。

模型架構

image.png

模型的整體架構如上圖所示。

image.png

模型包括三個部分:

  1. 序列編碼器:
  2. 上下文增強的schema編碼器
  3. 輸出層

序列編碼器

序列編碼器部分類似BERT,但主要改動如下: 1. 給每個表增加了一個特殊的空列[EMPTY]; 2. 將segment embedding替換為type embeding,包括問題、類別列、數字列、特殊空列,共4種類型; 3. 採用MT-DNN而不是BERT-Large來初始化。

上下文增強的schema編碼器:

該模塊根據表格每列的tokens的編碼來得到相應列的表示hCi,利用attention。將每個列名對應的多個token輸出的向量聚合並且在混入[CTX] token中的信息。

輸出層

採用與之前同樣的做法,最終輸出時將任務分解為6個子任務,每個均採用更簡單的結構,採用LayerNorm,輸入為schema的表示hCi和上下文表示hCTX。

結果

通過這些改進,X-SQL將性能表現提升至90%以上,超過了SQLOVA。

image.png

總結

本文介紹了兩個藉助預訓練語言模型BERT(MT-DNN)來表示schem和Question之間上下文關係表示的方法,通過預訓練語言模型強大的表示能力,模型第一次在數據集上的表現超越了人類。足以見證當今NLP技術發展之迅速。