大模型研发核心:数据工程、自动化评估及与知识图谱的结合
一、大模型研发中的数据工程
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、解决方案:以数据为中心的大模型预训数据工程
上图展示了以数据为中心的的工程框架,包括之前提到的训练数据开发、推理数据开发、数据维护等。
以数据为中心的大模型预训练数据工程的工作流可以拆解为很多环节,包括源数据如何标记、清洗、特征缩减、基础操纵等;提示工程如何调整输入、评估等;包括数据的维护,数据可视化之后,可以真正知道数据都目前的情况,数据的价值评价指标,资源分配等。
需要针对不同的数据制定好的标注标准,包括文本标注、语音标注、图像标注等。
如何衡量标注数据集的质量是很重要的。现在有很多的算法,比如图像标注质量评估的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中。这里也可以使用知识图谱,用链接的方式把子图召回出来,目前也有很多的开源方案可以参考。