本發(fā)明涉及機(jī)器學(xué)習(xí)領(lǐng)域以及自然語言處理領(lǐng)域,尤其是涉及一種基于大模型的自然語言轉(zhuǎn)sql語句的方法及裝置。
背景技術(shù):
1、目前常用的自然語言轉(zhuǎn)sql語句的模型分為兩種,分別為序列模型和預(yù)訓(xùn)練語言模型,其分別具有不同的優(yōu)缺點,具體如下:
2、序列模型:seq2seq(sequence-to-sequence)模型在自然語言轉(zhuǎn)sql語句(text-to-sql)任務(wù)中具有廣泛應(yīng)用,其基本思想是將自然語言查詢作為輸入序列,生成相應(yīng)的sql查詢作為輸出序列。seq2seq模型通常由編碼器(encoder)和解碼器(decoder)組成,一種常見的模型架構(gòu)如圖1所示;圖中x1至xn作為輸入的自然語言查詢語句序列,h1至hn為編碼器;節(jié)點c為中間輸出狀態(tài);y′1至y'm為生成的sql語句序列,h′1至h'm為解碼器。
3、預(yù)訓(xùn)練語言模型:隨著預(yù)訓(xùn)練語言模型的興起,bert、gpt等預(yù)訓(xùn)練語言模型被引入到text-to-sql任務(wù)中,顯著提高了模型的性能。預(yù)訓(xùn)練語言模型通常在大規(guī)模的無標(biāo)注文本數(shù)據(jù)上進(jìn)行預(yù)訓(xùn)練,然后在特定任務(wù)(如text-to-sql)上進(jìn)行微調(diào)(fine-tuning),可以更好地理解和生成自然語言與sql語句。圖2為gpt模型架構(gòu)示意圖,圖中e1至en為輸入的查詢語句序列;trm節(jié)點為transformer的解碼器decoder,gpt模型架構(gòu)以trm節(jié)點堆疊架構(gòu)而成;t1至tn為輸出的sql語句序列。transformer的高性能得益于其自注意力(self-attention)機(jī)制。
4、其中,attention機(jī)制的本質(zhì)思想可以抽象成如下的公式:
5、
6、在nlp領(lǐng)域中,similarity(q,ki)中的ki可以理解為語句中的某一個詞,而q則為整個語句,某一個詞語中的所有詞進(jìn)行相似度的計算,常見三種計算方式有如下公式:
7、
8、雖然序列模型和預(yù)訓(xùn)練語言模型均能夠進(jìn)行sql語句的轉(zhuǎn)化,但是其仍然存在一定的問題,具體如下:
9、1、針對序列模型seq2seq模型。seq2seq模型通?;诖笠?guī)模數(shù)據(jù)進(jìn)行訓(xùn)練,但在實際應(yīng)用中,查詢可能涉及特定領(lǐng)域的知識和背景。模型可能無法充分理解和利用這些背景知識來生成正確的sql查詢;seq2seq模型在處理復(fù)雜查詢(如多表連接、嵌套查詢、子查詢等)時,常常表現(xiàn)出較差的性能。復(fù)雜查詢通常需要模型具備更高的邏輯推理能力和更深的語義理解。
10、2、預(yù)訓(xùn)練語言模型。相比seq2seq模型,預(yù)訓(xùn)練語言模型無論是模型架構(gòu)復(fù)雜度還是模型參數(shù)量均有大幅度升級,sql語句的生成準(zhǔn)確率也有明顯提升。但預(yù)訓(xùn)練語言模型支持的序列輸入長度一般只有512,面對數(shù)據(jù)庫中存在大寬表或多張表聯(lián)合查詢時,輸入信息的長度往往會遠(yuǎn)超512,因此這嚴(yán)重制約了查詢效果。
11、綜上所述,目前常見的將自然語言轉(zhuǎn)化為sql的方法仍然存在一定的問題,基于此,發(fā)明人研發(fā)了一種基于大模型的自然語言轉(zhuǎn)sql語句的方法及裝置。
技術(shù)實現(xiàn)思路
1、為了解決上述技術(shù)問題,本發(fā)明提供了一種基于大模型的自然語言轉(zhuǎn)sql語句的方法及裝置,其提高了大模型生成的sql語句的質(zhì)量以及大幅度的提升了用戶查詢語句的靈活度與sql語句生成的準(zhǔn)確率。
2、第一方面,本發(fā)明提供的一種基于大模型的自然語言轉(zhuǎn)sql語句的方法,采用如下的技術(shù)方案:
3、一種基于大模型的自然語言轉(zhuǎn)sql語句的方法,包括以下步驟:
4、s1、對原始數(shù)據(jù)表進(jìn)行數(shù)據(jù)治理;
5、對原始數(shù)據(jù)表進(jìn)行重寫,生成重寫數(shù)據(jù)表,并將多表合并為寬表;
6、s2、對數(shù)據(jù)庫中的所有值構(gòu)建索引并基于用戶問題從數(shù)據(jù)庫中選出top-n個相關(guān)值,然后基于最長公共子串匹配算法計算用戶問題與該top-n個相關(guān)值之間的匹配程度,并選出匹配程度最高的相關(guān)值;
7、s3、對用戶問題進(jìn)行改寫;
8、借助領(lǐng)域字典對用戶問題進(jìn)行改寫,將用戶問題中所涉及到的領(lǐng)域內(nèi)的縮寫詞匯、簡寫詞匯以及別稱詞匯改寫為專業(yè)全稱詞匯;
9、當(dāng)用戶問題中涉及到時間內(nèi)容時,將時間內(nèi)容統(tǒng)一轉(zhuǎn)化為unix時間戳;
10、s4、對用戶問題進(jìn)行分詞匹配;
11、分別基于步驟s2與s3將用戶問題與數(shù)據(jù)庫存儲的所有值進(jìn)行匹配;
12、s5、將已積累的種子問答語句存入向量數(shù)據(jù)庫中,并搭建向量匹配模型,向量匹配模型為孿生網(wǎng)絡(luò),孿生網(wǎng)絡(luò)包括左右兩個輸入通道,且兩個輸入通道共享同一個bert類模型,對用戶問題中的不同關(guān)鍵詞進(jìn)行權(quán)重賦值,然后將用戶問題與已積累的種子問答語句進(jìn)行匹配,并選出top-s個sql問答語句;
13、s6、優(yōu)化ddl語句構(gòu)建prompt語句,調(diào)用大模型生成sql語句。
14、優(yōu)選的,所述s6中構(gòu)建prompt語句包括以下步驟:
15、s61、將步驟s1中的重寫數(shù)據(jù)表采用改編的ddl語句展示;
16、s62、將s61中的改編的ddl語句展示中的每一列內(nèi)容去重后取top-m的列植作為示例寫入到ddl語句中;
17、s63、將步驟s2中匹配的匹配程度最高的相關(guān)值的表信息、列信息帶入到prompt語句中;
18、s64、將步驟s5中匹配的top-s個sql問答語句作為few-shot組裝到prompt語句中,并將prompt語句輸入至大模型,生成sql語句。
19、優(yōu)選的,所述s1中的原始業(yè)務(wù)表包括表名、表注釋、列名和列注釋。
20、優(yōu)選的,所述s2中的索引為bm25索引。
21、優(yōu)選的,所述bm25索引包括詞頻、逆文檔頻率和文檔長度。
22、優(yōu)選的,所述已積累的種子問答語句包括人工整理語句和實際問答階段語句。
23、第二方面,本發(fā)明提供的一種基于大模型的自然語言轉(zhuǎn)sql語句的裝置,采用如下的技術(shù)方案:
24、一種基于大模型的自然語言轉(zhuǎn)sql語句的裝置,包括以下模塊:
25、表治理模塊,用于對原始數(shù)據(jù)表進(jìn)行數(shù)據(jù)治理;對原始數(shù)據(jù)表進(jìn)行重寫,生成重寫數(shù)據(jù)表,并將多表合并為寬表;
26、索引構(gòu)建模塊,用于對數(shù)據(jù)庫中的所有值構(gòu)建索引;
27、篩選模塊,用于基于用戶問題從數(shù)據(jù)庫中選出top-n個相關(guān)值,然后基于最長公共子串匹配算法計算用戶問題與該top-n個相關(guān)值之間的匹配程度,并選出匹配程度最高的相關(guān)值;
28、改寫模塊,用于對用戶問題進(jìn)行改寫;借助領(lǐng)域字典對用戶問題進(jìn)行改寫,將用戶問題中所涉及到的領(lǐng)域內(nèi)的縮寫詞匯、簡寫詞匯以及別稱詞匯改寫為專業(yè)全稱詞匯;當(dāng)用戶問題中涉及到時間內(nèi)容時,將時間內(nèi)容統(tǒng)一轉(zhuǎn)化為unix時間戳;
29、分詞匹配模塊,用于對用戶問題進(jìn)行分詞匹配;將用戶問題與數(shù)據(jù)庫存儲的所有值進(jìn)行匹配;
30、向量匹配模塊,用于將已積累的種子問答語句存入向量數(shù)據(jù)庫中,并搭建向量匹配模型,向量匹配模型為孿生網(wǎng)絡(luò),孿生網(wǎng)絡(luò)包括左右兩個輸入通道,且兩個輸入通道共享同一個bert類模型,對用戶問題中的不同關(guān)鍵詞進(jìn)行權(quán)重賦值,然后將用戶問題與已積累的種子問答語句進(jìn)行匹配,并選出top-s個sql問答語句;
31、sql語句生成模塊,用于優(yōu)化ddl語句構(gòu)建prompt語句,調(diào)用大模型生成sql語句。
32、第三方面,本技術(shù)提供一種電子設(shè)備,采用如下的技術(shù)方案:
33、一種電子設(shè)備,該電子設(shè)備包括:
34、一個或多個處理器;
35、存儲器;
36、其中一個或多個所述應(yīng)用程序被存儲在所述存儲器中并被配置為由一個或多個所述處理器執(zhí)行,一個或多個所述應(yīng)用程序配置用于:執(zhí)行根據(jù)上述任一項所述的一種基于大模型的自然語言轉(zhuǎn)sql語句的方法。
37、第四方面,本技術(shù)提供一種計算機(jī)可讀存儲介質(zhì),采用如下的技術(shù)方案:
38、一種計算機(jī)可讀存儲介質(zhì),其上存儲有計算機(jī)程序,該計算機(jī)程序被處理器執(zhí)行時實現(xiàn)上述任一項所述的一種基于大模型的自然語言轉(zhuǎn)sql語句的方法。
39、綜上所述,本發(fā)明包括以下有益技術(shù)效果:
40、1.本發(fā)明極大的提高了大模型生成的sql語句的質(zhì)量以及大幅度的提升了用戶查詢語句的靈活度與sql語句生成的準(zhǔn)確率。
41、2.本發(fā)明和seq2seq模型相比,seq2seq模型無法充分理解和利用背景知識,而大模型可以基于prompt的背景信息生成對應(yīng)表的sql語句,這是seq2seq模型不能做到的。
42、3.本發(fā)明和預(yù)訓(xùn)練模型相比,預(yù)訓(xùn)練模型輸入長度一般限制為512,而大模型現(xiàn)階段幾乎均可支持至少8k的長度,有些甚至可以支持到128k。prompt的長度擴(kuò)展,意味著現(xiàn)在可以從單表簡單問答場景升級到多表聯(lián)合問答場景。
43、4.本發(fā)明首先設(shè)計了模式匹配方法,可以快速的將用戶輸入的俗語、簡稱等表達(dá)方式進(jìn)行標(biāo)準(zhǔn)化;其次設(shè)計了時間轉(zhuǎn)化方法,通過時間詞槽提取加時間轉(zhuǎn)換2個步驟,將時間詞槽轉(zhuǎn)換為大模型可以理解的時間戳,其通過將這兩種方法相結(jié)合,大幅度的提升了用戶查詢語句的靈活度和sql語句生成的準(zhǔn)確率。
44、5.本發(fā)明通過針對表名、表注釋、列名、列注釋進(jìn)行重寫并對大模型容易產(chǎn)生錯誤的列內(nèi)容進(jìn)行調(diào)整,新增列輔助大模型理解用戶問題;最后,針對多張相關(guān)表,引入表合并的寬表治理方法,消除語義重疊的字段,也精簡prompt的長度,為后續(xù)大模型生成高質(zhì)量sql作為鋪墊。