中文医学基准测试,全面评估医疗AI模型的知识与临床能力
Chinese Medical Benchmark (CMB)是一个全面的中文医学基准测试项目,由CMB-Exam和CMB-Clin两部分组成。CMB-Exam包含11200道测试题,覆盖6大类28个子类的医学知识。CMB-Clin提供74个复杂医疗咨询案例。该项目致力于评估医疗AI模型的知识储备和临床推理能力,为中文医疗AI发展提供参考标准。
git clone "https://github.com/FreedomIntelligence/CMB.git" && cd CMB && unzip "./data/CMB.zip" -d "./data/" && rm "./data/CMB.zip"
from datasets import load_dataset # CMB-Exam数据集(单选和多选题) exam_datasets = load_dataset('FreedomIntelligence/CMB','exam') # CMB-Clin数据集 clin_datasets = load_dataset('FreedomIntelligence/CMB','clin')
请查看排行榜。
{ "exam_type": "医师考试", "exam_class": "执业医师", "exam_subject": "口腔执业医师", "question": "患者,男性,11岁。近2个月来时有低热(37~38℃),全身无明显症状。查体无明显阳性体征。X线检查发现右肺中部有一直径约0.8cm类圆形病灶,边缘稍模糊,肺门淋巴结肿大。此男孩可能患", "answer": "D", "question_type": "单项选择题", "option": { "A": "小叶型肺炎", "B": "浸润性肺结核", "C": "继发性肺结核", "D": "原发性肺结核", "E": "粟粒型肺结核" } },
{ "id": 0, "title": "案例分析-腹外疝", "description": "现病史\n(1)病史摘要\n 患者,男,49岁,3小时前解大便后出现右下腹疼痛,右下腹可触及一包块,既往体健。\n(2)主诉\n 右下腹痛并自扪及包块3小时。\n\n体格检查\n体温:37.8℃,脉搏101次/分,呼吸22次/分,血压100/60mmHg,腹部柔软,未见胃肠型蠕动波,肝脾肋下未触及,右侧腹股沟区可触及一圆形肿块,约4cm×4cm大小,有压痛、边界不清,且肿块位于腹股沟韧带上内侧。\n\n辅助检查\n(1)实验室检查\n 血常规:白细胞5.0×109/L,中性粒细胞78%。\n 尿常规正常。\n(2)多普勒超声检查\n 沿腹股沟纵切可见一多层分布的混合回声区,宽窄不等,远端膨大,边界整齐,长约4~5cm。\n(3)腹部X线检查\n 可见阶梯状液气平。", "QA_pairs": [ { "question": "简述该患者的诊断及诊断依据。", "solution": "诊断:嵌顿性腹股沟斜疝合并肠梗阻。\n诊断依据:\n①右下腹痛并自扪及包块3小时;\n②有腹胀、呕吐,类似肠梗阻表现;腹部平片可见阶梯状液平,考虑肠梗阻可能;腹部B超提示腹部包块内可能为肠管;\n③有轻度毒性反应或中毒反应,如体温37.8℃,脉搏101次/分,中性粒细胞78%;\n④腹股沟区包块位于腹股沟韧带上内侧。" }, { "question": "简述该患者的鉴别诊断。", "solution": "(1)睾丸鞘膜积液:肿块完全局限在阴囊内,上界可以清楚触及;透光试验多为阳性,而疝块则不能透光。\n(2)交通性鞘膜积液 :肿块外形与睾丸鞘膜积液相似。每日起床后或站立活动时肿块缓慢出现并增大。平卧或睡觉后肿块逐渐缩小,挤压肿块体积也可逐渐缩小。透光试验为阳性。\n(3)精索鞘膜积液:肿块较小,在腹股沟管内,牵拉同侧睾丸可见肿块移动。\n(4)隐睾:腹股沟管内下降不全的睾丸可被误诊为斜疝或精索鞘膜积液。隐睾肿块较小,挤压时可出现特有的胀痛感觉。如患侧阴囊内睾丸缺如,则诊断更为明确。\n(5)急性肠梗阻:肠管被嵌顿的疝可伴发急性肠梗阻,但不应仅满足于肠梗阻的诊断而忽略疝的存在;尤其是患者比较肥胖或疝块较小时,更易发生这类问题而导致治疗错误。\n(6)此外,腹股沟区肿块还应与以下疾病鉴别:肿大的淋巴结、动(静)脉瘤、软组织肿瘤、脓肿、圆韧带囊肿、子宫内膜异位症等。" }, { "question": "简述该患者的治疗原则。", "solution": "嵌顿性疝原则上需要紧急手术治疗,以防止疝内容物坏死并解除伴发的肠梗阻。术前应做好必要的准备,如有脱水和电解质紊乱,应迅速补液纠正。手术关键在于正确判 断疝内容物的活力,然后根据病情确定处理方法。在扩张或切开疝环、解除疝环压迫的前提下,凡肠管呈紫黑色,失去光泽和弹性,刺激后无蠕动和相应肠系膜内无动脉搏动者,即可判定为肠坏死。如肠管尚未坏死,则可将其送回腹腔,按一般易复性疝处理,即行疝囊高位结扎+疝修补术。如肠管确已坏死或一时不能肯定肠管是否已失去活力时,则应在患者全身情况允许的前提下,切除该段肠管并进行一期吻合。凡施行肠切除吻合术的患者,因手术区污染,在高位结扎疝囊后,一般不宜作疝修补术,以免因感染而致修补失败。" } ] },
configs/model_config.yaml
:
my_model:
model_id: 'my_model'
load:
# # HuggingFace模型权重
config_dir: "path/to/full/model"
# # 使用Peft加载
# llama_dir: "path/to/base"
# lora_dir: "path/to/lora"
device: 'cuda' # 仅支持cuda
precision: 'fp16' #
# 支持transformers.GenerationConfig中的所有参数
generation_config:
max_new_tokens: 512
min_new_tokens: 1
do_sample: False
</details>
在workers/mymodel.py
中:
将模型和分词器加载到CPU
def load_model_and_tokenizer(self, load_config):
'''
参数:
load_config:`configs/model_config.yaml`中的`load`键
返回:
model, tokenizer:均在cpu上
'''
hf_model_config = {"pretrained_model_name_or_path": load_config['config_dir'],'trust_remote_code': True, 'low_cpu_mem_usage': True}
hf_tokenizer_config = {"pretrained_model_name_or_path": load_config['config_dir'], 'padding_side': 'left', 'trust_remote_code': True}
precision = load_config.get('precision', 'fp16')
device = load_config.get('device', 'cuda')
if precision == 'fp16':
hf_model_config.update({"torch_dtype": torch.float16})
model = AutoModelForCausalLM.from_pretrained(**hf_model_config)
tokenizer = AutoTokenizer.from_pretrained(**hf_tokenizer_config)
model.eval()
return model, tokenizer # cpu
系统提示词
@property
def system_prompt(self):
'''
预置到每个输入前的提示词。
'''
return "你是一个人工智能助手。"
指令模板
@property
def instruction_template(self):
'''
指令输入的模板。必须包含'{instruction}'占位符。
'''
return self.system_prompt + '问:{instruction}\n答:'
带少样本示例的指令模板
@property
def instruction_template_with_fewshot(self,):
'''
指令输入的模板。此模板中必须包含'{instruction}'占位符。
'''
return self.system_prompt + '{fewshot_examples}问:{instruction}\n答:' # 必须带有 {instruction} 和 {fewshot_examples} 的占位符
每个少样本示例的模板
@property
def fewshot_template(self):
'''
每个少样本示例的模板。每个少样本示例会被连接并放入上面的`{fewshot_examples}`占位符中。
此模板中必须包含`{user}`和`{gpt}`占位符。
'''
return "问:{user}\n答:{gpt}\n" # 必须带有 {user} 和 {gpt} 的占位符
</details>from workers.mymodel import MyModelWorker # 在此处修改 id2worker_class = { "my_model": MyModelWorker, # 在此处修改 }
修改 generate_fewshot.sh
:
model_id="baichuan-13b-chat" n_shot=3 test_path=data/CMB-Exam/CMB-test/CMB-test-choice-question-merge.json val_path=data/CMB-Exam/CMB-val/CMB-val-merge.json output_dir=data/fewshot python ./src/generate_fewshot.py \ --use_cot \ # 是否使用思维链模板 --n_shot=$n_shot \ --model_id=$model_id \ --output_dir=$output_dir \ --val_path=$val_path \ --test_path=$test_path
然后运行:
</details>bash generate_fewshot.sh
generate_answers.sh
:
# # 输入文件路径
# data_path='data/CMB-Exam/CMB-test/CMB-test-choice-question-merge.json'
# data_path='data/CMB-Clin/CMB-Clin-qa.json'
task_name='Zero-test-cot'
port_id=27272
model_id="my_model" # 与 `configs/model_config.yaml` 中相同
accelerate launch \
--gpu_ids='all' \
--main_process_port 12345 \
--config_file ./configs/accelerate_config.yaml \ # 加速配置文件路径
./src/generate_answers.py \ # 主程序
--model_id=$model_id \ # 模型ID
--use_cot \ # 是否使用思维链模板
--use_fewshot \ # 是否使用少样本学习
--batch_size 3 \
--input_path=$test_data_path \ # 输入路径
--output_path=./result/${task_name}/${model_id}/answers.json \ # 输出路径
--model_config_path="./configs/model_config.yaml" # 模型配置文件路径
</details>
步骤1:生成并提取答案
bash generate_answers.sh
步骤2:对你的答案进行评分
将步骤1中的输出提交到提交页面并下载评分结果。如果您希望公开模型的性能,请将相关结果连同模型名称和所属机构发送至cmedbenchmark@163.com。我们将及时审核并更新。
</details>您可以在 ./configs/model_config.yaml
中配置生成的超参数。我们发现,对于大多数模型,较低的温度通常会带来更高的性能。然而,其他超参数的影响尚不明确。
您可以修改 src/utils.py
中的 match_choice()
函数。不同模型的输出模式各不相同,这使得我们很难用单一的正则表达式考虑所有模型的所有情况。如果您为我们论文中评估的模型找到了更好的匹配策略,请提交您的结果以进行更新。
{系统提示词}
<{角色1}>:以下是中国{考试类型}中{考试科目}考试的一道{题目类型},不需要做任何分析和解释,直接输出答案选项。。
{题目}
A. {选项A}
B. {选项B}
...
<{角色2}>:A
[n个少样本示例,零样本情况下n为0]
<{角色1}>:以下是中国{考试类型}中{考试科目}考试的一道{题目类型},不需要做任何分析和解释,直接输出答案选项。
{题目}
A. {选项A}
B. {选项B}
...
<{角色2}>:
{系统提示词}
<{角色1}>:以下是中国{考试类型}中{考试科目}考试的一道{题目类型},请分析每个选项,并最后给出答案。
{题目}
A. {选项A}
B. {选项B}
...
<{角色2}>:.......所以答案是A
[n个少样本示例,零样本情况下n为0]
<{角色1}>:以下是中国{考试类型}中{考试科目}考试的一道{题目类型},请分析每个选项,并最后给出答案。
{题目}
A. {选项A}
B. {选项B}
...
<{角色2}>:
{系统提示词}
<{角色1}>:以下是一位病人的病例:
{描述}
{问答对[0]['问题']}
<{角色2}>:..........
[n个问题,基于问答对的长度]
你是一位专门评估其他语言模型所提供答案质量的AI评估员。你的主要目标是根据答案的流畅度、相关性、完整性和医学专业性来对其进行评分。使用以下量表来评估每个标准:
流畅度:
1:完全破碎且无法阅读的句子片段
2:大部分破碎,只有少数可读的词语
3:中等流畅但词汇有限
4:在表达复杂主题时大致连贯
5:人类水平的流畅度
相关性:
1:与问题完全无关
2:与问题有一些关系,但大部分偏离主题
3:相关,但缺乏重点或关键细节
4:高度相关,涉及问题的主要方面
5:直接相关且精确针对问题
完整性:
1:极度不完整
2:几乎不完整,信息有限
3:中等完整,包含一些信息
4:大致完整,展示了大部分信息
5:完全完整,呈现了所有信息
医学专业性:
1:使用普通语言,没有医学术语
2:具备一些医学知识,但缺乏深入细节
3:清晰地传达中等复杂的医学信息
4:显示出对医学术语的扎实掌握,但在细节上有一些小错误
5:在所有呈现的医学知识中完全正确
你将获得以下信息:
- 一段描述
- 基于描述的对话(可选)
- 基于描述和对话的问题
- 问题的解决方案
- 模型对问题的回答
[描述]
{描述}
[描述结束]
[对话]
{历史}
[对话结束]
[问题]
{问题}
[问题结束]
[解决方案]
{解决方案}
[解决方案结束]
[回答]
{回答}
[回答结束]
请确保以JSON格式提供您的评估结果,并且只提供JSON,对每个提到的标准进行单独评分,如下例所示:
{"流畅度": 3, "相关性": 3, "完整性": 3, "专业性": 3}
</details>
如果您打算将我们的数据集用于训练或评估,请使用以下引用:
@article{wang2023cmb,
title={CMB: A Comprehensive Medical Benchmark in Chinese},
author={Wang, Xidong and Chen, Guiming Hardy and Song, Dingjie and Zhang, Zhiyi and Chen, Zhihong and Xiao, Qingying and Jiang, Feng and Li, Jianquan and Wan, Xiang and Wang, Benyou and others},
journal={arXiv preprint arXiv:2308.08833},
year={2023}
}
@misc{cmedbenchmark,
title={CMB: Chinese Medical Benchmark},
author={Xidong Wang*, Guiming Hardy Chen*, Dingjie Song*, Zhiyi Zhang*, Qingying Xiao, Xiangbo Wu, Feng Jiang, Jianquan Li, Benyou Wang},
note={Xidong Wang, Guiming Hardy Chen, Dingjie Song, and Zhiyi Zhang contributed equally to this github repo.},
year = {2023},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/FreedomIntelligence/CMB}},
}
我们感谢深圳市大数据研究院对本项目的巨大支持。
我们感谢以下医生参与CMB-Clin的人工评估:
一键生成PPT和Word,让学习生活更轻松
讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时 具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号