Part 01 利用大模型構建知識圖譜
上圖是之前,我基于大語言模型構建知識圖譜的成品圖,主要是將金融相關的股票、人物、漲跌幅之類的基金信息抽取出來。之前,我們要實現這種信息抽取的話,一般是用 Bert + NER 來實現,要用到幾千個樣本,才能開發出一個效果相對不錯的模型。而到了大語言模型時代,我們有了 few-shot 和 zero-shot 的能力。
這里穿插下 few-shot 和 zero-shot 的簡單介紹,前者是小樣本學習,后者是零樣本學習,模型借助推理能力,能對未見過的類別進行分類。 因為大語言模型的這種特性,即便你不給模型輸入任何樣本,它都能將 n+ 做好,呈現一個不錯的效果。如果你再給模型一定的例子,進行學習:
is_example={ '基金':[ { 'content':'4月21日,易方達基金公司明星基金經理張坤在管的4只基金產品悉數發布了2023年年報' 'answers':{ '基金名稱':['易方達優質企業','易方達藍籌精選'], '基金經理':['張坤'], '基金公司':['易方達基金公司'], '基金規模':['889.42億元'], '重倉股':['五糧液','茅臺'] } } ], '股票':[ { 'content':'國聯證券04月23日發布研報稱,給予東方財富(300059.SZ,最新價:17.03元)買入評級...' 'answers':{ '股票名稱':['東方財富'], '董事長':['其實'], '漲跌幅':['原文中未提及'] } } ] }就能達到上述的效果。有了大語言模型之后,用戶對數據的需求會減少很多,對大多數人而言,你不需要那么多預算去搞數據了,大語言模型就能實現數據的簡單抽取,滿足你的業務基本需求,再輔助一些規則,就可以。 而這些大語言模型的能力,主要是大模型的 ICL(In-Context Learning)能力以及 prompt 構建能力。
ICL 就是給定一定樣本,輸入的樣本越多,輸出的效果越好,但是這個能力受限于模型的最大 token 長度,像是 ChatGLM-2,第一版本只有 2k 的輸入長度。像是上面的這個示例,如果你的輸入特別多的話,可能很快就達到了這個模型可輸入的 token 上限。
當然,現在有不少方法來提升這個輸入長度的限制。比如,前段時間 Meta 更新的差值 ORp 方法,能將 2k 的 token 上限提升到 32k。在這種情況下,你的 prompt 工程可以非常完善,加入超多的限制條件和巨多的示例,達到更好的效果。
此外,進階的大模型使用的話,你可以采用 LoRA 之類的微調方式,來強化效果。如果你有幾百個,甚至上千個樣本,這時候輔助用個 LoRA 做微調,加一個類似 A100 的顯卡機器,就可以進行相關的微調工作來強化效果。
Part 02 利用大模型操作結構化數據
結構化數據其實有非常多種類,像圖數據也是一種結構化數據,表數據也是一種結構化數據,還有像是 MongoDB 之類的文檔型數據庫存儲的數據。Office 全家桶之前就在搞這塊的工作,有一篇相關論文講述了如何用大模型來操作 Sheet。
此外,還有一個相關工作是針對 SQL 的。前兩年,有一個研究方向特別火,叫:Text2SQL,就是如何用自然語言去生成 SQL。
大家吭哧吭哧做了好幾年,對于單表的查詢這塊做得非常好。但是有一個 SQL 困境,就是多表查詢如何實現?多表查詢,一方面是沒有相關數據,本身多表查詢的例子就非常少,限制了模型提升;另一方面,多表查詢本身就難以學習,學習條件會更加復雜。
而大語言模型出來之后,基于 GPT-4,或者是 PaLM 2 之類的模型,去訓練一個 SQL 版本的模型,效果會非常好。SQL-PaLM 操作數據庫的方式有兩種。一是在上下文學習(In-context learning), 也就是給模型一些例子,包括數據庫的 schema、自然語言的問題和對應的 SQL 語句,然后再問幾個新問題,要求模型輸出 SQL 語句。另一種方式是微調(fine-tuning),像是用 LoRA 或者是 P-tuning。
上圖就是一個用 Prompt 工程來實現 Text2SQL,事先先把表的 schema 告訴大模型,再提問,再拼成 SQL…按照這種方式給出多個示例之后,大模型生成的 SQL 語句效果會非常好。還有一種就是上面提到的微調,將 schema 和 question 組合成樣本對,讓大模型去學習,這時候得到的效果會更好。具體可以看下 SQL-PaLM 這篇論文,參考文末延伸閱讀;
此外,還有更進階的用法,和思為之前舉的例子有點相似,就是大模型和知識圖譜結合。
比如說,我想問“奧巴馬出生在哪個國家“,它就是構建知識圖譜 KQs,再進行一個召回,而召回有很多種方法,比如之前思為分享的 Llama Index 的向量召回,而向量召回最大的難點在于模型,像 OpenAI 提供的模型,效果會比較好,但是數據量大的時候,頻繁調用 OpenAI API 接口一方面涉及到隱私問題,另一方面涉及到預算費用問題;而自己要訓練一個模型,不僅難度大,由于數據量的原因,效果也不是很好。因此,如果你是借助 Llama Index 的向量模型進行召回,可能需要輔助一些額外的關鍵詞模型,基于關鍵詞匹配來進行召回,像是子圖召回之類的。
對應到這個例子,系統需要識別出關鍵詞是 Obama 和 Country,關聯到美國,再進行召回。這樣處理之后,將相關的事實 Retrieved Facts 喂給大模型,讓它輸出最終的結果。在 Retrieved Facts 部分(上圖藍色部分),輸入可能相對會比較長,在圖中可能是一個三元組,這樣就會相對比較簡單。這里還會涉及到上面說的 2k 輸入 token 提升問題,還是一樣的通過一些微調手段來實現。
Part 03 大模型使用工具
下面就是本文的重頭戲——大模型的使用工具。什么是大模型工具?你可以理解為它是把一些復雜操作集成到一起,讓大模型做一個驅動。
舉個例子,ChatGPT 剛出來的時候,會有人說“給我點一個披薩”,這當中就涉及到許多復雜的操作。
Data-Copilot 是浙大某個團隊做的大模型工具,主要是做意圖識別和信息抽取。上圖右側是“輸入一句話,把相關的圖繪制出來”的效果展示,這里就要提取一句話中的關鍵詞信息,關鍵詞信息識別之后去對應的數據庫中找對應的數據,找到數據之后進行數據處理,最后再生成一個圖。這里并沒有用到圖數據庫,而是直接基于 2Sheet 接口來實現的。
這里我們向這個模型提出一個需求“今年上證50指數的所有成分股的凈利潤增長率同比是多少”,這個模型會將其解析成對應的一個個步驟進行操作。上圖右側顯示了一共有 4 步:
Step1 解析關鍵指標;
Step2 提取相關數據;
Step3 數據處理,整理成對應格式;
Step4 繪制成圖;
而大模型是如何實現的呢?主要分為兩層,一方面你要設計一個接口調用,供 prompt 調用;另一方面準備好底層數據,它可能是在圖數據庫中,也可能在關系型數據庫中,給接口做承接之用。
這個例子更加復雜,是想讓大模型來預測中國未來(下四個季度)的 GDP 增長。這里看到它分成了三部分(上圖橙色部分):
Step1 拿到歷史數據;
Step2 調用預測函數,它可能是線性函數,也可能是非線性函數,也有可能是深度學習模型;
Step3 繪制成圖(上圖藍色部分);
一般來說,金融分析師做相關的金融數據分析的模型會相對統一,這種相對統一的模型我們用函數實現之后,就可以讓他的工作更加便捷:分析師只要說一句話,圖就畫好。
Part 04 大模型的最終形態
上面展示的形態,基本上人工痕跡還是很明顯的:prompt 要人為寫,數據接口也得人為寫。而我覺得它最終的形態,可能同 GPT4 的形態有點相似,像是前段時間出的 Code Interpreter,代碼編譯器功能。你只用一句話,后面所有的功能都實現完了。
大概實現過程就是上圖所示的,用 LLM 作為接口,把整個百科、計算器、搜索、編譯器、知識圖譜等等接入進來,從而最終實現畫圖的功能。
而它的最終效果是怎么樣的呢?下面是國際友人在推特上 po 出的一張圖:
就那么簡單,你不需要額外地搞 API,就能實現一個功能。
審核編輯:劉清
-
SQL
+關注
關注
1文章
740瀏覽量
43522 -
GPT
+關注
關注
0文章
326瀏覽量
14975 -
數據存儲器
+關注
關注
1文章
68瀏覽量
17726 -
LoRa技術
+關注
關注
3文章
95瀏覽量
16217
原文標題:LLM:大模型下的知識圖譜另類實踐
文章出處:【微信號:智行RFID,微信公眾號:智行RFID】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論