license: apache-2.0
language:
- zh
pipeline_tag: text-generation
tags:
- medical
WiNGPT2
WiNGPT 是一个基于GPT的医疗垂直领域大模型,旨在将专业的医学知识、医疗信息、数据融会贯通,为医疗行业提供智能化的医疗问答、诊断支持和医学知识等信息服务,提高诊疗效率和医疗服务质量。
介绍
WiNGPT(卫宁健康医疗语言大模型,以下简称WiNGPT)的研发和训练工作开始于2023年1月。
3月,卫宁健康人工智能实验室已完成了WiNGPT-001可行性验证并开始内测。WiNGPT-001采用通用的GPT架构、60亿参数,实现了从预训练到微调的全过程自研。
今年5月,WiNGPT-001训练的数据量已达到9720项药品知识、 18个药品类型、7200余项疾病知识、 2800余项检查检验知识、53本书籍知识、1100余份指南文档,总训练Token数达37亿。
7月,WiNGPT升级到7B并采用最新的模型架构,新增检索式增强生成能力,同时开始了13B模型的训练和行业邀测。
9月,WiNGPT迎来最新版本迭代,推出了全新的WiNGPT2,新版本可以被轻松扩展和个性化并用于下游各种应用场景。
为了回馈开源社区我们尝试开源了WiNGPT2-7B/14B版本。我们的初衷是希望通过更多的开源项目加速医疗语言大模型技术与行业的共同发展,最终惠及我们人类健康。
特点
核心功能
- 医学知识问答:可以回答关于医学、健康、疾病等方面的问题,包括但不限于症状、治疗、药物、预防、检查等。
- 自然语言理解:理解医学术语、病历等医疗文本信息,提供关键信息抽取和归类
- 多轮对话:可扮演各种医疗专业角色如医生与用户进行对话,根据上下文提供更加准确的答案。
- 多任务支持:支持32项医疗任务,八大医疗场景18个子场景。
模型架构
- 基于Transformer的70亿/140亿参数规模大语言模型, 采用RoPE相对位置编码、SwiGLU激活函数、RMSNorm,训练采用Qwen-7b1作为基础预训练模型。
主要特点
- 高准确度:基于大规模医疗语料库训练,具有较高的准确率和较低的误诊可能性。
- 场景导向:针对不同的医疗场景和真实需求进行专门优化和定制,更好的服务应用落地。
- 迭代优化:持续搜集和学习最新的医学研究,不断提高模型性能和系统功能。
如何使用
推理
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation import GenerationConfig
model_path = "WiNGPT2-7B-Chat"
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(model_path, trust_remote_code=True)
model = model.eval()
generation_config = GenerationConfig(
num_beams=1,
top_p=0.75,
top_k=30,
repetition_penalty=1.1,
max_new_tokens=1024
)
text = 'User: WiNGPT, 你好<|endoftext|>\n Assistant: '
inputs = tokenizer.encode(text, return_tensors="pt").to(device)
outputs = model.generate(inputs, generation_config=generation_config)
output = tokenizer.decode(outputs[0])
response = output.replace(inputs, '')
## 输出结果:你好!今天我能为你做些什么?<|endoftext|>
提示
WiNGPT2-7B-Chat使用了自定义的提示格式:
用户角色:User/Assistant
提示模板:User:[此处有空格]WiNGPT, 你好<|endoftext|>\n[此处有空格]Assistant:;多轮对话按此模板进行拼接,例如:
"User: WiNGPT, 你好<|endoftext|>\n Assistant:你好!今天我能为你做些什么?<|endoftext|>\n User: 你是谁?<|endoftext|>\n Assistant:"
解码时推荐使用repetition_penalty=1.1 [greedy search]
企业服务
训练数据
数据总览
医疗专业数据
来源 类型 数量 药品说明书 知识库 15000 条 多病种知识库 知识库 9720 项 医疗专业书籍 教材 300 本 临床路径知识库 知识库 1400 条 检查检验知识 知识库 110 万条 多学科临床指南 书籍 18 个科室共 1100 份 医疗知识图谱 知识库 256 万三元组 人工标注数据集 指令 5 万条 医学资格考试试题 试题 30 万条 医疗病例、报告 知识库 100 万条 其他公开数据
来源 类型 数量 医学科普书籍 书籍 500 本 其他多学科书籍 书籍 1000 本 代码 指令 20 万条 通用类试题 试题 300 万条 多种自然语言处理任务 指令 90 万条 互联网文本 互联网 300 万条 医疗问答、对话 指令 500 万条
继续预训练
- 扩充模型的医疗知识库:预训练数据+部分指令数据。
指令微调
- 从书籍、指南、病例、医疗报告、知识图谱等数据中自动化构建医疗指令集。
- 人工标注指令集,数据来源包括:电子病历系统、护理病历系统、PACS系统、临床科研系统、手术管理系统、公共卫生场景、医务管理场景以及工具助手场景。
- 采用 FastChat2、Self-Instruct3、Evol-Instruct4 等方案,对指令集进行扩展以及丰富指令集多样化形式。
数据工程
- 数据分类:根据训练阶段和任务场景进行分类。
- 数据清洗:去除无关信息,更正数据中的拼写错误,提取关键信息以及去隐私处理。
- 数据去重:采用 embedding 方法剔除重复数据。
- 数据采样:根据数据集的质量与分布需求进行有针对性的采样。
模型卡
训练配置与参数
名称 长度 精度 学习率 Weight_decay Epochs GPUs WiNGPT2-7B-Base 2048 bf16 5e-5 0.05 3 A100*8 WiNGPT2-7B-Chat 4096 bf16 5e-6 0.01 3 A100*8 分布式训练策略与参数
- deepspeed + cpu_offload + zero_stage3
- gradient_checkpointing
评测
- 中文基础模型评估 C-EVAL(Zero-shot/Few-shot)
平均 | 平均(Hard) | STEM | 社会科学 | 人文科学 | 其他 | |
---|---|---|---|---|---|---|
bloomz-mt-176B | 44.3 | 30.8 | 39 | 53 | 47.7 | 42.7 |
Chinese LLaMA-13B | 33.3 | 27.3 | 31.6 | 37.2 | 33.6 | 32.8 |
ChatGLM-6B* | 38.9 | 29.2 | 33.3 | 48.3 | 41.3 | 38 |
baichuan-7B | 42.8 | 31.5 | 38.2 | 52 | 46.2 | 39.3 |
Baichuan-13B | 53.6 | 36.7 | 47 | 66.8 | 57.3 | 49.8 |
Qwen-7B | 59.6 | 41 | 52.8 | 74.1 | 63.1 | 55.2 |
WiNGPT2-7B-Base | 57.4 | 42.7 | 53.2 | 69.7 | 55.7 | 55.4 |
- 中文医疗专业评估 MedQA-MCMLE(Zero-shot)
模型名称 | 平均 | 血液系统疾病 | 代谢、内分泌系统疾病 | 精神神经系统疾病 | 运动系统疾病 | 风湿免疫性疾病 | 儿科疾病 | 传染病、性传播疾病 | 其他疾病 |
---|---|---|---|---|---|---|---|---|---|
Baichuan-7B | 23.1 | 25.6 | 20.2 | 25.8 | 17.9 | 26.5 | 20.6 | 26.1 | 17.1 |
Baichuan-13B-Base | 37.2 | 34.4 | 36.2 | 40.7 | 38.4 | 57.1 | 31.6 | 30.8 | 34.3 |
Baichuan2-7B-Base | 46.4 | 46.9 | 41.4 | 53.8 | 48.3 | 50.0 | 38.6 | 52.7 | 42.9 |
Baichuan2-13B-Base | 62.9 | 68.8 | 64.4 | 69.7 | 64.9 | 60.3 | 50.9 | 61.2 | 62.9 |
HuatuoGPT-7B | 22.9 | 14.6 | 17.2 | 31.2 | 25.8 | 14.3 | 22.4 | 23.1 | 17.1 |
MedicalGPT | 17.9 | 21.9 | 15.5 | 19.5 | 9.3 | 7.1 | 16.7 | 20.9 | 9.5 |
qwen-7b-Base | 59.3 | 55.2 | 56.9 | 57.0 | 60.9 | 60.3 | 50.4 | 60.4 | 61.0 |
WiNGPT2-7B-Base | 82.3 | 83.3 | 82.8 | 86.0 | 81.5 | 85.7 | 75.1 | 78.0 | 80 |
** 目前公开测评存在一定局限性,结果仅供参考; ** 更多专业测评敬请期待。
局限性与免责声明
(a) WiNGPT2 是一个专业医疗领域的大语言模型,可为一般用户提供拟人化AI医生问诊和问答功能,以及一般医学领域的知识问答。对于专业医疗人士,WiNGPT2 提供关于患者病情的诊断、用药和健康建议等方面的回答的建议仅供参考。
(b) 您应理解 WiNGPT2 仅提供信息和建议,不能替代医疗专业人士的意见、诊断或治疗建议。在使用 WiNGPT2 的信息之前,请寻求医生或其他医疗专业人员的建议,并独立评估所提供的信息。
(c) WiNGPT2 的信息可能存在错误或不准确。卫宁健康不对 WiNGPT2 的准确性、可靠性、完整性、质量、安全性、及时性、性能或适用性提供任何明示或暗示的保证。使用 WiNGPT2 所产生的结果和决策由您自行承担。第三方原因而给您造成的损害结果承担责任。
许可证
本项目授权协议为 Apache License 2.0,模型权重需要遵守基础模型Qwen-7B相关协议及许可证,详细内容参照其网站。
使用本项目包括模型权重时请引用本项目:https://github.com/winninghealth/WiNGPT2
参考资料
- https://github.com/QwenLM/Qwen-7B
- https://github.com/lm-sys/FastChat
- https://github.com/yizhongw/self-instruct
- https://github.com/nlpxucan/evol-instruct