MedDialog — 中英文医疗对话 AI-Ready Wikipedia | 千方病案医数集

366 万条中英文医患在线问诊对话,迄今规模最大的开源医疗对话语料库

来源 加州大学圣地亚哥分校(UCSD)AI4H 研究组 url: https://github.com/UCSD-AI4H/Medical-Dialogue-System发布时间: 2026-09-08最后更新: 2026-09-08 阅读 4

信息速览

数据集名称MedDialog — 中英文医疗对话 AI-Ready Wikipedia | 千方病案医数集
数据类型中文 340.7 万条对话,英文 25.7 万条对话,raw 约 1.3 GiB JSON/TXT,免费公开下载
规模非患者数据,医患对话语料
接入方式加州大学圣地亚哥分校(UCSD)AI4H 研究组 url: https://github.com/UCSD-AI4H/Medical-Dialogue-System
AI 就绪度

数据集封面

MedDialog — 中英文医疗对话语料 AI-Ready Wikipedia

INFOBOX

数据集名称 MedDialog
英文全称 MedDialog: Large-scale Medical Dialogue Datasets(MedDialog-CN 与 MedDialog-EN 双子集)
别名/简称 Medical Dialogue System 数据集、MedDialog-CN、MedDialog-EN、medical_dialog(HuggingFace 命名)
疾病分类(ICD-11) 全科室泛覆盖(ICD-11 跨多章;高频主题映射见 §2.1)
SNOMED CT 无官方映射;代表性科室映射见 §2.1b
数据模态 中英文文本(医患在线问诊多轮对话)
AI 任务类型 对话生成、医学问答、科室/意图分类、对话摘要、领域自适应预训练
样本总数 论文口径:中文 3,407,494 + 英文 257,454 条对话;HuggingFace raw 口径:中文 1,921,127 + 英文 229,674 条对话
数据大小 raw 中英合计约 1.3 GiB(HuggingFace dataset_size 口径);processed.zh 下载约 1.94 GiB
数据格式 TXT(中文按年原始分片)、JSON(预处理 train/valid/test 分片)、Apache Arrow/Parquet(HuggingFace 缓存)
许可证 Unknown(未发布正式许可证;版权归 haodf.comicliniq.comhealthcaremagic.com
访问级别 开放(免费下载,无需注册或申请)
DUO 标签 GRU(通用研究用;官方未发布 DUO 声明,按学术研究默认处理)
语言 中文(MedDialog-CN)、英文(MedDialog-EN)
首发日期 2020-04(arXiv v1 与 GitHub 公开);EMNLP 2020 版 2020-11
发布机构 加州大学圣地亚哥分校(UC San Diego)AI4H 研究组
官方主页 GitHub: UCSD-AI4H/Medical-Dialogue-System
下载地址 HuggingFace: UCSD26/medical_dialog(含 Google Drive 原始分片链接)
DOI 10.18653/v1/2020.emnlp-main.743
引用次数 416+(Google Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐(3/5)— 提供预处理分片与 80/10/10 划分,但英文侧划分残缺、中文原始逐年异构需自行解析与二次去标识
页面状态 published

§0 E-E-A-T 信任声明与免责声明

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、在线问诊与远程医疗任务定义、金标准描述)、§7 偏倚分析。

数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(对话层级字段体系、双语言配置结构)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

审核方式:交叉审核

利益冲突声明:千方病案医数集与 UCSD AI4H 研究组、haodf.comicliniq.comhealthcaremagic.com 无任何商业利益关联。本页面不销售 MedDialog 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受上述机构的任何形式资助。

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。MedDialog 官方未发布正式开源许可证,数据版权归 haodf.comicliniq.comhealthcaremagic.com 所有,官方定位为学术研究用途;DUO 标签仅供参考,具体使用限制以数据集官方协议与源平台条款为准。


§1 数据集概览

§1.0 30 秒速览

这是什么? MedDialog 是迄今规模最大的开源医疗对话数据集,由加州大学圣地亚哥分校(UCSD)研究组于 2020 年发布并发表于 EMNLP 2020。它把真实互联网医疗咨询的完整过程结构化了下来:患者先用一段话描述病情与病史,然后医患双方进行多轮文字交流,中文对话末尾还常附有医生的诊断与治疗建议。中文子集 3,407,494 条对话、1,126 万条发言,来自好大夫在线(2010-2020 年);英文子集 257,454 条对话、51.5 万条发言,来自 icliniq.comhealthcaremagic.com(2008-2020 年)。

为什么重要? 在 MedDialog 之前,医疗对话数据集普遍只有几百到几千条对话,且多局限于单一疾病;医疗对话系统因此难以达到可用的语言多样性与临床覆盖度。MedDialog 首次把训练语料推到数百万条量级、覆盖 29 大类中文科室与 96 个英文专科,直接催生了 ChatDoctor 等一大批医疗大模型微调工作,其衍生语料(HealthCareMagic-100k、iCliniq-10k)至今仍是医疗对话微调的事实标准之一。

我能用它做什么? 训练医疗对话生成模型(根据患者主诉生成医生式回复)、构建医学问答与分诊助手原型、做科室/意图分类、对话摘要,以及作为领域自适应预训练语料注入通用大模型。需要特别注意:它不是结构化病历,也没有医学实体标注,使用前需自行做二次去标识化与质量过滤。

§1.1 技术摘要

MedDialog 的构建方式是面向互联网医疗咨询平台的定向爬取与结构化。研究组分别爬取了好大夫在线(中文,2010-2020 年)与 icliniq.comhealthcaremagic.com(英文,2008-2020 年)的公开咨询页面,把每条咨询解析为「患者病情描述 + 多轮医患对话(+ 可选的诊断与建议)」三段式结构。为了让对话结构规整,处理管线把连续来自同一说话人的多条发言合并为单条 utterance——这使中文子集的平均轮次为 3.3 轮(最少 2 轮、最多 198 轮),中文平均每条发言 55.6 个 token(最多 6,935 个)。论文口径下中文子集共 3,407,494 条对话、11,260,564 条 utterance、6.60 亿 token;英文子集 257,454 条对话、514,908 条 utterance、4,453 万 token。作者在中文子集上预训练了 Transformer、GPT 与 BERT-GPT 三种对话生成模型,并在小规模 COVID-19 对话数据上验证了预训练权重的迁移价值:从零训练的 Transformer 困惑度为 53.3,经 MedDialog 预训练后降至 13.7。数据经 GitHub 与 Google Drive 分发,后被 HuggingFace 收录为 UCSD26/medical_dialog(v2.0.0,raw 与 processed 双形态共 4 个配置)。

§1.2 战略价值

维度一:规模与多样性护城河。 MedDialog-CN 的 340.7 万条对话覆盖 29 大类、172 个细分科室,MedDialog-EN 的 25.7 万条对话覆盖 51 个话题类别、96 个专科,两者合计约 7.05 亿 token。相比 MedDG(14,864 条训练对话、12 种胃肠疾病)与 CMDD(792,099 条单轮问答、6 个科室)等同期数据集,MedDialog 在规模上有 1-2 个数量级的优势,在疾病覆盖上则从单病种扩展到全科室。对需要"先见广、再求精"的医疗语言模型而言,它是目前少数能支撑领域自适应预训练(而非仅仅微调)的对话语料。

维度二:双语配对的方法论样本。 MedDialog 的中英文子集来自不同的平台生态:中文侧是医患图文问诊(含诊断建议字段),英文侧是纯文字国际问诊(回答常含日期戳与平台模板语)。这使它成为研究"同一任务在不同医疗文化、问诊习惯与文本风格下的差异"的天然试验场——例如英文平台医生回复的模板化开场白(“Thanks for your question on…”)对生成模型的污染效应,在中文语料中几乎不存在。对出海医疗 AI 产品团队而言,两套语料可以分别校准中英文场景下的对话风格先验。

维度三:生态位事实标准。 尽管 MedDialog 本身没有官方榜单,但围绕它已经形成了事实上的生态:ChatDoctor 的 HealthCareMagic-100k/iCliniq-10k 微调语料直接来自同源站点对话,ruslanmv/ai-medical-chatbot(25.2 万条)等 HuggingFace 高热度衍生集以 MedDialog-EN 为底,VRBot、KaMed 等对话生成研究把它作为标准基线语料。使用 MedDialog 意味着与这条研究主线的可比性——既能在相关工作中直接对话,也能站在衍生清洗成果(模板过滤、指令对齐)的肩膀上起步,而不是每次都从原始爬取层重做清洗。

§1.3 同类数据集横向对比

数据集 语言 规模 轮次结构 标注 差异化
MedDialog 中文+英文 中文 3,407,494 + 英文 257,454 条对话 多轮(中文平均 3.3 轮) 无实体标注;中文含诊断/建议字段 全科室覆盖、规模最大、双语言
CMDD(Chinese Medical Dialogue Dataset) 中文 792,099 条 单轮 科室标签(6 类) 单轮问答、CC BY-NC 4.0、天池分发
MedDG 中文 14,864/2,000/1,000(train/valid/test) 多轮(平均 9.92 轮) 疾病状态与动作半自动标注 12 种胃肠疾病、可评测的细粒度标注
COVID-Dialogue 中文+英文 中文 1,088 + 英文 603 条对话 多轮 疫情主题 同一团队出品、小而精、适合迁移评测
Huatuo-26M 中文 26,239,047 条 单轮为主 知识图谱对齐 规模最大但以百科问答为主、对话性弱
KaMed 中文 57,754/3,000/3,000 多轮(平均 11.62 轮) 外部知识图谱(CMeKG) 长对话 + 知识增强场景

英文侧衍生版本速览(原始 MedDialog-EN 与其清洗衍生版的取舍):

版本 规模 许可证 相对原始版的改动
MedDialog-EN(raw,官方) 229,674 条(HF train) Unknown(版权归源平台) 保留 URL 与原文,含模板语
ruslanmv/ai-medical-chatbot 251,731 条 Apache-2.0 合并 description 与患者首问、质量过滤、2,500 字符截断、90/10 划分
HealthCareMagic-100k(ChatDoctor) 10 万条 非商业(继承 LLaMA 条款) 手工+自动双重过滤、身份信息移除、语法修正
iCliniq-10k(ChatDoctor) 1 万条 非商业(继承 LLaMA 条款) 作为评估集使用
OpenMed/MedDialog 251,731 条 Apache-2.0 在 ruslanmv 版上叠加 RL 环境封装与奖励维度定义

§1.4 版本时间轴

时间 版本/事件 说明
2020-04 arXiv v1(Chen 等,arXiv:2004.03329) 首次公开,中文子集 1,145,231 条对话、3,959,333 条发言;数据经 GitHub 开放
2020-11 EMNLP 2020 正式版(Zeng 等,pages 9241-9250) 扩充为双子集:中文 3,407,494 条 + 英文 257,454 条;arXiv v2 同步改名 MedDialog: Two Large-scale Medical Dialogue Datasets
2020-12 HuggingFace datasets 收录(medical_dialog) 由社区贡献者接入 datasets 库,修复中文读取逻辑
2022-2023 bigbio 接入与衍生浪潮 bigscience-workshop/biomedical 收录(meddialog);ChatDoctor、ruslanmv/ai-medical-chatbot 等衍生语料密集发布
2024 至今 UCSD26/medical_dialog v2.0.0 4 配置(en、zh、processed.en、processed.zh)成为当前分发主形态
2026-09 本页面编制 千方病案医数集基于官方论文、数据卡与社区资料完成 AI 就绪化梳理(口径以官方发布为准)

§1.5 典型应用场景

  1. 医疗对话生成预训练:以中文 660.2M token 为底预训练 GPT/Transformer 类模型,再向 COVID-Dialogue、MedDG 等小数据任务迁移(论文验证 PPL 53.3→13.7)。
  2. 医疗大模型 SFT 语料:将「描述→医生回复」对齐为指令对,用于 LLaMA/Qwen 类模型的医疗监督微调(ChatDoctor 路线)。
  3. 科室/意图分类:利用患者描述与科室信息训练分诊模型,辅助互联网医院预分诊。
  4. 医学对话摘要:把多轮对话压缩为结构化主诉-诊断摘要,支撑 MedQA-Summary 类任务研究。
  5. 医疗对话系统评测基线:作为 VRBot、KaMed 等研究的对照语料,保证新方法与历史工作可比。

§2 医学背景

§2.1 ICD-11 编码映射表

MedDialog 不带疾病标签,其 29 大类中文科室与 51 个英文话题类别是天然的主题轴。下表给出高频科室/主题与 ICD-11 相应章节或代表性编码的映射示例(编辑整理,供检索定位参考,非官方标注):

数据集科室/主题(高频) ICD-11 章节/编码 ICD-11 中文名 说明
内科(中文 29 大类之一) 第 1-14 章横跨 多系统疾病 高频咨询聚集于慢性病管理
内分泌与代谢(糖尿病类咨询) 5A11 2 型糖尿病 英文 51 类含 Diabetes 话题,中文内科高频
心血管内科 BA00 原发性高血压 循环系统章节(BA00-BE2Z)代表编码
呼吸内科(哮喘/COPD) CA23 / CA22 哮喘 / 慢性阻塞性肺病 呼吸系统章节(CA00-CB7Z)代表编码
消化内科(胃食管反流等) DA26 胃食管反流病 消化系统章节代表编码
精神心理类咨询 6A70 抑郁发作 精神行为章节代表编码
妇产科/儿科(中文高频大类) 相应章节横跨 妊娠/儿童保健 以咨询与随访场景为主,非单一编码
症状不明的初始咨询 MA00-MH2Y 症状、体征章 大量对话以主诉开场,无明确诊断

§2.1b SNOMED CT 映射表

数据集主题(代表) ICD-11 SNOMED CT 码 术语
糖尿病类咨询 5A11 44054006 Diabetes mellitus(糖尿病)
高血压类咨询 BA00 38341003 Hypertensive disorder(高血压疾患)
哮喘类咨询 CA23 195967001 Asthma(哮喘)
COPD 类咨询 CA22 13645005 Chronic obstructive lung disease(慢性阻塞性肺病)
胃食管反流类咨询 DA26 235595009 Gastroesophageal reflux disease(胃食管反流病)
抑郁类咨询 6A70 370143000 Major depressive disorder(重性抑郁障碍)

§2.2 在线问诊背景与流行病学

MedDialog 对应的医学场景是远程医疗(telemedicine)中的异步图文问诊。远程医疗的价值在论文引言中有明确论证:Jefferson Health 的研究显示,用远程医疗分流急诊患者每次就诊可节省超过 1,500 美元;(Pande and Morris, 2015)显示远程医疗患者抑郁、焦虑与压力评分更低、入院率减少 38%。同时,远程问诊量的增长带来医生负担与职业倦怠问题——这正是「AI 虚拟医生」的动机:先做初筛与常规建议,把医生精力留给复杂病例。从数据侧看,好大夫在线聚集了以中国患者为主的图文问诊流量(2010-2020 年),内科、儿科、妇产科构成咨询量的主体;英文平台 icliniq 与 healthcaremagic 则服务全球英文用户,糖尿病、疼痛管理、老年健康等是其 51 个话题类别中的高流量主题。值得注意的是,在线咨询人群是自选择样本:更年轻、更擅长使用互联网、慢性病随访需求更强的患者显著过表达,这一人群偏倚会直接传递给在此语料上训练的分诊与问答模型。

§2.3 临床任务定义

从语料的真实主题结构看,以下问诊场景构成了对话的主要语境(编辑按语料来源平台公开信息归纳,供理解语料气质用):

高频场景 典型对话形态 对建模的启示
慢病管理与随访 复诊描述 + 用药调整问答 对话含长病史,description 信息密度高
儿童急症咨询 家长代述 + 紧迫性判断 主语非患者本人,说话人建模需注意代述语境
孕产与妇科咨询 孕周相关症状 + 风险沟通 时间语义(孕周/月龄)是关键槽位
皮肤可见症状 文字描述 + 平台图文(图像未随数据发布) 纯文本模态下需处理「看图」缺失指代
用药与检查报告解读 报告数值口语转述 + 医生解释 数值与单位口语化,是信息抽取难点
二次意见(Second Opinion) 携带既往诊断的验证型提问 结论性表述多,适合摘要与证据核对任务
  1. 对话生成(Dialogue Generation):给定患者病情描述与历史对话,生成下一条医生回复。对应模型的「AI 虚拟医生」初诊沟通能力,评估用 PPL、BLEU、NIST-4、ROUGE 与人工评估(相关性、信息量、类人性)。
  2. 医学问答(Medical QA):以患者主诉为问题、医生回复为答案,构建闭域问答对,用于检索式或生成式问答。
  3. 科室/意图分类(Specialty & Intent Classification):从患者描述预测应答科室,对应互联网医院的自动分诊;多分类精度与宏平均 F1 为核心指标。
  4. 对话摘要(Dialogue Summarization):把多轮问诊压缩为主诉-诊断-建议式摘要,对应电子病历辅助书写的前置任务。
  5. 领域自适应预训练:以 7.05 亿 token 为语料做增量预训练,注入医疗对话风格与术语分布,再向下游小数据任务迁移。

§2.4 患者人群表

维度 MedDialog-CN(好大夫在线) MedDialog-EN(iCliniq / HealthcareMagic)
来源 好大夫在线公开图文问诊 icliniq.comhealthcaremagic.com 公开咨询
时间范围 2010-2020 年 2008-2020 年
人群 中国大陆互联网问诊用户(覆盖全国省份) 全球英文在线问诊用户
年龄/性别/种族 未标注(仅文本自述中出现) 未标注(仅文本自述中出现)
就医类型 线上图文咨询、复诊随访为主 线上咨询、症状自查、二次意见为主
科室覆盖 29 大类、172 细分科室 51 个话题类别、96 个专科
身份标识 患者匿名发帖,但 URL 与文本可回溯 患者匿名发帖,但 URL 与文本可回溯

§2.5 临床价值

MedDialog 的临床价值不在于提供诊断金标准,而在于沉淀了「患者如何用口语描述症状、医生如何追问与解释」的语言分布。这使它成为构建患者侧与医生侧对话系统的语料基础:对患者侧,它能教会模型把口语化主诉映射到规范的临床表达,提升预问诊表单的自动化程度;对医生侧,它能生成风格自然的随访解释与健康教育文本,减轻重复沟通负担。论文的人类评估显示,经 MedDialog 预训练的模型在相关性与类人性上显著提升(GPT 类人性 1.80→3.20,5 分制),说明语料成功注入了「医生式对话先验」。从科研侧看,它还提供了一个难以复现的资产:跨 11 年的中文问诊文本长时序切片,使咨询主题与措辞的代际变化可以量化。需要强调的是,任何直接面向患者的输出都必须经过临床验证与合规审查,因为语料中的医生回复本身质量参差、且不构成诊疗规范。

§2.6 金标准描述

属性 说明
划分 raw 子集无官方划分;processed.zh 提供 2,725,989/340,748/340,754(train/validation/test,约 80/10/10)
标注方式 无人工医学标注;结构化标注(说话人、轮次、URL)来自爬取管线;同说话人连续发言自动合并
标注者 无( crowdsourced 自平台原始发帖;结构化处理由论文作者完成)
性质 真实互联网问诊对话(非受控采集),自发帖公开可见,平台侧已做匿名化但残留个体信息
诊断与建议 中文子集可选包含医生诊断与治疗建议字段;英文子集无

§3 数据集规格

§3.0 版本抉择矩阵

MedDialog 存在「论文口径」与「分发口径」两套数字、raw 与 processed 两种形态,选错版本是本数据集第一大坑:

你的需求 推荐版本 大小 理由
中文大规模预训练/对话生成 processed.zh(HF)或 raw zh 下载约 1.94 GiB processed.zh 提供 272.6 万条 train 与 80/10/10 划分,开箱即用
英文大规模对话微调 raw en(HF)或衍生版 ruslanmv/ai-medical-chatbot 约 277 MiB ⚠️ processed.en 仅 603 条(论文样例),勿用;raw en 229,674 条才是全量
论文复现(PPL/BLEU 对比) processed 分片 + 论文超参 数百 MB 与 Zeng 等(2020)实验设置对齐,保证可比性
长期归档/时间趋势分析 raw zh 按年 TXT(2010-2020) 约 1.02 GiB 保留年份维度,但需按年写解析器(见坑点 1)
医疗大模型 SFT(指令格式) 衍生版 HealthCareMagic-100k/iCliniq-10k(ChatDoctor) 数百 MB 已过滤、已匿名化、已对齐为指令对,省去清洗成本
疾病实体级研究(NER/药物抽取) raw zh + 自建标注管线 约 1.02 GiB 全部版本均无实体标注,需从对话原文自建 NER 语料
快速原型/教学演示 processed.en(603 条) 约 512 KiB 体量小、格式完整,仅用于跑通流程,结论无统计意义

§3.1 模态详情

MedDialog 是纯文本模态数据集,仅含中英文自然语言对话,不含影像、语音或生理信号。每条对话(consultation)由三部分组成:一是患者对病情与病史的叙述(现病、病程、过敏史、用药史、既往史等);二是医患多轮文字对话,轮次上中文平均 3.3 轮、最少 2 轮、最多 198 轮;三是可选的医生诊断与治疗建议(仅中文子集常见)。语言特征上,中文侧为口语化中文夹杂医学术语与少量方言表达;英文侧为非母语者占比可观的英语,拼写不规范(如示例中的 imune booster)与平台模板语并存。

§3.2 按子集样本数表

子集 对话数 utterance 数 token 数 发布口径
MedDialog-CN(论文) 3,407,494 11,260,564 660,171,367 EMNLP 2020 Table 1
MedDialog-EN(论文) 257,454 514,908 约 44,530,000 EMNLP 2020 §3.2
MedDialog-CN(arXiv v1) 1,145,231 3,959,333(医生 2,179,008 + 患者 1,780,325) 未披露 arXiv:2004.03329v1
HF raw zh(train) 1,921,127 按条展开 dataset_size 1,092,063,621 字节 UCSD26/medical_dialog v2.0.0
HF raw en(train) 229,674 按条展开 dataset_size 290,274,759 字节 UCSD26/medical_dialog v2.0.0
HF processed.zh 2,725,989/340,748/340,754(train/val/test) 下载 2,082,354,155 字节 UCSD26/medical_dialog v2.0.0
HF processed.en 482/60/61(train/val/test) 下载 524,214 字节 UCSD26/medical_dialog v2.0.0(论文预处理样例)

⚠️ 论文口径与 HF raw 口径不一致的原因:论文统计的是爬取全量(含未发布的增量),HF raw 只打包了持续整理后的发布子集;「数据持续增长、后续将加入更多对话」是官方数据卡的原始表述。引用时必须注明口径。

§3.3 数据格式表

格式 适用子集 组织方式 编码
TXT(按年分文件) 中文 raw 2010.txt 至 2020.txt,多段文本块以 ### 头分节,各年字段结构有差异 UTF-8
TXT(分片) 英文 raw 按对话分节的多段文本块 UTF-8
JSON(预处理分片) processed.zh / processed.en train/valid/test 三分片,每条含 description + utterances 数组(带 patient:/doctor: 或 病人:/医生: 前缀) UTF-8
Apache Arrow/Parquet HF datasets 缓存 dialogue_id / dialogue_url / dialogue_turns(speaker + utterance)/ file_name 结构 UTF-8

processed 配置的真实样例(摘自 HF 数据卡,保留原文拼写错误以反映语料真实质感):

// processed.zh:中文 utterances 以 病人:/医生: 前缀展开,可含诊断与建议
{"utterances": [
  "病人:强制性脊柱炎,晚上睡觉翻身时腰骶骨区域疼痛,其他身体任何部位均不疼痛。",
  "医生:应该没有问题,但最好把图像上传看看。"
]}

// processed.en:含独立 description 字段,utterances 带 patient:/doctor: 前缀与日期戳
{"description": "throat a bit sore and want to get a good imune booster, especially in light of the virus. please advise.",
 "utterances": [
  "patient: throat a bit sore and want to get a good imune booster, especially in light of the virus. please advise.",
  "doctor: during this pandemic. throat pain can be from a strep throat infection (antibiotics needed), a cold or influenza or other virus, or from some other cause such as allergies or irritants. (3/21/20)"
]}

⚠️ 注意英文样例中的三处真实语料特征:拼写错误(imune)、模板化回复结构与句尾日期戳 (3/21/20)——它们分别对应 §6.3 的清洗重点与坑点 3。

§3.4 存储大小

分片 字节数 换算
HF raw zh(train) 1,092,063,621 约 1.02 GiB
HF raw en(train) 290,274,759 约 277 MiB
processed.zh(Drive 下载) 2,082,354,155 约 1.94 GiB
processed.en(Drive 下载) 524,214 约 512 KiB(仅 603 条样例)

中文 raw 子集约 1.02 GiB、英文 raw 子集约 277 MiB,两者合计约 1.3 GiB;processed.zh 的 Google Drive 下载量为约 1.94 GiB(含解压冗余)。加上 HuggingFace Arrow 缓存展开后(tokenized 前约 3-4 GiB)与训练中间产物,建议为本数据集预留 10 GiB 以上磁盘空间;若做全量预训练,660.2M token 的分词缓存与 checkpoint 空间需另计。

§3.5 标注方式

MedDialog 属于无人工标注的爬取型语料:全部「标注」来自源平台的原生结构与爬取管线的自动结构化。具体包括:说话人身份(病人/医生,来自页面回复结构)、轮次切分(同说话人连续发言合并为单条)、来源 URL(原帖地址)、年份(中文 raw 的文件名)。中文子集的「诊断与建议」字段是医生在原帖中自发撰写的结论,而非受控标注——其完整度、规范度随医生而异,官方数据卡明确描述为「可选包含」。因此,任何需要疾病、症状、药物标签的任务,都必须在 MedDialog 之上自行构建标注管线(NER 或知识图谱对齐),论文作者也把「实体标注缺失」列为首要未来工作。

§3.6 标注者资质与一致性

不存在独立的标注者团队。数据内容的生产者是源平台的注册医生(回复方)与匿名患者(发起方):好大夫在线与 icliniq 的医生需通过平台执业资质审核,但回复质量不设统一标准;患者自述无任何专业培训。结构化处理(爬取、清洗、轮次合并)由 UCSD 研究组完成,无标注一致性指标(如 Cohen’s Kappa)可报告——这是评估该数据集时必须明示的方法学边界。

§3.7 采集周期

中文子集覆盖 2010-2020 年共 11 个自然年的公开咨询,以 2010.txt 至 2020.txt 按年分文件组织;英文子集覆盖 2008-2020 年的公开咨询。数据爬取与清洗在 2019-2020 年完成(arXiv v1 于 2020-04-07 提交)。注意中文数据各年的页面模板与数据结构不同,按年分析咨询模式演化(如疫情前后主题迁移)是可行的,但必须逐 年适配解析器。

§3.8 地域覆盖

中文子集来自好大夫在线,覆盖中国大陆各省的问诊用户与医生;英文子集来自 icliniq(注册于印度、服务全球)与 healthcaremagic(服务英语国家用户),覆盖北美、南亚及全球英语用户。论文将这种跨地域组合视为缓解人群偏倚的机制,但对地理位置无结构化标注,地域归因只能依赖文本自述(如提到的城市/医院)。

§3.9 设备规格

不适用——MedDialog 为纯文本对话数据,不涉及采集设备。文本的直接生产工具是网页表单,无影像设备参数、无采样率、无传感器型号等元数据。

§3.10 深度溯源链

层级 溯源内容
原始事件 患者在好大夫在线 / icliniq / healthcaremagic 提交图文咨询,医生公开回复
网页形态 平台公开问诊页(患者匿名、医生实名展示),含结构化回复列表
爬取层 UCSD AI4H 研究组定向爬取(2019-2020),记录 dialogue_url 原帖地址
结构化层 拆分 description / dialogue / diagnosis-suggestions,合并同说话人连续发言,绑定说话人标签
分发层 GitHub README + Google Drive 文件夹/分片 → HuggingFace UCSD26/medical_dialog(v2.0.0,4 配置)→ 社区衍生(bigbio、ruslanmv、ChatDoctor 语料)

§4 数据结构

§4.0 目录树

官方通过 Google Drive 分发原始文件夹与预处理分片,HuggingFace 提供 4 配置包装。下载解压后的典型组织如下(示意,文件名以官方 Drive 分片为准):

meddialog/
├── Chinese/                          # MedDialog-CN 原始数据(Google Drive 文件夹)
│   ├── 2010.txt                      # 按年分文件,UTF-8,### 分节,各年结构有差异
│   ├── 2011.txt
│   ├── ...
│   ├── 2019.txt
│   └── 2020.txt
├── English/                          # MedDialog-EN 原始数据(Google Drive 文件夹)
│   └── *.txt                         # 按对话分节的多段文本块
├── processed/                        # 预处理分片(Google Drive 直链单文件)
│   ├── zh_train.json                 # processed.zh:2,725,989 条
│   ├── zh_valid.json                 # 340,748 条
│   ├── zh_test.json                  # 340,754 条
│   ├── en_train.json                 # processed.en:仅 482 条(论文样例!)
│   ├── en_valid.json                 # 60 条
│   └── en_test.json                  # 61 条
└── HF_cache/                         # load_dataset 后的 Arrow 缓存(4 配置)
    ├── en/                           # raw en:仅 train 229,674 条
    ├── zh/                           # raw zh:仅 train 1,921,127 条
    ├── processed.en/
    └── processed.zh/

一条完整 raw zh 记录的形态(HF 数据卡真实示例,展现字段间关系):

file_name:    2020.txt
dialogue_id:  2
dialogue_url: https://www.haodf.com/doctorteam/flow_team_6477251152.htm
dialogue_turns:
  - speaker: 病人
    utterance: 孩子哭闹时,鸡鸡旁边会肿起,情绪平静时肿块会消失,去一个私人诊所看过,说是疝气.
               如果确定是疝气,是不是一定要手术治疗?我孩子只有1岁10月,自愈的可能性大吗?
  - speaker: 医生
    utterance: 南方医的B超说得不清楚,可能是鞘膜积液,可到我医院复查一个B超。

从这条记录可以直接看到三个治理要点:dialogue_id 只在文件内唯一(复合主键必要性);文本含患方自述的年龄与亲属关系(去标识化必要性);URL 直指好大夫原帖(可回溯性)。

§4.1 DAIMS 字段字典

以 HuggingFace raw 配置的字段体系为基准(processed 配置为其退化形态):

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
file_name string 来源年份文件名 2020.txt 时间趋势分析 年份仅到文件粒度 2010.txt-2020.txt(zh)
dialogue_id int32 站内对话序号 2 唯一标识、去重 跨文件可能重号,需复合主键 非负整数
dialogue_url string 原帖 URL https://www.haodf.com/doctorteam/flow_team_*.htm 溯源、二次核验 可回溯原帖,构成隐私面 合法 URL 字符串
description string 患者病情与病史主诉 强制性脊柱炎,晚上睡觉翻身时腰骶骨区域疼痛… 问答问题端、分类输入 口语化、含个人信息 空串=无独立描述 自由文本
speaker class_label 说话人标签 病人 / 医生(en: Patient / Doctor) 说话人建模 同说话人连续发言已合并,轮次口径失真 0=病人,1=医生
utterance string 单条发言文本 应该没有问题,但最好把图像上传看看。 生成目标、摘要输入 含平台模板语与日期戳(en 侧) 空串=无效发言 自由文本
diagnosis string 医生诊断(zh 可选) 鞘膜积液待查 弱监督疾病标签源 医生自发撰写,完整度不一 字段整体缺失=无诊断 自由文本
suggestions string 治疗建议(zh 可选) 到我医院复查一个 B 超 摘要目标端 同上 字段整体缺失=无建议 自由文本

§4.2 标签分布

MedDialog 的原生标签只有说话人(病人/医生)与科室维度(未随文件发布,需从 URL 或原帖恢复)。论文披露的结构性分布为:中文子集覆盖 29 大类、172 细分科室,英文子集覆盖 51 个话题类别、96 个专科;中文内部科、儿科、妇产科为咨询量主力大类,英文侧 Diabetes、Pain Management、Elderly Problems 等为 51 类中的代表类别。轮次分布上,中文平均每条对话 3.3 条 utterance(min 2、max 198),英文侧每条对话 utterance 数更低(257,454 条对话对应 514,908 条 utterance,恰为每对话 2 条),说明英文子集以「一段主诉 + 一段回复」的准单轮形态为主。精确到科室的样本数官方未发布,使用科室级分析时需自行从 dialogue_url 关联原帖获取。

§4.3 关键统计

统计项 MedDialog-CN MedDialog-EN
对话数 3,407,494 257,454
utterance 数 11,260,564 514,908
token 数 660,171,367 约 44,530,000
平均 utterance/对话 3.3(min 2,max 198) 约 2.0
平均 token/utterance 55.6(min 1,max 6,935) 未披露
科室覆盖 29 大类 / 172 细分 51 类别 / 96 专科
时间范围 2010-2020 2008-2020
来源平台 haodf.com icliniq.comhealthcaremagic.com

§4.4 数据层级

MedDialog 的数据层级是三层文本结构:咨询(consultation/dialogue)→ 发言(utterance)→ token。没有「患者」这一显式实体层——同一患者在平台上的多次咨询在数据中互不关联,也不存在 patient_id。这意味着:跨对话的患者纵向追踪不可行;做基于患者的划分(patient-level split)没有直接依据;重复患者带来的隐性泄漏只能通过 description 文本相似度间接检测。与 MIMIC-III 的 患者→住院→事件→数值 四级结构相比,MedDialog 缺失上游实体层,这是把它当「病历数据」使用时最常见的认知错位。

§4.5 缺失值与信息性缺失

字段 缺失形态 处理建议
diagnosis / suggestions(zh) 大量对话整字段缺失(可选性质) 缺失即信息:无诊断的对话多为咨询/追问场景,可作为任务过滤维度
description(en) 部分对话无独立描述段,主诉并入首条 utterance 构建问答对时统一取首条患者发言兜底
科室标签 全集未发布 从 URL/原帖恢复,或训练科室分类器补全(注意循环验证风险)
utterance 超短文本 存在 min 1 token 的 utterance 清洗阶段设最小长度阈值(如 10 字符)
空 dialogue_url 爬取残留 溯源需求场景直接丢弃该子集
中英文标点混用 口语文本全半角标点并存 分词/归一化前统一标点策略,保留原文备份
description 与首条 utterance 重复 部分对话主诉被复述进对话首行 构建问答对时检测高重叠并去重

§4.6 入库前质量抽检清单

建议在数据进入训练管线前固定执行以下抽检(编辑按本数据集特性整理):

抽检项 方法 通过标准
年份覆盖率 统计解析后样本按 file_name/年份的分布 2010-2020 每年非零,异常年份抽样回查
说话人交替合法率 检查相邻 utterance 是否异说话人 违反交替的对话占比 <1%(合并口径下)
模板语残留率 抽 1,000 条英文回复跑 EN_TEMPLATES 命中率 <5%(清洗后)
PHI 残留 正则 + NER 双通道全量扫描 直接标识符残留为 0
近重复率 MinHash 阈值 0.7 聚类 记录重复块占比并纳入划分审计
平均轮次/长度 与论文 Table 1 口径对账 偏差 >10% 提示解析器缺陷

§5 划分与使用建议

§5.1 官方划分

raw 子集(en、zh)只有 train 形态、无 validation/test;processed.zh 提供 2,725,989(train)/ 340,748(validation)/ 340,754(test)的约 80/10/10 划分;processed.en 提供 482/60/61 划分但总量仅 603 条,只适合作为格式参考样例。论文实验在中文子集上进行,作者自建训练/验证/测试划分(与 processed.zh 不完全同口径),复现 PPL 8.2/9.5 等数字时需回到论文 §4.1 的设置。官方对 raw 子集无划分的原因亦无官方解释——合理推断是 raw 形态服务于「持续增长的全量语料」定位,而划分随研究协议变动,因此留给使用者自定义;这把自由同时把泄漏审计的责任转交给了使用者。

§5.2 社区惯例划分

社区存在三种主流做法:一是直接采用 HF processed.zh 划分(最常见、可比性最好);二是在 raw 子集上自行 90/5/5 随机划分(如 ruslanmv/ai-medical-chatbot 对英文衍生集做 90/10 train/validation 划分);三是为特定任务重新过滤后划分——VRBot(AAAI 2022)为控制对话长度,过滤掉少于 3 轮的对话后得到 32,723/3,000/3,000 的划分。跨论文比较时必须确认划分口径,否则 PPL/BLEU 完全不可比。四种主流方案的结构化对比:

划分方案 来源 划分比例 适用场景 主要风险
processed.zh 官方划分 HF UCSD26/medical_dialog 2,725,989/340,748/340,754(约 80/10/10) 默认选择、社区可比 近重复是否跨 split 未审计
自行随机划分(raw) 社区常见 90/5/5 或 90/10 全量利用 raw 数据 主题级近重复泄漏最严重
轮次过滤后划分 VRBot(AAAI 2022) 32,723/3,000/3,000(过滤 <3 轮) 多轮对话质量研究 任务分布改变,与全量数字不可比
时序划分 编辑建议 2010-2018 训练 / 2019-2020 测试 漂移与稳健性评测 疫情主题集中出现在测试期

§5.3 划分策略建议与泄漏风险

MedDialog 的泄漏风险主要来自三处:主题级重复——高频问题(如「孩子发烧怎么办」)在海量对话中以高度相似的措辞反复出现,随机划分会让近重复对跨 train/test 分布,抬高生成指标;模板级重复——英文医生回复的模板开场白/结尾语在 train 与 test 中同源出现,模型只需复述模板即可得分;医生级重复——同一医生的回复风格与惯用表达横跨多个对话,作者未提供医生 ID,无法做医生级划分。建议:划分前对 description + 首条医生回复做 MinHash/SimHash 近重聚类,按聚类块划分;至少报告「去重前 vs 去重后」两组测试指标,让泄漏的影响可见。

§5.4 交叉验证建议

全量数据上做 k 折交叉验证的代价过高,推荐两级策略:在小规模过滤子集(如 VRBot 式 3.3 万条)上做 5 折交叉验证用于方法消融;在正式评测时固定 80/10/10 单次划分并冻结,配合多随机种子(≥3)报告均值±标准差。时间维度上可另设「2010-2018 训练 / 2019-2020 测试」的时序划分,用于评估语言漂移与疫情主题冲击下的稳健性。交叉验证的分层维度建议取「科室大类」(可从 URL 侧信息恢复的子集)而非纯随机,保证每一折的科室构成稳定——否则宏平均 F1 的折间方差会大到淹没方法差异。

§5.5 外部验证建议

推荐以三套外部语料做横向验证:COVID-Dialogue(同团队,1,088 条中文 + 603 条英文,疫情主题)检验主题迁移;MedDG(12 种胃肠疾病、带状态标注)检验疾病聚焦场景下的可控性;CMDD(792,099 条单轮、6 科室)检验跨平台风格泛化。迁移实验的先例可直接引用论文结果:MedDialog 预训练使 COVID-Dialogue 中文任务 PPL 从 53.3 降至 13.7。

§5.6 使用红线清单

结合 §5.3 泄漏分析与 §7 伦理评估,以下是编辑建议的硬性使用约束:

  1. 学术研究用途优先:官方无正式许可证且版权归源平台,商用前必须完成授权评估(坑点 7)。
  2. 二次去标识化强制:训练、评测、公开衍生任何环节前,先跑 PHI 清洗并删除 dialogue_url(坑点 4)。
  3. 划分审计强制:报告测试指标必须说明划分来源与去重策略,禁止默认随机划分(坑点 5)。
  4. 口径三要素披露:子集、划分、清洗版本三要素写入论文/报告的数据节(坑点 8)。
  5. 临床边界声明:任何模型输出不得表述为诊疗建议,演示产品需加显著免责声明。

§6 AI 就绪指南

§6.0 云端快速启动

数据集已在 HuggingFace Hub 托管,Colab/Kaggle 等环境可直接流式加载(免下载全量 1.94 GiB):

# 云端最小示例(Colab 直接可跑):processed.zh 配置,约 1.94 GiB 下载
from datasets import load_dataset
ds = load_dataset("UCSD26/medical_dialog", "processed.zh")   # train/val/test 三分片
print(ds["train"][0])          # {'utterances': ['病人: …', '医生: …', …]}
# 内存受限时改用流式:
# ds = load_dataset("UCSD26/medical_dialog", "processed.zh", streaming=True)

§6.1 快速上手

下方代码给出从 HF Arrow 结构到训练样本的完整最小链路。目录结构预期:脚本运行于任意工作目录,load_dataset 自动缓存到 ~/.cache/huggingface/datasets,无需手工拼接 data_root;若使用 Google Drive 原始分片,则假设本地目录为 data_root = ./meddialog,其下为 §4.0 目录树中的 processed/ 分片。最小可用子集:processed.zh(train 272.6 万条)——这是唯一同时具备规模与官方划分的配置。

# 环境:pip install datasets transformers torch
# 目录预期:无本地数据要求(HF 自动下载缓存);
# 若走 GDrive 分片:./meddialog/processed/zh_{train,valid,test}.json
from datasets import load_dataset

ds = load_dataset("UCSD26/medical_dialog", "processed.zh")  # 官方 80/10/10 划分
train = ds["train"]

# processed.zh 每条样本:{'utterances': ['病人: xxx', '医生: yyy', ...]}
# 目标:构造 (对话历史 → 医生回复) 的生成对
def to_pairs(example):
    utts = [u for u in example["utterances"] if u.strip()]
    if len(utts) < 2:
        return {"history": "", "response": ""}          # 超短对话丢弃标记
    history = "\n".join(utts[:-1])                      # 最后一条医生发言作目标
    response = utts[-1].split(":", 1)[-1].strip()
    return {"history": utts[-2], "response": response}  # 简化:上一条 → 最后一条

train = train.map(to_pairs, num_proc=8)
train = train.filter(lambda x: len(x["history"]) > 10 and len(x["response"]) > 10)
print(len(train), "可用生成对")

英文侧快速上手(用 raw en 全量 229,674 条,切勿用 processed.en):

# raw en:仅 train 分片,字段为 file_name/dialogue_id/dialogue_url/dialogue_turns
from datasets import load_dataset
en = load_dataset("UCSD26/medical_dialog", "en")
turns = en["train"][0]["dialogue_turns"]          # [{'speaker': 'Patient'|'Doctor', 'utterance': ...}]
# 构造生成对:description 缺失时以首条患者发言兜底;随后套用 §6.3 模板清洗与去标识化
pair_hist = " ".join(t["utterance"] for t in turns[:-1])
pair_resp = turns[-1]["utterance"].split(":", 1)[-1].strip()

§6.2 数据获取

渠道 内容 大小 方式
HuggingFace UCSD26/medical_dialog 4 配置(en/zh/processed.en/processed.zh) raw 合计约 1.3 GiB;processed.zh 下载约 1.94 GiB load_dataset 自动下载
Google Drive 中文 raw 文件夹 2010-2020 按年 TXT 约 1.02 GiB 网页手动下载(HF 配置同样要求 manual download)
Google Drive 英文 raw 文件夹 英文 TXT 分片 约 277 MiB 网页手动下载
GitHub README 链接页 各分片 Drive 直链入口 github.com/UCSD-AI4H/Medical-Dialogue-System
# 方式一:HF 自动下载(推荐;processed.en 仅 603 条,勿用于训练)
from datasets import load_dataset
zh = load_dataset("UCSD26/medical_dialog", "processed.zh")

# 方式二:GDrive 原始分片(raw 配置必须手动下载后指定路径)
# from datasets import load_dataset
# zh_raw = load_dataset("UCSD26/medical_dialog", "zh",
#                       data_dir="./meddialog/Chinese")   # 指向含 2010-2020.txt 的目录

# 方式三:gdown 批量拉取 processed 直链分片(文件 id 来自 HF medical_dialog.py)
# pip install gdown
import gdown
gdown.download(id="1AaDJoHaiHAwEZwtskRH8oL1UP4FRgmgx", output="zh_train.json", quiet=False)   # zh train
gdown.download(id="1ria4E6IdTIPsikL4Glm3uy1tFKJKw0W8", output="en_train.json", quiet=False)   # en train

无需注册、无需申请,所有分片对公众直接开放。

§6.3 预处理全流程

完整管线分四步:逐年异构 TXT 解析 → 模板语与脏文本清洗 → 二次去标识化 → 去重与划分。中英文差异显著,分开处理。

第一步:中文按年 TXT 解析(raw zh,2010-2020 各年结构有差异,以 ### 分节 + 说话人前缀双条件容错)

<details>
<summary>逐年解析器(约 40 行,点击展开)</summary>

# 输入:./meddialog/Chinese/{2010..2020}.txt(UTF-8,### 分节,各年字段顺序有差异)
# 输出:zh_all.jsonl,每行 {"year": int, "description": str, "turns": [{"speaker","utterance"}]}
import json, re, glob

SPEAKER = re.compile(r"^\s*(病人|患者|医生)\s*[::]\s*(.*)$")   # 说话人前缀(中英文冒号兼容)

def parse_year_file(path):
    year = int(re.search(r"(\d{4})\.txt", path).group(1))
    blocks, cur = [], []
    for line in open(path, encoding="utf-8"):
        if line.startswith("###"):            # 分节头:新对话开始(各年标题词不同,统一按 ### 切块)
            if cur:
                blocks.append(cur)
            cur = []
        else:
            cur.append(line.rstrip("\n"))
    if cur:
        blocks.append(cur)

    for b in blocks:
        desc, turns, cur_spk = [], [], None
        for ln in b:
            m = SPEAKER.match(ln)
            if m:
                cur_spk = "医生" if m.group(1) == "医生" else "病人"
                if m.group(2).strip():
                    turns.append({"speaker": cur_spk, "utterance": m.group(2).strip()})
            elif not turns:
                desc.append(ln.strip())       # 说话人出现前视为病情描述
            elif cur_spk and ln.strip():       # 兼容换行续行:并入上一条发言
                turns[-1]["utterance"] += " " + ln.strip()
        if desc and len(turns) >= 2:           # 最小结构校验:有描述且至少一问一答
            yield {"year": year, "description": " ".join(desc), "turns": turns}

with open("zh_all.jsonl", "w", encoding="utf-8") as out:
    for path in sorted(glob.glob("./meddialog/Chinese/*.txt")):
        for rec in parse_year_file(path):
            out.write(json.dumps(rec, ensure_ascii=False) + "\n")

</details>

第二步:模板语清洗与质量过滤(英文侧尤其重要)

# 英文平台模板语黑名单(HF 数据卡示例可见:'Thanks for your question on Health Care Magic'、
# 日期戳 '(3/21/20)'、结尾 'Take care' 等),生成模型极易学会复读这些模板。
import re
EN_TEMPLATES = [
    r"^hello(,)?\s*(and\s*)?thank you for (using|consulting) (healthcaremagic|icliniq)",
    r"^thank you for (your )?question",
    r"thanks for your question on \w+",
    r"i (hope )?(this|it) (info|information|answer)? ?(helps|was helpful)",
    r"take care(\.|\!)?$",
    r"regards?\b.*$",
    r"\(\d{1,2}/\d{1,2}/\d{2,4}\)",                     # 日期戳 (3/21/20)
]
def clean_en(text: str) -> str:
    t = re.sub(r"\s+", " ", text).strip()
    for pat in EN_TEMPLATES:
        t = re.sub(pat, "", t, flags=re.I).strip()
    return t
# 中文侧清洗要点:剔除纯表情/纯标点发言、合并后仍 <10 字的 utterance、
# 以及明显的广告与导诊话术(如“建议到医院面诊”超高频短语需结合统计再决定是否过滤)。

第三步:二次去标识化(官方未做文本级 PHI 清洗,见坑点 4)

# 面向训练前的最小去标识化:覆盖中文语境高频直接标识符。
PHI_PATTERNS = [
    (re.compile(r"\b1[3-9]\d{9}\b"), "[PHONE]"),                          # 手机号
    (re.compile(r"\d{17}[\dXx]"), "[IDCARD]"),                            # 身份证号
    (re.compile(r"(姓名|患者|本人|我叫|我儿子|我女儿|我父亲|我母亲)\s*[::]?\s*([\u4e00-\u9fa5]{2,4})"), r"\1 [NAME]"),
    (re.compile(r"[\u4e00-\u9fa5]{2,8}(医院|卫生院|诊所|附属医院)"), "[HOSPITAL]"),
    (re.compile(r"(住在|来自)\s*[\u4e00-\u9fa5]{2,10}(省|市|县|区|镇)"), r"\1 [LOCATION]"),
]
def deidentify(text: str) -> str:
    for pat, repl in PHI_PATTERNS:
        text = pat.sub(repl, text)
    return text
# 更严格的场景(公开发布衍生数据)建议叠加医学 NER(如 scispacy/中文医疗 NER 模型)
# 做 PER/LOC/ORG/GENDER/AGE 全类型扫描,并对 dialogue_url 做整列删除。

第四步:近重去重与划分

# 近重聚类划分:对 description + 首条医生回复做 SimHash,按聚类块划分 train/val/test,
# 避免高频问题近重复对跨 split(见坑点 5)。
from datasketch import MinHash, MinHashLSH   # pip install datasketch
def shingles(text, k=4):
    return set(text[i:i+k] for i in range(len(text) - k + 1))
def minhash_sig(text):
    m = MinHash(num_perm=64)
    for s in shingles(text):
        m.update(s.encode("utf-8"))
    return m
# 建议阈值 Jaccard ≥ 0.7 判为近重;同一聚类块内样本只能落入同一 split。

§6.4 PyTorch DataLoader

# 基于 processed.zh JSON 分片的对话生成 Dataset(ChatDoctor 式指令对齐可选)
import json, torch
from torch.utils.data import Dataset, DataLoader
from transformers import AutoTokenizer

class MedDialogGenDataset(Dataset):
    """预期输入:processed.zh 分片 json,形如 [{'utterances': ['病人: …', '医生: …']}]
       目标:拼接历史对话,生成最后一条医生回复。"""
    def __init__(self, path, tokenizer, max_len=1024):
        self.samples, self.tok, self.max_len = [], tokenizer, max_len
        with open(path, encoding="utf-8") as f:
            for rec in json.load(f):                       # 每 rec 含 'utterances'
                utts = [u for u in rec["utterances"] if u.strip()]
                if len(utts) < 2:
                    continue
                history = "\n".join(utts[:-1])             # 历史含最后一条患者发言
                response = utts[-1].split(":", 1)[-1].strip()
                if len(history) > 10 and len(response) > 10:
                    self.samples.append((history, response))

    def __len__(self):
        return len(self.samples)

    def __getitem__(self, idx):
        history, response = self.samples[idx]
        enc = self.tok(history, truncation=True, max_length=self.max_len - 128)
        lab = self.tok(response, truncation=True, max_length=128)
        input_ids = enc["input_ids"] + lab["input_ids"] + [self.tok.eos_token_id]
        labels = [-100] * len(enc["input_ids"]) + lab["input_ids"] + [self.tok.eos_token_id]
        return {"input_ids": input_ids, "labels": labels}

    @staticmethod
    def collate(batch, pad_id=0):
        maxlen = max(len(x["input_ids"]) for x in batch)
        input_ids = torch.full((len(batch), maxlen), pad_id, dtype=torch.long)
        labels = torch.full((len(batch), maxlen), -100, dtype=torch.long)
        attn = torch.zeros((len(batch), maxlen), dtype=torch.long)
        for i, x in enumerate(batch):
            n = len(x["input_ids"])
            input_ids[i, :n] = torch.tensor(x["input_ids"])
            labels[i, :n] = torch.tensor(x["labels"])
            attn[i, :n] = 1
        return {"input_ids": input_ids, "labels": labels, "attention_mask": attn}

tok = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-1.5B")   # 中文语料配中文底座
train_set = MedDialogGenDataset("./meddialog/processed/zh_train.json", tok)
loader = DataLoader(train_set, batch_size=8, shuffle=True,
                    collate_fn=MedDialogGenDataset.collate, num_workers=4, drop_last=True)

§6.5 坑点 8 个

⚠️ 坑点 1:中文 raw TXT 逐年异构,单一解析器必然漏析多年份(分类:工程陷阱)

问题:MedDialog-CN 的 raw 数据按 2010-2020 年分文件发布,各年的页面模板与文本结构不同(### 分节标题词、描述与对话的先后、说话人前缀格式均有差异)。用单一正则或单一 split 逻辑跑全量,会静默丢失或错并大量对话。
症状:解析出的总对话数显著低于官方量级;某些年份输出为空或 description 与对话错位;说话人标签全错成同一方。
解决

  1. 简单方法:直接改用 HF processed.zh 配置(官方已统一解析为 utterances 数组),放弃 raw TXT 的自定义解析。
  2. 进阶方法:按年写适配器——以「### 分节切块 + 病人/患者/医生 前缀识别 + 无前缀行并入上一条发言」的容错规则(见 §6.3 第一步),逐年抽样 20 条人工核对后再全量跑。
  3. SOTA 方法:先用规则解析产出置信度分数(命中分节头/说话人前缀比例),对低置信度块用 LLM 做结构化补解析,并把解析失败样本单独导出复查。
    参考deepwiki: MedDialog-CN 格式说明、MEDI-BERPT 数据处理节(Stanford CS224N 报告,PDF

⚠️ 坑点 2:processed.en 只有 603 条,误当英文全量(分类:标签理解)

问题:HF 配置名中的 processed 很容易理解为「官方清洗后的全量英文数据」,但 processed.en 实为论文预处理管线的演示样例(train 482 / valid 60 / test 61,合计 603 条,下载 524KB),与 processed.zh 的 340 万条完全不对等。
症状:英文模型训练 1 个 epoch 都撑不满;或评测集只有 61 条导致指标方差巨大、论文间数字不可比。
解决

  1. 简单方法:英文训练改用 raw en 配置(train 229,674 条),自行做清洗与划分。
  2. 进阶方法:英文生成任务直接采用 ChatDoctor 生态的 HealthCareMagic-100k(训练)+ iCliniq-10k(评估),已过滤、已匿名化、已对齐指令格式。
  3. SOTA 方法:以 ruslanmv/ai-medical-chatbot(251,731 条,90/10 划分)为底,叠加模板语过滤与近重去重后使用。
    参考HF 数据卡 splits 表ruslanmv/ai-medical-chatbot

⚠️ 坑点 3:英文平台模板语污染生成模型(分类:预处理陷阱)

问题:healthcaremagic/icliniq 的医生回复存在高度模板化的开场白(“Thanks for your question on Health Care Magic”)、结尾客套(“Take care”)与日期戳(“(3/21/20)”)。不做清洗直接训练,模型会把复述模板当作回复策略。
症状:生成回复以模板开头/结尾且与病情无关;BLEU 偏高但人工评估相关性极低(模型在背模板);输出中出现无意义的日期戳。
解决

  1. 简单方法:训练前用正则黑名单剥离模板句(见 §6.3 第二步 EN_TEMPLATES)。
  2. 进阶方法:按 n-gram 频率统计自动挖掘新模板——对回复首句/末句做 3-gram 频次排序,频率超阈值(如 >0.5% 的对话)自动加入黑名单。
  3. SOTA 方法:ChatDoctor 式做法——用语言工具修正语法的同时人工+自动双重过滤无信息回复,并对回复质量打分过滤后再进训练集。
    参考HF 数据卡示例ChatDoctor(Li et al., Cureus 2023)

⚠️ 坑点 4:隐私残留——URL 可回溯原帖,文本含个人信息(分类:预处理陷阱)

问题:每条对话保留 dialogue_url,可直接回溯到好大夫在线/iCliniq 的原帖页面(含医生实名页面);患者自述文本常含姓名、年龄、城市、医院、职业等直接标识符。官方平台侧只做了发帖匿名化,未做文本级 PHI 清洗,HF 数据卡也未承诺脱敏完整性。
症状:在衍生数据公开分发时被指认含 PHI;患者画像通过 URL + 文本组合可重建;合规审查不通过。
解决

  1. 简单方法:训练用数据直接删除 dialogue_url 列,文本过一遍 §6.3 第三步的正则去标识化。
  2. 进阶方法:正则 + 医学 NER 双通道扫描(PER/LOC/ORG/AGE 全类型),保留召回率报告;对中英文分别维护替换词典。
  3. SOTA 方法:发布衍生数据前引入第三方法 PHI 审计(对照 HIPAA Safe Harbor 18 类标识符逐项核查),并冻结一个不可再入的脱敏快照。
    参考HF 数据卡 Personal and Sensitive Information 节、arXiv:2305.05410(下游工作的二次匿名化实践)

⚠️ 坑点 5:无官方划分 + 近重复对话跨 split 造成指标虚高(分类:数据泄漏)

问题:raw 子集无 validation/test;高频问题(发烧、皮疹、孕产咨询)与模板化回复使海近重复对话自然存在。若随机划分,近重复对横跨 train/test,生成指标(BLEU/ROUGE)被系统性抬高。
症状:测试指标明显优于其他论文(同模型);换成去重后划分指标骤降 10-30% 而模型未变;bad case 复查发现测试集问题在训练集中几乎逐字出现过。
解决

  1. 简单方法:直接采用 HF processed.zh 官方划分,保证与社区可比。
  2. 进阶方法:对 description + 首条医生回复做 MinHash/SimHash 近重聚类,按聚类块划分(见 §6.3 第四步),并报告去重前后双指标。
  3. SOTA 方法:按「描述语义聚类块 + 年份」双层划分(老年份训练、新年份测试),同时控制主题泄漏与时序漂移。
    参考deepwiki 划分说明、VRBot(Zhou et al., AAAI 2022,arXiv:2105.06071)的过滤划分实践

⚠️ 坑点 6:同说话人连续发言被合并,轮次口径与真实对话不符(分类:标签理解)

问题:官方管线把连续来自同一方的多条发言合并为单条 utterance,因此数据中的轮次 ≠ 平台真实往返轮次;中文平均 3.3 轮是被合并后的口径。把它当作真实多轮对话密度去做「多轮能力」论证会失真。
症状:训练的多轮状态追踪模型在真实在线问诊日志上表现骤降;统计报告的「平均轮次」与源平台展示的回复条数对不上;英文侧约每对话 2 条 utterance 被误读为「患者只问一句」。
解决

  1. 简单方法:所有轮次统计与图表明确标注「合并后口径(merged turns)」。
  2. 进阶方法:训练多轮模型时在 §6.3 第一步解析层保留原始发言切分(不合并),恢复真实往返结构。
  3. SOTA 方法:用时间戳旁证(英文回复内嵌日期戳)重建发言时序,评估医生响应间隔与轮次节奏,用于更真实的对话节奏建模。
    参考EMNLP 2020 论文 §3.1HF medical_dialog.py

⚠️ 坑点 7:license unknown + 版权属源平台,商用与再分发受限(分类:工程陷阱)

问题:官方从未发布正式开源许可证(HF 标注 Unknown,bigbio 记作 Public for Research),数据卡明确「版权归 haodf.com/icliniq.com/healthcaremagic.com 所有」。学术研究是默示用途,商用、大规模再分发、把衍生语料并入商业模型训练均存在版权风险。
症状:衍生数据集在 HuggingFace 被投诉下架;商业产品法务审查卡在数据来源证明;论文发表后被要求移除附录样例。
解决

  1. 简单方法:严格限定学术研究用途,公开发布衍生数据前移除原帖 URL 并只保留必要文本。
  2. 进阶方法:产品侧改用明确可商用的替代语料(Huatuo-26M 的开放部分、CMDD 的 CC BY-NC 4.0 需注意 NC 限制、或自采数据)。
  3. SOTA 方法:建立数据溯源台账(来源 URL、抓取时间、robots 与平台条款快照),法务评估后再决定商用路径。
    参考HF 数据卡 Licensing Information 节bigbio PR #329

⚠️ 坑点 8:跨划分/跨清洗版本比较 PPL 与 BLEU,数字不可比(分类:评估误用)

问题:MedDialog 没有统一榜单,不同论文使用不同子集(全量/过滤 ≥3 轮/单轮化)、不同划分(官方 80/10/10、自建 90/5/5、VRBot 32,723/3,000/3,000)与不同清洗强度,PPL/BLEU 的绝对值不可横向比较。
症状:文献综述中出现「模型 A 的 PPL 8.2 优于模型 B 的 PPL 13.7」这类跨口径错误结论(8.2 来自 EMNLP 2020 中文测试集,13.7 是 COVID-Dialogue 迁移任务,两者不可比);评测集仅 61 条(processed.en)导致置信区间大得让结论无效。
解决

  1. 简单方法:引用任何 MedDialog 数字时注明子集、划分与清洗口径三要素。
  2. 进阶方法:在自己的评测协议下重跑至少一个历史基线(如 Transformer/BERT-GPT),以同口径差值报告改进。
  3. SOTA 方法:自动指标之外固定加入人工评估三维度(相关性/信息量/类人性,5 分制)并报告评分者间一致性,论文人工评估已证明 PPL 与人工感知不同步。
    参考Zeng et al., EMNLP 2020 §4VRBot(arXiv:2105.06071)Table 1

§6.6 数据增强

策略 示例 风险
✅ 回译增强(zh→en→zh) 对 description 做回译扩充问法多样性 医学术语易被回译破坏,需术语白名单保护
✅ 说话人视角对齐 description + 首条患者 utterance 合并为标准主诉 保留医生回复端不变,避免标签漂移
✅ 模板语随机剥离 随机移除英文模板开场白/结尾 剥离过多会让风格分布偏离真实场景
✅ 历史截断采样 随机截取对话前 k 轮作为历史、末轮为目标 目标必须始终来自医生侧
✅ 年份分层采样 按年份比例控制各 epoch 的年代构成 缓解早期数据表达风格与现代产品的落差
❌ 医学实体随机替换 把「糖尿病」换成「高血压」 药物-疾病-检查逻辑链被破坏,生成医学错误
❌ 跨对话拼接 把两条对话拼接成新对话 上下文逻辑断裂,教模型学会答非所问
❌ 医生回复自动改写增强 用 LLM 复述医生回复扩充目标 引入未验证的医学陈述,责任风险高

§6.7 模型推荐表

模型路线 适用任务 证据 备注
Transformer / GPT / BERT-GPT(论文原生) 中文对话生成、PPL 基线 EMNLP 2020:BERT-GPT PPL 8.2 复现论文数字的唯一路径
LLaMA-7B + LoRA(ChatDoctor 式) 英文指令化 SFT Cureus 2023,HealthCareMagic-100k 英文侧推荐走衍生语料
Qwen/GLM 系 + 全参或 LoRA 中文对话生成与问答 中文语料配中文底座 660M token 全量预训练成本高,建议增量预训练
BERT/RoBERTa + 分类头 科室/意图分类 中文科室分类任务 需自行从 URL 恢复科室标签
编码器-解码器(BART/mT5) 对话摘要 主诉-诊断-建议结构天然适配 中文可选含诊断建议字段作摘要目标

§6.8 硬件需求表

阶段 规模 最低配置 推荐配置
解析与清洗(全量 raw) 1.3 GiB 文本 8 核 CPU + 16 GB 内存 16 核 CPU + 64 GB 内存(近重聚类吃内存)
增量预训练 660.2M token 多卡必需 8×A100 80GB,bf16 + FlashAttention
LoRA SFT(processed.zh 子集) 数十万生成对 1×A100 40GB(7B 模型) 2×A100 80GB(14B 模型)
推理评测 单卡 1×RTX 4090 同左 + vLLM 批量解码

§6.9 评估指标代码

# 对话生成三件套:PPL + BLEU-2/4 + ROUGE-L;分类任务另配 macro-F1
import torch, math
from nltk.translate.bleu_score import sentence_bleu, SmoothingFunction
from rouge_score import rouge_scorer

smooth = SmoothingFunction().method1
rouge = rouge_scorer.RougeScorer(["rougeL"], use_stemmer=False)

@torch.no_grad()
def perplexity(model, input_ids, attention_mask, labels):
    out = model(input_ids=input_ids, attention_mask=attention_mask, labels=labels)
    return math.exp(out.loss.item())                    # 假设 loss 为交叉熵均值

def bleu_24(pred: str, refs: list):
    p = pred.split(); rs = [r.split() for r in refs]
    b2 = sentence_bleu(rs, p, weights=(0.5, 0.5), smoothing_function=smooth)
    b4 = sentence_bleu(rs, p, weights=(0.25, 0.25, 0.25, 0.25), smoothing_function=smooth)
    return b2, b4

def rouge_l(pred: str, ref: str) -> float:
    return rouge.score(ref, pred)["rougeL"].fmeasure
# 人工评估三维度(论文协议):相关性 / 信息量 / 类人性,1-5 分制,需报告评分者间一致性。

科室/意图分类任务的补充代码(macro-F1 为核心指标,类别不平衡必须报告宏平均):

from sklearn.metrics import classification_report
# y_true/y_pred 为科室标签(从原帖 URL 侧信息恢复后自建,见 §4.5)
report = classification_report(y_true, y_pred, digits=4, zero_division=0)
print(report)     # 关注 macro avg 行:长尾科室(172 细分中的低频科)不被头部科室淹没

§6.10 MLOps 笔记

  1. 数据版本化:raw TXT、解析中间产物、清洗后 JSONL 三层分别打版本(DVC 或 Git-LFS),模板语黑名单与 PHI 词典变更必须触发数据集版本号递增。
  2. 口径三要素入卡:任何训练 run 的配置里记录(子集口径、划分口径、清洗版本)三元组,这是坑点 8 的工程化防线。
  3. PII 回归测试:每次发布衍生数据前跑 PHI 扫描回归(正则 + NER 双通道),把「0 直接标识符残留」设为发布门槛。
  4. 评估快照冻结:测试集与人工评估协议冻结在独立仓库,防止测试集随训练数据悄悄演化。
  5. 时序监控:上线后的真实问诊日志与训练分布做月度漂移对比(科室占比、主诉长度、模板语比例),MedDialog 停在 2020 年,疫情后语言分布的漂移尤其显著。
  6. 解析器单元测试:逐年 TXT 解析器(坑点 1)必须配每年 ≥10 条金样本的回归测试,防止源分片重新下载后格式微调导致静默漏析。
  7. 配额与重试:Google Drive 直链存在限流与失效风险,批处理任务对下载失败要有指数退避重试与本地断点续传,避免清洗管线因单分片失败整体回滚。
  8. 指标与口径同 commit:评测代码与「口径三要素」配置放在同一 commit 发布,保证任何论文数字可追溯到确定的输入分片哈希。

§7 质量评估与局限性

§7.1 已知偏倚表

偏倚类型 描述 严重程度 缓解措施
自选择偏倚 仅覆盖选择在线问诊的用户(更年轻、互联网熟练、慢病随访为主) 结论限定于在线问诊场景;线下临床文本需另配语料
科室偏倚 内科、儿科、妇产科为中文主力大类;英文侧集中糖尿病、疼痛管理等 科室级建模时按大类分层采样或加权
平台风格偏倚 英文侧模板语密集、回答质量参差;中文侧咨询性对话占比高、含非疾病话题 §6.3 模板清洗 + 轮次/长度过滤
时间偏倚 数据冻结于 2020 年(中文 2010-2020、英文 2008-2020),疫情前后诊疗语言差异大 时序划分评测 + 上线后漂移监控
质量参差 医生回复无质量审核,存在敷衍、转诊式、模板化回复 回复长度/信息量过滤,或引入质量打分模型
隐私残留 URL 可回溯原帖,文本含个人信息,官方未做文本级脱敏 训练前强制二次去标识化(坑点 4)
标注缺失 无疾病/症状/药物实体标注,无科室结构化标签 任务前自建 NER/分类补全管线
评估偏倚 英文侧模板语使 BLEU 虚高,与临床正确性脱节 自动指标 + 人工三维度评估双轨(坑点 8)
语言混杂偏倚 中文语料夹杂方言与口语谐音、英文侧非母语拼写错误 分词器与拼写归一化预处理的鲁棒性测试

§7.2 标注质量

MedDialog 没有独立标注流程,其「标注」即平台原生结构与爬虫结构化:说话人标签准确率高(由页面回复结构决定),轮次合并规则统一但口径失真(坑点 6),诊断/建议字段完整度因医生而异。不存在标注者一致性系数。下游若把中文诊断字段当弱监督标签使用,应抽样人工核验(建议 ≥500 条)后再全量采用——论文与官方文档均未对该字段做过质量评估。实操上的分层策略:把「有诊断 + 有建议」的完整型对话划为 A 级(适合摘要与受控生成),「有描述 + 多轮对话无诊断」为 B 级(适合自由对话生成),超短或模板化回复为 C 级(仅用于预训练或剔除),并在数据卡中固化这套分层定义,保证团队内部口径一致。

§7.3 泛化性表

目标场景 失效风险 证据
中文互联网问诊对话生成 低-中:同源场景直接适配 EMNLP 2020:生成内容临床正确、医生风格显著
疫情等突发公卫事件对话 高:预训练后仍需微调 PPL 53.3→13.7(迁移后仍远高于域内 8.2)
医院内结构化医嘱/病历生成 高:语料为患者-医生公开对话,非医嘱语言 数据层级缺失患者实体(§4.4)
英文临床对话(电话/门诊转写) 高:英文子集为异步文字问诊且模板化 每对话约 2 utterance 的准单轮形态
多轮复杂问诊(>10 轮) 高:平均 3.3 轮,长对话稀少 中文 max 198 轮但平均 3.3 轮(Table 1)
分诊预问诊系统 中:主诉描述真实,但科室标签需自建 科室标签未随数据发布(§4.2)
其他语言(非中英) 不可用 语料仅中英双语言

§7.4 伦理

数据来源为患者主动公开发布的问诊帖,平台侧已提供发帖匿名机制,但这不等于患者对「进入 AI 训练语料」的知情同意——这是所有网络医疗语料的共同伦理张力。数据卡明确版权归属源平台,且官方未发布正式许可证,学术研究之外的使用需自行获得授权。公开的 dialogue_url 使原帖可回溯,重新识别风险真实存在(坑点 4)。下游部署层面,任何由此训练的「虚拟医生」输出都可能被患者当作医疗意见:ChatDoctor 明确声明仅限学术研究、禁止临床使用,MedDialog 论文作者亦将实体标注与目标导向系统列为未来工作而非可部署系统。使用本数据集时应在成果中明示这些边界。

§7.5 公平性

语料隐含的人群偏倚包括:在线问诊用户的城乡与代际差异(欠发达地区与老年群体欠表达);英文侧非母语者拼写与表达不规范可能被下游模型放大为质量信号;性别相关话题(妇产科、男科在中文侧均为高频大类)样本量与措辞风格差异明显。数据无人口学结构化字段,公平性审计只能通过文本挖掘间接进行。建议在面向患者的产品中按人群分层评测拒答率与建议质量。

§7.6 数据漂移

数据冻结于 2020 年,此后互联网医疗的语言分布已发生显著变化:COVID 后的问诊主题结构、平台话术、AI 辅助回复的渗入(医生使用模板工具)都在改变真实分布。在 2026 年使用该语料训练线上系统时,建议以「2019 前后分桶 + 线上日志月度对比」监控科室占比、主诉长度与模板语比例三类漂移信号,并对漂移超阈值的科室触发增量数据采集。

§7.7 DAIMS 24 项检查

# 检查项 状态 说明
1 宽格式 JSON/Arrow 单层结构,description + turns 平铺,无嵌套地狱
2 唯一标识 ⚠️ dialogue_id 跨年份文件可能重号,需(file_name, dialogue_id)复合主键
3 特殊字符 ⚠️ 口语文本含错拼(en 侧 imune booster 等)、全半角混用、表情符号,需清洗规范
4 重复行 ⚠️ 高频问题与模板回复造成近重复普遍,无官方去重层
5 缺失编码 纯文本无编码值体系;diagnosis/suggestions 缺失即整字段缺省
6 标签标识 ⚠️ 仅说话人标签;科室/疾病/药物标签全缺,需自建
7 罕见类分组 ⚠️ 172 细分科室长尾厚重,无官方分组指引
8 偏倚评估 论文与数据卡披露来源平台与时间范围,自选择偏倚可推断
9 数据字典 HF features 与数据卡给出字段级说明
10 信息性缺失解释 ⚠️ diagnosis 缺失含义未官方解释,需自行推断(咨询 vs 问诊形态)
11 设备记录 纯文本对话,无设备元数据(不适用)
12 共线性 文本模态无数值共线性问题
13 编码映射 ⚠️ 无 ICD/SNOMED 映射;§2.1/§2.1b 为编辑侧检索用映射
14 时间戳处理 ⚠️ 仅年份粒度(file_name/覆盖区间);en 侧回复内嵌日期戳可作辅助
15 划分建议 processed.zh 提供官方 80/10/10;raw 无划分但有社区惯例
16 泄漏讨论 官方未讨论近重复泄漏;需按 §5.3 自行处理
17 标签分布 ⚠️ 说话人分布可查;科室分布未随数据发布
18 测量偏倚 ⚠️ 中英文两平台问诊形态不同(图文问诊 vs 国际咨询),跨语言比较需谨慎
19 外部验证建议 COVID-Dialogue/MedDG/CMDD 三套外部语料均有迁移先例
20 版本记录 ⚠️ arXiv v1→EMNLP→HF v2.0.0 演进可考,但 raw 与论文口径差异解释散落多处
21 预处理脚本 HF datasets 官方加载脚本(medical_dialog.py)可复现 raw/processed 双形态
22 合规要求 license unknown、版权属源平台,无正式使用协议
23 多模态对齐 纯文本;中文原帖的检查图像未随数据发布
24 去标识化 官方仅依赖平台匿名发帖,URL 与文本 PHI 残留,需二次处理

DAIMS 评分:9.5 / 24

评分解读不及格偏中——工程可用性(结构、字典、脚本、官方划分)达标,但合规与隐私面(license unknown、PHI 残留、无泄漏讨论、无去标识化)几乎全线缺失,这是网络爬取型语料的典型画像。

对你意味着什么:可以把 MedDialog 直接当作「预训练与 SFT 的原料」用起来——processed.zh 划分开箱即用、字段字典清晰、加载脚本可复现,这 5 个 ✅ 保证了一周内可跑通第一个基线。但 6 个 ❌ 与 13 个 ⚠️ 划出了不可省略的自建工作清单:先做二次去标识化(坑点 4)与模板清洗(坑点 3),再做近重去重与划分审计(坑点 5),把 license 风险写进项目合规台账(坑点 7);任何需要疾病标签的任务都要自建 NER/分类管线。若你的用途是商用或公开发布衍生数据,本数据集的合规短板将直接决定项目是否可行,建议优先评估替代语料。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
COVID-Dialogue(中文,1,088 条) UCSD AI4H 对话生成迁移 PPL:53.3(from scratch)→ 13.7(MedDialog 预训练) 大幅改善但仍劣于域内(8.2) 规模预训练可显著补偿小数据任务
COVID-Dialogue 人工评估 UCSD AI4H 相关性/信息量/类人性 GPT 类人性 1.80→3.20(5 分制) 预训练全面提升三维度 人工评估与 PPL 改进方向一致
HealthCareMagic/iCliniq(英文) UT Southwestern 等(ChatDoctor) 医疗问答质量 精确率/召回率/F1 均优于 ChatGPT(Cureus 2023 报告) 同源语料微调后超越通用大模型 同源清洗语料 + LLaMA 微调是英文侧有效路径
MedDG / KaMed(中文对话生成) 山东大学等(VRBot,AAAI 2022) 过滤后对话生成 32,723/3,000/3,000 划分,平均 4.76 轮 过滤 ≥3 轮后任务难度上升 轮次过滤显著改变任务分布,跨论文需对齐口径

§8 基准性能与生态

§8.1 排行榜

MedDialog 无官方榜单。下表汇总论文原文报告的中文测试集生成结果(同口径可比):

排名 模型 性能(PPL,中文测试集) 年份 关键技术 完整引用 代码
1 BERT-GPT 8.2 2020 BERT 编码器初始化 + GPT 式解码,MedDialog-CN 预训练 Zeng, G. et al., 2020, EMNLP. DOI: 10.18653/v1/2020.emnlp-main.743 GitHub
2 Transformer 9.5 2020 Seq2Seq + attention,MedDialog-CN 预训练 Zeng, G. et al., 2020, EMNLP. DOI: 10.18653/v1/2020.emnlp-main.743 GitHub

⚠️ 数值不可直接比较的原因:上述数字仅在论文自建划分与清洗口径下成立;其他论文(VRBot 等)采用不同子集与划分,PPL/BLEU 绝对值不可跨论文比较(详见坑点 8)。英文侧无同口径 PPL 榜单。

§8.2 SOTA 总结与选型建议

以域内 PPL 论,2020 年的 BERT-GPT(8.2)代表了 MedDialog-CN 上经典架构的参考线;2023 年后的实践已整体转向「LLM + 同源清洗语料 SFT」路线(ChatDoctor 及后续工作),生成质量不再以 PPL 为唯一指标,而以人工评估与下游安全性为主。选型建议:复现经典实验选论文原生三件套(Transformer/GPT/BERT-GPT);构建现代医疗助手选 7B-14B 中文底座 + processed.zh/衍生语料 SFT;做学术评测新方法时务必冻结自己的评测协议并重跑一个历史基线。

选型速查:

  • 要发论文做对话生成对比:processed.zh 官方划分 + BERT-GPT 基线 + 人工三维度评估。
  • 要做患者侧原型产品:衍生清洗语料(ruslanmv 版或 HealthCareMagic-100k)+ LoRA SFT + 强制免责声明与拒答策略。
  • 要做分诊/科室路由:raw zh + URL 侧科室信息恢复 + macro-F1 评估 + 长尾科室分层验证。

§8.3 评测协议

论文采用自动 + 人工双轨:自动指标为 PPL、NIST-4、BLEU-2/4、ROUGE;人工评估为相关性、信息量、类人性三维度(1-5 分制),由评估者对配对生成结果盲评。分类任务(科室/意图)以 accuracy 与 macro-F1 报告。协议要点:训练目标是「对话历史 → 医生回复」;预训练在 MedDialog-CN 全量、迁移实验在 COVID-Dialogue(1,088 条中文)微调;所有与论文对比的实验必须回到论文 §4.1 的超参设置。复现清单:中文 processed 全量、BERT-GPT 结构与训练计划、论文的验证集选点策略(按验证 PPL 选 checkpoint);任一环节偏离都应显式声明,并在论文引用处标注口径差异。

数据集 关系 规模 许可证 链接
COVID-Dialogue 同团队出品的疫情子集 中文 1,088 + 英文 603 条对话 学术研究 GitHub
CMDD 中文单轮问答对照 792,099 条 CC BY-NC 4.0 Tianchi
MedDG 细粒度标注胃肠对话 14,864/2,000/1,000 学术研究 论文发布页
Huatuo-26M 更大规模中文医疗问答 26,239,047 train 多许可 GitHub
KaMed 长对话 + 知识图谱 57,754/3,000/3,000 学术研究 论文发布页
HealthCareMagic-100k / iCliniq-10k MedDialog-EN 同源清洗衍生 10 万 + 1 万条 非商业(继承 LLaMA 条款) GitHub
ruslanmv/ai-medical-chatbot MedDialog-EN 衍生(257k 清洗版) 251,731 条 Apache-2.0 HuggingFace
OpenMed/MedDialog ruslanmv 版的 RL 环境封装 251,731 条 Apache-2.0 HuggingFace
bigbio meddialog 社区标准化接入 同官方 raw 同官方 GitHub PR #329

§8.5 关键论文 Top 7

  1. Zeng, G., Yang, W., Ju, Z., et al., 2020, EMNLP. DOI: 10.18653/v1/2020.emnlp-main.743 — MedDialog 正式论文:双语子集构建、对话生成预训练与迁移实验。
  2. Chen, S., Ju, Z., Dong, X., et al., 2020, arXiv:2004.03329 — 首个公开版本:中文 114.5 万对话的规模论证。
  3. Li, Y., Li, Z., Zhang, K., et al., 2023, Cureus 15(6). — ChatDoctor:LLaMA-7B + 同源 10 万对话微调,奠定英文医疗 chat 范式。
  4. Zhou, K. et al., 2022, AAAI(arXiv:2105.06071)— VRBot:以 MedDialog 过滤子集为基准的知识感知对话生成。
  5. Zhang, X. et al., 2020, arXiv:2005.00428(COVID-Dialogue)— 同团队疫情对话数据,迁移评测标准场景。
  6. Liu, J. et al., 2018(MedDG,Wei et al. 2018 后续线)— 带状态标注的胃肠对话,细粒度评测对照。
  7. Wang, H. et al., 2023, arXiv:2305.01526(Huatuo-26M)— 中文医疗指令语料的规模化对照系。

§8.6 社区活跃度

MedDialog 是医疗对话方向引用最高的数据集论文之一(416+ 次,Google Scholar,截至 2026-09)。生态活跃度的证据链是衍生资产而非榜单:HuggingFace 上 UCSD26/medical_dialog 为官方分发主形态,ruslanmv/ai-medical-chatbot(衍生英文清洗版)长期处于医疗对话类数据集高热度区间;ChatDoctor 语料与模型成为 2023 年后被广泛复用的事实标准;bigscience-workshop/biomedical、OpenMed、ModelScope 等目录均有收录。原始 GitHub 仓库以发布与维护为主,近年更新频率低,问题反馈多发生在 HF 社区与衍生仓库。

§8.7 生态快照表

资源 类型 链接 状态 推荐理由
UCSD-AI4H/Medical-Dialogue-System 官方仓库 GitHub 截至 2026-09 可访问 分片链接与预处理说明的权威入口
UCSD26/medical_dialog 官方 HF 数据集 HuggingFace 截至 2026-09 可访问 4 配置、官方加载脚本、v2.0.0
Kent0n-Li/ChatDoctor 衍生模型+语料 GitHub 截至 2026-09 可访问 英文侧 SFT 路线参考实现
ruslanmv/ai-medical-chatbot 衍生清洗语料 HuggingFace 截至 2026-09 可访问 英文 257k 指令对齐版
bigscience-workshop/biomedical(meddialog) 社区标准化接入 GitHub PR #329 截至 2026-09 可访问 bigbio 格式统一接口
UCSD-AI4H/COVID-Dialogue 同团队姊妹数据集 GitHub 截至 2026-09 可访问 迁移评测标准场景

§9 相关资源与引用

§9.1 官方资源

§9.2 BibTeX 引用

@inproceedings{zeng-etal-2020-meddialog,
    title = "{M}ed{D}ialog: Large-scale Medical Dialogue Datasets",
    author = "Zeng, Guangtao and Yang, Wenmian and Ju, Zeqian and Yang, Yue and
              Wang, Sicheng and Zhang, Ruisi and Zhou, Meng and Zeng, Jiaqi and
              Dong, Xiangyu and Zhang, Ruoyu and Fang, Hongchao and Zhu, Penghui and
              Chen, Shu and Xie, Pengtao",
    editor = "Webber, Bonnie and Cohn, Trevor and He, Yulan and Liu, Yang",
    booktitle = "Proceedings of the 2020 Conference on Empirical Methods in
                 Natural Language Processing (EMNLP)",
    month = nov,
    year = "2020",
    address = "Online",
    publisher = "Association for Computational Linguistics",
    url = "https://aclanthology.org/2020.emnlp-main.743/",
    doi = "10.18653/v1/2020.emnlp-main.743",
    pages = "9241--9250"
}

@article{chen2020meddialog,
    title = {MedDialog: A Large-scale Medical Dialogue Dataset},
    author = {Chen, Shu and Ju, Zeqian and Dong, Xiangyu and Fang, Hongchao and
              Wang, Sicheng and Yang, Yue and Zeng, Jiaqi and Zhang, Ruisi and
              Zhang, Ruoyu and Zhou, Meng and Zhu, Penghui and Xie, Pengtao},
    journal = {arXiv preprint arXiv:2004.03329},
    year = {2020},
    url = {https://arxiv.org/abs/2004.03329}
}

§9.3 引用指南

使用 MedDialog 原始数据时引用 EMNLP 2020 正式版(zeng-etal-2020-meddialog);使用 arXiv v1 口径数字或中文单子集早期版本时引用 chen2020meddialog;使用 ChatDoctor 衍生语料时同时引用 Li et al., 2023, Cureus。在成果中报告规模数字时必须注明口径(论文全量 vs HF raw 发布子集),并附数据访问日期。

补充建议:当同时使用中英两个子集时,建议在论文中分别披露 MedDialog-CN 与 MedDialog-EN 的样本量与时间范围,避免「3.4M/0.26M」被误读为单语言总量;若使用 HF processed.zh 划分,注明版本号 v2.0.0 与配置名,保证结果可复现。


§10 AI 使用声明卡

§10.1 AI 模型列表

模型 用途
大语言模型(CodeBuddy,fast-model) 本页面的资料检索、草稿撰写与结构组织

§10.2 AI 参与范围

AI 负责文献检索与汇总、章节初稿撰写、代码示例编写与表格整理。全部事实性断言(规模数字、划分、许可证状态、基准数字)均须溯源至 §10.3 所列来源;医学与合规判断(伦理、偏倚、许可证解读)由人工审核者确认。

§10.3 输入来源列表

  1. Zeng, G., Yang, W., Ju, Z., Yang, Y., Wang, S., Zhang, R., Zhou, M., Zeng, J., Dong, X., Zhang, R., Fang, H., Zhu, P., Chen, S., & Xie, P., 2020, EMNLP. DOI: 10.18653/v1/2020.emnlp-main.743.
  2. Chen, S., Ju, Z., Dong, X., Fang, H., Wang, S., Yang, Y., Zeng, J., Zhang, R., Zhang, R., Zhou, M., Zhu, P., & Xie, P., 2020, arXiv preprint arXiv:2004.03329v1.
  3. He, X., Chen, S., et al., 2020, arXiv:2004.03329v2(MedDialog: Two Large-scale Medical Dialogue Datasets).
  4. HuggingFace Dataset Card: UCSD26/medical_dialog(v2.0.0 数据卡、splits 与敏感信息节), https://huggingface.co/datasets/UCSD26/medical_dialog.
  5. HuggingFace datasets 官方加载脚本 medical_dialog.py(UCSD26/medical_dialog 仓库内), https://huggingface.co/datasets/UCSD26/medical_dialog/blob/main/medical_dialog.py.
  6. bigscience-workshop/biomedical PR #329(bigbio meddialog 接入,许可证与下载链路), https://github.com/bigscience-workshop/biomedical/pull/329/files.
  7. huggingface/datasets 提交 93e9cba(medical_dialog 初始收录与数据卡), https://github.com/huggingface/datasets/commit/93e9cba389aea2e9daf505d7dc6fbd6a0e149fc8.
  8. OpenMedLab/Awesome-Medical-Dataset(DeepWiki:MedDialog-CN 格式、划分与科室覆盖), https://deepwiki.com/openmedlab/Awesome-Medical-Dataset/5.3-medical-dialogue-datasets.
  9. Zhou, K., et al., 2022, AAAI(VRBot, arXiv:2105.06071, Table 1 数据集统计), https://arxiv.org/abs/2105.06071.
  10. Li, Y., Li, Z., Zhang, K., Dan, R., Jiang, S., & Zhang, Y., 2023, Cureus 15(6)(ChatDoctor)及 GitHub 仓库 Kent0n-Li/ChatDoctor.
  11. Li, Y., et al., 2023, arXiv:2303.14070(ChatDoctor 预印本).
  12. Wang, H., et al., 2023, arXiv:2305.05410(Holistically Thought in Medical Conversational QA,MedDialog-EN 257,454 口径).
  13. Springer Scientific Reports, 2023, s41598-023-29213-8(MedDialog 重划分统计表), https://link.springer.com/article/10.1038/s41598-023-29213-8.
  14. MEDI-BERPT, Stanford CS224N 课程报告 2023(MedDialog-CN 逐年格式与科室分类实践), https://web.stanford.edu/class/archive/cs/cs224n/cs224n.1234/final-reports/final-report-169727160.pdf.
  15. Google Scholar 引用记录(MedDialog: Large-scale medical dialogue datasets,416+ 引用), https://scholar.google.com/.
  16. ruslanmv/ai-medical-chatbot 数据卡(MedDialog-EN 衍生清洗版 251,731 条), https://huggingface.co/datasets/ruslanmv/ai-medical-chatbot.
  17. ModelScope OpenMed/MedDialog 镜像页, https://modelscope.cn/datasets/OpenMed/MedDialog.

§10.4 人工校验表

内容模块 审核者 审核方式 审核状态
frontmatter 与 schema_org 千方病案医学编辑部 Schema v3.9 字段逐项校验 ✅ 已通过
§1 概览与规模数字口径 千方病案医学编辑部 与 EMNLP 2020 论文及 HF 数据卡交叉比对 ✅ 已验证
§2 医学背景与 ICD/SNOMED 映射 千方病案医学编辑部 编码表抽查与文献核对 ✅ 已通过
§3-§4 规格与数据结构 千方病案医学编辑部 与 HF features 及官方仓库说明逐项核对 ✅ 已验证
§5 划分与泄漏分析 千方病案医学编辑部 数据工程复核 ✅ 已通过
§6 AI 就绪指南与 8 坑点 千方病案医学编辑部 代码走查 + 坑点事实溯源 ✅ 已验证
§7 质量评估与 DAIMS 评分 千方病案医学编辑部 交叉审核 ✅ 已通过
§8 排行榜与引用数表述 千方病案医学编辑部 与原文及 Scholar 快照交叉比对 ✅ 已验证
§C JSON-LD @graph 千方病案医学编辑部 Schema v3.9 字段逐项校验 ✅ 已通过

§10.5 AI 生成章节标注

本页面全部章节由 AI 辅助起草,经 §10.4 所列人工交叉审核后发布;其中 §2 医学背景、§5 划分策略、§7 偏倚与 DAIMS 评分为 AI 起草 + 人工复核重点章节。

§10.6 最后人工审核日期

2026-09-05(与 §0 审核日期一致)

页面状态:published(全部内容已完成审核并发布)

返回 AI-Ready 数据集