騰訊基于 LLM 的智能數(shù)據(jù)分析平臺(tái) OlaChat 的落地實(shí)踐
在當(dāng)今快速發(fā)展的數(shù)據(jù)分析領(lǐng)域,智能分析平臺(tái)正經(jīng)歷從傳統(tǒng) BI 到敏捷分析,再到智能分析的轉(zhuǎn)變。隨著移動(dòng)互聯(lián)網(wǎng)的興起和大語(yǔ)言模型的出現(xiàn),數(shù)據(jù)分析變得愈加普及,用戶可以通過自然語(yǔ)言與系統(tǒng)進(jìn)行互動(dòng),獲取所需數(shù)據(jù)。然而,即使在敏捷分析階段,仍然存在一定的學(xué)習(xí)成本。大語(yǔ)言模型的引入為數(shù)據(jù)分析帶來了新的機(jī)遇,它不僅提升了語(yǔ)言理解和生成能力,還使得邏輯推理與工具使用變得更加高效。通過對(duì)用戶自然語(yǔ)言指令的理解和轉(zhuǎn)化,智能分析平臺(tái)能夠?qū)崿F(xiàn)更直觀的數(shù)據(jù)查詢和分析過程,為用戶提供更為便捷的服務(wù)。本文將分享騰訊基于 LLM 的智能數(shù)據(jù)分析平臺(tái) OlaChat 的落地實(shí)踐。
一、從傳統(tǒng) BI 到智能 BI
隨著大語(yǔ)言模型(Large Language Models, LLMs)的快速發(fā)展,智能分析在商業(yè)智能(Business Intelligence, BI)領(lǐng)域的影響日益顯著。本節(jié)將探討從傳統(tǒng) BI 到智能 BI 的過渡過程,分析這一轉(zhuǎn)型所帶來的新機(jī)遇與挑戰(zhàn)。
1. 傳統(tǒng) BI 的局限性
傳統(tǒng)的商業(yè)智能體系通常是基于一種自上而下的模式,業(yè)務(wù)負(fù)責(zé)人提出需求,開發(fā)人員進(jìn)行數(shù)據(jù)提取和分析,最終經(jīng)過一段時(shí)間的開發(fā)后,將結(jié)果反饋給業(yè)務(wù)方。這種流程不僅效率低下,還存在較大的溝通成本,導(dǎo)致決策的延遲。用戶常常需要等待一周甚至更長(zhǎng)的時(shí)間,才能獲得所需的數(shù)據(jù)分析結(jié)果。
2. 移動(dòng)互聯(lián)網(wǎng)時(shí)代的敏捷分析
隨著移動(dòng)互聯(lián)網(wǎng)的崛起,數(shù)據(jù)的豐富性和復(fù)雜性不斷增加,市場(chǎng)對(duì)數(shù)據(jù)分析的需求也在發(fā)生變化。敏捷分析應(yīng)運(yùn)而生,它旨在使更多的用戶能夠方便地獲取數(shù)據(jù)并進(jìn)行自助分析。通過簡(jiǎn)單的拖拽操作,用戶可以輕松進(jìn)行數(shù)據(jù)探索。然而,調(diào)研顯示,即便是這種簡(jiǎn)單的操作,對(duì)某些用戶來說依然存在較高的學(xué)習(xí)成本。比如,用戶在進(jìn)行環(huán)比計(jì)算或其他復(fù)雜操作時(shí),仍需掌握相關(guān)功能的使用方法,存在一定的門檻。
3. 智能 BI 的初步探索
到了 2019 年,智能分析的構(gòu)想開始萌芽。雖然大語(yǔ)言模型尚未全面普及,但一些在自然語(yǔ)言處理領(lǐng)域表現(xiàn)良好的模型已經(jīng)出現(xiàn)。這一時(shí)期,業(yè)界開始關(guān)注如何讓更多的用戶能夠輕松進(jìn)行數(shù)據(jù)分析,目標(biāo)是將每個(gè)人都轉(zhuǎn)變?yōu)椤皵?shù)據(jù)分析師”。智能分析的概念逐步形成,致力于簡(jiǎn)化數(shù)據(jù)分析流程,降低用戶的技術(shù)門檻。
現(xiàn)如今,隨著大語(yǔ)言模型的普及,智能BI 迎來了新的發(fā)展機(jī)遇。大語(yǔ)言模型不僅能夠處理復(fù)雜的數(shù)據(jù)查詢,還能通過自然語(yǔ)言與用戶進(jìn)行交互,使得數(shù)據(jù)分析變得更加直觀和人性化。用戶只需用自然語(yǔ)言描述他們的需求,系統(tǒng)便能自動(dòng)生成相應(yīng)的分析結(jié)果,這大大提高了分析的效率和準(zhǔn)確性。
二、LLM 時(shí)代智能 BI 的新可能
大語(yǔ)言模型(Large Language Models, LLMs)的發(fā)展歷程展現(xiàn)了自然語(yǔ)言處理(Natural Language Processing, NLP)領(lǐng)域的顯著進(jìn)步。接下來將梳理大語(yǔ)言模型的發(fā)展脈絡(luò),并探討其對(duì)數(shù)據(jù)智能分析所帶來的新機(jī)遇。
1. 大語(yǔ)言模型的發(fā)展脈絡(luò)
(1)初期階段:基于概率的語(yǔ)言模型
自然語(yǔ)言處理的早期階段主要依賴于概率模型,如條件隨機(jī)場(chǎng)(Conditional Random Fields, CRF)和馬爾可夫模型。這些模型基于歷史數(shù)據(jù),通過詞袋模型(N-gram Model)來計(jì)算詞語(yǔ)出現(xiàn)的概率。此時(shí),語(yǔ)言模型的能力相對(duì)有限,主要側(cè)重于基于歷史詞語(yǔ)的概率預(yù)測(cè)。
(2)神經(jīng)網(wǎng)絡(luò)時(shí)代的崛起
2013 年,谷歌發(fā)布了一項(xiàng)具有里程碑意義的方法 word2vec,標(biāo)志著基于神經(jīng)網(wǎng)絡(luò)的語(yǔ)言模型時(shí)代的到來。在這一階段,長(zhǎng)短期記憶網(wǎng)絡(luò)(Long Short-Term Memory, LSTM)等模型開始得到廣泛應(yīng)用。神經(jīng)網(wǎng)絡(luò)的引入大大提高了語(yǔ)言模型的性能,增強(qiáng)了其對(duì)上下文的理解能力。
(3)Transformer 模型的興起
2017 年,Google 發(fā)布了 Transformer 架構(gòu),由此在 2018 年前后出現(xiàn)了一系列基于此的模型,如 BERT、GPT1/2 等。相較于之前的模型,BERT 和 GPT1/2 模型的參數(shù)量顯著增加,達(dá)到千萬(wàn)、數(shù)億規(guī)模。這些模型通過在大量語(yǔ)料上進(jìn)行統(tǒng)一訓(xùn)練,可以快速適應(yīng)不同任務(wù),展現(xiàn)出強(qiáng)大的語(yǔ)言理解能力。
(4)當(dāng)前的萬(wàn)億參數(shù)時(shí)代
隨著 GPT-3 和后續(xù)版本的推出,語(yǔ)言模型的參數(shù)量達(dá)到了千億、萬(wàn)億級(jí)別。這使得一個(gè)模型能夠同時(shí)在多個(gè)任務(wù)上達(dá)到較好的效果,降低了對(duì)多個(gè)模型的依賴。在這一階段,語(yǔ)言模型在文本生成、理解和邏輯推理等方面的能力都得到了極大的提升。
2. 大語(yǔ)言模型對(duì)數(shù)據(jù)智能分析的影響
大語(yǔ)言模型為數(shù)據(jù)智能分析帶來了以下四個(gè)方面的改進(jìn):
- 語(yǔ)言能力:大語(yǔ)言模型在語(yǔ)言理解和生成方面的能力非常強(qiáng)大。它能夠有效解讀文本和表格數(shù)據(jù)背后的含義,使得數(shù)據(jù)分析變得更加直觀、易于理解。通過自然語(yǔ)言交互,用戶可以更輕松地進(jìn)行數(shù)據(jù)分析,而不需要深入掌握復(fù)雜的工具和技術(shù)。
- 工具使用:大語(yǔ)言模型能夠?qū)⒂脩舻闹噶钷D(zhuǎn)化為工具調(diào)用或代碼生成。例如,用戶可以通過簡(jiǎn)單的自然語(yǔ)言請(qǐng)求,生成相應(yīng)的 API 調(diào)用或代碼。這種能力顯著提高了數(shù)據(jù)分析的效率,降低了技術(shù)門檻。
- 邏輯推理能力:盡管大語(yǔ)言模型的邏輯推理能力相對(duì)有限,但它在模式識(shí)別、趨勢(shì)分析和關(guān)聯(lián)性發(fā)現(xiàn)方面仍然表現(xiàn)出色。這為數(shù)據(jù)智能分析提供了有力支持,使得用戶能夠從數(shù)據(jù)中提取有價(jià)值的洞察。
- 學(xué)習(xí)能力:在早期,訓(xùn)練一個(gè)模型以適應(yīng)特定任務(wù)通常需要大量的數(shù)據(jù)。然而,得益于大語(yǔ)言模型的“上下文學(xué)習(xí)”(In-context Learning)能力,用戶不需要進(jìn)行模型訓(xùn)練也能在一些任務(wù)上取得不錯(cuò)的效果。即使需要微調(diào),用戶也可以通過較少的數(shù)據(jù)(僅需幾千條)就能調(diào)整模型以滿足特定需求,這種適應(yīng)性使得大語(yǔ)言模型在各類任務(wù)中的應(yīng)用變得更加靈活。
基于騰訊PCG 大數(shù)據(jù)平臺(tái)部資產(chǎn)管理平臺(tái)“Ola”和數(shù)據(jù)分析平臺(tái)“燈塔”豐富的元數(shù)據(jù)和用戶行為日志,結(jié)合大語(yǔ)言模型的能力,我們構(gòu)建了 OlaChat 這一智能數(shù)據(jù)分析平臺(tái)。OlaChat 能夠提供高效和智能的數(shù)據(jù)分析服務(wù),滿足用戶問數(shù)、人群洞察、NL2SQL 等需求,有效降低了查數(shù)、取數(shù)、用數(shù)的門檻。
接下來將詳細(xì)介紹 OlaChat 平臺(tái)落地實(shí)踐。
三、騰訊 OlaChat 智能 BI 平臺(tái)落地實(shí)踐
OlaChat 智能數(shù)據(jù)分析平臺(tái)主要目標(biāo)是通過自然語(yǔ)言交互,為用戶提供流暢的數(shù)據(jù)分析體驗(yàn)。系統(tǒng)的核心模塊包括多任務(wù)對(duì)話系統(tǒng)、任務(wù)編排引擎、眾多的 AI 工具以及底層的公共服務(wù)能力。以下是 OlaChat 的關(guān)鍵功能與技術(shù)架構(gòu)的深入解析。
1. OlaChat 關(guān)鍵能力
- 多輪對(duì)話系統(tǒng):用戶與 OlaChat 交互的第一入口是一個(gè)多任務(wù)對(duì)話系統(tǒng),類似于智能助手,用戶通過自然語(yǔ)言與系統(tǒng)進(jìn)行交互,系統(tǒng)需要具備理解用戶意圖并執(zhí)行相關(guān)任務(wù)的能力。
- 任務(wù)編排與執(zhí)行:系統(tǒng)理解用戶意圖后,規(guī)劃出執(zhí)行任務(wù)所需的步驟,并按順序調(diào)用相關(guān)工具和數(shù)據(jù)。
- AI+BI 工具箱:包括 Query 改寫、text2SQL、指標(biāo)分析等工具,這些工具通過不同的組合可以實(shí)現(xiàn)不同的能力,從而解決不同的任務(wù)。
- 公共服務(wù):底層由一些公共服務(wù)來支撐相關(guān)能力,主要包括三個(gè)部分:
統(tǒng)一 LLM 調(diào)度(包括騰訊的混元模型,以及其他一些微調(diào)過的模型),系統(tǒng)建立了統(tǒng)一的模型調(diào)度機(jī)制,根據(jù)不同任務(wù)自動(dòng)選擇合適的語(yǔ)言模型,并進(jìn)行負(fù)載均衡和模型加速,針對(duì)不同模型輸入輸出的格式差異,系統(tǒng)通過公共服務(wù)屏蔽這些差異,提供一致的交互接口。
知識(shí)檢索增強(qiáng):提供了檢索元數(shù)據(jù)的功能。
標(biāo)注系統(tǒng):在數(shù)據(jù)分析過程中需要處理大量與特定領(lǐng)域相關(guān)的數(shù)據(jù),因此引入了標(biāo)注系統(tǒng),可以對(duì)自定義數(shù)據(jù)和指標(biāo)進(jìn)行標(biāo)注,用于增強(qiáng)大語(yǔ)言模型的領(lǐng)域理解能力。
接下來將具體介紹其中一些能力。
2. 多任務(wù)對(duì)話系統(tǒng)
多任務(wù)對(duì)話系統(tǒng)提供的基礎(chǔ)功能為拒絕/澄清,以及引導(dǎo)/推薦。
系統(tǒng)具備的關(guān)鍵能力包括:
- 上下文理解:持續(xù)跟蹤上下文,基于用戶的歷史對(duì)話,準(zhǔn)確理解用戶的需求,補(bǔ)充缺失信息。
- 意圖識(shí)別:基于上下文理解,進(jìn)行意圖識(shí)別,將用戶需求傳到對(duì)應(yīng)的 Agent。
- 自然語(yǔ)言理解模塊(NLU):將用戶文本消息轉(zhuǎn)化為可以被機(jī)器理解的語(yǔ)義標(biāo)簽。
- 對(duì)話狀態(tài)跟蹤模塊(DST):在對(duì)話中的每一輪基于對(duì)話歷史維護(hù)最新的對(duì)話狀態(tài),通常表示為一組槽位-槽值對(duì)。
- 對(duì)話策略模塊(DPL):基于當(dāng)前的對(duì)話狀態(tài),決定對(duì)話系統(tǒng)的下一步動(dòng)作。
- 自然語(yǔ)言生成模塊(NLG):將對(duì)話策略模塊決定的系統(tǒng)對(duì)話行為轉(zhuǎn)換為人類語(yǔ)音,回復(fù)給用戶。
3. 元數(shù)據(jù)檢索增強(qiáng)
在數(shù)據(jù)分析中,元數(shù)據(jù)的檢索是一個(gè)關(guān)鍵步驟,尤其當(dāng)數(shù)據(jù)呈現(xiàn)結(jié)構(gòu)化形式時(shí),傳統(tǒng)的基于非結(jié)構(gòu)化自然語(yǔ)言的檢索方法無(wú)法完全適用。騰訊的智能分析平臺(tái)通過增強(qiáng)元數(shù)據(jù)檢索能力,解決了結(jié)構(gòu)化數(shù)據(jù)中的多層次、復(fù)雜性問題,為用戶提供更精準(zhǔn)的分析支持。
結(jié)構(gòu)化數(shù)據(jù),比如表和指標(biāo),每個(gè)表有表名、字段,指標(biāo)下有維度(如年齡、性別等),這些數(shù)據(jù)有層次性和明確的結(jié)構(gòu)。這種層次結(jié)構(gòu)不同于非結(jié)構(gòu)化文本,不能簡(jiǎn)單地通過自然語(yǔ)言的檢索增強(qiáng)方法來處理。傳統(tǒng)的自然語(yǔ)言檢索主要基于 embedding(嵌入向量)技術(shù),將文本分塊后,通過相似度匹配來檢索相關(guān)信息。然而,結(jié)構(gòu)化數(shù)據(jù)并不遵循自然語(yǔ)言的邏輯,導(dǎo)致傳統(tǒng)方法難以直接應(yīng)用。
通用RAG 在解決元數(shù)據(jù)檢索增強(qiáng)任務(wù)時(shí)存在一定的不適用性,主要因?yàn)椋?/span>
- 元數(shù)據(jù)是按特定的結(jié)構(gòu)、層次組織的。
- 指標(biāo)、字段、維度的組合沒有固定的前后順序或自然語(yǔ)言中的常見規(guī)律。如自然語(yǔ)言中“中國(guó)的首都是“,后面跟著的大概率會(huì)是“北京”,然而元數(shù)據(jù)并不符合語(yǔ)言模型的基本假設(shè)。
- 特定修飾詞很重要,某些特定的字段或維度往往具有關(guān)鍵性意義,比如“有效播放次數(shù)”和“付費(fèi)播放次數(shù)”表示的是截然不同的指標(biāo),這種差異無(wú)法通過傳統(tǒng)的檢索方式精確捕捉。
- 字段名可以很短,這就要求檢索方法能準(zhǔn)確地捕獲用戶問題中的關(guān)鍵信息。
我們有兩種方案,分別從兩個(gè)角度來解決元數(shù)據(jù)檢索增強(qiáng)的問題。
第一種方案是 FlattenedRAG,在已有元數(shù)據(jù)基礎(chǔ)上進(jìn)行組合,將結(jié)構(gòu)化的元數(shù)據(jù)變?yōu)榉墙Y(jié)構(gòu)化的自然語(yǔ)言,當(dāng)接收到用戶問題后,進(jìn)行檢索、排序,找到與知識(shí)庫(kù)中一致的數(shù)據(jù)。
第二種方案是 StructuredRAG,充分利用好元數(shù)據(jù)的結(jié)構(gòu)化信息,優(yōu)先檢索出最核心的元素,再圍繞這些核心元素進(jìn)行二次檢索,找到所需的數(shù)據(jù)。
FlattenedRAG 的具體流程如下:
元數(shù)據(jù)打平:將數(shù)據(jù)表、字段、指標(biāo)等信息組合成類似于問答式的自然語(yǔ)言。例如,指標(biāo)為“活躍用戶數(shù)”、維度為“男性”的查詢組合可能會(huì)被打平為:“騰訊視頻男性活躍用戶數(shù)有多少?”。
基于知識(shí)庫(kù)進(jìn)行檢索:當(dāng)用戶提出問題后,系統(tǒng)會(huì)從打平后的知識(shí)庫(kù)中進(jìn)行檢索,找出與用戶問題相似的文本。
排序和匹配:系統(tǒng)通過預(yù)訓(xùn)練的分類模型對(duì)檢索結(jié)果進(jìn)行排序,最終選擇出最相關(guān)的答案返回給用戶。
這種方法的核心在于將結(jié)構(gòu)化信息轉(zhuǎn)化為非結(jié)構(gòu)化文本,從而使得傳統(tǒng)的自然語(yǔ)言檢索技術(shù)可以直接應(yīng)用。
StructuredRAG 的主要流程如下:
核心元素的檢索:當(dāng)用戶提出問題時(shí),系統(tǒng)首先會(huì)利用結(jié)構(gòu)化信息的層次性,優(yōu)先檢索出最重要的元素,如指標(biāo)、維度等。例如,在用戶詢問“騰訊視頻的男性活躍用戶有多少”時(shí),系統(tǒng)會(huì)首先確定“活躍用戶數(shù)”這個(gè)關(guān)鍵指標(biāo)。
圍繞核心元素的進(jìn)一步檢索:在找到核心元素后,系統(tǒng)會(huì)進(jìn)行二次檢索,匹配用戶的問題和核心元素的其他相關(guān)信息,比如在上面的例子中會(huì)二次檢索和“男性”相似的多個(gè)維度。
返回結(jié)果:系統(tǒng)根據(jù)核心元素的檢索結(jié)果,再結(jié)合進(jìn)一步的二次搜索,最后經(jīng)過一次排序之后給出最符合用戶問題的答案。
兩種方法各有優(yōu)缺點(diǎn):
- 打平方法:通過將結(jié)構(gòu)化數(shù)據(jù)打平為非結(jié)構(gòu)化文本,簡(jiǎn)化了復(fù)雜的數(shù)據(jù)結(jié)構(gòu),方便了自然語(yǔ)言處理的應(yīng)用。此方法的優(yōu)勢(shì)在于能夠直接利用已有的自然語(yǔ)言檢索技術(shù),操作簡(jiǎn)便,但是如果指標(biāo)和維度的數(shù)量非常多時(shí)該方法可能會(huì)面臨組合爆炸的問題。
- 結(jié)構(gòu)化方法:充分利用了元數(shù)據(jù)的層次結(jié)構(gòu)信息,能夠在保持?jǐn)?shù)據(jù)層次關(guān)系的同時(shí)提高檢索的準(zhǔn)確性。此方法在處理非常復(fù)雜且層次分明的數(shù)據(jù)時(shí)更加有效,尤其是包含多個(gè)維度的長(zhǎng)尾問題。
在實(shí)際應(yīng)用中,這兩種方案各有其適用場(chǎng)景。例如,當(dāng)指標(biāo)和維度的數(shù)量相對(duì)有限時(shí),打平方法可能更為高效;而在指標(biāo)和維度組合較多的場(chǎng)景下,結(jié)構(gòu)化方法則能夠提供更自由的檢索方式。這兩種方案的結(jié)合,使得系統(tǒng)能夠在不同場(chǎng)景下靈活應(yīng)對(duì)用戶提出的各種數(shù)據(jù)分析需求。
在泛數(shù)據(jù)分析架構(gòu)中,底層是指標(biāo)、庫(kù)表等元數(shù)據(jù),以及畫像和歷史問答集;這些數(shù)據(jù)進(jìn)入標(biāo)注系統(tǒng)后,會(huì)經(jīng)過各種標(biāo)注處理;之后是各種檢索,包括關(guān)鍵詞檢索、語(yǔ)義檢索等;檢索后進(jìn)行知識(shí)精簡(jiǎn),繼而為上層的指標(biāo)分析、人群圈選等各種應(yīng)用提供支持。知識(shí)精簡(jiǎn)和知識(shí)檢索就是由前面介紹的元數(shù)據(jù) RAG 實(shí)現(xiàn)的。
4. Text2SQL
Text2SQL 真實(shí)業(yè)務(wù)場(chǎng)景下存在著諸多問題:
- 首先,數(shù)據(jù)隱私與安全始終是不可逾越的紅線。例如,一些知名模型在使用協(xié)議中規(guī)定,企業(yè)如果月活躍用戶數(shù)超過一定數(shù)量,就必須申請(qǐng)使用權(quán)限。這對(duì)于騰訊等大企業(yè)而言,意味著許多閉源和開源模型都不可用,因此必須開發(fā)自有模型以滿足業(yè)務(wù)需求。
- 盡管大型語(yǔ)言模型在技術(shù)上表現(xiàn)強(qiáng)大,但在業(yè)務(wù)理解方面卻存在顯著不足。許多企業(yè)的數(shù)據(jù)質(zhì)量較低且結(jié)構(gòu)混亂,模型很難準(zhǔn)確理解。此外,模型常常缺乏領(lǐng)域知識(shí),可能會(huì)產(chǎn)生“幻覺”。
- 另外,模型的穩(wěn)定性和準(zhǔn)確率也存在不足。真實(shí)情況下用戶問法非常個(gè)性化,現(xiàn)有方案的抗噪聲能力不足(BIRD~70%),導(dǎo)致穩(wěn)定性和準(zhǔn)確率較差。
- 企業(yè)在實(shí)際應(yīng)用中常常難以獲取到高質(zhì)量數(shù)據(jù),尤其是冷啟動(dòng)階段,高質(zhì)量的 query 到 SQL 的數(shù)據(jù)非常匱乏。
基于上述問題,我們最終采取了微調(diào)大模型+Agent 的方案來實(shí)現(xiàn) Text2SQL。
高質(zhì)量的數(shù)據(jù)對(duì)于訓(xùn)練高效的模型至關(guān)重要。然而,開源數(shù)據(jù)集大多面向英文場(chǎng)景,即使翻譯成中文,結(jié)構(gòu)也較為簡(jiǎn)單,通常為單表,字段在 10 個(gè)以下,而實(shí)際業(yè)務(wù)場(chǎng)景中可能有上百個(gè)字段。這使得大型模型在處理這些數(shù)據(jù)時(shí)容易產(chǎn)生誤解或無(wú)法準(zhǔn)確解讀業(yè)務(wù)中的復(fù)雜邏輯。此外,開源數(shù)據(jù)集在操作符的使用上也比較有限,常用的操作符較少,這進(jìn)一步降低了模型在復(fù)雜任務(wù)上的表現(xiàn)。
在我們內(nèi)部,已經(jīng)建立了一套數(shù)據(jù)生成的邏輯流程。該流程主要包括以下幾個(gè)步驟:
數(shù)據(jù)收集與脫敏:首先,我們會(huì)基于收集到的騰訊內(nèi)部數(shù)據(jù),進(jìn)行必要的脫敏處理,以確保用戶隱私和數(shù)據(jù)安全。
隨機(jī)選取數(shù)據(jù):在經(jīng)過脫敏處理后,我們會(huì)從數(shù)據(jù)集中隨機(jī)選擇一些樣本,并將這些樣本拼接成類似的提示(prompt),然后輸入到大型模型中。
數(shù)據(jù)增強(qiáng):利用這些樣本,我們會(huì)使用數(shù)據(jù)增強(qiáng)的方法,讓模型基于已有樣本生成新的樣本,通過這種循環(huán)不斷豐富數(shù)據(jù)集。
在數(shù)據(jù)增強(qiáng)過程中,有兩個(gè)關(guān)鍵點(diǎn)需要特別關(guān)注,即準(zhǔn)確性和多樣性。
- 準(zhǔn)確性:我們必須確保大型模型生成的 SQL 是準(zhǔn)確的。如果模型生成的 SQL 錯(cuò)誤并被加入訓(xùn)練集,就會(huì)導(dǎo)致模型性能下降。因此,我們?cè)O(shè)計(jì)了一套代碼邏輯來檢查生成的 SQL 是否正確,首先這個(gè) SQL 要能夠執(zhí)行,并且與用戶輸入的查詢語(yǔ)義相匹配,為此我們使用一個(gè)專門的模型來驗(yàn)證生成查詢的語(yǔ)義正確性。
- 多樣性:我們還需要確保數(shù)據(jù)的多樣性,避免模型生成大量相似的數(shù)據(jù)。為此,我們采用了一些相似性檢測(cè)的方法,剔除過于相似的樣本。此外,我們會(huì)對(duì)生成的數(shù)據(jù)進(jìn)行分類,確保各類別之間的平衡。如果某個(gè)類別的數(shù)據(jù)過多,我們會(huì)減少該類別的生成;而對(duì)于數(shù)據(jù)較少的類別,則會(huì)重點(diǎn)生成更多樣本,以提升數(shù)據(jù)集的整體準(zhǔn)確性和多樣性。
在數(shù)據(jù)生成過程中,我們將樣本劃分為不同的難度等級(jí),包括簡(jiǎn)單(easy)、中等(medium)、困難(hard)和特別困難(extra hard)。我們發(fā)現(xiàn),開源數(shù)據(jù)集在困難和極度困難的數(shù)據(jù)生成上分布不均。因此,我們特別重點(diǎn)生成這些困難類型的數(shù)據(jù),以彌補(bǔ)開源數(shù)據(jù)集的不足。
經(jīng)過這樣的數(shù)據(jù)增強(qiáng)與補(bǔ)充后,我們對(duì)模型的表現(xiàn)進(jìn)行了評(píng)估。在真實(shí)的業(yè)務(wù)數(shù)據(jù)集上,模型的準(zhǔn)確率通常較低,例如,GPT-4 的準(zhǔn)確率為 32%,而我們自己的模型可以達(dá)到 52%。除此之外,我們訓(xùn)練的模型還能實(shí)現(xiàn)對(duì)復(fù)雜問法、復(fù)雜 Schema 和復(fù)雜計(jì)算邏輯的支持,具有較好的穩(wěn)定性。
我們還發(fā)現(xiàn),單獨(dú)使用一個(gè)模型很難達(dá)到理想效果,原因如下:
- 數(shù)據(jù)集覆蓋不全:業(yè)務(wù)中的各種查詢可能非常復(fù)雜,而我們很難覆蓋所有同學(xué)所編寫的查詢樣本。
- 語(yǔ)言多樣性與歧義:用戶的語(yǔ)言表達(dá)多種多樣,可能存在歧義和同義詞,使得生成的查詢難以滿足所有需求。
- 噪音與信息干擾:在數(shù)據(jù)集中,存在一些噪音數(shù)據(jù),這些信息會(huì)干擾模型的訓(xùn)練效果。
在我們的系統(tǒng)中,除了依賴于大型模型外,我們還開發(fā)了一套智能體流程,旨在輔助大模型生成更高質(zhì)量的 SQL。這個(gè)智能體的流程能夠針對(duì)大模型在理解力、穩(wěn)定性和準(zhǔn)確率等方面的不足,實(shí)施相應(yīng)的策略,以解決這些問題。
- 減少冗余信息,引入輔助信息
我們認(rèn)識(shí)到,將一張表的全部字段都傳遞給大型模型以供其理解并不現(xiàn)實(shí)。為了提高模型的準(zhǔn)確性,我們會(huì)首先進(jìn)行字段的精選,過濾掉冗余字段,留下更相關(guān)的字段,從而使得模型在理解時(shí)更加集中和高效。
- 適當(dāng)融入傳統(tǒng)模型/策略
用戶的問題表述往往較為隨意,為了提升準(zhǔn)確性,我們可以通過模型對(duì)用戶輸入的問題進(jìn)行規(guī)范化處理,并加入一些 fewshot 檢索,從而提高模型的理解能力和生成準(zhǔn)確性。
- 對(duì)模型結(jié)果進(jìn)行后驗(yàn)優(yōu)化
生成的 SQL 可能并不總是能正確執(zhí)行,我們?cè)O(shè)計(jì)了一個(gè)后續(xù)糾錯(cuò)機(jī)制,利用大模型對(duì)生成的 SQL 進(jìn)行審核,并進(jìn)行必要的修改,同時(shí)可以進(jìn)一步提升準(zhǔn)確性。
我們將上述思想整合成了一篇論文,探討了如何通過信息精簡(jiǎn)、分類處理、針對(duì)性生成和自我糾錯(cuò)的過程來提升模型性能。在生成過程中,對(duì)不同復(fù)雜程度的查詢采取不同處理方式,簡(jiǎn)單的查詢與復(fù)雜的查詢應(yīng)有不同的生成策略。在生成時(shí)設(shè)定特定條件,確保生成查詢符合執(zhí)行要求。同時(shí),實(shí)施自我糾錯(cuò)機(jī)制,讓模型對(duì)自己生成的查詢進(jìn)行反思與調(diào)整。此外,我們還實(shí)施了主動(dòng)學(xué)習(xí)(active learning)的策略,針對(duì)常見問題進(jìn)行重點(diǎn)提示。通過讓模型專注于規(guī)范化問題,進(jìn)一步提高模型的準(zhǔn)確性。這一過程將智能體與大型模型相結(jié)合,提升整體的準(zhǔn)確率。
5. Text2SQL 之外
在進(jìn)行智能分析時(shí),用戶的需求不僅限于 text2SQL,還會(huì)有改寫、糾錯(cuò)、優(yōu)化、解讀、問答、補(bǔ)齊等多種需求。為了滿足用戶多元化的需求,我們?cè)谙到y(tǒng)中構(gòu)建了多個(gè)智能體,旨在輔助用戶進(jìn)行數(shù)據(jù)智能分析,提升效率。
上圖展示了 OlaChat 的整體架構(gòu),自下而上包括底層服務(wù)、中間公共服務(wù)、Agent、統(tǒng)一后端、統(tǒng)一前端,以及所支持的各種應(yīng)用。不同模塊相互配合,實(shí)現(xiàn)整個(gè)平臺(tái)的統(tǒng)一體驗(yàn),提升用戶在數(shù)據(jù)分析過程中的效率與效果。
四、問答環(huán)節(jié)
Q1:取數(shù)時(shí)使用了多大的模型?
A1:取數(shù)模型為 8B,相對(duì)較小,適合快速判斷用戶的查詢。
NL2SQL 采用的是 70B 的模型進(jìn)行微調(diào)。
Q2:如何保證歸因的準(zhǔn)確率?
A2:歸因的準(zhǔn)確率依賴于歸因工具。雖然大模型推理能力強(qiáng),但要結(jié)合外部數(shù)據(jù)提高準(zhǔn)確率。所以我們的做法為,基于歸因工具拿到數(shù)據(jù)后,大模型負(fù)責(zé)在中間串聯(lián),做一些語(yǔ)言上的整理歸納,呈現(xiàn)給用戶。
Q3:SQL 糾錯(cuò)和 SQL 解讀是否用了大模型?
A3:SQL 糾錯(cuò)和解讀是用大模型實(shí)現(xiàn)的,但僅用大模型的話準(zhǔn)確率較低,因此需引入更多信息來優(yōu)化。比如可以加入 SQL 中用到的表的元數(shù)據(jù),也可以將執(zhí)行中的報(bào)錯(cuò)信息加入進(jìn)去。所以不能光用大模型,而是要根據(jù)具體場(chǎng)景加入更多信息。
Q4:直接生成 SQL 語(yǔ)句是否過于復(fù)雜?
A4:直接生成 SQL 語(yǔ)句與基于語(yǔ)義層的簡(jiǎn)化方法各有優(yōu)勢(shì),前者靈活性高,后者適合對(duì)不熟悉 SQL 的用戶提供了有效的提效方案。