以ChatGPT、GPT-4等为代表的大语言模型(Large Language Model, LLM)掀起了新一轮自然语言处理领域的研究浪潮,展现出了类通用人工智能(AGI)的能力,受到业界广泛关注。在LLM大行其道的背景下,几乎所有的NLP任务都转化为了基于提示的语言生成任务。然而,在中文医学NLP社区中,尚未有一个统一任务形式的评测基准。
为推动LLM在医疗领域的发展和落地,华东师范大学王晓玲教授团队联合阿里巴巴天池平台,复旦大学附属华山医院,东北大学,哈尔滨工业大学(深圳),鹏城实验室与同济大学推出PromptCBLUE评测基准, 对CBLUE基准进行二次开发,将16种不同的医疗场景NLP任务全部转化为基于提示的语言生成任务,形成首个中文医疗场景的LLM评测基准。PromptCBLUE作为CCKS-2023的评测任务之一,已在阿里巴巴天池大赛平台上线进行开放评测,欢迎各位师生报名参赛(刷榜)。
考虑到目前的LLM训练可能涉及商业数据,大规模模型开源受到各种外在条件的限制,我们将对PromptCBLUE评测开放两个赛道:
同时,为辅助LLM在医疗领域的各项能力提升,我们同时开源以下数据/模型资源供参赛者使用:
Text2DT | 中文医疗在线问诊数据集ChatMed_Consult_Dataset | 中文问诊大模型ChatMed-Consult | 中医药指令数据集ChatMed_TCM_Dataset | 中医药大模型ChatMed-TCM | Candidate-Soups: 提升非自回归翻译模型的有效trick
2023/07/18 添加了基于LlaMA的LoRA微调代码;并且使用vllm对模型推理加速(相比于huggingface的生成加速2.5倍左右)。
2023/07/02 开源PromptCBLUE的各个prompt模板;同时,对模板采用ChatGPT进行扩充,将会把提示模板扩展到500个左右。
2023/06/25 测试ChatGPT在四千tokens长度以内,采用In-context learning模式,完成PromptCBLUE评测表现!
2023/05/12 更新ChatGLM-6B + Lora方法在dev集表现(在相同训练步数,相同最大长度限制下,比p-tuning表现较好)。同时添加baseline代码的requirements.txt
2023/5/09 上传了基于ChatGLM-B + Lora方法的参数高效微调代码,作为baseline,代码见ChatGLM+lora code
2023/5/05 上传了基于ChatGLM + P-tuning的参数高效微调代码,作为baseline,代码见ChatGLM+ptuning code。快速上手,请参看ChatGLM+ptuning方法的README。
2023/4/25 PromptCBLUE(v0.1)上线了,将持续更新! 🎉🎉🎉
PromptCBLUE | - |
---|---|
版本号 | v0.2 |
prompt 模板数量 | 94 |
训练集 | 68900 |
验证集 | 10360 |
测试集A | 10320 |
测试集B | 10320 |
注意,在我们发布的数据集中,我们采用了94个指令微调模板,参赛者在训练数据中可以采用其他模板或者基于ChatGPT等模型生成的指令进行训练,但是在测试集预测时,必须采用数据原本的指令,即只能将测试集样本的input字段直接输入到自己的LLM中进行回复预测。
我们采用94个指令微调模板,对CBLUE基准中的各个任务进行。经过改造后,医疗文本NLP数据集都将转化为如下格式。input字段是模型的输入,target字段是模型的输出,type是原任务类型(不作为模型输入),answer_choices字段是选项,只有分类、术语标准化、推理类任务上该字段才会有意义。
{
"input": str,
"target": str,
"type": str,
"answer_choices": str,
"sample_id": str,
}
为了将CBLUE中的各种不同任务适配为符合LLM的输入输出格式,我们对CBLUE各个数据集进行了相应的改造。详见CBLUE任务改造
朱威, 华东师范大学, wzhu@stu.ecnu.edu.cn
陈漠沙,阿里巴巴,Chenmosha.cms@alibaba-inc.com
王晓玲, 华东师范大学,xlwang@cs.ecnu.edu.cn
陈亮, 复旦大学附属华山医院
黄萱菁,复旦大学
贺樑,华东师范大学
杨晓春,东北大学
汤步洲, 哈尔滨工业大学(深圳)&鹏城实验室
王昊奋,同济大学
注意 本项目中的datasets/toy_examples文件夹只为帮助说明文件格式。参赛选手需要到PromptCBLUE通用赛道评测网站或者PromptCBLUE通用赛道评测网站进行完整数据集下载。
PromptCBLUE中将各个任务都已经转化为了根据prompt生成回复的统一格式,测试样本在test.json文件中,这个文件采用json line格式,每行是一个可json化的字符串,json化后"input"字段作为LLM输入,"target"字段为空字符串,待选手们填入模型回复。
考虑到不同的大模型输出结果的格式可能会不同,为完成测试集提交和获得评测得分,参与者需要提供两个文件到评测平台:
评测参与者需要提交自己训练的LLM在测试集上的生成结果,命名为test_predictions.json文件,保持json line格式。样本数量,样本顺序要与官方提供的test.json文件一致。请大家在提交时注意:每个test样本的答案都需要提交,且不能更改样本"sample_id"字段,否则评测系统将会因为样本数量不对应而无法输出分数。
参赛者需要提供解析test_predictions.json文件转化为results.json文件的代码,命名为post_generate_process.py 。本代码只限于使用python标准库,并可采用如下命令运行:
python post_generate_process.py test_predictions.json results.json
results.json文件整体可以采用json.load()方法加载。其内部结构如下:
{
"task_name": [
{
"sample_id": str,
"answer": Union[str, dict],
}
]
}
results.json文件的更具体格式说明见结构化预测结果格式说明。
在参赛过程中,选手需要将test_predictions.json文件与post_generate_process.py文件打包为test_predictions.zip文件,提交到天池平台的镜像中进行运行,得到results.json文件。注意在zip文件中不要添加文件夹,即两个被打包的文件必须置于zip文件的顶层。 选手可以使用 zip test_predictions.zip test_predictions.json post_generate_process.py
命令进行压缩。比赛组织方将会根据天池镜像中的results.json文件打分。选手手动上传的results.json文件不作为评分依据。
选手可参考post_generate_process.py样例对toy_examples中的dev集或者test集预测结果进行格式转化:
python src/for_eval/post_generate_process.py datasets/PromptCBLUE/toy_examples/dev.json datasets/PromptCBLUE/toy_examples/dev_structured.json
python src/for_eval/post_generate_process.py datasets/PromptCBLUE/toy_examples/test_predictions.json datasets/PromptCBLUE/toy_examples/results.json
本评测任务只有一个测试集,但是其包含多个任务的测试样本,我们采用在各个任务上分别计分的方式进行评测。各个任务上的评测指标如下:
上述任务中,F1(micro/macro)或者Rouge-L将作为每个任务的主要指标。
总体打分的计算:我们将对每个任务上的F1(micro/macro)或者Rouge-L分数进行平均,得到总体分数,作为榜单排名的及评奖的依据。
PromptCBLUE的目标是评估LLM在不同医疗任务的总体表现,所以评测参与者只能使用一个LLM模型主干来完成整个测试集的评测。对于测试集中的每一个样本,模型输出必须是一个仅用LLM模型主干上连接的语言模型预测头(LM-head)输出的文本序列,LM-head必须是所有任务共享的。选手的最终模型不能在LM-head以外的其他模块产生与任务直接相关的或是(在模型训练过程中)参与损失计算的logits。
如果参与者使用了参数高效微调方法,则其总共使用的参数高效微调模块的总参数量不得超过其LLM模型主干的1%。
所有评测参与团队需要在提交测试集时,对其模型训练/微调方法进行介绍,也需要注明其训练数据来源。
考虑到目前的LLM训练可能涉及商业数据,大规模模型开源受到各种外在条件的限制,我们将对PromptCBLUE评测开放两个榜单:(1) 通用榜,接受来自企业,高校,开源社区,各类研究团队或者个人进行测试提交评测,不要求其对使用的LLM模型底座开源。但排名靠前的团队需要提供可访问的网页demo地址(最少1天使用权限)供组织者抽查审核。(2) 开源榜,接受各类参赛团队提交评测,但是其必须使用开源的大模型底座,且只能使用开源的或者可以全部提交至比赛组织方审核的数据集进行训练/微调。开源榜排名靠前的团队需要提交模型实现代码至组织者进行审核。
评测参与者不得直接使用GPT-4, ChatGPT,文心一言,ChatGLM等公开模型api进行测试集预测(上述模型的研发机构除外);上述大模型基座可以作为数据增广的来源。
评测参与者可以使用任何资源进行LLM训练,包括采用自有的医疗领域(有标注/无标注)数据进行训练。
评测参与者不得直接使用GPT-4, ChatGPT,文心一言,ChatGLM等公开模型api进行测试集预测(上述模型的研发机构除外);上述大模型基座可以作为数据增广的来源。
我们鼓励评测参与者采用自有的LLM生成预测结果的同时生成其思维过程。LLM的思维/推理过程将会成为评测比赛中“创新奖”的评选标准之一。
PromptCBLUE在CCKS-2023评测的更多规则详见PromptCBLUE通用赛道评测网站或者PromptCBLUE通用赛道评测网站。
我们基于ChatGLM-6B模型构建PromptCBLUE的baseline模型。代码和运行操作详见PromptCBLUE-baseline模型。我们考虑以下baseline方法:
另外,大家都知道ChatGPT作为强大的大模型,其in-context learning(ICL)能力非常强,所以我们也评测了ChatGPT(截止2023年6月25日)在PromptCBLUE的dev集表现。在预测每个dev样本时,采用训练样本中的同任务下固定的3-20个样例(根据样例长度,尽量塞满ChatGPT的最大允许长度)作为demonstrations,供ChatGPT学习并相应的给出dev样本的预测结果。
在dev集上实验结果如下:
task | metric | ChatGLM-6B + ptuning | ChatGLM-6B + LoRA | ChatGLM-6B + AdaLoRA | ChatGPT + ICL |
---|---|---|---|---|---|
CMeEE-V2 | micro-F1 | 0.6359 | 0.6725 | 0.6634 | 0.4698 |
CMeIE | micro-F1 | 0.3765 | 0.4555 | 0.4290 | 0.3058 |
CHIP-CDN | micro-F1 | 0.7805 | 0.8461 | 0.8465 | 0.6069 |
CHIP-CDEE | micro-F1 | 0.4914 | 0.5456 | 0.5131 | 0.2838 |
CHIP-STS | micro-F1 | 0.7696 | 0.8081 | 0.7618 | 0.7108 |
CHIP-CTC | macro-F1 | 0.8046 | 0.8086 | 0.7398 | 0.5253 |
KUAKE-IR | micro-F1 | 0.6154 | 0.6835 | 0.7657 | 0.5183 |
KUAKE-QIC | macro-F1 | 0.8113 | 0.7390 | 0.8400 | 0.4851 |
KUAKE-QQR | micro-F1 | 0.5537 | 0.6348 | 0.6738 | 0.3040 |
KUAKE-QTR | micro-F1 | 0.4701 | 0.5428 | 0.5076 | 0.2318 |
CHIP-MDCFNPC | micro-F1 | 0.6865 | 0.7366 | 0.7531 | 0.5854 |
IMCS-V2-DAC | macro-F1 | 0.7147 | 0.7639 | 0.7168 | 0.3455 |
IMCS-V2-NER | micro-F1 | 0.8508 | 0.8709 | 0.8779 | 0.5684 |
IMCS-V2-SR | micro-F1 | 0.6168 | 0.6330 | 0.6458 | 0.3305 |
IMCS-V2-MRG | Rouge-L | 0.4707 | 0.4663 | 0.4811 | 0.3253 |
MedDG | Rouge-L | 0.1035 | 0.1117 | 0.1298 | 0.1361 |
Overall | avg score | 0.6095 | 0.6448 | 0.6466 | 0.4208 |
我们将会持续不断地输出各种不同的baseline模型与代码给大家,希望大家持续关注本repo:
PromptCBLUE-CCKS2023评测的钉钉群为:
PromptCBLUE与大模型技术交流微信交流群二维码(截止至6月23日有效):
本项目基于CBLUE基准等数据集进行二次开发,在此感谢中国中文信息学会医疗健康与生物信息专业委员会和天池平台提供的优质评测基准CBLUE:
Logo中的小学霸羊驼是由midjourney自动生成。
本项目相关资源仅供学术研究之用,严禁用于商业用途。
如有问题,请在GitHub Issue中提交。