一、專利大模型背景介紹
智慧芽一直致力于為科技創新和知識產權領域提供信息服務。在小型模型時代(如 Bert),參數量較少,智能理解方面存在局限性。因此,在著手開發大模型之前,智慧芽深入思考了領域聚焦的重要性。在知識產權領域,專利檢索、專利對比、標引工作以及專利撰寫等方面的產品的 AI 迭代存在廣泛需求,而且在行業中存在著巨大的突破空間。
針對這些問題,智慧芽從四個層次來設計和構建垂域大模型:
首先,重視數據的質量和規模,確保擁有足夠數量和專業化的數據,這是開發領域特定大模型的基礎。智慧芽擁有 1.8 億條專利文本,包括專利、文獻、新聞、書籍等,以及大量的生物醫藥數據,包括 7 萬多種藥物、相關臨床資料、新聞和對應的保護專利等,這是訓練專利大模型的基礎。
其次,需要關注大模型相關算法的完整鏈路,包括預訓練、SFT、Reward Model 等,以及優化策略如 PPO(DPO),在實際應用中還會使用 RAG 技術。RAG 和專利檢索在技術上有共通之處,但也存在差異,后文將詳細闡述。在數據處理過程中,還需要運用多個小模型,特別是在處理大規模數據時。
第三,自主研發領域特定大模型。智慧芽已經推出了專利大模型(PatentGPT)和生物醫藥大模型(PharmGPT)。
最后是領域特定大模型的應用。智慧芽的兩款大模型產品已投入使用,并解決了企業客戶在一些場景下面臨的實際問題,也收到了一些反饋。智慧芽目前的主要客戶群體是企業客戶。
總體來說,面向研發場景的垂直領域模型需要具備差異化的海量數據,并結合小型模型以提高效率,從多個方面解決實際生產問題。主要的挑戰來自于數據的高精度結構化提取和產品化應用。因為最終還需要將這些問題的解決方案組合起來形成良性循環。
二、訓練過程
1.專利大模型:以業務為導向的不斷迭代
智慧芽專利大模型基于開源大模型經歷了三個版本的迭代。是基于 llama2 和 mixtral8*7B 進行的繼續訓練和后續步驟。在整個大模型訓練鏈路中,除了通用大模型的 Pre-train 環節外,智慧芽主要完成了后續的 CPT(continue pre-train)、SFT、Reward、DPO(PPO)等工作。
在訓練過程中,智慧芽重點關注以下幾個方面:
首先是差異化數據集。使用了超過 246B 的訓練數據,包括全球 170個受理機構的 1.8 億專利、1.6 億論文、超過 2100萬條新聞、超過 50萬條投融資信息、超過 1.1 億家企業、超過 78 萬份市場報告以及 40多萬本書籍數據。
第二,算法以業務為導向。構建大型模型的最終目標是解決客戶問題,因此在調整和訓練算法時必須以此為中心。在數據配方方面,需要滿足公司下游的需求,比如專利對比、專利撰寫等;在強化學習方面,需要建立基于領域專家反饋的強化學習,智慧芽在訓練過程中獲得了超過 50位知識產權和生物醫藥專家的反饋,其中包括 3 萬條 SFT 數據和 10 萬偏好數據,以保持與人類意圖的一致性;在專利檢索的融合方面,需要向用戶提供可追溯、可解釋的結果,智慧芽的客戶中有很多大型科技公司和金融類機構,對結果的可解釋性和可追溯性要求極高。
最后,注重垂直業務能力而非通用能力。通用能力方面,國內外的大模型API 已經非常優秀。專利大模型在垂直行業能力方面(如專利撰寫、專利對比、專利搜索)整體超越通用模型;此外,專利大模型也通過了中國專利代理師資格考試。
接下來將具體介紹智慧芽專利大模型在數據、算法、評估等方面的實踐。
2.專利大模型:數據
首先來看數據集的大小。從上圖中可以看到,大模型數據集在不斷變大。最早的 Bert 使用了 3.7B tokens;GPT-3 使用了 500B tokens;LLaMA 1 使用了 1.4T tokens;LLaMA 2 使用了 2T tokens。
智慧芽的專利大模型數據集也經歷了從小到大的過程。在實踐過程中,數據集變大后,模型的能力提升是明顯可感知的。
再來看數據配方。現在許多開源和閉源的大模型都公布了它們的數據配方,這些數據來源包括網絡爬蟲、代碼、維基百科、書籍、論文、新聞等。每個模型的數據集配比都非常講究。例如,LLaMA 大模型的數據集配比非常雜且全面;而 OpenAI 的 GPT-3 則有自己的特色,強調代碼和書籍的訓練。這些配比也是大量實驗中得出的結論。
智慧芽為了完成大模型訓練的下游任務,結合自身的垂域數據集摸索出了專利、論文以及行業領域中獨有數據(包括檢索報告、書籍等)的配方。此外,也加入了一定量 Common Sense 的數據,因為在連續預訓練的過程中會出現嚴重遺忘,必須有Common Sense 數據的支持,以防止過度遺忘的發生。專利、書籍和論文是智慧芽未來將繼續深挖的一個方向。
微軟 Phi-1 和最新版本 Phi-1.5 的數據配方以 Textbooks 和 Code為主,使用了較小的參數量,卻實現了非常出色的推理能力。這也體現了數據配方和數據質量對模型能力的重要性。GPT-3 的數據配方特點如上圖右上所示,可以看到其前三個數據集都以 Text 為主,同時也各有特點,比如第一個數據集以 books 和 journals 為主,第二個數據集也以 books 為主,第三個數據集則是維基百科。GPT-3 大模型性能的優秀和穩定性與數據集的配方密切相關。
3.專利大模型:算法是一系列模型
算法涉及一系列模型,下面將分四個方面進行介紹。
首先是數據預處理。預處理雖然繁瑣,但卻至關重要,尤其在處理大量數據時。智慧芽團隊專門配備了數名大數據工程師與算法工程師合作完成數據預處理工作,包括語言探測、垃圾過濾、去重、個人信息篩選等工作。在算法方面,主要是以小模型為主,并結合搜索引擎技術。
第二是預訓練。預訓練分為兩個階段,第一階段主要使用專利數據,而第二階段則采用了均衡配置的 Exam、Chat 和 Book 等數據。關于數據配比,需要不斷摸索。上圖也給出了智慧芽的一些數據配方,供大家參考。
第三是 SFT 和強化學習。前文提到,智慧芽通過 50位知識產權專家撰寫反饋數據,形成了自有的 3 萬條 SFT 數據和對應 PPO 的 10萬條人類偏好數據。為了保證訓練效果,通用的偏好數據是必要的,但在產品化時,專家數據就顯得尤為關鍵。換言之,在預訓練過程中,越靠前越需要通用或多樣化知識,而越靠后則更偏向業務和產品化,更依賴專家反饋數據。
最后是 RAG 檢索增強生成。智慧芽嘗試了多種方式將大模型與搜索結合,例如最初將大模型生成的結果數據抽取 3-5 個 query 進行搜索引擎搜索,但效果并不理想。反之,將搜索結果提交給各個大模型進行總結,是目前采取的主要方案。另外,在工程量允許的情況下,還可以先將搜索結果交給大模型,再交給搜索引擎,實現多輪迭代。目前,智慧芽主要采用第一種方案,第二種方案作為輔助。
4. SFT:Instruction Tuning unlock pretrain model
SFT 入門非常容易,但要精通卻相當困難,需要關注許多細節。在預訓練完成后,如何有效利用 SFT 成為解鎖大模型知識的關鍵步驟。如果 SFT 做得不好,那么 Reward 模型就無法選擇出好的答案,使用 PPO 也無法獲得好的結果,即使進行 100 次采樣也是無濟于事,會導致強化學習失效。因此,SFT 扮演著非常重要的角色。接下來將從三個方面進行分享:
(1)數據。這里可分為三類數據:
Task 類數據,可以從各種開源數據集中提取,例如 FLAN 類數據等。垂直行業通常都有相應的數據集,用于各種 NLP 任務,如 NER、關系抽取、分類等,有許多開源數據集可供使用。
Chat 類數據,可使用熱門的 ShareGPT 數據集,還有多輪對話的 OpenAssistant 數據集。在使用過程中,可能需要對這些數據進行一些翻譯,因為 ShareGPT 以英文為主,沒有中文領域的數據。
合成類數據集,有許多來源,如 ChatGPT-3.5、ChatGPT-4 和 Claude-3 等都有 API 可以根據一些問題或答案生成相應的數據集。
(2)訓練策略
如果只使用上述三個數據集中的某一個,例如只使用 Chat 數據,在解決下游任務時可能會導致偏差,因此需要特別注意協調使用。
上圖中左下方的圖表展示了在聊天和問答環境下,基于 LLaMA(7B)和LLaMA(13B)模型的指令調優實驗結果(均為單輪對話)。實驗中,以在 Self-Instruct-52K 數據集上微調的 LLaMA(7B)/(13B)模型為基準,采用了四種指令改進策略:增加復雜性、增加多樣性、平衡難度和擴展指令數量。下面的三列數據展示了各種指令調優的結果:
第一行:使用 FLAN-T5 數據集進行調優,在 QA 維度上的勝率表現較好;
第二行:使用 ShareGPT 數據集進行調優,在 Chat 維度 AlpacaFarm 上的勝率為 81.30%,因為 ShareGPT 主要涉及對話內容;
第四行:將 ShareGPT 和 Self-Instruct-52K 數據集一起用于調優,在Chat 上的勝率為 71%,相比僅使用 ShareGPT,存在一定程度的下降。
第五行:將 FLAN-T5、ShareGPT 和 Self-Instruct-52K 數據集一起用于調優,結果相對較為均衡。
若要提高單個任務的精度,也有許多方法可供選擇,例如擴大數據集規模、增強多樣性。此外,如果 7B 模型不足以滿足需求,可以考慮使用 13B 模型,甚至 70B 模型。
(3)數據三核心:數量、質量和多樣性
數量:SFT 訓練數據數量的增加存在雙降的規律。當數據量為幾千條的時候,訓練的 loss 會快速下降;隨著后續任務的不兼容或產品化需求的提出,數據量會不斷增加,此過程中損失也會相應上升。這一問題在智慧芽的實際生產中也經常遇到。以下是幾種解決思路:
將數據融合到預訓練中進行預學習(OPT-IML),這實際上是有效的;
采用多階段學習而非一次性學習,這也是智慧芽大模型的整體思路,即分階段進行訓練;
使用數據權重,對 SFT 中不同的數據設置不同的損失權重,對于專家標注的數據,可以設置較大的損失權重,以加快損失的下降速度;對于自動生成或合成的質量較低的數據,可以設置較小的損失權重。
質量:SFT 數據的質量至關重要。為了確保數據質量,需要進行指標化管理,包括輸入長度、輸出長度、Reward score、Perplexity、MTLD、KNN-i、Unieval-naturalness、Unieval-coherence、Unieval-understandability 等各種指標。
多樣性:在 SFT 中,多樣性非常重要。除了需要增加更多的指標外,還有其他一些影響多樣性的問題,例如各種類型數據的配比應該合理;多語言配置支持,智慧芽的業務需要支持三種語言;SFT 數據的長短等。例如,WizardLM 的一篇論文介紹了如何增加指令的多樣性和復雜性,通過從廣度和深度上進行擴展,并將 CoT 的數據融入其中進行自動擴展,以構建更復雜、更多樣的執行數據。這都是增加多樣性的有效方法。
5.專利大模型:評估
評估任何大模型都是相當有挑戰的。
首先,評估通用能力。通用能力的不足必然會影響垂直領域的穩定性。因此,智慧芽使用了英文數據集(MMLU)和中文數據集(C-Eval)進行綜合評估。就中文而言,專利大模型相對于 ChatGPT-3.5-turbo 具有一定優勢,但在英文方面表現普通,與我們英文 SFT 不足有較大關系,現在還在繼續擴充中。
其次,使用專利領域的公開數據集 Patent-Match。智慧芽主要關注專利的侵權和創新性,而 Patent-Match 數據集可用于判斷專利是否侵權。從測試結果來看,無論是中文還是英文,專利大模型在專利領域,都遠遠超過了 ChatGPT-3.5-turbo,甚至超過了 ChatGPT-4。上圖顯示了智慧芽不同版本大模型的評估數據。同時也可以看出,Sparse 版本的 MOE 和 Dense 版本之間,也有非常有趣的現象,以后有機會給大家分享更多。
最后,對智慧芽自身細粒度業務能力進行了評估,如專利撰寫、專利總結、專利問答等。智慧芽使用了專利領域自建測試集(面向業務)Patent-Bench,并采用 PK 方法進行評估,與 ChatGPT-3.5-turbo 和 CGPT-4.0進行對比。在不同的任務上,表現有所不同:在總結方面,專利大模型相對于 ChatGPT-3.5-turbo 仍具有優勢;在專利撰寫方面,由于通用大模型缺乏專利知識,專利大模型的優勢更為明顯;而在專利問答方面,專利大型模型的優勢也十分突出,這與智慧芽使用了更深層次、更具差異性的數據集有很大關系。
6.專利抽取:抗體輕重鏈提取+抗原配對信息
接下來分享應用專利大模型能夠解決的實際業務問題。
上圖顯示了專利抽取的需求,一個生物醫藥客戶需要從專利中獲取抗體抗原的配對信息。這涉及到輕鏈、重鏈以及它們對應的抗原等關鍵數據,在生物醫藥領域至關重要。特別是對于大型藥物公司,其核心藥物都受到專利保護,因此準確提取這些信息至關重要。然而,在過去,數據集的準確性和提取都需要人工干預。要實現客戶的需求,使用純人工方法完成需時 5 個月;使用小型模型結合人工標注(并由人工審核)需時 2 個月;而通過專利大模型,經過 Lora 微調、全參數微調、指令微調等方案,僅需 4 天即可完成任務。
7.技術方案對比:抗體抗原實驗結果
上圖中可以看到,專利大模型(PatentGPT)明顯勝出并解決了該業務問題。但并不是所有的實驗都有這么好的效果,但是專利大模型打開了一扇窗,在有些場景下可以解決一些小模型無法解決的問題,特別是在長上下文理解等任務方面。
三、專利搜索與大模型結合
在落地過程中,專利大模型一定需要與搜索進行結合。
1.為什么要 RAG ( Retrieval Augmented generation )
可以從兩個方面解釋其原因:
(1)在模型層面:
減少幻覺
解決信息更新問題。這在產品化過程中至關重要,因為出于成本考慮,模型不可能頻繁進行訓練,因此數據更新的問題就顯得尤為關鍵。RAG 在工程化或產品化落地上扮演著重要的角色。
利用少量高價值數據的問題。這一點尤為重要,在大模型的學習過程中,由于高價值數據量有限,很難學到這些數據,也無法將其放到指令微調中深入學習。在這種情況下,RAG 變得非常關鍵。
(2)在業務層面:
獲得更可信的正確結果。尤其是在生成涉及侵權或法律方面的結果時,對精度的要求非常高。
有引用鏈接,提高可解釋性。當客戶獲取生成的結果時,通常要求其具有可解釋性和可追溯性,以證明整個鏈路的可信性。因此,每個回答都必須提供相應的鏈接地址,這也是產品需求的一部分。
獲得新增領域信息以解決產品迭代問題。因為模型更新需要產品迭代,因此如果需要在短期內立即上線,RAG 是一個可行的解決方案。
2.RAG在智慧芽的實踐架構:找到答案+探索?
以下是 RAG 實現流程的概述。比如先問一個問題,“介紹計算機學院的課程”,獲得結果后,再問”電子學院呢”,在該流程中,除了必須的安全判斷步驟外,主要分為以下幾個步驟:
請求重寫:在此步驟中,首先進行 Query Rewrite。這是非常關鍵的一步,直接搜索“電子學院”可能無法獲得有價值的信息,因為用戶實際的需求是介紹一下電子學院的課程。和原來傳統的搜索不一樣,需要有一個根據歷史改寫的過程,這個實現還是非常有挑戰性的,尤其是上下文比較長的時候。
文檔檢索:文檔檢索階段包括以下幾個工作:
Text2SQL:智慧芽之前通過小型模型提取了大量結構化數據,因此需要進行結構化檢索 Text2SQL。智慧芽定義了自己的 PatentSQL。
BM25:智慧芽原有的基于詞袋模型的 BM25 算法也需要調整。對于剛剛重寫的查詢,“介紹一下電子學院的課程”,搜索時不能直接使用全部關鍵詞,而是需要根據核心關鍵詞“電子學院課程”進行搜索。智慧芽使用大模型進行關鍵詞提取,以提高精度和搜索效果。
向量檢索:智慧芽原來的向量是基于相似性或相關性的特征空間實現的。現在需要結合非對稱性,因為業務上不僅需要尋找相似性或相關性,還要處理問答和侵權關系等非對稱性任務。為此,智慧芽需要重新訓練一個針對專利領域的 embedding model。這個模型需要通過預訓練數據和領域特定數據(如專利論文和臨床信息)完成預訓練,并進行大量的對比學習。ChatGPT 訓練自己的 text-embedding-ada 模型也是為了解決類似的問題,當然,embedding model 不一定是 Decoder-only 的,可以結合 Encoder 實現。
段落抽取:將前面三個搜索步驟的結果匯總,根據下游大模型的長文本能力,形成篇章或者段落。
答案生成:調用大模型,基于重寫后的查詢和檢索到的段落生成結果。
此外,RAG 所使用的大模型也需要基于搜索結果進行 SFT 和強化學習。
3.RAG挑戰:一半是工程,一半是算法突破
在 RAG 的實施過程中,上圖中展示了其中一個例子:“發燒多少度需要吃藥”,模型給出了回答,接著問:“兒童呢”這意味著詢問小孩發燒多少度需要吃藥。系統首先需要確定是否涉及多輪對話,然后判斷是否需要搜索。這個例子中模型判斷是多輪對話,Query 需要進行改寫;如果不是,可以直接利用當前問題進行搜索。在實踐中面臨的挑戰包括:
在多輪對話過程中進行搜索改寫。
判斷是否需要搜索,通過小參數的大型模型來解決這個調度問題。
搜索與大型模型的深度融合(SELF-RAG),當大模型直接生成內容時,通過生成特殊的 token 來指示是否需要搜索。
100 億向量的性能問題,RAG 的應用需要對源數據進行 Chunking 分段,將上百頁的專利分成多個部分。如何通過工程化方法使其運行更快,也是一個挑戰,這涉及到工程化的問題。
四、挑戰和展望
關于未來方向的一些思考。
在實踐過程中,智慧芽進行了以下思考:
稀疏化:智慧芽也開發了一個 MoE 模型,除了模型本身,主要目的是平衡成本、速度和精度。隨著業務的擴大,成本問題將不可避免地出現。MoE 模型能夠更好地平衡性能和使用成本。
自我迭代:智慧芽實現了一個強化學習的自我迭代 self play,即自我對話和自我評估,現在也有很多 Self-Rewarding 相關的文章,就是讓模型自己和自己對話、評估、迭代,這是一個很好的方向。目前代碼已經實現,并初步看到了一些效果,后續將進行更深入的實驗。
多模態:專利并非只是全文本,還包含化合物序列、表格、附圖等圖片數據。因此,需要多模態的能力來充分理解專利內容。多模態處理也是智慧芽未來研究的方向之一。
Agent:真正的應用場景肯定需要結合多個 Agent,這是智慧芽未來需要探索的方向之一。