Project Icon

CMB

中文医学基准测试,全面评估医疗AI模型的知识与临床能力

Chinese Medical Benchmark (CMB)是一个全面的中文医学基准测试项目,由CMB-Exam和CMB-Clin两部分组成。CMB-Exam包含11200道测试题,覆盖6大类28个子类的医学知识。CMB-Clin提供74个复杂医疗咨询案例。该项目致力于评估医疗AI模型的知识储备和临床推理能力,为中文医疗AI发展提供参考标准。

CMB 中国医学基准测试

Python 3.9 Pytorch 1.13.0 transformers accelerate

CMB

📃 论文 • 🌐 网站 • 🤗 HuggingFace
中文 | English

🌈 更新

🌐 下载数据

  • (推荐)下载压缩文件并解压:
    git clone "https://github.com/FreedomIntelligence/CMB.git" && cd CMB && unzip "./data/CMB.zip" -d "./data/" && rm "./data/CMB.zip"
    
  • 或查看HuggingFace数据集以按如下方式加载我们的数据:
    from datasets import load_dataset
    # CMB-Exam数据集(单选和多选题)
    exam_datasets = load_dataset('FreedomIntelligence/CMB','exam')
    # CMB-Clin数据集
    clin_datasets = load_dataset('FreedomIntelligence/CMB','clin')
    
  • 或查看百度网盘

🥇 排行榜

请查看排行榜

🥸 数据集介绍

CMB

组成部分

  • CMB-Exam:全面的多层次医学知识评估
    • 结构:6大类和28个子类,查看目录
    • CMB-test:每个子类400个问题,共11200个问题
    • CMB-val:280个带有解答和解释的问题;用作思维链和少样本学习的来源
    • CMB-train:269359个问题用于医学知识注入
  • CMB-Clin:74个复杂医疗咨询案例

CMB-Exam项目

{
    "exam_type": "医师考试",
    "exam_class": "执业医师",
    "exam_subject": "口腔执业医师",
    "question": "患者,男性,11岁。近2个月来时有低热(37~38℃),全身无明显症状。查体无明显阳性体征。X线检查发现右肺中部有一直径约0.8cm类圆形病灶,边缘稍模糊,肺门淋巴结肿大。此男孩可能患",
    "answer": "D",
    "question_type": "单项选择题",
    "option": {
        "A": "小叶型肺炎",
        "B": "浸润性肺结核",
        "C": "继发性肺结核",
        "D": "原发性肺结核",
        "E": "粟粒型肺结核"
    }
},
  • exam_type:主要类别
  • exam_class:子类别
  • exam_subject:具体科室或学科细分
  • question_type:单项选择题多项选择题

CMB-Clin 项目

{
    "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": "嵌顿性疝原则上需要紧急手术治疗,以防止疝内容物坏死并解除伴发的肠梗阻。术前应做好必要的准备,如有脱水和电解质紊乱,应迅速补液纠正。手术关键在于正确判断疝内容物的活力,然后根据病情确定处理方法。在扩张或切开疝环、解除疝环压迫的前提下,凡肠管呈紫黑色,失去光泽和弹性,刺激后无蠕动和相应肠系膜内无动脉搏动者,即可判定为肠坏死。如肠管尚未坏死,则可将其送回腹腔,按一般易复性疝处理,即行疝囊高位结扎+疝修补术。如肠管确已坏死或一时不能肯定肠管是否已失去活力时,则应在患者全身情况允许的前提下,切除该段肠管并进行一期吻合。凡施行肠切除吻合术的患者,因手术区污染,在高位结扎疝囊后,一般不宜作疝修补术,以免因感染而致修补失败。"
        }
    ]
},
  • title:疾病名称
  • description:患者信息
  • QA_pairs:基于描述的一系列问题及其解答

ℹ️ 如何评估和提交

修改模型配置文件

点击展开

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         

修改模型工作器

点击展开

workers/mymodel.py中:

  1. 将模型和分词器加载到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
    
  2. 系统提示词

    @property
    def system_prompt(self):
        '''
        预置到每个输入前的提示词。
        '''
        return "你是一个人工智能助手。"
    
  3. 指令模板

    @property
    def instruction_template(self):
        '''
        指令输入的模板。必须包含'{instruction}'占位符。
        '''
        return self.system_prompt + '问:{instruction}\n答:'
    
  4. 带少样本示例的指令模板

    @property
    def instruction_template_with_fewshot(self,):
        '''
        指令输入的模板。此模板中必须包含'{instruction}'占位符。
        '''
        return self.system_prompt + '{fewshot_examples}问:{instruction}\n答:'  # 必须带有 {instruction} 和 {fewshot_examples} 的占位符
    
  5. 每个少样本示例的模板

    @property
    def fewshot_template(self):
        '''
        每个少样本示例的模板。每个少样本示例会被连接并放入上面的`{fewshot_examples}`占位符中。
        此模板中必须包含`{user}`和`{gpt}`占位符。
        '''
        return "问:{user}\n答:{gpt}\n" # 必须带有 {user} 和 {gpt} 的占位符
    
### 修改 /src/constants.py
点击展开
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 

然后运行:

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"                   # 模型配置文件路径

运行评估并提交

点击展开

步骤1:生成并提取答案

bash generate_answers.sh

步骤2:对你的答案进行评分

步骤1中的输出提交到提交页面并下载评分结果。如果您希望公开模型的性能,请将相关结果连同模型名称和所属机构发送至cmedbenchmark@163.com。我们将及时审核并更新。

提高性能的技巧

尝试不同的解码策略

您可以在 ./configs/model_config.yaml 中配置生成的超参数。我们发现,对于大多数模型,较低的温度通常会带来更高的性能。然而,其他超参数的影响尚不明确。

修改答案匹配策略

您可以修改 src/utils.py 中的 match_choice() 函数。不同模型的输出模式各不相同,这使得我们很难用单一的正则表达式考虑所有模型的所有情况。如果您为我们论文中评估的模型找到了更好的匹配策略,请提交您的结果以进行更新。

提示词格式

CMB-Exam 提示词

CMB-Exam 项目

仅答案提示词

{系统提示词}

<{角色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}>:

CMB-Clin 提示词

CMB-Clin 项目

{系统提示词}

<{角色1}>:以下是一位病人的病例:
{描述}
{问答对[0]['问题']}
<{角色2}>:..........
[n个问题,基于问答对的长度]

CMB-Clin GPT-4 评估提示词

点击展开
你是一位专门评估其他语言模型所提供答案质量的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}

引用

如果您打算将我们的数据集用于训练或评估,请使用以下引用:

@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的人工评估:

    • 林士军 (香港中文大学(深圳)附属第二医院)
    • 常河
    • 许晓爽
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号