馬駿 李澤華 沈銘科
摘? 要:文章提出了一種基于NL2SQL的電廠設(shè)備缺陷數(shù)據(jù)查詢統(tǒng)計(jì)方法,將設(shè)備缺陷數(shù)據(jù)查詢文本轉(zhuǎn)化成SQL語(yǔ)句執(zhí)行并返回查詢統(tǒng)計(jì)結(jié)果。利用基于NLP預(yù)訓(xùn)練模型,將SQL語(yǔ)句預(yù)測(cè)模型劃分為全局條件邏輯運(yùn)算符預(yù)測(cè)、條件比較運(yùn)算符和條件值預(yù)測(cè)、條件列預(yù)測(cè)、指標(biāo)列聚合操作符和指標(biāo)列預(yù)測(cè)等四個(gè)組件,并在搭建的電廠設(shè)備缺陷數(shù)據(jù)集上進(jìn)行了測(cè)試驗(yàn)證。測(cè)試結(jié)果表明模型具有良好的SQL語(yǔ)句預(yù)測(cè)精度和執(zhí)行效果。
關(guān)鍵詞:NL2SQL;電廠;設(shè)備缺陷;數(shù)據(jù)統(tǒng)計(jì);SQL語(yǔ)句預(yù)測(cè)
中圖分類號(hào):TP311.1? ? ? ? ? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):2096-4706(2021)15-0176-04
Abstract: This paper proposes a method for statistical analysis of power plant equipment defect data based on NL2SQL, which converts the query text of equipment defect data into SQL statements for execution and returns the query statistics results. Using the NLP-based pre-training model, the SQL statement prediction model is divided into four components: global conditional logic operator prediction, conditional comparison operator and condition value prediction, conditional column prediction, indicator column aggregation operator, and indicator column prediction. Test verification is carried out on the built power plant equipment defect data set. The test result shows that the model has good SQL statement prediction accuracy and execution effect.
Keywords: NL2SQL; power plant; equipment defect; data statistics; SQL statement prediction
0? 引? 言
電廠中由于設(shè)備數(shù)量眾多,運(yùn)行時(shí)間長(zhǎng),因此存在海量的設(shè)備缺陷數(shù)據(jù)。但是設(shè)備運(yùn)維人員往往缺少有效手段進(jìn)行方便快捷的獲取及統(tǒng)計(jì)分析數(shù)據(jù),寶貴的設(shè)備缺陷數(shù)據(jù)價(jià)值無(wú)法有效支撐到日常業(yè)務(wù)中。主要存在以下問題:(1)設(shè)備缺陷數(shù)據(jù)相關(guān)系統(tǒng)一般操作煩瑣,耗用時(shí)間長(zhǎng),查詢效率差;(2)電廠對(duì)缺陷業(yè)務(wù)分析需求經(jīng)常無(wú)法提前預(yù)測(cè),基層員工需花費(fèi)大量時(shí)間為領(lǐng)導(dǎo)的報(bào)表需求進(jìn)行數(shù)據(jù)查詢搜索和報(bào)表整合,增加了領(lǐng)導(dǎo)決策時(shí)間;(3)當(dāng)前設(shè)備缺陷數(shù)據(jù)信息查詢,往往基于純規(guī)則模式對(duì)用戶的查詢意圖進(jìn)行定制開發(fā),雖然能夠暫時(shí)滿足部分業(yè)務(wù)的查詢及統(tǒng)計(jì)分析的需求,但當(dāng)要擴(kuò)展到更多的數(shù)據(jù)統(tǒng)計(jì)分析需求時(shí),往往要進(jìn)行重新開發(fā),開發(fā)周期長(zhǎng)、成本高,運(yùn)維難[1,2]。NL2SQL是一種將自然語(yǔ)言查詢語(yǔ)句自動(dòng)解析為SQL查詢語(yǔ)句的技術(shù),讓用戶可以口語(yǔ)化方式查詢業(yè)務(wù)系統(tǒng)或數(shù)據(jù)倉(cāng)庫(kù)中的結(jié)構(gòu)化數(shù)據(jù),解決傳統(tǒng)需要進(jìn)入系統(tǒng)才能查詢數(shù)據(jù)的煩瑣過程,并在多個(gè)行業(yè)領(lǐng)域進(jìn)行了應(yīng)用,是一種輕量化、低成本的數(shù)據(jù)統(tǒng)計(jì)分析方式[3-5]。
本文利用基于NLP預(yù)訓(xùn)練模型的NL2SQL技術(shù)[6],將模型劃分成四個(gè)主要組件:全局條件邏輯運(yùn)算符預(yù)測(cè)、條件比較運(yùn)算符和條件值預(yù)測(cè)、條件列預(yù)測(cè)、指標(biāo)列聚合操作符和指標(biāo)列預(yù)測(cè),實(shí)現(xiàn)電廠設(shè)備缺陷數(shù)據(jù)SQL查詢語(yǔ)句的精準(zhǔn)預(yù)測(cè)。當(dāng)中文查詢語(yǔ)句中存在查詢條件時(shí),可以利用上述與條件相關(guān)的前3個(gè)組件得以解決。各部分組件預(yù)測(cè)完成后,將查詢結(jié)果利用規(guī)則進(jìn)行封裝處理,得到最終的SQL查詢語(yǔ)句并執(zhí)行返回結(jié)果。本模型在搭建的電廠設(shè)備缺陷數(shù)據(jù)集上進(jìn)行了測(cè)試驗(yàn)證。
1? 電廠設(shè)備缺陷數(shù)據(jù)
本文針對(duì)電廠2012年至2021年運(yùn)行過程中產(chǎn)生的缺陷數(shù)據(jù)進(jìn)行梳理、清洗和標(biāo)注,建立了包含三萬(wàn)條數(shù)據(jù)的數(shù)據(jù)庫(kù),依照比例8:1:1將數(shù)據(jù)劃分為訓(xùn)練集、驗(yàn)證集和測(cè)試集。模型訓(xùn)練數(shù)據(jù)樣例如表1所示。表中:“問題”對(duì)應(yīng)設(shè)備缺陷相關(guān)的中文查詢語(yǔ)句,數(shù)據(jù)樣例為“2019年主變壓器缺陷數(shù)量是多少”;“SQL查詢語(yǔ)句”為中文查詢語(yǔ)句對(duì)應(yīng)的SQL查詢語(yǔ)句的標(biāo)注,在數(shù)據(jù)樣例中,“cond_log_op”表示全局條件邏輯運(yùn)算符,用0到2來(lái)代表單一條件、多條件OR和多條件AND,“cond”表示條件集合,每個(gè)條件都用三元組[條件值,條件列,條件比較運(yùn)算符]來(lái)表征,比較運(yùn)算符分別用0到4來(lái)代表NONE(無(wú)關(guān)系)、不等于、等于、小于、大于,“ind_col”表示指標(biāo)列,“agg”表示指標(biāo)列的聚合操作符,用0到5分別代表選擇但無(wú)操作符、求和(SUM)、求最大值(MAX)、求最小值(MIN)、求平均值(AVG)、未選擇(NONE)。
為保證模型與實(shí)際缺陷數(shù)量分析業(yè)務(wù)場(chǎng)景匹配,分別針對(duì)四個(gè)不同場(chǎng)景進(jìn)行訓(xùn)練數(shù)據(jù)標(biāo)注,具體數(shù)量如表2所示。其中:“單一指標(biāo)”指數(shù)據(jù)只針對(duì)某一指標(biāo)進(jìn)行統(tǒng)計(jì),比如“缺陷數(shù)量”;“多指標(biāo)”指數(shù)據(jù)針對(duì)多個(gè)指標(biāo)進(jìn)行統(tǒng)計(jì),比如“缺陷數(shù)量、風(fēng)險(xiǎn)累計(jì)”;不同順序輸入指查詢條件有多個(gè)時(shí),按照條件的不同順序進(jìn)行文字描述;限定值比較指針對(duì)指標(biāo)進(jìn)行范圍比較,比如“缺陷數(shù)量超過100”。單一指標(biāo)業(yè)務(wù)場(chǎng)景和多指標(biāo)業(yè)務(wù)場(chǎng)景訓(xùn)練數(shù)據(jù)量超過9 000條,不同輸入順序業(yè)務(wù)場(chǎng)景訓(xùn)練數(shù)據(jù)量超過7 000條,限定值比較業(yè)務(wù)場(chǎng)景訓(xùn)練數(shù)據(jù)量超過6000條。
2? 模型構(gòu)建
2.1? 查詢語(yǔ)句的數(shù)學(xué)表達(dá)
中文查詢語(yǔ)句的數(shù)學(xué)表達(dá)是SQL語(yǔ)句正確預(yù)測(cè)的首要任務(wù),轉(zhuǎn)化過程如圖1所示。首先,將中文查詢語(yǔ)句和數(shù)據(jù)表的列名拼接,用字典映射成字符向量形式,再利用BERT模型進(jìn)行轉(zhuǎn)化,形成最終的用于預(yù)測(cè)模型輸入的向量序列數(shù)學(xué)表達(dá)。
查詢語(yǔ)句數(shù)學(xué)表達(dá)的前提是要建立一個(gè)字符字典,該字典用于將查詢語(yǔ)句中的中文字符轉(zhuǎn)化為數(shù)學(xué)向量。本文采用pytorch版本的Bert模型來(lái)實(shí)現(xiàn)字符的向量化編碼,該Bert模型為Google公司發(fā)布的中文Bert_Base模型,采用了多頭注意力機(jī)制,增加了對(duì)文本中重要信息的權(quán)重分配。
2.2? SQL語(yǔ)句預(yù)測(cè)流程
SQL語(yǔ)句預(yù)測(cè)流程示意圖如圖2所示,其中,四個(gè)組件預(yù)測(cè)過程均屬于多分類任務(wù)。全局條件邏輯運(yùn)算符預(yù)測(cè)組件用于判定中文查詢語(yǔ)句是否存在多條件,且可以針對(duì)多條件間的邏輯關(guān)系進(jìn)行預(yù)測(cè);條件比較運(yùn)算符符和條件值預(yù)測(cè)組件針對(duì)各條件值的比較關(guān)系進(jìn)行預(yù)測(cè);條件列預(yù)測(cè)組件負(fù)責(zé)匹配各條件值的所屬列;指標(biāo)列聚合操作符和指標(biāo)列預(yù)測(cè)組件負(fù)責(zé)判定指標(biāo)列以及指標(biāo)列的聚合操作運(yùn)算類型。
SQL語(yǔ)句預(yù)測(cè)模型示意圖如圖3所示。模型將中文查詢語(yǔ)句和數(shù)據(jù)表的列名進(jìn)行拼接作為輸入,語(yǔ)句和列名的開頭用“cls”進(jìn)行標(biāo)記,結(jié)尾用“sep”進(jìn)行標(biāo)記,“cls”和“sep”都已經(jīng)過Bert模型訓(xùn)練。其中,最左邊“cls”相應(yīng)的向量用來(lái)進(jìn)行全局條件邏輯運(yùn)算符的預(yù)測(cè),包括3類關(guān)系:?jiǎn)我粭l件、多條件OR和多條件AND,用0到2來(lái)表征;第二個(gè)以及之后的“cls”用來(lái)對(duì)指標(biāo)列和對(duì)應(yīng)聚合操作的預(yù)測(cè),包括6類情況:選擇但無(wú)操作符、求和(SUM)、求最大值(MAX)、求最小值(MIN)、求平均值(AVG)、未選擇(NONE),用0到5來(lái)表征,其中未選擇(NONE)代表字符不屬于目標(biāo)列;第一個(gè)“cls”和第一個(gè)“sep”之間的中文查詢語(yǔ)句對(duì)應(yīng)的向量用來(lái)進(jìn)行條件比較符和條件值的預(yù)測(cè),包括5類:NONE(無(wú)關(guān)系)、不等于、等于、小于和大于,用0到4來(lái)表征;根據(jù)組件一預(yù)測(cè)結(jié)果,值不為0的位置即對(duì)應(yīng)條件值的位置,依此可以對(duì)應(yīng)到中文查詢語(yǔ)句中條件值,再結(jié)合數(shù)據(jù)表列名信息,即可以轉(zhuǎn)換為多分類問題,將條件值匹配到響應(yīng)的條件列。
3? 結(jié)果分析
模型采用英偉達(dá)T4顯卡和Pytorch深度學(xué)習(xí)框架進(jìn)行訓(xùn)練,將邏輯準(zhǔn)確率作為模型評(píng)價(jià)方式。邏輯準(zhǔn)確率指模型預(yù)測(cè)的SQL語(yǔ)句結(jié)果與實(shí)際的SQL語(yǔ)句完全一致。主要模型參數(shù)設(shè)定包括:學(xué)習(xí)率(3e-5),Batchsize(15),迭代次數(shù)(50)。由圖4可見,模型在電廠設(shè)備缺陷數(shù)據(jù)預(yù)測(cè)中,在迭代次數(shù)隨著訓(xùn)練次數(shù)增加模型預(yù)測(cè)精度提升。當(dāng)訓(xùn)練次數(shù)小于5次時(shí),SQL語(yǔ)句預(yù)測(cè)精度快速爬升;當(dāng)訓(xùn)練次數(shù)大于5次以后,SQL語(yǔ)句預(yù)測(cè)精度開始緩慢爬升,在緩慢爬升階段,預(yù)測(cè)精度存在短暫下降的情況,主要是由于模型采用了隨機(jī)梯度下降算法進(jìn)行預(yù)測(cè)。當(dāng)?shù)螖?shù)為40時(shí),模型SQL語(yǔ)句預(yù)測(cè)實(shí)現(xiàn)最高精度,達(dá)到92.19%。
表3為電廠設(shè)備缺陷表部分?jǐn)?shù)據(jù)展示。將設(shè)備缺陷數(shù)據(jù)提煉為年份、月份、機(jī)組、設(shè)備名稱、缺陷數(shù)量等字段。其中:年份和月份指缺陷發(fā)生的時(shí)間年月;機(jī)組值缺陷發(fā)生的電廠機(jī)組編號(hào);設(shè)備名稱指設(shè)備缺陷發(fā)生的電廠具體設(shè)備;缺陷數(shù)量值各缺陷記錄條目所統(tǒng)計(jì)的缺陷統(tǒng)計(jì)數(shù)量。
模型執(zhí)行結(jié)果示意如圖5所示。用戶將查詢的問題“2019年主變壓器缺陷數(shù)量是多少”輸入到模型中,模型預(yù)測(cè)SQL結(jié)果“SELECT sum(`缺陷數(shù)量`) FROM `電廠設(shè)備缺陷` WHERE `年份`=2019 AND `設(shè)備名稱`=‘主變壓器’”并執(zhí)行,得出缺陷數(shù)量結(jié)果是“3”。模型執(zhí)行結(jié)果顯示,模型可以有效預(yù)測(cè)SQL查詢語(yǔ)句,并通過查詢語(yǔ)句得出正確的數(shù)據(jù)統(tǒng)計(jì)分析結(jié)果。實(shí)驗(yàn)系統(tǒng)實(shí)際執(zhí)行效果如圖6所示。
4? 結(jié)? 論
NL2SQL是一種將自然語(yǔ)言查詢語(yǔ)句自動(dòng)解析為SQL查詢語(yǔ)句的技術(shù)。本文提出了一種基于NL2SQL的電廠設(shè)備缺陷數(shù)據(jù)統(tǒng)計(jì)分析方法,將設(shè)備缺陷數(shù)據(jù)查詢文本轉(zhuǎn)化成SQL語(yǔ)句執(zhí)行并返回統(tǒng)計(jì)分析結(jié)果。利用基于NLP預(yù)訓(xùn)練Bert模型,將SQL語(yǔ)句預(yù)測(cè)模型劃分為全局條件邏輯運(yùn)算符預(yù)測(cè)、條件比較運(yùn)算符和條件值預(yù)測(cè)、條件列預(yù)測(cè)、指標(biāo)列聚合操作符和指標(biāo)列預(yù)測(cè)等四個(gè)組件。各部分組件預(yù)測(cè)完成后,將查詢結(jié)果利用規(guī)則進(jìn)行封裝處理,得到最終的SQL查詢語(yǔ)句并執(zhí)行返回結(jié)果。在搭建的三萬(wàn)條電廠設(shè)備缺陷數(shù)據(jù)集上進(jìn)行了測(cè)試結(jié)果表明,模型在迭代次數(shù)為40時(shí)實(shí)現(xiàn)最高預(yù)測(cè)精度92.19%,具有良好的SQL語(yǔ)句預(yù)測(cè)精度和執(zhí)行效果。
參考文獻(xiàn):
[1] 何珍華.電廠設(shè)備缺陷管理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn) [D].成都:電子科技大學(xué),2013.
[2] 王林川,宋超翼,吳鐵山,等.管理信息專家系統(tǒng)在電廠設(shè)備缺陷管理中的應(yīng)用 [J].東北電力學(xué)院學(xué)報(bào),2001(4):71-73+76.
[3] 劉譯璟,徐林杰,代其鋒.基于自然語(yǔ)言處理和深度學(xué)習(xí)的NL2SQL技術(shù)及其在BI增強(qiáng)分析中的應(yīng)用 [J].中國(guó)信息化,2019(11):62-67.
[4] 張立新,于海亮,張棟棟,等.基于NL2SQL的智能問答系統(tǒng)研究與應(yīng)用 [J].電腦知識(shí)與技術(shù),2020,16(35):83-86.
[5] 曹金超,黃滔,陳剛,等.自然語(yǔ)言生成多表SQL查詢語(yǔ)句技術(shù)研究 [J].計(jì)算機(jī)科學(xué)與探索,2020,14(7):1133-1141.
[6] DEVLIN J,CHANG M W,LEE K,et al. BERT:Pre-training of Deep Bidirectional Transformers for Language Understanding [J/OL].arXiv:1810.04805 [cs.CL].(2018-10-11).https://arxiv.org/abs/1810.04805.
作者簡(jiǎn)介:馬駿(1982.01—),男,漢族,內(nèi)蒙古霍林郭勒人,工程師,本科,研究方向:電廠信息化技術(shù)。
3187500338200