闲谈最近大模型的一些新发现和新思考:从大模型兴趣趋势、GPT4组合模型到面向医学术语标准化的微调大模型
作者: 老刘说NLP 来源: [老刘说NLP](https://mp.weixin.qq.com/s/NNig930mWO_FvuY_AIh_Lg)
北京已经连续下了2天雨了,清凉之下,心情舒畅。
随着玩上通勤的开始,我们来串讲一下最近的一些新的发现和新思考。
当前,大模型经过几个月的发展,已经出现了以不同基础模型底座发展起来的一众模型,如下所示,开源项目awesome chinese llms总结绘制了当前中文市场的大模型分布图。
可以看到,以LLaMA为底座的模型呈现引领之势,后者为chatGLM、BLOOM,也有不走Transformer路径的RWKV。
而与此同时,大家对于大模型的使用兴趣也修补发生变化,一个关于AI相关网站访问量统计Top30总结了2023年5月至6月的同比月度变化,已经可以看到,大家对其的兴趣已经开始慢慢衰减,以下图为例【严谨角度下,数据真实性并未做考证】。
从上面的标签分布,我们也可以看到,大模型在C端中的使用兴趣主要包括搜索、作图【图像生成、图像编辑】、开发者社区、设计、教育、虚拟角色以及生产力,主要还是作图较多。这些兴趣好玩,但离工业性还有很大的差距。
这其实就是另一个B端的应用场景。而正如我们之前所一直谈到的,当前垂直行业知识问答是目前我们所能感知的稍微能贴近落地真实需求的场景,但其所面临的幻觉性问题一直是个无法根治的问题,尤其是在一些长尾的限定领域,典型的开放域问答,我们称之为个性化大模型中。
实际上,知识幻觉是大模型,甚至是个性化大模型应用的核心,其主要表现在与事实不一致,且无法考证没有事实依据。究其原因,其来自于数据端,训练以及解码三个方面,其中,数据中存在数据重复、偏置、时效性以及一对多的映射关系。
最近有个很有趣的场景,即数字人、数字分身,通过设定一个角色,利用文本模型来扮演该角色,并结合CV的角色进行影响交互。
而扮演该角色,其核心在于模型是否能够具备对其所扮演角色的认知,除了对其说话语气、风格的模仿之外,还需要知道该角色的基本基本信息,如社会关系、社会履历以及价值观等。
很自然的,为了实现上面的任务,我们最理想的做法是为每个角色都训练一个模型,然后单独使用,例如图像中常用的lora权重,为了得到每个人的独有图像可以收集特定的图像,然后训练一个lora,然后进行lora外挂方式,来达到这个目的,这种方式在图像中被验证是对的。
而对于文本而言,则要困难的的多,我们无法得到大量的包括背景知识的训练语料,例如引入百科数据进行训练,由于数据量太小,可能被淹没。因此,在这种情况下,大家的做法会变成引入prompt的方式,为每个角色设定一类prompt,prompt中设定了该角色的一些基本信息,这种约束方式有的时候会有效,但随着prompt长度的增加,费token的同时,也会让模型因为前面文章所说的对长文本建模呈现“倒U型”的问题而失效,随着背景信息的增加,其效果会变得更差。
而如何解决个性化问题,chatPLUG的做法很有趣,其通过使用互联网肉肉引擎跟私域的知识检索增强,并联合传统对话模型的做法,将数据、模型进行多任务学习,配以人工可运营的对话链路,拉解决这个问题。【这块没有讲的太清楚,感兴趣的可以跟一下这部分的工作】。
而讲到这个,我们又会转到另一个话题,即单独赌大模型可能并不是件好的事情,后面的演变趋势会变成一个组合模型或者集成模型,这个和最近被爆出的GPT4的思想如出一辙,其通过组合16个模型来应对各类不同需求。
根据泄露出的报告原文,地址:https://www.semianalysis.com/p/gpt-4-architecture-infrastructure所示,为了控制成本,OpenAI 选择使用 MoE 模型。OpenAI 在模型中使用了 16 个 MLP类型的专家,每个专家的参数大约为 1110 亿个,每次前向传递中会调用其中的两个专家模型。MoE 模型中通常有多个独立的 MLP 。
其中,专家混合模型(Mixture-of-Experts,MoE)是一种深度学习架构,通常由多个专家(Experts)组成,每个专家负责处理输入数据的不同方面,并拥有自己的参数集,也有一些参数,例如 embedding,可以被所有专家共享,即共享参数。
在模型的推理过程中,根据输入数据的不同特征,模型会将输入路由到不同的专家,每个专家根据其参数集处理对应分配到的输入后完成输出,最终输出则是各个专家输出的集成。
而这些的种种,都涉及到一个歧义性的问题,尤其是在长尾私域中,如何给到准确地上下文。因此,这就提出了对高质量知识、标准化的知识的需要,怎么将众多不形但同义的知识标准化为一个可复用的标准知识。
因此,这就又转入到实体归一化这个任务,实体归一化或者叫术语归一化是知识图谱构建中的一个重要任务,如何将同义不同形的术语统一归一化为一个标准实体名称,是解决知识图谱稀疏性和歧义性的重要保障。
医学术语归一化是实体归一化的重要场景,目前已经举办了包括Yidu-N7K、CHIP-CDN等多次评测任务,而在大模型当道的今天,如何利用大模型进行微调,来解决这一任务,受到关注。
最近一个医学微调大模型,NormPULSE,做了这方面的尝试,本文对该工作进行介绍,供大家一起参考。
一、知识图谱构建中的术语归一化
临床术语标准化任务是医学统计和知识图谱构建中不可或缺的一项任务。临床上,关于同一种诊断、手术、药品、检查、化验、症状等往往会有成百上千种不同的写法。
标准化(归一)要解决的问题就是为临床上各种不同说法找到对应的标准说法。有了术语标准化的基础,研究人员才可对电子病历进行后续的统计分析。
本质上,临床术语标准化任务也是语义相似度匹配任务的一种。但是由于原词表述方式过于多样,单一的匹配模型很难获得很好的效果。
1、Yidu-N7K评测任务
本次评测任务主要目标是针对中文电子病历中挖掘出的真实手术实体进行语义标准化。 给定一手术原词,要求给出其对应的手术标准词。所有手术原词均来自于真实医疗数据,并以《ICD9-2017协和临床版》 手术词表为标准进行了标注。
Yidu-N7K提供医渡云标准化7K数据集。
地址:http://openkg.cn/dataset/yidu-n7k
2、CHIP-CDN评测任务
CHIP-CDN,本次评测任务主要目标是针对中文电子病历中挖掘出的真实诊断实体进行语义标准化。 给定一诊断原词,要求给出其对应的诊断标准词。所有诊断原词均来自于真实医疗数据,并以《国际疾病分类 ICD-10 北京临床版v601》词表为标准进行了标注。
该评测对中文电子病历中挖掘出的真实诊断实体进行语义标准化。开放训练集数据6,000条,验证集数据2,000条(还提供了2,500条手术标准化语料,用于辅助提升本任务性能。
地址:https://tianchi.aliyun.com/dataset/95414
最后,在评测指标方面,以(诊断原词,标准词)作为基本单位计算F1得分。如测试集有m对(诊断原词,标准词)组合,预测了n对(诊断原词,标准词)组合,有k对组合是预测正确的。
二、NormPULSE微调大模型在术语标准化上的实现
PULSE最近推出中文医疗大语言模型,支持医学领域的各种自然语言处理任务,包括健康教育、医师考试问题、报告解读、医疗记录结构化以及模拟诊断和治疗。。
在训练数据上,PULSE模型使用约4,000,000个中文医学领域和通用领域的指令微调数据进行进一步调优。
在模型底座方面,基于bloomz-7b1-mt进行微调;
其中针对术语标准化任务,提出了NormPULSE模型,归一化的任务是将临床上同一种诊断、手术、药品、检查、症状等各种不同的说法对应到标准用词上。下图概述了临床术语规范化解决方案NormPULSE的整体框架,它基于PULSE,如下图所示,包括三个步骤:
1、训练
在训练步骤中有三个任务:知识卡片生成目的是通过从LLM中提炼知识来增强术语内部的知识;基于ICD代码的层次树构建和术语规范化,使模型具有从一定的候选列表中选择标准术语的能力。
知识卡片生成任务
{
"input":"知识卡片生成,请依据你掌握的医疗知识,根据输入疾病诊断术语生成它的知识卡片,包括它的定义描述、病因、病理、部位、疾病类型和临床表现(如症状、特征、分割、分类、性别、年龄、急性慢性、发病时间等)。输入:1型糖尿病伴有其他特指的并发症",
"output":"定义描述:1型糖尿病伴有其他特指的并发症是一种慢性代谢性疾病,主要特征是胰岛素分泌不足导致血糖升高,同时伴有其他特定的并发症。\n病因:1型糖尿病的病因主要是由于免疫系统攻击胰岛素产生细胞,导致胰岛素分泌不足或完全缺乏。\n病理:1型糖尿病的病理特点是胰岛细胞的自身免疫性损伤,导致胰岛细胞减少或消失,从而无法产生足够的胰岛素。\n部位:该疾病主要涉及胰岛细胞和全身各组织和器官。\n疾病类型:1型糖尿病是一种自身免疫性疾病,并且属于慢性代谢性疾病的一种。\n临床表现:1型糖尿病患者常表现为多饮、多尿、多食和体重下降等症状,伴随着血糖升高。此外,患者还可能出现疲乏、视力模糊、感染易发等并发症症状,如糖尿病酮症酸中毒、糖尿病肾病、糖尿病性神经病变等,并发症的类型和严重程度因个体差异而有所不同。\n补充:1型糖尿病通常在年轻人阶段发病,多发生在儿童和青少年时期,且多为突然发病,需要终身胰岛素治疗。与之相比,2型糖尿病更常见,主要见于成人,与肥胖等生活方式和遗传因素有关。"
}
{
"input":"知识卡片生成,请依据你掌握的医疗知识,根据输入手术操作术语生成它的知识卡片,包括它的定义描述、手术术式、作用部位、手术入路、手术疾病性质等信息。输入:回肠结肠切除术",
"output":"定义描述:回肠结肠切除术是一种外科手术,用于治疗回肠和结肠的相关疾病。回肠是小肠的一部分,位于胃后腹腔中。结肠是大肠的一部分,位于胃后腹腔和直肠之间。回肠结肠切除术可以用于治疗炎症性肠病、结肠癌、先天性结肠疾病等引起的回肠结肠疾病。\n手术术式:切除术\n作用部位:回肠和结肠\n手术入路:腹腔镜手术入路、开腹手术入路\n手术疾病性质:回肠结肠疾病,例如炎症性肠病、结肠癌、先天性结肠疾病等。"
}
基于ICD代码的层次树构建任务
ICD标准术语库包括ICD-10医保2.0版和ICD-9-CM3医保2.0版,通过解析术语代码构建了两个相应的代码树,分别为ICD-10_医保v2_tree.json和ICD-9-CM3_医保v2_tree.json。
例如:
ICD-10_医保v2_tree.json:
{
"A00-B99":{
"code":"A00-B99",
"term_name":"某些传染病和寄生虫病",
"father":null,
"child":[
"A00-A09",
"A15-A19",
"A20-A28",
"A30-A49",
"A50-A64",
"A65-A69",
"A70-A74",
"A75-A79",
"A80-A89",
"A92-A99",
"B00-B09",
"B15-B19",
"B20-B24",
"B25-B34",
"B35-B49",
"B50-B64",
"B65-B83",
"B85-B89",
"B90-B94",
"B95-B98",
"B99-B99"
],
"level":1,
"level_name":"章"
}
}
ICD-9-CM3_医保v2_tree.json:
{
"00.09":{
"code":"00.09",
"term_name":"其他治疗性超声",
"father":"00.0",
"child":[
"00.0900",
"00.0900x001",
"00.0901"
],
"level":4,
"level_name":"细目"
}
}{
"00.09":{
"code":"00.09",
"term_name":"其他治疗性超声",
"father":"00.0",
"child":[
"00.0900",
"00.0900x001",
"00.0901"
],
"level":4,
"level_name":"细目"
}
}
对应的SFT数据如下:
{
"input":"在国际疾病诊断分类编码ICD-10医保版2.0中,肠道传染病属于",
"output":"某些传染病和寄生虫病"
}
{
"input":"在手术操作分类编码ICD-9-CM-3医保版2.0中,操作和介入,NEC属于",
"output":"操作和介入不能分类于他处"
}
术语规范化任务
{
"input":"请扮演一个医学专家,你需要从候选标准术语列表中找出输入常用术语对应的标准术语,注意对应的标准术语可能有多个。若找到对应的标准术语则输出这些标准术语,有多个标准术语则用'##'分隔;若找不到对应的标准术语则输出“无对应标准术语”,并推荐可能对应的标准术语。\n注意:1. 保证输出的标准术语是否在候选术语列表中;2. 不要进行多余的解释和说明。\n示例:\n常用术语:横结肠造口还纳术\n候选标准术语列表:\n其他永久性回肠造口术\n结肠造口术NOS\n小肠造口修复术\n纵隔气管造口术\n食管造口术NOS\n其他肠造口术\n其他胆囊造口术\n开放性和其他横结肠切除术\n胃肠吻合口切除伴胃空肠吻合术\n大肠外置术\n输出:\n",
"output":"无对应标准术语,根据当前候选标准术语列表的情况,推荐可能对应的标准词为:大肠造口闭合术"
}
{
"input":"请扮演一个医学专家,你需要从候选标准术语列表中找出输入常用术语对应的标准术语,注意对应的标准术语可能有多个。若找到对应的标准术语则输出这些标准术语,有多个标准术语则用'##'分隔;若找不到对应的标准术语则输出“无对应标准术语”,并推荐可能对应的标准术语。\n注意:1. 保证输出的标准术语是否在候选术语列表中;2. 不要进行多余的解释和说明。\n示例:\n常用术语:横结肠造口还纳术\n候选标准术语列表:\n肠造口修复术NOS\n暂时性结肠造口术\n小肠造口闭合术\n小肠外置术\n其他胃造口术\n腹内疝松解还纳术\n大肠造口闭合术\n气管食管造口术\n小肠导管或肠造口术装置置换\n大肠-大肠吻合术\n输出:\n",
"output":"大肠造口闭合术"
}
2、知识增强检索
模型利用生成的知识卡片检索给定提词的候选词,并在构建的层次树中定位每个候选词的路径,建立子树,在检索步骤中,选择开源的M3E模型作为文本嵌入模型。这个可以采用我们前面所提到的外挂知识库。
3、分层推理
模型通过子树逐层推理出最终结果。这块没做具体的详细的介绍。
以下是具体的实验效果:
地址:https://github.com/openmedlab/PULSE/tree/main
总结
本文穿讲了最近关于大模型的一些有趣事情,如最后的GPT4架构问题,此外还从知识图谱构建中的术语归一化、NormPULSE微调大模型在术语标准化上的实现两个大方面进行了介绍,其中比较有意思的是其对微调数据的构造以及转换。
随着时间的推移,大模型与知识图谱相结合的领域将会越来越多,感兴趣的可以关注这方面的工作,并且阅读PULSE的源码进行实操,会有收获。
参考文献
1、https://github.com/openmedlab/PULSE/tree/main
2、http://openkg.cn/dataset/yidu-n7k
3、https://tianchi.aliyun.com/dataset/95414
4、https://www.semianalysis.com/p/gpt-4-architecture-infrastructure
5、 https://threadreaderapp.com/thread/1678545170508267522.html
6、https://thealgorithmicbridge.substack.com/p/gpt-4s-secret-has-been-revealed
7、https://dl.acm.org/doi/pdf/10.1145/3219819.3220007
关于我们
老刘,刘焕勇,NLP开源爱好者与践行者,主页:https://liuhuanyong.github.io。
老刘说NLP,将定期发布语言资源、工程实践、技术总结等内容,欢迎关注。
对于想加入更优质的知识图谱、事件图谱实践、相关分享的,可关注公众号,在后台菜单栏中点击会员社区->会员入群加入。