萬萬沒想到,BERT學會寫SQL了

文本-SQL轉化任務,是將用戶的自然語言轉化為SQL繼而完成資料庫查詢的工作。

例如根據下表,用戶輸入一個問題,模型將其轉換為 SQL,查詢資料庫得到結果:”-4.52, -9.55″

Query:新浪和人人網的周漲跌幅分別是多少?

SQL: SELECT 周漲跌幅 FROMWHERE 名稱=『新浪』 OR 名稱=『人人網』

原本要辛辛苦苦寫SQL,現在我用大白話告訴機器想看的內容,就能從資料庫中拿到答案,這就是Text2SQL。​

本文將解讀Text2SQL領域最新論文,BERT從中學會了如何編寫SQL語言。原文發表在EMNLP 2020會議上。

論文題目

Bridging Textual and Tabular Data for Cross-Domain Text-to-SQL Semantic Parsing

論文鏈接:

//arxiv.org/pdf/2012.12627v2.pdf

開源程式碼:

salesforce/TabularSemanticParsing

1、Text2SQL定義

文本到SQL語義解析任務解決的是將自然語言(Text)映射到可執行關係資料庫查詢(SQL)的問題。論文中將跨領域的text-to-SQL任務定義如下:

給定自然語言問句Q關係型資料庫模式 [公式] 模型需要生成對應的SQL查詢Y

表格和名詞含義demo

一個資料庫中可能包含了很多張,一張表又包含多個欄位,所以 [公式][公式] 。每張表的表名和欄位名都是文本字元。表中的欄位可能有主鍵、外鍵,同時欄位有不同的數據類型。​

表中的單元值也包含了豐富的資訊,最終的SQL中可能包含了部分單元值(例如前文的「人人網」和「新浪」)。

明白了什麼是Q和S,我們來思考如何搭建模型。

2、模型架構

論文提出的模型BRIDGE採用了主流的Seq2Seq架構,把Text2SQL視作翻譯問題(原序列:text,目標序列:SQL),包含了編碼器、解碼器兩部分。

2.1 編碼器

​編碼器的目的是對Q和S分別做向量編碼,同時對兩者之間的關係充分交互。

論文中,作者將Q和S拼接為一個**混合的問題-模式序列 **X,作為編碼器的輸入:

每一個表名、欄位名前分別用特殊字元**[T][C]**分隔。問題Q和S之間用特殊字元[SEP]分隔。最後,在 X開始位置插入[CLS]字元。

這樣的序列既符合BERT的輸入格式,從而優雅地編碼跨模態資訊,又能快速獲取任意欄位的編碼向量(提取[T]/[C]對應特徵即可)​。

X首先輸入BERT編碼,隨後經過一層雙向LSTM獲得序列的初始編碼表示 hX。

序列初始編碼表示

hX中的問題片段繼續通過一層bi-LSTM獲得Q的最終編碼hQ。

Meta-data Features

相比於表名,欄位名多了主鍵、外鍵等屬性。為了利用這些特徵(meta-data),論文中用了一層前饋網路對錶名、欄位名進一步編碼。

這裡的 [公式] 分別表示各個欄位的主鍵、外鍵、類型特徵[公式] 表示欄位特徵。將4個向量橫向順序拼接,經過函數 [公式] 轉化,可以得到每一個欄位的最終向量表示。

表名沒有額外特徵,後三個維度均用零向量替代。各個表名、欄位名都進行g函數轉化,縱向拼接得到模式的最終編碼 [公式]

Bridging

截至目前,僅僅完成了Q和S的各自編碼。讀者可能會疑惑,交互在哪呢?

為了解決這個問題,作者使用錨文本(anchor text)將問題Q中提到的單元值與相應的資料庫欄位鏈接起來。

具體實現上,作者將問題Q中的每一個token,與資料庫表中每一列的所有value值進行字元串模糊匹配,匹配上的value值將被插入到問題-模式表示X中。

BRIDGE編碼器

如上圖所示,問題Q和表「Properties」、「Reference Property Types」相關聯。其中Q包含的兩個單詞「houses」和「apartments」與兩張表中的同名欄位「Property type code」有重合單元值

欄位名「Property type code」本身並沒有在問題Q中提到,讓模型直接推理出「houses」、「apartments」和「Property type code」相關,難度很大。

所以作者在X中把和問題有關的單元值人為拼接在相應欄位之後,相當於直接告訴BERT哪些問題片段包含引用。

作者把這種方式稱為「bridging」,即模型BRIDGE的由來。

2.2 解碼器

解碼器的目的是從編碼​特徵中還原出相應SQL。

相比於前人的工作(RAT-SQL[2]、IRNet[3]等),BRIDGE解碼器設計非常簡潔,僅使用了一層帶多頭注意力機制[4]的LSTM指針生成網路。

在每一個step中,解碼器從如下動作中選擇1種操作:

1.從辭彙表V中選擇一個token(SQL關鍵字)
2.從問題Q中複製一個token
3.從模式S中複製一個組件(欄位名、表名、單元值)

從數學定義上分析,在每一個時刻t,給定解碼狀態st和編碼表示 [公式] 按照[4]中的方式計算多頭注意力:

H是語義子空間總數量, [公式] 表示從Q或S中複製一個相應token加入到當前解碼結果中的權重

緊接著,作者給出了由V和輸出分布產生的概率定義:

[公式] 是LSTM輸出的概率分布, [公式] 是長度為 [公式] 序列,只包含X中的問題單詞和特殊標記[T]、[C](動作2、3)。 [公式] 表示從V生成的概率(動作1), [公式] 是最終輸出分布。

3、數據集與評價指標

作者在WikiSQL、Spider[5]兩份數據集上測試了效果。

Spider是耶魯大學發布的數據集,訓練/驗證/測試集資料庫不重疊,涵蓋了幾乎所有SQL語法,被公認是難度最大的Text2SQL數據集。

Spider數據集demo

預測評價指標上,作者選擇了完全匹配準確率(Exact Set Match)。模型輸出SQL的各個子句(select、from、where)需要和標註SQL一一匹配。

E-SM評價指標

4、實驗分析

實驗部分,作者端到端的訓練並測試了模型在Spider上的表現。

4.1 模型訓練

參數設置部分,作者用交叉熵loss、Adam-SGD優化器、uncased BERT-large訓練模型。為確保訓練的穩定性,使用了L-inv學習率衰減函數。

超參數設置最終訓練得到的 [公式] 在Spider測試集上取得了**65.0%**的準確率,超越了榜單上大部分模型。

集成版本的 [公式] (3個模型,在解碼的每一個step對輸出分布取平均值)將準確率提升至67.5%,獲得了榜單第3。

BRIDGE-Spider實驗結果

4.2 消融實驗

為了證明BRIDGE各個子模組的有效性,作者做了消融分析實驗。

BRIDGE在Spider-dev上的消融實驗

BERT對於最終表現有至關重要的影響,帶來3倍以上的提升效果。

此外,在訓練過程中隨機打亂db中table順序(防止過擬合)、引入meta-data、bridging機制都有一定的積極作用。

bridging對Spider不同難度樣本的影響

其中,bridging機制對於Ex-Hard難度的樣本有顯著的提升效果(9%)。

5、錯誤分析

​​誤差都去哪了呢?作者用最優的BRIDGE模型,隨機選擇dev上50條預測錯誤的樣本進行了分析。

錯誤類型分布

有9條樣本屬於假負樣本(False Negative)。原因在於同一句話可以翻譯成不同的SQL,E-SM指標不能發現這種差異。

# 例如「oldest age」,可以用兩種SQL表示
MAX(age)
ORDER BY age DESC LIMIT 1

剩餘錯誤中,36%屬於邏輯錯誤。由於模型的泛化能力不足,或沒有結合上下文「死記」訓練集出現的固定模式,導致在select、where子句等處預測錯誤。

當輸入的文本包含未見過的單詞時,模型容易不知所措,不能準確推理這個詞在資料庫中的含義。作者認為「持續學習「是一種有效的解決方案。

最後,部分文本在推理時需要結合常識才能完成。例如「older than 21」,結合常識才能推理出 age > 21,而不是 age < 21 。

6、總結

這篇論文提出了BRIDGE模型,與BERT結合取得了奇效。

作者也在論文中對比、總結了許多前人的工作。應該說這是一篇SQL解析方向非常Robust的paper!

歡迎關注我的公眾號【NLP情報局】❤️,第一時間閱讀自然語言處理、機器學習、程式設計師健康相關乾貨~

Reference

[1] Xi Victoria Lin, Richard Socher, Caiming Xiong. Bridging Textual and Tabular Data for Cross-Domain Text-to-SQL Semantic Parsing. Findings of theAssociation for Computational Linguistics: EMNLP, 2020: 4870–4888.

[2] Bailin Wang, Richard Shin, Xiaodong Liu, et al. RAT-SQL: Relation-aware schema encoding and linking for text-to-SQL parsers[C]. In Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics. ACL, 2020: 7567–7578.

[3] Jiaqi Guo, Zecheng Zhan, Yan Gao, et al. Towards complex text-to-SQL in cross-domain database with intermediate representation[C]. In Proceedings of the 57th Annual Meeting of the Association for Computational Linguistics. ACL, 2019: 4524–4535.

[4] Ashish Vaswani, Noam Shazeer, Niki Parmar, et al. Attention Is All You Need[C]. Proceedings of the 31st International Conference on Neural Information Processing. NIPS, 2017: 6000-6010.

[5] Tao Yu, Rui Zhang, Kai Yang, et al. Spider: A Large-Scale Human-Labeled Dataset for Complex and Cross- Domain Semantic Parsing and Text-to-SQL Task[C]. In Proceedings of the 2018 Conference on Empirical Methods in Natural Language Processing. EMNLP, 2018: 3911–3921