萬萬沒想到,BERT學會寫SQL了
文本-SQL轉化任務,是將用戶的自然語言轉化為SQL繼而完成資料庫查詢的工作。
例如根據下表,用戶輸入一個問題,模型將其轉換為 SQL,查詢資料庫得到結果:”-4.52, -9.55″
Query:新浪和人人網的周漲跌幅分別是多少?
SQL: SELECT 周漲跌幅 FROM 表 WHERE 名稱=『新浪』 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。
一個資料庫中可能包含了很多張表,一張表又包含多個欄位,所以 ,
。每張表的表名和欄位名都是文本字元。表中的欄位可能有主鍵、外鍵,同時欄位有不同的數據類型。
表中的單元值也包含了豐富的資訊,最終的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中。
如上圖所示,問題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數據集。
預測評價指標上,作者選擇了完全匹配準確率(Exact Set Match)。模型輸出SQL的各個子句(select、from、where)需要和標註SQL一一匹配。
4、實驗分析
實驗部分,作者端到端的訓練並測試了模型在Spider上的表現。
4.1 模型訓練
參數設置部分,作者用交叉熵loss、Adam-SGD優化器、uncased BERT-large訓練模型。為確保訓練的穩定性,使用了L-inv學習率衰減函數。
超參數設置最終訓練得到的
在Spider測試集上取得了**65.0%**的準確率,超越了榜單上大部分模型。
集成版本的 (3個模型,在解碼的每一個step對輸出分布取平均值)將準確率提升至67.5%,獲得了榜單第3。
4.2 消融實驗
為了證明BRIDGE各個子模組的有效性,作者做了消融分析實驗。
BERT對於最終表現有至關重要的影響,帶來3倍以上的提升效果。
此外,在訓練過程中隨機打亂db中table順序(防止過擬合)、引入meta-data、bridging機制都有一定的積極作用。
其中,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