一、大模型研發中的數據工程
1、什么是大模型的數據工程-以數據為中心的AI
圖片
什么是大模型的數據工程?現在大家去做GPT模型或者BERT等模型,都會有兩個方向。第一個是以模型為中心,不怎么關注數據,不斷地優化模型的結構;第二個是以數據為中心(Data-Driven),也是目前做算法的一個共識,算法本質上是在做數據,核心是說模型不變,通過改進數據質量來提升模型效果,不斷提升訓練數據的質量。
以數據為中心的 AI 核心在于訓練數據開發,推理數據開發以及數據維護。
訓練數據開發包括很多的pipeline,包括如何收集數據,如何定數據源,如何做高質量的數據標注,如何做數據的預處理或者數據的縮減或增強。比如做領域微調數據,如果行業數據只有幾萬條,需要增強到幾十萬條或者幾百萬條,才能真正地把領域或行業的數據加進去。
推理數據開發,就是怎么評估之前的訓練樣本,更好的評估測試集外的數據。
數據維護,做數據相關的事情需要實現成一個閉環,包括對數據的理解。使用訓練數據進行訓練時如果發現數據有問題,需要可以定位到問題來源于哪個數據集,做定點的追蹤和優化。
大模型的數據工程主要解決的幾個關鍵問題如下:
- 需要什么數據?
- 數據從哪兒來?
- 數據怎么處理?
- 數據怎么評估?
- 數據怎么管理,版本迭代?
解決上面的問題,就可以比較好的搭一個相對完整的pipeline了。
2、回顧:現有大模型基本情況
回顧一下現有大模型的基本情況,這里基于四張圖進行闡述。
左上圖反映了到2023年3月為止,語言模型的模型大小,餅越大,其對應的參數就越大??梢钥吹?,國外的MT-NLG、PaLM還有OPT的參數規模是比較大的;國內的GLM-130B的參數是比較大的,已經到了千億級水平。
右上圖比較形象地揭示了現在不同段位的大模型的玩法:
- 波音787,大家都可以買票乘坐,包含有 GPT-4、 PaLM 等,提供API調用。
- 小型私人飛機,一些中小公司能夠研發出來私有部署,包含有Flan-T5、Pythia等。
- 紙飛機,平民玩法,可以做一些領域微調,得到一個私有部署模型,包含有Alpaka、Koala等。
現在做大模型大家基本是分散在這3個層級內。
左下圖描述了截止2022年12月DeepMind的模型,DeepMind在不斷地更新一些模型,先后提出了Gopher-280B、Chinchilla-70B、Flamingo-80B 等不同代號的模型,可以看到,現在做大模型的時候都喜歡用動物來命名,所以現在動物園的名稱可能后面也會卷的不行。
右下圖描述了代碼生成模型的規模。目前比較大有CodeGen,有16B參數;然后有清華的CodeGeeX,有13B參數。現在也有一個趨勢,就是把文本和代碼就混合去訓練,訓練后的 COT 能力有一定提升。
3、回顧:現有大模型應用場景
上圖列出了大模型的應用場景,大家不斷在探索大模型的邊界,分了幾個層級:
- S,比如GPT-3 13B 做的主要是Debuging或者是閱讀理解。
- M,比如GPT-3 175B,隨著參數量增大,到了175B的時候,可以完成語言學的解題或者情感分析、GRE考試。
- L,比如PaLM-540B,可以完成一些語音或者推理的任務。
- XL,比如GPT-4,可以完成高考題或者其他一些更先進的工作。
- Next...,可能就會更偏向于落地,解決更長文本的處理等問題。
4、起底:GPT背后的預訓練數據
這些模型背后都用了什么數據呢?
我們先來看ChatGPT的變化,2018 年6月的 GPT-1 只用了 5GB 的預訓練數據,有1.17億參數;半年之后2019年2月的GPT-2,使用了40 GB 的預訓練數據,有15億參數;2020年5月的 GPT-3,有1750億參數,預訓練數據45TB,但是它并不是實際使用了45TB,而是總量是有45TB,篩選出了750GB數據用于預訓練。
右上圖看一下GPT-3具體數據上的分布,60%的數據是Common Crawl,也就是低質量的網頁;占比22%的WebText2是抓取的高質量網頁;Books1、Books2是比較高質量的書籍,分別占比8%;維基百科Wikipedia占比3%。
可以發現:
- 第一、數據主要還是靠大規模的隨機網頁做支撐的,主打的是多樣性,因為網頁里面什么都有,多樣性是很好的。
- 第二、高質量,書籍的質量特別高,然后是Wikipedia,Wikipedia有個很重要的點,就是它的多語種能力,有100 多個版本,大家后面會發現,即使GPT里邊中文只占比只有 0.1%,但是中文的能力也有的。
5、起底:英文主流大模型預訓練數據的構成-多語種能力
從多語種能力上看一下英文主流大模型。比如說BLOOM,有46種語言,最多的還是English,所以現在大家去做領域微調進行技術選型的時候, BLOOM是一個比較好的底座,和LLaMA相比,BLOOM的多語言能力比較強。GPT-3有90種語言,當然絕大部分約92.7%還是English,中文的話大約是0.1%。PaLM有122種語言, 74.1%是English,其中還加了一些code。
6、起底:英文主流大模型預訓練數據的構成
分析一下主流大模型訓練數據的構成。我們先拉出來一個維度,基本上包括維基百科、書籍、期刊、Reddit鏈接(WebText)、Common Crawl等。
- GPT-1 基本上使用書籍訓練的。
- GPT-2 主要用Reddit鏈接。
- GPT-3 使用維基百科、書籍、期刊、Reddit鏈接(WebText)、Common Crawl。
- The Pile這個數據解壓之后是1.2T,大家基本上都可以拿到使用。這個數據集的一個特點就是多樣性特別高,如果沒記錯的話有 22 個不同來源的數據,還包括Github,Books等。
- LLaMA 主打的一個點是在參數量不遜千億的情況下,訓練數據盡可能豐富,使用了1.4T的Token,數據來源也是比較多的,包括維基百科、書籍、期刊、Common Crawl。
可以看到很多大模型Common Crawl都是占了比較大的比重。
除了文本大模型,還有多模態大模型。
OpenAI有DALL-E會有Conceptual Captions等數據集,谷歌的多模態模型也是一樣,但是跟文本大模型相比,數據集相對比較少,而且多模態的參數量跟純文本相比還是相差一定量級的。
GPT-3有一個很重要的數據集叫Common Crawl,從Common Crawl中通過清洗的方式可以獲取英語語料比如C4,C4中很多數據都是專利數據(patents.google.com)。我們再看一下GPT-3 TOP10 的一些Datasets,包括Wikipedia、Google、Libgen等。
上圖列出了幾個預訓練數據內部構成:
- The Pile v1版本包括PubMed Central,所以在生物醫藥方面Pile是有一定優勢的;包括ArXiv(papers)、法律相關的FreeLaw、數學相關的DM Mathematics、Ubuntu的用戶日志、多語種的EuroParl數據集等。如果需要做多語種翻譯,或者增強多語種能力,Pile數據集是可以利用的。
- WebText包括Google、Archive、GitHub等等。
- C4包括有0.48%專利數據(只用了專利的背景),所以 GPT-3進行一些專利方向的交互,回答也會不錯,對專利感興趣的同學可以關注C4 數據集,做一些比較好的遷移。
7、起底:英文主流大模型常用預訓數據
上面列出了英文常用的預訓練數據-維基百科、書籍。
上面列出了英文常用的預訓練數據-論文期刊。ArXiv有2000多萬的文章,都可以下載到。
上面列出了英文常用的預訓練數據-WebText、Conmmon Crawl。也是大家可以下載到的。
上面列出了英文常用的預訓練數據The Pile及代碼、論壇。左下是Pile數據集的內部分布。代碼數據集公開的比較多,能下載到的有上T級別的。
8、起底:中文主流大模型預訓數據構成
下面介紹一下中文主流大模型預訓數據構成,目前中文的開源數據集和英文相比差距還是比較大的。
比如華為盤古大模型,使用中文文本語料共1.1TB。
- 開源數據集只用了27.9GB,數據來源基本上是開源的評測數據,如百度QA、DuReader、CAIL2018法律文本(幾百萬的法律文書數據)、搜狗 CA(搜狗的一個文本分類的數據集)等。
- 百科數據包括百度百科,搜狗百科等,以及之前大家卷知識圖譜的時候開放的百科的三元組以及內部信息。
- 電子書也有應用,但是國外有zlibary這樣比較大型的書籍集合。
- Common Crawl,使用了Common Crawl的2018年1月到2020年12月的網絡數據
阿里的M6大模型用到百科全書、社區QA、論壇討論、Common Crawl等,還有一些和業務結合的電商數據。
WeLM的數據構成更像GPT,包括Common Crawl、書籍、新聞、論壇、學術著作等。
InternVideo是多模態模型,會用到網絡視頻,YouTube視頻、電影等。
大家可以看到,在多樣性上和英文相比會存在比較大的缺陷。
詳細看一下預訓練數據的構成。
左邊是PanGu Alpha ,有47.16%是Common Crawl,有29.65%的Public Datasets(剛才提到的各種公開的測試集),對于這種高質量的評測數據,訓練時Epochs數可以更多,而CommonCrawl的Epochs 數更少,進行降采樣。
右邊是Wudao2.0,Wudao也是大家可以拿到的開放數據。悟道里有知乎、百度百科等,當然也其他網站,包括騰訊、搜狐的數據。從Raw Size維度看,知乎數據只有131 GB。
上圖主要列出了大模型預訓練數據構成中的中英對比,右圖可以從顏色看到一個區分度,英文不同的來源的區分是特別細的,而中文來源的區分是比較粗的,存在比較明顯的差別。
如果要復現GPT-4、GPT-3等模型,通常會從語料上找中英文數據集之間是否存在映射關系。
可以看到,中文的知乎對應英語的Quora;百度百科對應English Wikipedia,但有個很大的問題是中文的百科對比英文的維基百科,訓練數據的質量是沒有那么好的,英文的Wikipedia里面包括各種參考文獻,特別豐富的而且權威性比較高,它都會注釋來源于哪,而且包含多個版本,所以在百科這個方面存在一定差距;搜狐News對應NBC;騰訊QQ對應 ICQ;另外還有一些比較垂域的,比如17ok.com(finance discussion)對應Yahoo Finance 等。
9、問題的提出:我們需要怎樣的預訓練數據
討論了中英對應并找到差距之后,繼續討論一下如果要做好的模型,應該準備怎樣的預訓練數據?從源頭上去講,語言模型質量要求如下:
- 相關性,回答是否和問題相關,不要答非所問,體現了對問題的理解能力。
- 準確性,事實性要求回答要求完全一致,不要產生錯的答案,開放性回答要求語義相近。
- 完備性,是否涵蓋了所有要點。
- 連貫性,語言上是否表達流暢。
- 安全性,是否符合地方法規以及人的價值觀。
- 專業性,不口水話,不啰嗦,坦白說ChatGPT比較啰嗦。
- 敏感性,是否涉及到政治理念、黃反、敏感事件等負面信息。
拿到質量要求后,可以得出大模型需要高質量、大規模、多樣性的數據。
(1)高質量
- 高質量數據集能夠提高模型精度與可解釋性,并且減少收斂到最優解的時間,減少訓練時長;
- 高質量數據的選擇依據是信源權威可靠、內容價值觀對齊、專業領域知識,不會選擇不入流的站點數據或者大家隨便寫的文章;
- 高質量的數據具有規范性、完整性、準確性、一致性、時效性,比如說GPT的時效只到2021年,那2022年、2023 年的數據也要去收集,實現時效性上的高質量。
(2)大規模
預訓練的數據量越多,大模型的擬合能力就越強,效果就會越來越好。如果數據規模太小的話,模型學的東西不會多,記得也不夠深。
(3)多樣性
數據豐富性能夠提高大模型的泛化能力,模型預訓練數據足夠多,其生產內容也能更多樣。在準備預訓練數據的時候盡可能準備更多的數據,數據多了,模型的泛化能力就會更強;而且數據足夠豐富,在訓練時就不會偏向某一類,導致過擬合問題的出現。所以需要對預訓練數據做嚴格的去重,有各種花式的玩法。
10、問題的提出:以數據為中心的預訓模型
找到數據之后,需要最多的處理就是去重,比如GPT-1有4.8GB未過濾數據,GPT-2有40GB人類過濾數據,GPT-3有570GB過濾數據(來自45TB原始數),過濾數據很重要的。
11、解決方案:領域預訓模型的訓練鏈路-以CaMA為例
這里以浙江大學CaMA模型為例,為大家展示如何從數據端去完成一個領域模型。
浙江大學在LLaMA的基礎上做了兩個工作,首先是繼續預訓練,然后在預訓練之后進行微調(Instruction Dataset)。
為了增強LLaMA的中文能力,做了很多數據上的處理,比如怎么去拿數據。Code主要收集 GitHub 和Leetcode的數據;英文主要收集ArXiv,Book,Wikipedia等英文的數據;中文主要收集百度百科、悟道、中文維基等等。
我們要保證它的多樣性,從語種上有中英文;從類型上有代碼、文本;在領域上有百科、維基等。
拿到數據之后做兩個事情:
- 第一個是Clean,Clean包括Duplicate也就是去重;另外還有去毒性,去除敏感信息。
- 第二個是Tokenize,對數據進行分詞,并設置樣本的最大長度為1024。
微調階段如何構造高質量的微調數據?比方General,用Alpaca用52K 的數據做各種翻譯等等;還有去做一些 COT的東西,比如說gsm8K、aqua、Alpaca等COT的數據。拿到這些數據之后,我們可以去用ChatGPT做泛化。因為CaMa是做KG相關的,所以它會用很多的任務數據或者說命名實體識別的數據、關系抽取的數據以及事件抽取的數據,與泛化后的數據一并放進去進行tuning,得到一個比較好的效果。
通過上面的描述可知,無論是在pretrain階段還是在SFT階段,數據都是很重要的,而且數據需要盡可能的多樣、盡可能地清洗,對模型的提升是有意義的。
12、解決方案:以數據為中心的大模型預訓數據工程
上圖展示了以數據為中心的的工程框架,包括之前提到的訓練數據開發、推理數據開發、數據維護等。
以數據為中心的大模型預訓練數據工程的工作流可以拆解為很多環節,包括源數據如何標記、清洗、特征縮減、基礎操縱等;提示工程如何調整輸入、評估等;包括數據的維護,數據可視化之后,可以真正知道數據都目前的情況,數據的價值評價指標,資源分配等。
需要針對不同的數據制定好的標注標準,包括文本標注、語音標注、圖像標注等。
如何衡量標注數據集的質量是很重要的?,F在有很多的算法,比如圖像標注質量評估的MV 算法、文本質量評估的BLEU算法等,根據不同的語音文本以及視頻,有不同的衡量算法,幫助大家衡量數據標注的質量。
上圖展示了具體實現的時候處理數據的大致流程。
我們的數據主要包括網站數據、專業文獻以及各個行業數據:
- 網站數據有搜索數據、代碼推理數據、通用網頁數據等。
- 專業文獻有研究報告、學術論文、各種文獻等。
- 行業數據有金融、法律、房產等各種垂直網頁、特定的多語種數據集、任務評測集等。
為了實現數據的大規模、多樣性和高質量,大致的流程包括如下幾步:
一、站點過濾,站點過濾的方法也有很多,就包括基于圖的過濾方法、基于單點的過濾方法、基于規則的過濾方法等。
二、敏感與隱私過濾,語言或者噪聲過濾等。
三、文章去重,做不同粒度的去重。
四、網頁主題建模,要提升多樣性,主題就一定要好,所以會做大量的主題挖掘的工作,這里搜索有天然的優勢。
五、數據質量評分,包括數據質量版本控制等。
數據源的選取依據有很多,包括:
- 體系是否完善
- 站點來源是否權威
- 數據規模是否大
- 數據實時性是否足夠
- 下游任務是否有需求
- 下游技能有哪些是表現差的等
網站數據,包括通用的網頁數據、搜索數據、問答數據、知識圖譜百科、代碼推理數據等。
專業文獻,包括研究報告,學術論文、期刊、書籍、文學著作等。
行業數據,包括任務評測數據集,多語種數據集,金融、法律、房地產、體育、醫藥、影視領域語料等。
站點過濾和噪聲信息清洗有很多方法。
質量分檔模型,使用fasttext分類器分為四檔(0,1,2,3),2、3 為優質數據,訓練時,正樣本是人工標注的一些比較好的樣本,負樣本采用比較垃圾的文本,特征使用包含title以及CEloss。
邊緣文本剔除模型,需要將廣告位文本、雜七雜八的推廣文本識別出來。
垂直網頁處理,包括用大量的Pattern做高優語料提取以及定制化的邊緣文本剔除。
基于規則的噪音清洗,包括空格、特殊符號的處理、語種檢測,敏感信息檢測、隱私數據識別與處理等等。
基于模型的噪聲清洗,包括使用PPL判定模型,剔除不連貫的文本等。
網頁分類建模的目的是挖掘細粒度的網頁數據,以滿足不同類別數據的需求。
給網頁標注比較好的tag的方法有很多,要么做分類,要么做聚類。如使用LDA主題詞提取、文本關鍵詞提取、人工審核標簽、下游技能迭代反饋標簽等。
網頁主題分類,預設網頁類別體系,包括體育、歷史、金融、醫藥等幾十類別的體系,細分領域標簽,然后構造語料分類器,基于BERT完成語料標簽分類。
- 數據質量控制最好是用人工的方式去保證,因為通過模型方式做的具體分檔,只能對數據做定性的分析,實際采樣的時候,需要有一個定量評分標準,哪些是90分、80分、70分、60分等,質量高的數據我們多采樣。因此需要人工制定評分標準,計算一個得分。
- 數據版本控制,每個生產流程都需要做各個階段的備份管理。一旦任何一個步驟發現問題,可以馬上定位出出問題的數據源在哪里。
- 預訓練數據索引管理,需要有一個管理平臺,收集大家對數據問題的反饋以及定位。
- 數據隨機抽樣,為了防止數據有偏,所以在做具體評估的時候,需要進行大量的shuffle,通過人工質量評分做一個排序。
以DoReMi的工作為例,討論一下預訓練數據采樣。
先初始化數據分布,訓練一個小參數模型,比如使用The Pile的原始分布,訓練一個小模型;訓練小模型之后我們再使用群體分布穩健優化(GroupDRO)對領域進行訓練,更新領域權重;最后使用迭代好的領域權重對數據集重新采樣,訓練一個更大的、全尺寸的模型。
微調數據生成方式:
(1)基于人工標準,使用較多
- 需要設定 SFT數據標簽體系,建立標簽體系的大類、子類;
- 構造和撰寫一些prompt并且寫出對應的結果-forSFT任務;
- 針對給定的prompt、模型給出的多個結果,標注結果的好壞排序-for Reward Model。
(2)基于大模型進行數據蒸餾
- 基于self-instruct生成數據,為了保證多樣性,只有當一條新指令與任何現有指令的ROUGE-L重疊小于0.7時才會保留,但是僅僅這樣還是不夠的,包括Alpaca這種數據,用這種方式在長度上以及主題上還不是特別多樣的
- 基于chatgpt進行結果好壞標注+人工審核
上面右圖是人大的工作,對于收集到的開源指令集,先去重,然后做主題上的分布,最后進行清洗和多樣性控制。
基于規則的清晰,可以應用如下的規則:
- 過濾敏感詞規則
- 過濾無效輸入輸出
- 關鍵詞替換規則
- 特殊邏輯規則
基于模型的多樣性控制,包括:
- 基于語義相似度模型的指令去重
- 基于主題控制的指令多樣化
- 指令數據復雜化,可以用GPT-4或者其他大模型做改寫,讓指令復雜化,在指令的長度上,可以做一定的控制
13、開放數據問題:預訓數據是否會不夠?
關于現在預訓數據到底夠不夠的問題,報告《Will we run out of data? An analysis of the limits of scaling datasets in machine Learning》中提出了一個有趣的觀點:語言數據將于2030~2040年耗盡,其中能訓練出更好性能的高質量語言數據將于2026年耗盡。此外,視覺數據將于2030~2060年耗盡。大家可以仔細研究一下這個報告。
二、大模型研發中的自動化評估
1、問題的提出:如何進行模型性能的自動化評分?
模型性能的自動化評估基本上有三種方式。
- 第一、基于人工業務評估,人工根據特定的業務場景找到需要評估的能力點(如摘要能力,生成能力等)通過列舉相關測試樣本,建立評估維度,完成多維度打分;
- 第二、基于下游任務評測,利用下游評測榜單,任務數據集,進行性能評估??陀^題比較適合用下游任務去評測,但主觀題的話不是特別適合,比如評估生成的好不好等。
- 第三、基于ChatGPT打分,現在有一個風向,大家用 ChatGPT 打分,利用ChatGPT 的專業能力,充當裁判,完成打分評估。
2、基于GPT自動化評估
現在就會有很多人用ChatGPT打分。我們給出一個問題,再給出一個答案,然后告訴ChatGPT,這里有這樣一個問題和答案,打分區間是一到零分,請問該答案可以打多少分并給出打分依據。Vicuna 采取了這種評估方案。
3、基于眾包投票進行評估
另外一種方式就是眾包。用眾包的原因是用GPT自動評估的方式主觀性是很強的,而且數據集也不夠多,所以需要大家一起來打分,產出一個瑯琊榜。Arena這個瑯琊榜,首先給一個問題,然后各個模型給出答案,通過大家投票,采用Elo rating system進行評分。
中文其實也有,中文在英文的基礎上產出了一個版本叫瑯琊榜。
4、基于下游評測任務進行評估
目前基于下游評測任務進行評估出現了一個風向,就是使用專業的考試題,包括Google BIG-bench、MMLU、C-EVAL、M3KE等評測數據,或者去卷專業考試。
這樣的方式是合理的,如果要做一個垂域的模型,如何去驗證模型在垂域上的能力呢?比如說法律有律師從業資格考試,或者說專利有對應的資格考試,這也使得模型和業務有了很好的融合。
三、大模型與知識圖譜的結合
下面與大家討論一下大模型與知識圖譜的結合。
1、知識圖譜認識
首先看一下知識圖譜,現在有種論斷,大模型之后知識圖譜的重要性嚴重下降了,知識圖譜的定位也變得不太清晰。
以我的個人理解來說知識圖譜最大的優勢在上面左邊的兩張圖中。
第一個圖是知識圖譜的圖結構,知識圖譜通過知識以圖的形式做表示,因此可以完成Graph Embedding、路徑搜索等算法,大模型在這方面有一定缺陷。
第二個圖是知識圖譜在一些組織上的優勢,比如知識圖譜通過Schema規范結構化數據的表達, 知識圖譜提出來是為了解決業務的在垂域中知識的組織和管理問題,雖然大模型可以端到端地生產知識,但這些知識是沒有體系的。可以把體系化的知識圖譜和大模型結合,大模型生產數據,知識圖譜組織數據,更好的完成目標。另外,知識圖譜擁有垂域的一些數據,這些數據可以用于去檢驗大模型事實上的錯誤。
2、知識圖譜VS大語言模型
知識圖譜與大語言模型的共同點:
- 本質上都是一種知識庫。大語言模型也是知識庫,只是它是參數化的。
- 在實時性和時效性上面臨的挑戰一致。知識圖譜如果你不更新,時效性也是有問題的,所以讓知識圖譜解決大模型的時效性的觀點是要打問號的。
知識圖譜與大語言模型的不同點:
- 知識圖譜是知識的形式化表示,而大語言模型是知識的參數化的表示
- 知識圖譜方便Debugging,可解釋性強,圖結構表達能力強,而大語言模型是any data, any task, 無所不能,但是不夠簡單。
- 知識圖譜在結構化知識上難構建易推理,在非結構化知識上易構建難推理,而大語言模型易構建而且易推理,但是沒有體系結構。
3、大模型用于知識圖譜:從知識圖譜構建到業務需求應用
大模型用于知識圖譜可以重構上圖的整個狀態,比如進行數據結構化、數據融合、擴展數據模式或者行業智能問答等工作,大模型可以加速而不是替代知識圖譜構建的環節,包括應用大模型做問答、抽取等。
4、大模型用于知識圖譜構建:schema生成與數據標注
大模型可以用于知識圖譜構建中的schema生成與數據標注部分。
大模型完成Schema的生成。ESHer是中科院軟件所的工作,使用大模型Prompt生成事件的Schema,再從Schema實現打分函數,通過聚類社區發現得到相應的事件以及對應的槽。
大模型可以生成排序數據,進行數據增強。大模型之前我們通常用 EDA做數據增強,現在其實完全可以用 ChatGPT 改寫的方式生成大量的標注數據,降低知識圖譜標注端的成本。
5、大模型用于知識圖譜構建:知識抽取、推理與知識問答
大模型在知識圖譜構建的知識抽取、推理與知識問答方向也可以發揮作用。
如左上圖的三元組抽取,先做NER抽取,再做關系抽取。
右上圖的工作是InstructUIE,在之前 UIE 的基礎上,統一這個方式,約定輸入和輸出的格式,讓LLM進行三元組抽取。
左下圖是用大模型去做知識圖譜的補全,通常知識圖譜補全需要定義 score function,比如360之前用知識圖譜挑戰OGB的時候就創新了一個新的score function,現在可以用大模型直接做排序任務。
右下圖使用大模型做知識圖譜問答,有些問題大模型不一定能回答,但是如果加上一些實體鏈接,到圖譜里把子圖給召回出來,拼接成上下文,構成提示語讓大模型去做推斷,能夠起到減輕大模型幻覺的作用。
6、知識圖譜用于大模型研發的幾個階段
探討一下知識圖譜能夠用于大模型研發的三個階段。
(1)訓練前階段
- 利用大模型于數據清洗,構造清洗規則,其作為領域經驗知識對特定語料進行錯誤檢測或過濾。
- 利用知識圖譜直接顯式的進行形式化拼接,引入預訓練語料,比如使用行業三元組拼接成S+P+O、S的P是O、S的P等于O這樣的口語化產出放入預訓練語料,尤其是垂域內的很多知識圖譜是可以直接拿到用于大模型訓練。
(2)訓練中階段
- 將知識圖譜隱式地加入到模型訓練中,用embedding的方式完成注入,可以參考KnowBERT的實現。
- 構建以領域知識圖譜為中心的下游評測任務,作為模型訓練評估。
(3)訓練后階段
- 引入涉及實體的上下文進行豐富,將知識圖譜注入prompt,增強結果可用性
- 對模型生成后的結果進行知識校驗,減少模型事實性錯誤
- 通過query實體消歧和實體鏈接,注入搜索實時結果,增強實時性
- 結合外部知識庫進行生成干預,比如langchain的實現
7、知識圖譜用于大模型訓練前階段:構造預訓練數據與微調數據
在預訓練階段,可以用模板化去生成事實性的描述文本。
在微調階段,可以根據模板來生成問題,用self-instrcut的思路(重點在于多樣性)。比如左下的中心詞,我們可以用模板的方式生成右下方的QA對。比如Lawyer LLaMA這樣的法律領域的行業模型,大家會通過這樣的方式結合知識圖譜生成大量的SFT數據。
8、知識圖譜用于大模型訓練中階段:融合知識的預訓練模型
這里討論下融合知識的預訓練模型,包括用特征融合、嵌入融合、數據結構統一、知識監督或者基于檢索等都是可以實現的。
核心點有兩個,一個是內嵌融合,把embedding注入進去,通過Mask詞和實體或者增加KE Loss都可以;一個是外掛融合,通過檢索的方式實現融合。
9、知識圖譜用于大模型訓練后階段:基于知識的生成結果干預
左上圖有一個比較好的例子,畫一個老婆餅,某AI會畫出一個老婆婆和餅,如果AI可以拿到老婆餅的比較好的描述,得到的效果會得到改善。
右上圖描述了融合自迭代的知識描述,為了做問答,在Question的基礎上結合知識圖譜生成比較好的description,然后再放進去,可以比較好地解決一些問題。
左下圖描述了融合外部知識庫系統,ChatGPT在數學計算方面,比如被提問芝加哥到東京到底有多遠的時候,回答的可能并不精準,這時可以外掛一些工具,比如WolframAlpha能夠解決這些問題,兩者結合起來,可以更好的解決問題。第一種方式是LangChain的方式,直接引入插件干預它的結果;另一個是先讓WolframAlpha回答一遍,然后追加到ChatGPT的問題中得到結果,雖然這樣做會稍微有點繁瑣,需要先請求WolframAlpha再請求ChatGPT,在很多情況下,如果問題中有若干子問題的時候,可以逐步地去拆解成WolframAlpha,再把結果通過提示語發送到ChatGPT,通常會得到比較好的結果。
右下圖描述了融合外部搜索引擎,目前大模型普遍時效性不夠好,為了解決時效性問題,需要借助比較有實時性的工具,比如搜索引擎。搜索引擎可以調用索引的相關性,獲取top的結果,封裝到prompt中。另外,融合搜索引擎可以解決大模型結果不可信的問題,比如NewBing會通過"了解詳細信息"的來源來為大模型輸出的結果進行增信,也便于用戶可以快速的進行驗證。不過,有的時候會發現NewBing和ChatGPT引用的鏈接很多都是空的、假的,所以后面還需要考慮如何提高生成鏈接的準確性。
10、知識圖譜用于大模型訓練后階段:外掛專業知識庫
最后介紹一下目前知識圖譜用在大模型訓練后階段的外掛專業知識庫,目前在行業中是用的最多的,其主要流程是:加載文件->讀取文本->文本分割->文本向量化->問句向量化->在文本向量中匹配出與問句向量最相似的top k個->匹配出的文本作為上下文和問題一起添加到prompt中->提交給LLM生成回答。
目前的難點,一個是在于如何拿到好的文本向量化模型,比如最近比較火的M3E、SimCSE、Text2vec等;另一個是讀取文本,如何比如說表格數據如何組織,例如用Latex的表示方式,各種富文本包括圖片的展示等等。
四、總結
最后總結一下大模型的未來發展方向。
大模型的未來發展發現主要有如下幾點:
- 大模型的應用邊界還在不斷被探索,我們都尚處于懂與不懂之間,大家都在不斷地去探索它的機理。
- 垂直領域微調模型是必然趨勢,低成本高效的注入領域知識很重要。
- 大模型研發和落地核心是數據+場景+訓練方法。數據做好了,算法的天花板才能高。
- 知識圖譜在當前場景下需要找準自身的位置,融合共生。
- 數據工程是大模型研發的重中之重,數據為王。
五、答疑
Q1:在數據收集的過程中,除了文本數據還會有表格數據或者圖片數據,這些數據可以怎樣去收集處理?
A1:圖片數據涉及到多模態數據的處理,比如沒辦法把圖片數據轉換成文本數據,除非使用圖文的方式處理。
我更建議的方式,比如說解析一些研報的時候,會遇到一些文本穿插了一些圖片,這時我們可以用圖片的title替換掉圖片所在的位置,這樣就能一定程度保留圖片所在的信息或者表格所在的信息,也能保證整體語義連貫。另外一種,表格數據最重要的是如何拿到表格的數據,比如用PP-Structure等方式把表格先解析出來,然后用 Latex 重新組織表格數據。
最需要考慮的是不同模態、不同格式的數據需要保證原有的格式,不錯亂。
Q2:在工業界關于解決大模型的幻覺有哪些實際可操作的業界經驗?
A2:幻覺的根本原因是:第一、聽不懂指令;第二、聽得懂指令,但是不會。我們分別解決這兩個問題。
怎么讓大模型聽懂指令需要我們做 SFT增強,讓大模型可以理解復雜指令,或者是理解那樣一個指令,這是在SFT階段,數據端要做的事情。
大模型不會的問題就需要注入,注入的方式有很多種,包括我們前面提到的CaMa的路線,我們可以基于Pretrain實現知識注入。還可以在 SFT 階段做Pretrain,雖然有種觀點是 SFT 學的是范式不是知識,但SFT也是能夠學到一些知識的。
如果這上面的增強還不夠,或者是某個領域的數據在Pretrain階段注入不進去,可以考慮使用LangChain的外掛知識庫方式。外掛核心在于怎么構造更好訓練數據以得到更好的向量化方案,優化embedding,通過向量檢索得到比較好的相關性文本后,拼接到Prompt中。這里也可以使用知識圖譜,用鏈接的方式把子圖召回出來,目前也有很多的開源方案可以參考。