萬(wàn)萬(wàn)沒(méi)想到,BERT學(xué)會(huì)寫(xiě)SQL了
文 | Giant
編 | NLP情報(bào)局
大家好,我是Giant,這是我的第2篇文章。
文本-SQL轉(zhuǎn)化任務(wù),是將用戶的自然語(yǔ)言轉(zhuǎn)化為SQL繼而完成數(shù)據(jù)庫(kù)查詢的工作。
例如根據(jù)下表,用戶輸入一個(gè)問(wèn)題,模型將其轉(zhuǎn)換為 SQL,查詢數(shù)據(jù)庫(kù)得到結(jié)果:"-4.52, -9.55"
Query:新浪和人人網(wǎng)的周漲跌幅分別是多少?
SQL:SELECT 周漲跌幅 FROM 表 WHERE 名稱=‘新浪’ OR 名稱=‘人人網(wǎng)’

原本要辛辛苦苦寫(xiě)SQL,現(xiàn)在我用大白話告訴機(jī)器想看的內(nèi)容,就能從數(shù)據(jù)庫(kù)中拿到答案,這就是Text2SQL。
本文將解讀Text2SQL領(lǐng)域最新論文,BERT從中學(xué)會(huì)了如何編寫(xiě)SQL語(yǔ)言。原文發(fā)表在EMNLP 2020會(huì)議上。
論文題目:
Bridging Textual and Tabular Data for Cross-Domain Text-to-SQL Semantic Parsing
論文鏈接:
https://arxiv.org/pdf/2012.12627v2.pdf
開(kāi)源代碼:
https://github.com/salesforce/TabularSemanticParsing
想快速獲取論文的小伙伴也可以在訂閱號(hào)【NLP情報(bào)局】后臺(tái)回復(fù)關(guān)鍵詞【0119】下載。
01 Text2SQL定義
Text2SQL解決的是將自然語(yǔ)言映射到數(shù)據(jù)庫(kù)查詢語(yǔ)句SQL的問(wèn)題。論文中將跨領(lǐng)域的text-to-SQL任務(wù)定義如下:
給定自然語(yǔ)言問(wèn)句

我們知道,一個(gè)數(shù)據(jù)庫(kù)中可能包含很多張表,一張表又包含多個(gè)字段,所以
表中的單元值包含了真實(shí)數(shù)據(jù)信息,例如前文的“人人網(wǎng)”和“新浪”。
明白了什么是Q和S,我們來(lái)思考如何搭建模型。
02 模型架構(gòu)
論文提出的模型BRIDGE采用了主流的Seq2Seq架構(gòu),把Text2SQL視作翻譯問(wèn)題(原序列:text,目標(biāo)序列:SQL),包含編碼器和解碼器。
編碼器
編碼器的目的是對(duì)Q和S分別做向量編碼,同時(shí)對(duì)兩者之間的關(guān)系充分交互。
論文中,作者將Q和S拼接為一個(gè)混合的問(wèn)題-模式序列

每一個(gè)表名、字段名分別用字符[T]和[C]分隔。問(wèn)題Q和S之間用字符[SEP]分隔。最后,在開(kāi)始位置插入[CLS]字符。
這樣的序列既符合BERT的輸入格式,從而優(yōu)雅地編碼跨模態(tài)信息,又能快速獲取任意字段的編碼向量(提取[T]/[C]對(duì)應(yīng)特征即可)。

Meta-data Features
相比于表名,字段名多了主鍵、外鍵等屬性。為了利用這些特征(meta-data),論文中用了一層前饋網(wǎng)絡(luò)對(duì)表名、字段名進(jìn)一步編碼。

這里的
表名沒(méi)有額外特征,后三個(gè)維度均用零向量替代。各個(gè)表名、字段名都進(jìn)行g(shù)函數(shù)轉(zhuǎn)化,縱向拼接得到模式的最終編碼
Bridging
截至目前,僅僅完成了Q和S的各自編碼。讀者可能會(huì)疑惑,交互在哪呢?
為了解決這個(gè)問(wèn)題,作者使用錨文本(anchor text)將問(wèn)題Q中包含的單元值與數(shù)據(jù)庫(kù)字段鏈接起來(lái)。
具體實(shí)現(xiàn)上,作者將問(wèn)題Q中的每一個(gè)token,與數(shù)據(jù)庫(kù)表中每一列的所有value值進(jìn)行字符串模糊匹配,匹配上的value值將被插入到序列X中。

如上圖所示,問(wèn)題Q和表格“Properties”、“Reference Property Types”相關(guān)聯(lián)。其中Q包含的兩個(gè)單詞“houses”和“apartments”與兩張表中的同名字段“Property type code”有重合單元值。
字段名“Property type code”本身沒(méi)有在問(wèn)題Q中出現(xiàn),讓模型直接推理出“houses”、“apartments”和“Property type code”相關(guān),難度很大。

所以作者在
作者把這種方式稱為“bridging”,即模型BRIDGE的由來(lái)。
解碼器
解碼器的目的是從編碼特征中還原出相應(yīng)SQL。
相比于前人的工作(RAT-SQL[2]、IRNet[3]等),BRIDGE解碼器設(shè)計(jì)非常簡(jiǎn)潔,僅使用了一層帶多頭注意力機(jī)制[4]的LSTM指針生成網(wǎng)絡(luò)。
在每一個(gè)step中,解碼器從如下動(dòng)作中選擇1種:
1、從詞匯表V中選擇一個(gè)token(SQL關(guān)鍵字)
2、從問(wèn)題Q中復(fù)制一個(gè)token
3、從模式S中復(fù)制一個(gè)組件(字段名、表名、單元值)
從數(shù)學(xué)定義上分析,在每一個(gè)時(shí)刻

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

03 數(shù)據(jù)集與評(píng)價(jià)指標(biāo)
作者在WikiSQL、Spider[5]兩份數(shù)據(jù)集上測(cè)試了效果。
Spider是耶魯大學(xué)發(fā)布的數(shù)據(jù)集,訓(xùn)練/驗(yàn)證/測(cè)試集數(shù)據(jù)庫(kù)不重疊,涵蓋了幾乎所有SQL語(yǔ)法,被公認(rèn)是難度最大的Text2SQL數(shù)據(jù)集。

預(yù)測(cè)評(píng)價(jià)指標(biāo)上,作者選擇了完全匹配準(zhǔn)確率(Exact Set Match)。模型輸出SQL的各個(gè)子句(select、from、where)需要和標(biāo)注SQL一一匹配。

04 實(shí)驗(yàn)分析
實(shí)驗(yàn)部分,作者端到端的訓(xùn)練并測(cè)試了模型在Spider上的表現(xiàn)。
模型訓(xùn)練
參數(shù)設(shè)置部分,作者用交叉熵loss、Adam-SGD優(yōu)化器、uncased BERT-large訓(xùn)練模型。為確保訓(xùn)練的穩(wěn)定性,使用了L-inv學(xué)習(xí)率衰減函數(shù)。

最終訓(xùn)練得到的
集成版本的

消融實(shí)驗(yàn)
為了證明BRIDGE各個(gè)子模塊的有效性,作者做了消融分析實(shí)驗(yàn)。

BERT對(duì)于最終表現(xiàn)有至關(guān)重要的影響,帶來(lái)3倍以上的提升效果。
此外,在訓(xùn)練過(guò)程中隨機(jī)打亂db中table順序(防止過(guò)擬合)、引入meta-data、bridging機(jī)制都有一定的積極作用。

其中,bridging機(jī)制對(duì)于Ex-Hard難度的樣本有顯著的提升效果(9%)。
05 錯(cuò)誤分析
誤差都去哪了呢?作者用最優(yōu)的BRIDGE模型,隨機(jī)選擇dev上50條預(yù)測(cè)錯(cuò)誤的樣本進(jìn)行了分析。

有9條樣本屬于假負(fù)樣本(False Negative)。原因在于同一句話可以翻譯成不同的SQL,E-SM指標(biāo)不能發(fā)現(xiàn)這種差異。
# 例如“oldest age”,可以用兩種SQL表示MAX(age)ORDER BY age DESC LIMIT 1
剩余錯(cuò)誤中,36%屬于邏輯錯(cuò)誤。由于模型的泛化能力不足,或沒(méi)有結(jié)合上下文“死記”訓(xùn)練集出現(xiàn)的固定模式,導(dǎo)致在select、where子句等處預(yù)測(cè)錯(cuò)誤。
當(dāng)輸入的文本包含未見(jiàn)過(guò)的單詞時(shí),模型容易不知所措,不能準(zhǔn)確推理這個(gè)詞在數(shù)據(jù)庫(kù)中的含義。作者認(rèn)為“持續(xù)學(xué)習(xí)“是一種有效的解決方案。
最后,部分文本在推理時(shí)需要結(jié)合常識(shí)才能完成。例如“older than 21”,結(jié)合常識(shí)才能推理出
06 總結(jié)
這篇論文提出了BRIDGE模型,與BERT結(jié)合取得了奇效(提升300%)。
作者也在論文中對(duì)比、總結(jié)了許多前人的工作。應(yīng)該說(shuō)這是一篇SQL解析方向非常Robust的paper!
[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.


