文字-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
論文連結:
https://arxiv。org/pdf/2012。12627v2。pdf
開原始碼:
https://github。com/salesforce/TabularSemanticParsing
01 Text2SQL定義
Text2SQL解決的是將自然語言對映到資料庫查詢語句SQL的問題。論文中將跨領域的text-to-SQL任務定義如下:
表中的單元值包含了真實資料資訊,例如前文的“人人網”和“sina”。
明白了什麼是Q和S,我們來思考如何搭建模型。
02 模型架構
論文提出的模型BRIDGE採用了主流的Seq2Seq架構,把Text2SQL視作翻譯問題(原序列:text,目標序列:SQL),包含編碼器和解碼器。
編碼器
編碼器的目的是對Q和S分別做向量編碼,同時對兩者之間的關係充分互動。
每一個表名、欄位名分別用字元[T]和[C]分隔。問題Q和S之間用字元[SEP]分隔。最後,在開始位置插入[CLS]字元。
這樣的序列既符合BERT的輸入格式,從而優雅地編碼跨模態資訊,又能快速獲取任意欄位的編碼向量(提取[T]/[C]對應特徵即可)。
Meta-data Features
相比於表名,欄位名多了主鍵、外來鍵等屬性。為了利用這些特徵(meta-data),論文中用了一層前饋網路對錶名、欄位名進一步編碼。
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”相關,難度很大。
作者把這種方式稱為“bridging”,即模型BRIDGE的由來。
解碼器
解碼器的目的是從編碼特徵中還原出相應SQL。
相比於前人的工作(RAT-SQL[2]、IRNet[3]等),BRIDGE解碼器設計非常簡潔,僅使用了一層帶多頭注意力機制[4]的LSTM指標生成網路。
在每一個step中,解碼器從如下動作中選擇1種:
1、從詞彙表V中選擇一個token(SQL關鍵字)
2、從問題Q中複製一個token
3、從模式S中複製一個元件(欄位名、表名、單元值)
03 資料集與評價指標
作者在WikiSQL、Spider[5]兩份資料集上測試了效果。
Spider是耶魯大學釋出的資料集,訓練/驗證/測試集資料庫不重疊,涵蓋了幾乎所有SQL語法,被公認是難度較大的Text2SQL資料集。
預測評價指標上,作者選擇了完全匹配準確率(Exact Set Match)。模型輸出SQL的各個子句(select、from、where)需要和標註SQL一一匹配。
04 實驗分析
實驗部分,作者端到端的訓練並測試了模型在Spider上的表現。
模型訓練
引數設定部分,作者用交叉熵loss、Adam-SGD最佳化器、uncased BERT-large訓練模型。為確保訓練的穩定性,使用了L-inv學習率衰減函式。
消融實驗
為了證明BRIDGE各個子模組的有效性,作者做了消融分析實驗。
BERT對於最終表現有至關重要的影響,帶來3倍以上的提升效果。
此外,在訓練過程中隨機打亂db中table順序(防止過擬合)、引入meta-data、bridging機制都有一定的積極作用。
其中,bridging機制對於Ex-Hard難度的樣本有顯著的提升效果(9%)。
05 錯誤分析
誤差都去哪了呢?作者用最優的BRIDGE模型,隨機選擇dev上50條預測錯誤的樣本進行了分析。
有9條樣本屬於假負樣本(False Negative)。原因在於同一句話可以翻譯成不同的SQL,E-SM指標不能發現這種差異。
# 例如“oldest age”,可以用兩種SQL表示
MAX(age)
ORDER BY age DESC LIMIT 1
剩餘錯誤中,36%屬於邏輯錯誤。由於模型的泛化能力不足,或沒有結合上下文“死記”訓練集出現的固定模式,導致在select、where子句等處預測錯誤。
當輸入的文字包含未見過的單詞時,模型容易不知所措,不能準確推理這個詞在資料庫中的含義。作者認為“持續學習“是一種有效的解決方案。
06 總結
這篇論文提出了BRIDGE模型,與BERT結合取得了奇效(提升300%)。
論文作者也在論文中對比、總結了許多前人的工作。應該說這是一篇SQL解析方向非常Robust的paper!