王悅林
摘要:人工智能領(lǐng)域近年發(fā)展十分迅猛,其中自然語(yǔ)言處理(NLP)領(lǐng)域從2016年起進(jìn)入高速發(fā)展期,以BERT為代表的各種新模型層出不窮,解決了文本數(shù)據(jù)分析和信息提取的問題。其中有一個(gè)子領(lǐng)域,即NL2SQL領(lǐng)域,是解決如何用自然語(yǔ)言問句進(jìn)行數(shù)據(jù)庫(kù)查詢的問題。具體方案是通過語(yǔ)義解析,將自然語(yǔ)言問句翻譯成SQL,再送到數(shù)據(jù)庫(kù)中進(jìn)行查詢,大大降低了數(shù)據(jù)查詢的難度,提升了交互友好度和查詢效率。本文探討具體的技術(shù)解決方案。
正文
NL2SQL領(lǐng)域目前的數(shù)據(jù)集英文以WikiSQL和Spider為主,中文有追一科技提供的競(jìng)賽數(shù)據(jù)集。WikiSQL數(shù)據(jù)集支持單表、單列、多Where子句查詢,現(xiàn)有模型可以較好地支持。而耶魯大學(xué)提供的Spider數(shù)據(jù)集要求支持Group By、Order By、Having,還需要Join不同表,這更貼近于真實(shí)場(chǎng)景,也帶來了更大的難度。追一科技的競(jìng)賽數(shù)據(jù)集的難度介于兩者之間,要求支持多列查詢,支持多Where子句間不同操作符操作。本文以追一科技數(shù)據(jù)集的難度為準(zhǔn),探討解決方案。
1.主流模型
目前業(yè)內(nèi)的三大技術(shù)解決方案依次是SQLnet,SQLova和X-SQL,其中X-SQL在WikiSQL數(shù)據(jù)集上測(cè)試效果最好,但仍然滿足不了追一科技數(shù)據(jù)集的要求。我們主要參考后兩個(gè)模型,提出我們的解決方案。
2.方案思路
解決此問題有兩大思路,增強(qiáng)學(xué)習(xí)和解耦任務(wù)。增強(qiáng)學(xué)習(xí)是端到端的解決方案,比較先進(jìn),但實(shí)際應(yīng)用尚不成熟,達(dá)不到準(zhǔn)確率的要求。因此解耦任務(wù)的思路成為首選。解耦的思路是將任務(wù)拆解為8個(gè)子任務(wù),分別是
Select-Number:選擇幾列
Select-Column:選擇哪一列
Select-Aggregation:使用什么聚合函數(shù)
Where-Number:有幾個(gè)條件
Where-Column:篩選條件是針對(duì)哪幾列
Where-Operator:各個(gè)條件的操作符
Where-Value:各個(gè)條件的條件值
Where-Operator:各個(gè)條件之間的關(guān)系。
為了將整體準(zhǔn)確度提升到80%以上,需要8個(gè)子任務(wù)的平均準(zhǔn)確度達(dá)到97.5%,這對(duì)方案提出了非常高的要求。
整體解決方案分為三部分:語(yǔ)義解析模塊、執(zhí)行引導(dǎo)模塊和SQL增強(qiáng)模塊。以下分別加以說明。
3.語(yǔ)義解析模塊
語(yǔ)義解析模塊是整個(gè)解決方案最重要的部分,共分為三個(gè)層次:編碼層、語(yǔ)義增強(qiáng)層和輸出層。
編碼層采用2019年7月由Facebook公司推出的RoBERTa作為基礎(chǔ)預(yù)訓(xùn)練模型。和2018年10月谷歌公司推出的BERT相比,此模型在CoLA和SST-2兩項(xiàng)任務(wù)中分別領(lǐng)先16個(gè)百分點(diǎn)和3個(gè)百分點(diǎn)。而這兩個(gè)任務(wù)是評(píng)判文本語(yǔ)義解析能力的重要指標(biāo)。RoBERTa已經(jīng)有支持中文的版本。
我們也考慮了其它的可能性,例如MT-DNN,XLnet,ERNIE2.0和DistilBERT,經(jīng)過對(duì)可行性的分析和對(duì)性能的比較,最終選用RoBERTa。
語(yǔ)義增強(qiáng)層的思路是將問題的文本表示和組成數(shù)據(jù)列的token的文本表示進(jìn)行融合,將融合后的結(jié)果結(jié)合注意力機(jī)制,然后進(jìn)行數(shù)學(xué)相加,最后再加上問題的文本表示,以得到數(shù)據(jù)列的文本表示。
其中將問題與token進(jìn)行融合的時(shí)候,加入兩個(gè)多維訓(xùn)練參數(shù)(m*d),以構(gòu)成神經(jīng)網(wǎng)絡(luò)層。那么數(shù)學(xué)上,兩個(gè)多維表示如何變成一個(gè)注意力參數(shù)的呢?問題和token都是((m*d)*(d*1)),點(diǎn)積后成為(m*1)向量,再次轉(zhuǎn)制和點(diǎn)積后成為(1*1)向量,即一個(gè)注意力參數(shù)。
最后再次加上問題的文本表示,是為了增強(qiáng)問題表示的比重,將問題和toke比重由1:1改為2:1,以增強(qiáng)最終效果。此處問題權(quán)重設(shè)為0.5。
到此已經(jīng)增加了一層神經(jīng)網(wǎng)絡(luò)層。在輸出層為所有的子任務(wù)還要再增加一層神經(jīng)網(wǎng)絡(luò)層,以Where Number子任務(wù)為例進(jìn)行說明。這個(gè)子任務(wù)是二分類模型,可選值為1或2,而是否有Where子句由empty column指定。此子任務(wù)增加一層MLP層。其余子任務(wù)由不同的公式加上神經(jīng)網(wǎng)絡(luò)參數(shù)計(jì)算。所有輸出層的損失函數(shù)都是交叉熵?fù)p失函數(shù)。
這些子任務(wù)并不是每個(gè)獨(dú)立進(jìn)行訓(xùn)練,在每一個(gè)batch size里,所有子任務(wù)按順序依次正向傳播,然后計(jì)算損失函數(shù),按照梯度下降原理,進(jìn)行整體反向傳播,更新參數(shù),使整體損失函數(shù)值最低。
4.執(zhí)行引導(dǎo)模塊
執(zhí)行引導(dǎo)模塊參考arxiv.org/abs/1807.03100直接進(jìn)行增強(qiáng),可有效提升執(zhí)行準(zhǔn)確率2%左右。
SQL增強(qiáng)模塊
SQL增強(qiáng)模塊在把生成的SQL送到數(shù)據(jù)庫(kù)之前,進(jìn)行調(diào)整如下:
●對(duì)于表中的類別型列數(shù)據(jù),需要將生成的列值與數(shù)據(jù)庫(kù)里的此列的類別值進(jìn)行相似度匹配,以替換成正確值。例如解析后的Where Value為“黃蜂”,而數(shù)據(jù)庫(kù)里的數(shù)據(jù)為“大黃蜂”,則修改為“大黃蜂”。
●如果兩個(gè)Where子句的列名相同,要檢查兩個(gè)Where Value是否相同,相同的話將其中一個(gè)替換為相似度最高的另一個(gè)值。
●如果Where Value里包含中文“和”字,則拆成兩個(gè)值
●如果問題中有中文“或”字,或者兩個(gè)Where子句的列名相同,則兩個(gè)Where子句的關(guān)系為“or”,其它情況均為“and”。
5.總結(jié)
以上是整體設(shè)計(jì)及方案的關(guān)鍵點(diǎn)。綜合以上方案,可以有效提升SQL轉(zhuǎn)化的準(zhǔn)確度,取得較好效果。
參考文獻(xiàn):
[1] Matthew E Peters,Mark Neumann,Mohit Iyyer,Matt Gardner,Christopher Clark,Kenton Lee,and Luke Zettlemoyer.2018.Deep contextualized word representations.arXiv preprint arXiv:1802.05365.
[2] Jason Phang,Thibault Fevry,and Samuel R Bowman.2018. Sentence encoders on stilts:Supplementary training on intermediate labeled-data tasks.arXiv preprint arXiv:1811.01088.
[3] Alec Radford,Karthik Narasimhan,Tim Salimans,and Ilya Sutskever.2018.Improving language understanding by generative pre-training.
[4] Pranav Rajpurkar,Jian Zhang,Konstantin Lopyrev,and Percy Liang.2016.Squad:100,000+ questions for machine comprehension of text.pages 2383–2392.
[5] Aarne Talman and Stergios Chatzikyriakidis.2018.Testing the generalization power of neural network models across nli benchmarks.arXiv preprint arXiv:1810.09774.
(作者單位:聯(lián)想集團(tuán))