本發(fā)明屬于人工智能,尤其涉及一種基于llm與向量模型的text2sql智能查詢問(wèn)答方法與系統(tǒng)。
背景技術(shù):
1、隨著各行業(yè)數(shù)字化快速發(fā)展,如何高效、智能地查詢和理解分析日益龐雜的數(shù)據(jù)表成為當(dāng)前亟待解決的問(wèn)題。傳統(tǒng)的人工查詢或基于關(guān)鍵詞的查詢系統(tǒng)已不足以應(yīng)對(duì)高效且復(fù)雜的數(shù)據(jù)檢索需求,早期seq2seq模型也無(wú)法精準(zhǔn)理解語(yǔ)境和建模自然語(yǔ)言問(wèn)句與數(shù)據(jù)庫(kù)之間的隱含邏輯和對(duì)齊關(guān)系。llm(large?language?models,大型語(yǔ)言模型)作為自然語(yǔ)言處理領(lǐng)域的一項(xiàng)突破性技術(shù),其具備的上下文學(xué)習(xí)、邏輯推理和文本生成能力,為解決復(fù)雜的數(shù)據(jù)信息有效利用提供了新的解決思路。有學(xué)者專門研發(fā)或微調(diào)了針對(duì)text2sql領(lǐng)域的llm,如sqlcoder系列、llama-3-sqlcoder-8b等模型,旨在提升text2sql的準(zhǔn)確率。這些模型的輸入以問(wèn)題和數(shù)據(jù)表描述構(gòu)成,但實(shí)際場(chǎng)景中數(shù)據(jù)表眾多,模型的輸入限制導(dǎo)致模型無(wú)法獲悉所有的數(shù)據(jù)表信息,即使擴(kuò)增輸入長(zhǎng)度,模型的輸入噪聲也會(huì)隨之增大。而且,這類一步到位式的方法對(duì)模型的要求極高,實(shí)際應(yīng)用十分困難。
2、現(xiàn)階段對(duì)于text2sql問(wèn)答系統(tǒng)的研究主要集中于提升自然語(yǔ)言轉(zhuǎn)sql語(yǔ)句的準(zhǔn)確率。但自然語(yǔ)言具有高度的復(fù)雜性和歧義性,模型需要在精準(zhǔn)解析用戶意圖的同時(shí)準(zhǔn)確理解數(shù)據(jù)庫(kù)模式,包括表、列含義和它們之間的關(guān)系,以轉(zhuǎn)換為正確的sql語(yǔ)句,往往模型因訓(xùn)練輸入和實(shí)際應(yīng)用數(shù)據(jù)的偏差,很難實(shí)現(xiàn)直接將自然語(yǔ)言轉(zhuǎn)換成查詢語(yǔ)句。此外,還有一些開(kāi)源系統(tǒng),如db-gpt、vanna-ai等,雖然搭建了基于llm的數(shù)據(jù)表的問(wèn)答系統(tǒng),但此類系統(tǒng)欠缺模型本身優(yōu)化,通過(guò)簡(jiǎn)易的鏈路實(shí)現(xiàn),也無(wú)法保障較好的查詢準(zhǔn)確率。
技術(shù)實(shí)現(xiàn)思路
1、為解決上述技術(shù)問(wèn)題,本發(fā)明提供一種基于llm與向量模型的text2sql智能查詢問(wèn)答方法與系統(tǒng),旨在構(gòu)建以llm為核心、以向量模型為輔的交互聯(lián)合模型,通過(guò)多維數(shù)據(jù)表征、任務(wù)解耦、模型多任務(wù)同步微調(diào)和鏈路構(gòu)建,實(shí)現(xiàn)智能text2sql查詢問(wèn)答鏈,包含用戶數(shù)據(jù)表召回、時(shí)間提取、sql生成與執(zhí)行,回答生成等多個(gè)階段的協(xié)作,從而將用戶用自然語(yǔ)言表達(dá)的查詢需求轉(zhuǎn)換為專業(yè)的mysql查詢語(yǔ)句。
2、本發(fā)明提供的技術(shù)方案具體如下:
3、一種基于llm與向量模型的text2sql智能查詢問(wèn)答方法,包括步驟:
4、s1、構(gòu)建向量模型微調(diào)數(shù)據(jù)集,并用該數(shù)據(jù)集對(duì)向量模型進(jìn)行微調(diào),所述向量模型用于將任意輸入文本映射為低維稠密向量;
5、s2、構(gòu)建多任務(wù)的llm微調(diào)數(shù)據(jù)集,并用該數(shù)據(jù)集對(duì)llm進(jìn)行微調(diào),所述llm用于根據(jù)輸入的提示語(yǔ)生成相應(yīng)的輸出內(nèi)容,所述多任務(wù)包括時(shí)間提取任務(wù)、text2sql任務(wù)和回答生成任務(wù);
6、s3、構(gòu)建text2sql問(wèn)答模板向量庫(kù)和數(shù)據(jù)表向量數(shù)據(jù)庫(kù);
7、s4、將用戶的查詢問(wèn)題輸入到微調(diào)后的向量模型進(jìn)行向量化,并根據(jù)向量相似度在構(gòu)建的text2sql問(wèn)答模板向量庫(kù)和數(shù)據(jù)表向量數(shù)據(jù)庫(kù)中分別檢索出與查詢問(wèn)題最相似的text2sql問(wèn)答模板作為參考問(wèn)答模板,以及與查詢問(wèn)題相關(guān)度top3的數(shù)據(jù)表作為參考數(shù)據(jù)表,同時(shí)基于微調(diào)后的llm從查詢問(wèn)題中提取與時(shí)間相關(guān)的表述,稱之為時(shí)間表述;
8、s5、按數(shù)據(jù)表名稱從sql數(shù)據(jù)庫(kù)中索引得到參考數(shù)據(jù)表的描述信息,結(jié)合該描述信息、用戶的查詢問(wèn)題、提取的時(shí)間表述和參考示例構(gòu)建查詢提示語(yǔ),并將該查詢提示語(yǔ)輸入到微調(diào)后的llm中以推理生成相應(yīng)的sql語(yǔ)句,執(zhí)行該sql語(yǔ)句并獲取執(zhí)行結(jié)果;
9、s6、結(jié)合用戶的查詢問(wèn)題、查詢的數(shù)據(jù)表、生成的sql語(yǔ)句和執(zhí)行結(jié)果,構(gòu)建回答提示語(yǔ),并將該回答提示語(yǔ)輸入到微調(diào)后的llm中生成回答內(nèi)容反饋給用戶。
10、進(jìn)一步地,步驟s1中,所述向量模型微調(diào)數(shù)據(jù)集包括若干條樣本數(shù)據(jù)每條樣本數(shù)據(jù)包括查詢問(wèn)題、與查詢問(wèn)題相關(guān)的文本列表以及與查詢問(wèn)題無(wú)關(guān)的文本列表;與查詢問(wèn)題相關(guān)的文本列表稱為正樣本,與查詢問(wèn)題無(wú)關(guān)的文本列表稱為負(fù)樣本,負(fù)樣本中包含的難樣本采用難例挖掘的方法進(jìn)行獲?。簩⑺袠颖纠梦次⒄{(diào)的向量模型進(jìn)行向量化后錄入向量數(shù)據(jù)庫(kù),對(duì)問(wèn)題集中的問(wèn)題分別進(jìn)行向量化后在向量數(shù)據(jù)庫(kù)中進(jìn)行相似樣本召回,召回值超過(guò)設(shè)定閾值的樣本去除正樣本后即為難樣本。
11、進(jìn)一步地,步驟s2中,所述llm微調(diào)數(shù)據(jù)集根據(jù)任務(wù)類型進(jìn)行創(chuàng)建:時(shí)間提取任務(wù)對(duì)應(yīng)的數(shù)據(jù)集來(lái)自于模型生成,形成從查詢問(wèn)題中提取時(shí)間的問(wèn)答對(duì);text2sql任務(wù)對(duì)應(yīng)的數(shù)據(jù)集基于大語(yǔ)言模型進(jìn)行數(shù)據(jù)增強(qiáng);回答生成任務(wù)對(duì)應(yīng)的數(shù)據(jù)集根據(jù)用戶偏好進(jìn)行標(biāo)注和生成;還包括為了緩解模型遺忘問(wèn)題混合的開(kāi)源數(shù)據(jù)集,以及為實(shí)現(xiàn)模型自我認(rèn)知生成的關(guān)于模型認(rèn)知的數(shù)據(jù)集;將所有數(shù)據(jù)集進(jìn)行合并得到llm微調(diào)數(shù)據(jù)集,并根據(jù)各任務(wù)構(gòu)建不同的系統(tǒng)提示語(yǔ)作為不同任務(wù)的區(qū)分,進(jìn)而利用llm微調(diào)數(shù)據(jù)集對(duì)llm模型進(jìn)行微調(diào)。
12、進(jìn)一步地,步驟s2中,首先根據(jù)任務(wù)類型分別進(jìn)行微調(diào)模型的測(cè)評(píng):對(duì)于時(shí)間提取任務(wù)根據(jù)提取結(jié)果與標(biāo)注的一致性計(jì)算得到 acctime,對(duì)于text2sql任務(wù)采用正確匹配率 accm和執(zhí)行準(zhǔn)確率 acce的加權(quán)得到 accsql,對(duì)于回答生成任務(wù)則采用人工打分 accanswer;然后對(duì)各任務(wù)的測(cè)評(píng)結(jié)果進(jìn)行加權(quán)求和得到最終的模型評(píng)分 acc,選用 acc最高的微調(diào)模型。
13、進(jìn)一步地,步驟s3中,從微調(diào)數(shù)據(jù)集和自構(gòu)建數(shù)據(jù)中篩選有代表性的數(shù)據(jù)集,記錄問(wèn)題、數(shù)據(jù)表信息、時(shí)間信息和sql語(yǔ)句,并采用微調(diào)后的向量模型進(jìn)行向量化,以構(gòu)建text2sql問(wèn)答模板向量庫(kù);構(gòu)建數(shù)據(jù)表信息相關(guān)知識(shí)庫(kù),記錄數(shù)據(jù)表名稱、數(shù)據(jù)表列釋義、數(shù)據(jù)表整體描述,并采用微調(diào)后的向量模型進(jìn)行向量化,以構(gòu)建數(shù)據(jù)表向量數(shù)據(jù)庫(kù)。
14、進(jìn)一步地,步驟s5中,對(duì)于由微調(diào)后的llm推理生成的字符串文本,以select作為關(guān)鍵詞,進(jìn)行sql語(yǔ)句提取;sql語(yǔ)句提取后,連接sql數(shù)據(jù)庫(kù),執(zhí)行sql語(yǔ)句進(jìn)行sql查詢,并將返回的執(zhí)行結(jié)果解析成列表形式。
15、進(jìn)一步地,步驟s5中,若sql語(yǔ)句執(zhí)行錯(cuò)誤,則將當(dāng)前的sql語(yǔ)句和執(zhí)行錯(cuò)誤作為參考信息,重新構(gòu)建提示語(yǔ)輸入到微調(diào)后的llm進(jìn)行sql語(yǔ)句生成,sql語(yǔ)句生成后再次執(zhí)行該sql語(yǔ)句,若仍然執(zhí)行錯(cuò)誤,將錯(cuò)誤信息作為sql語(yǔ)句執(zhí)行結(jié)果返回。
16、進(jìn)一步地,步驟s6中,若無(wú)法生成sql語(yǔ)句說(shuō)明用戶的查詢問(wèn)題無(wú)需sql查詢,只需要llm根據(jù)查詢問(wèn)題進(jìn)行回答;若生成了sql語(yǔ)句則執(zhí)行sql查詢,當(dāng)sql語(yǔ)句執(zhí)行錯(cuò)誤且是首次錯(cuò)誤,則重新進(jìn)行生成sql語(yǔ)句,若非首次則需要告知用戶sql生成失敗,并提供可行建議;當(dāng)sql語(yǔ)句正確執(zhí)行時(shí),判斷執(zhí)行結(jié)果是否為空,若為空則需要結(jié)合用戶問(wèn)題和sql語(yǔ)句告知用戶做了哪些查詢但數(shù)據(jù)表中沒(méi)有相關(guān)數(shù)據(jù),若非空則需要進(jìn)一步判斷結(jié)果的行數(shù)和列數(shù)是否超過(guò)閾值,超過(guò)閾值的數(shù)據(jù)無(wú)法進(jìn)行完整展示,需告知用戶實(shí)際查詢到的數(shù)據(jù)量,未超過(guò)閾值的,將用戶的查詢問(wèn)題、sql語(yǔ)句、sql語(yǔ)句執(zhí)行結(jié)果和數(shù)據(jù)表信息構(gòu)建成提示語(yǔ),輸入至微調(diào)后的llm中得到最終的回答。
17、進(jìn)一步地,還包括構(gòu)建web前端服務(wù):通過(guò)任務(wù)調(diào)度完成步驟s4~s6中的流程,并由前端將流程子任務(wù)結(jié)果可視化,用戶通過(guò)前端校驗(yàn)各流程子任務(wù)結(jié)果的準(zhǔn)確性;子任務(wù)結(jié)果支持編輯,子任務(wù)結(jié)果編輯后將重新執(zhí)行后續(xù)流程。
18、一種基于上述方法的text2sql智能查詢問(wèn)答系統(tǒng),包括:
19、向量模型模塊,包括向量模型數(shù)據(jù)集構(gòu)建模塊和向量模型微調(diào)模塊,所述向量模型數(shù)據(jù)集構(gòu)建模塊用于構(gòu)建向量模型數(shù)據(jù)集,所述向量模型微調(diào)模塊用于根據(jù)向量模型數(shù)據(jù)集對(duì)向量模型進(jìn)行微調(diào)訓(xùn)練;
20、llm模塊,包括多任務(wù)數(shù)據(jù)集構(gòu)建模塊和llm模型微調(diào)模塊,所述多任務(wù)數(shù)據(jù)集構(gòu)建模塊用于構(gòu)建適用于llm的多任務(wù)數(shù)據(jù)集,所述llm模型微調(diào)模塊用于根據(jù)多任務(wù)數(shù)據(jù)集對(duì)llm進(jìn)行微調(diào)訓(xùn)練;
21、向量數(shù)據(jù)庫(kù)構(gòu)建模塊,包括text2sql問(wèn)答模板向量庫(kù)和數(shù)據(jù)表向量數(shù)據(jù)庫(kù);
22、意圖構(gòu)建模塊,包括查詢問(wèn)題向量化模塊、檢索匹配模塊和時(shí)間表述提取模塊,所述查詢問(wèn)題向量化模塊用于將用戶的查詢問(wèn)題輸入到微調(diào)后的向量模型進(jìn)行向量化;所述檢索匹配模塊根據(jù)向量相似度在構(gòu)建的text2sql問(wèn)答模板向量庫(kù)和數(shù)據(jù)表向量數(shù)據(jù)庫(kù)中分別檢索出與查詢問(wèn)題最相似的text2sql問(wèn)答模板作為參考問(wèn)答模板,以及與查詢問(wèn)題相關(guān)度top3的數(shù)據(jù)表作為參考數(shù)據(jù)表;所述時(shí)間表述提取模塊用于將查詢問(wèn)題輸入到微調(diào)后的llm中提取時(shí)間表述;所述查詢提示語(yǔ)構(gòu)建模塊用于從sql數(shù)據(jù)庫(kù)中索引得到參考數(shù)據(jù)表的描述信息,并結(jié)合該描述信息、用戶的查詢問(wèn)題、提取的時(shí)間表述和參考示例構(gòu)建查詢提示語(yǔ);
23、sql語(yǔ)句生成執(zhí)行與反饋模塊,用于將查詢提示語(yǔ)輸入到微調(diào)后的llm中以推理生成相應(yīng)的sql語(yǔ)句,還用于執(zhí)行該sql語(yǔ)句獲取執(zhí)行結(jié)果,并結(jié)合用戶的查詢問(wèn)題、查詢的數(shù)據(jù)表、生成的sql語(yǔ)句和執(zhí)行結(jié)果,構(gòu)建回答提示語(yǔ);還用于將該回答提示語(yǔ)輸入到微調(diào)后的llm中生成回答內(nèi)容反饋給用戶。
24、相比于現(xiàn)有技術(shù),本發(fā)明至少具備以下有益效果:
25、(1)數(shù)據(jù)多維度刻畫,以高質(zhì)數(shù)據(jù),結(jié)合困難樣本挖掘微調(diào)向量模型,提升了向量模用于數(shù)據(jù)表定位和最相關(guān)few-shot召回的準(zhǔn)確率;
26、(2)通過(guò)任務(wù)解耦設(shè)計(jì)和鏈路構(gòu)建,將復(fù)雜的text2sql任務(wù)拆解為多個(gè)相對(duì)較簡(jiǎn)單的任務(wù),通過(guò)鏈路構(gòu)建,優(yōu)化任務(wù)節(jié)點(diǎn)調(diào)度并針對(duì)模型生成異常進(jìn)行容錯(cuò)處理;
27、(3)針對(duì)llm的多任務(wù)同步微調(diào),對(duì)微調(diào)數(shù)據(jù)集進(jìn)行增強(qiáng)優(yōu)化,提升模型在微調(diào)過(guò)程的指令學(xué)習(xí)的知識(shí)攝取效果,并此采用比lora更逼近全量微調(diào)效果的dora微調(diào),在qwen2-72b-chat模型上進(jìn)行微調(diào),提升模型在各任務(wù)上的表現(xiàn);
28、(4)根據(jù)查詢數(shù)據(jù)表、mysql語(yǔ)句和查詢結(jié)果的不同類型,分別設(shè)計(jì)提示語(yǔ)模板,將查詢結(jié)果轉(zhuǎn)換為自然語(yǔ)言,實(shí)現(xiàn)用戶自然語(yǔ)言的問(wèn)題得到更精準(zhǔn)可控的自然語(yǔ)言的回答,同時(shí),為輔助用戶檢驗(yàn),將各子任務(wù)結(jié)果在前端展示,讓子任務(wù)結(jié)果可編輯、最終結(jié)果可溯源。