一、专利大模型背景介绍
智慧芽一直致力于为科技创新和知识产权领域提供信息服务。在小型模型时代(如 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,这是智慧芽未来需要探索的方向之一。