跳转至

IndicMedDialog: A Parallel Multi-Turn Medical Dialogue Dataset for Accessible Healthcare in Indic Languages

会议: ACL 2026
arXiv: 2605.13292
代码: https://github.com/ShubhamKumarNigam/IndicMedDialog (有)
领域: 医疗NLP
关键词: 印度语系医学对话、并行多语言数据集、LoRA 微调、临床诊断、Asha 翻译质量保证

一句话总结

本文构造 IndicMedDialog——首个覆盖英文+9 种印度语系(Assamese / Bengali / Gujarati / Hindi / Marathi / Punjabi / Tamil / Telugu / Urdu)的平行多轮医学诊断对话数据集(2,980 段对话 × 10 语 = 29,800 个实例),用 LLaMA-3.3-70B 合成对话 + TranslateGemma 翻译 + native speaker 校对 + 脚本感知 post-processing 修音/拼/字符间距;并基于 4-bit 量化 LLaMA-3.2-3B + LoRA 训出 IndicMedLM,在英文/印地语/马拉地语等 7/10 种语言上拿到 post-processed accuracy 最高,同时 95.3% 医学安全通过率,揭示了 5 类系统性 failure mode(ID/LC/CDC/TTF/PLG)。

研究背景与动机

领域现状:医学对话 AI 在症状评估和初诊建议上潜力很大,但现有系统多为单轮 QA + 英文中心。真正的临床诊断需要多轮 follow-up 来逐步缩小鉴别诊断空间,而 15 亿印度语系人群几乎没有可用的多轮医学对话数据。

现有痛点:(1) 单轮主导:ChatDoctor 等系统假设单轮,无法模拟"医生连环问诊→鉴别诊断"过程;(2) 模板化数据集:MDDial 提供了多轮英文鉴别诊断语料但用模板生成,语言多样性弱;(3) 多语言空白:BiMediX 做了英文-阿拉伯双语,但九大印度语系完全缺平行数据;(4) 简单翻译不行:现成 LLM 翻译对印度语系普遍存在音译错乱、词汇不准、字符间距错乱等系统性错误。

核心矛盾:要在低资源语言上部署可用的医学对话 AI,必须解决"高质量多轮临床对话语料 × 多语种平行 × 算力可负担"的三角约束——前者贵且涉及隐私,后两者技术门槛高。

本文目标:(a) 用合成 + 翻译 + 人工校对的混合 pipeline 构造首个 10 语并行多轮医学对话语料;(b) 基于 4-bit 量化小模型 + LoRA 训出能在普通硬件上跑的 IndicMedLM;(c) 引入可选 patient pre-context(年龄/性别/过敏史等)模拟真实问诊上下文;(d) 通过医生评估 + 错误 taxonomy 揭示 Indic 医学对话的真实失败模式。

切入角度:把 MDDial 作为种子语料 → LLM 扩合成丰富对话多样性 → TranslateGemma + 多 native speaker rater + 脚本感知后处理保障翻译可信 → LoRA + 量化让小模型可部署。

核心 idea:用"语料构造 + 小模型工程化部署 + 系统化错误诊断"三件套,撬开低资源印度语系医学 NLP 这块硬骨头。

方法详解

整体框架

分为数据构造、模型训练、错误分析三块:

  1. 数据构造:(i) 用 Llama-3.3-70B-Versatile (via Groq) 合成 1,101 段多轮诊断对话,覆盖 12 种疾病 / 118 种症状 / 4-8 轮对话,注入非确定性患者响应、重叠症状、模糊描述以贴近真实;与原 MDDial 1,879 段合并为 2,980 段;(ii) 用 TranslateGemma 把英文版翻译到 9 种印度语,结构化 prompt 保留临床语义;(iii) 脚本感知 post-processing 把音/拼/字符间距错误映射到目标语言最近正确形式;(iv) 每语 2 名 native speaker 独立打分(翻译质量 T、临床安全 S 各 10 分),均值 \(\bar T = 9.50\)\(\bar S = 9.56\)
  2. 模型训练(IndicMedLM):基模 LLaMA-3.2-3B-Instruct + 4-bit NF4 量化 + LoRA(rank 16, α=16, dropout 0),LoRA 插入所有 attention proj 和 MLP proj;AdamW-8bit lr=\(2\times 10^{-4}\),wd=0.001, bsz=8(2×4 grad acc),300 step + 5 warm,BF16/FP16,seed=3407;每个印度语单独训练,对话格式为 ShareGPT 风格的 human/gpt 交替;可选 patient pre-context 拼到对话前缀,使模型按年龄/性别/过敏等个性化提问。
  3. 两阶段 post-processing 评测:模型输出经常把正确诊断包裹在解释性长句里,原始 accuracy 会低估真实诊断能力;用 ChatGPT 作为 LLM judge,做"受限语义等价分类"——给定自由文本输出与 12 个标准疾病名,judge 必须从封闭集中选一个或返回 NULL(高于置信阈值时才映射),从而避免幻觉同时回收"对了但格式不对"的案例。
%%{init: {'flowchart': {'rankSpacing': 24, 'nodeSpacing': 28, 'padding': 6, 'wrappingWidth': 400, 'subGraphTitleMargin': {'top': 8, 'bottom': 16}}}}%%
flowchart TD
    A["MDDial 英文种子<br/>1,879 段"] --> S1
    subgraph S1["三段式语料链"]
        direction TB
        B["Llama-3.3-70B 合成<br/>12 病 / 118 症状 / 4-8 轮"] --> C["TranslateGemma 翻译 9 种印度语"]
        C --> D["脚本感知后处理<br/>Unicode 形态映射纠错"]
        D --> E["native speaker 校对<br/>T=9.50 / S=9.56"]
    end
    S1 --> F["IndicMedDialog<br/>2,980 段 × 10 语 = 29,800 实例"]
    F --> S2
    subgraph S2["LoRA + 量化 + Patient Pre-context"]
        direction TB
        G["LLaMA-3.2-3B + 4-bit NF4 量化"] --> H["LoRA 插 attention 与 MLP proj"]
        H --> I["Patient Pre-context 前缀<br/>年龄 / 性别 / 过敏史"]
    end
    S2 -->|每语单独训练| J["IndicMedLM"]
    J --> S3
    subgraph S3["两阶段后处理评测 + 错误诊断"]
        direction TB
        K["ChatGPT closed-set judge<br/>自由文本 → 12 标准病名 / NULL"] --> L["Post accuracy 回收<br/>Hindi/Marathi +53/+55pp"]
        L --> M["5 类 Failure Mode taxonomy<br/>ID / LC / CDC / TTF / PLG"]
    end

关键设计

1. 合成 + 翻译 + 脚本感知后处理的三段式语料链:在没有真实临床多语对话的前提下,造出语义一致、临床合理、语言准确的 10 语平行语料

低资源印度语系最大的拦路虎是「现成 LLM 直接翻译会大量吐出看起来像 Bengali、实际却乱拼的字符串」——音译错乱、词形误用、字符间距错位是系统性的。本文先用 Llama-3.3-70B 在 12 疾病 × 118 症状的 schema 约束下合成英文多轮诊断对话(控制 4-8 轮长度、注入症状重叠与模糊描述以贴近真实问诊),再用 TranslateGemma 翻成 9 种 Indic,关键的一环是其后的脚本感知 post-processing:它不依赖 LLM 二次润色,而是按目标语脚本的 Unicode 规则,把翻译产生的错乱形态(如 Bengali 字符间距、Hindi 词形误用)映射回最近的正确形式。

之所以要单独做这一步,是因为单靠 LLM 后处理无法稳定纠正脚本级错误,必须落到 Unicode 形态映射才靠谱。最后用每语 2 名 native speaker 对翻译质量 \(T\) 与临床安全 \(S\) 各打 10 分独立仲裁,得到 \(\bar T = 9.50\)\(\bar S = 9.56\)——用真人评分而非模型自评作为质量上限,规避了「自己造数据又自己打分」的陷阱。

2. LoRA + 4-bit 量化 + Patient Pre-context:让 3B 小模型在普通硬件上完成多轮个性化问诊

医疗 AI 真正落地的痛点不是精度而是算力——乡镇诊所没有 GPU 集群,论文因此显式把「低算力」当成硬约束反推架构。基模选 LLaMA-3.2-3B-Instruct,先用 4-bit NF4 量化把显存压到消费级 GPU 可接受,再用 LoRA(rank 16)同时插到所有 attention proj 与 MLP proj 上——覆盖 MLP 是为了让语言表征和任务知识都能被调,而不只是浅层 attention。对话按 ShareGPT 格式组织、human=患者 / gpt=医生,角色边界清晰。

个性化则靠可选的 patient pre-context:把年龄、性别、过敏史、合并症、地理位置拼到对话前缀,让模型采症时跳过已知信息、把追问聚焦到差异化症状上。这条设计直接来自真实临床 workflow——医生不会重复问已经知道的信息,AI 也不该。每个印度语单独训练,AdamW-8bit lr=\(2\times 10^{-4}\)、wd=0.001、bsz=8(2×4 grad acc)、300 step + 5 warm、BF16/FP16、seed=3407。

3. 两阶段后处理评测 + 5 类 Failure Mode taxonomy:既回收「对了但格式不对」的预测,又把「模型烂」拆成可定位的失败机制

模型常把正确诊断包裹在印地/马拉地式的 hedging 长句里,raw accuracy 会严重低估真实能力(Hindi/Marathi raw 仅 19%/13%,post 直接到 73%/69%)。第一阶段用 ChatGPT 作 closed-set judge——给定自由文本输出与 12 个 canonical 疾病名,judge 只能从封闭集里选最语义等价的一个或返回 NULL,高于置信阈值才映射,从而在回收正确预测的同时不让 judge 幻觉新答案。

⚠️ cache 中 judge 标注为 "ChatGPT 5.3",型号名以原文为准。

第二阶段把失败系统化成 5 类 FM,每类对应不同改进抓手:FM1 Instruction Drift(输出散文不带标签、部分可恢复,对应 Hindi/Marathi 的 +54pp 跳升)、FM2 Label Collapse(多病映射到同一假名,如 Bengali 把 5 类病全归到「肺感染」)、FM3 Cross-Domain Confusion(如冠心病→甲状腺炎)、FM4 Tokenization/Truncation Failure(Punjabi/Telugu 字符级截断,而 Devanagari 的 Hindi/Marathi 完全不受影响——证明瓶颈是 tokenizer 的 Unicode 覆盖而非数据量)、FM5 Paraphrase-over-Label Generation(输出疾病描述而非标准名,最易恢复)。这份 taxonomy 的价值在于把笼统的「准确率低」翻译成具体处方:FM4 该换 tokenizer,FM1/FM5 该加格式 reward 或后处理,而不是无脑加数据。

损失函数 / 训练策略

标准 causal LM SFT loss(无特殊 reward / KD);每语单独训练同套超参,inference 时 temperature=0.1, top-p=0.95, max_new=128;evaluation 含 (i) 自动诊断准确率(raw vs post);(ii) 三位 MBBS 在读医生做 1-5 Likert 评分 + binary safety,Krippendorff's α=0.81。

实验关键数据

主实验

10 种语言上的诊断准确率(%),Raw 是原始输出匹配,Post 是 LLM judge 语义等价回收后:

语言 GEMMA Post Tiny-AYA Post LLaMA Base Post IndicMedLM Raw IndicMedLM Post
English 45.11 13.19 15.74 80.85 80.85
Hindi 25.10 13.19 11.06 19.15 72.76 (+53.6pp)
Marathi 9.36 5.11 11.50 13.19 68.51 (+55.3pp)
Bengali 19.57 5.96 11.50 25.11 58.72
Urdu 2.12 13.61 2.55 4.26 28.51
Gujarati 18.72 37.02 18.30 18.30 19.57
Punjabi 7.66 8.12 8.51 5.96 20.42
Assamese 7.66 8.08 3.83 5.96 5.96
Tamil 11.91 3.83 6.80 6.38 6.80
Telugu 6.38 0.00 4.68 1.28 5.96

IndicMedLM 在 7/10 语言上拿 post-processed accuracy 第一;Hindi/Marathi 的 raw→post 大跳跃(+53/+55pp)说明这两语的真实诊断能力被 raw 指标严重低估。

消融 / 专家评估(IndicMedLM 综合表现)

维度 IndicMedLM
Medical Safety Pass Rate 95.3%
Symptom Extraction (1-5) 4.20
Context Memory (1-5) 4.40
Diagnostic Correctness (1-5) 4.10
Conversational Flow (1-5) 4.30
Efficiency (1-5) 4.00
Inter-annotator Krippendorff α 0.81 (strong)
Translation Quality (10-pt) \(\bar T = 9.50\)
Clinical Safety in Translation (10-pt) \(\bar S = 9.56\)

关键发现

  • Hindi/Marathi 假性低分:raw 才 19%/13%,post 直接到 73%/69%,说明模型确实学到了诊断知识但喜欢"用印地/马拉地式的 hedging 句子"包裹答案,metric artifact 而非能力缺失——直接 inform 后续 evaluation 协议必须配语义等价 judge。
  • 疾病粒度方差极大:Traumatic Brain Injury 在英文/印地 94.7%,在 Assamese/Tamil/Telugu/Urdu 完全 0%;Conjunctivitis 在 Punjabi(语言整体 20%)却 100%——证明语言整体准确率掩盖了高度异质的疾病-语言相关性,应按 (语言, 疾病) 维度分析风险。
  • Devanagari vs Gurmukhi/Telugu 的 tokenizer 鸿沟:FM4 Truncation 只在 Punjabi/Telugu 出现,Hindi/Marathi 完全没有,证明问题在 LLaMA 基模的 Unicode tokenizer 覆盖而非训练数据量;这条结论给"为什么单纯加 Indic 数据救不了 Tamil/Telugu"提供了机械层面解释。
  • Bengali Label Collapse:5 类病全映射成"肺感染",是 majority-class bias 在语义 hypernym 上的体现,提示 SFT 标签分布需要平衡。
  • 95.3% safety pass + 0.81 IAA:医生评估 sample 中 1483/1556 dialog 安全,说明在合成 + LoRA 路线下医学安全风险已基本可控;强 IAA 也表明评测协议本身有效。

亮点与洞察

  • 首个 10 语平行多轮医学对话语料这一点本身就有巨大社区价值——填补 1.5B 人口的 NLP 资源空白;脚本感知 post-processing pipeline 是后续 Indic 翻译质量的可复用 trick。
  • 5 类 FM taxonomy 是该领域第一份"诊断错误诊断"框架——它把"模型烂"区分为格式/语义/学科/字符/换皮 5 个层次,每一类对应不同改进方案(FM1 加格式 reward、FM4 换 tokenizer、FM5 加 post-processing),是工程上极有用的导航图。
  • Post-processing recovery 揭示的"低资源语用习惯影响 metric"是一条普适教训:当模型用目标语 idiomatic hedging 表达时,硬匹配会大幅低估能力——这在所有低资源 NLP 评测中都值得引以为戒。
  • patient pre-context 的引入虽然简单,但把"医生不会重复问已知信息"这一临床直觉显式注入对话,是医疗对话 AI 工程化非常正确的一小步。
  • 4-bit 量化 + LoRA 这条工程路径专门为部署到资源受限地区设计——这呼应了论文使命(accessibility for underserved regions),并非纯学术 trade-off。

局限与展望

  • 数据仍只覆盖 12 种疾病 / 118 种症状,离真实临床数千种疾病差距巨大;且全是合成 + 翻译,缺真实印度患者-医生对话作 ground truth。
  • Assamese / Tamil / Telugu / Urdu 几乎完全失败(accuracy < 10%),主要瓶颈是基模 tokenizer 与 pretraining 数据分布;论文只指出问题但未实质解决——一个根本方案是换用印度语优化的基模(如 Sarvam-1)。
  • 评测用 ChatGPT 作 judge,存在评估循环依赖(用闭源模型当 GT 校准开源模型);专家评估只 sample 一小部分对话。
  • 个人观察:(a) 多轮诊断的真正难点是"何时停止追问开始下诊断",论文 4-8 轮硬截断未充分探索;(b) "可选 pre-context"在主表上未做有/无对照,无法量化其贡献;(c) 文化语境敏感性(如方言表达、性别禁忌话题)只在 safety pass rate 中粗略反映,未做细粒度分析。

相关工作与启发

  • vs MDDial (Macherla 2023):MDDial 是英文模板生成的多轮鉴别诊断;本文以其为种子,扩合成、扩多语、加 native verify,把模板 corpus 升级为可用的平行多语语料。
  • vs BiMediX (Pieri 2024):BiMediX 是英文-阿拉伯双语医学对话,本文把多语种数从 2 扩到 10,覆盖更稀缺的印度语系。
  • vs MedAidDialog (Nigam 2026):是同作者前作(覆盖部分印度语+阿拉伯),本文专精印度语系且做平行数据,错误 taxonomy 更系统。
  • vs ChatDoctor / Zhongjing / AMIE:这些工作要么是英文单轮要么是中文多轮;本文证明"小模型 + LoRA + 量化 + 合成数据"在低资源多语场景也能做出可用的多轮诊断系统。
  • vs NoteChat (Wang 2024):NoteChat 由临床笔记生成对话,本文由疾病-症状 schema 生成对话,二者可互补——可以想象 future work 把笔记驱动 + schema 驱动两种合成路线结合做出更真实的低资源医学对话。

评分

  • 新颖性: ⭐⭐⭐⭐ 数据集是首个,方法(合成 + 翻译 + 后处理 + 5-FM taxonomy)是工程组合而非颠覆性技术,但 social impact 角度很有原创性。
  • 实验充分度: ⭐⭐⭐⭐ 10 语全表对比 + 12 疾病粒度分析 + 三医生 IAA 评估 + 五类 FM 系统化错误分析,覆盖面广;缺少 ablation(pre-context、post-processing 各自的增量贡献)。
  • 写作质量: ⭐⭐⭐⭐ 数据-方法-错误三段式清晰,表格设计很好读;fontspec 标签在 cache 里残留较多影响阅读但不影响内容质量。
  • 价值: ⭐⭐⭐⭐⭐ 直接服务 15 亿低资源人群,开源数据集 + 模型 + 训练代码,社区影响力强;五类 FM taxonomy 也对低资源医学 NLP 后续研究有方法学价值。