信息速览
MEDDOPROF — 西班牙语临床职业信息标注 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | MEDDOPROF corpus(Gold Standard) |
| 英文全称 | MEDical DOcuments PROFessions recognition(MEDDOPROF) |
| 别名/简称 | MEDDOPROF-NER / MEDDOPROF-CLASS / MEDDOPROF-NORM;ProfNER 姊妹任务系列 |
| 疾病分类 | 非疾病特异性(覆盖 20+ 专科临床文本);职业健康相关 ICD-11:QD80 失业问题 / QD84 职业危险因素暴露 / QD85 职业倦怠(第 24 章 影响健康状态或与保健机构接触的因素) |
| SNOMED CT | 语料归一化目标之一:49 个唯一 SNOMED CT 码(就业状态/活动,如退休、失业、无家可归);职业提及另映射 ESCO(297 个唯一码) |
| 数据模态 | 西班牙语临床病历自由文本(UTF-8 纯文本 + brat standoff 标注) |
| AI 任务类型 | 命名实体识别(NER)、提及归属分类(CLASS)、术语归一化(NORM);职业健康信息抽取、病历匿名化研究 |
| 样本总数 | 1,844 份临床病例(训练 1,500 / 测试 344);4,657 条 NER 标注;58,627 句 / 1,291,186 tokens |
| 数据大小 | 14.1 MB(完整金标准 ZIP);训练集单独包 7.4 MB;Silver Standard 扩展集 25.7 MB |
| 数据格式 | UTF-8 纯文本(.txt)+ brat standoff(.ann)+ TSV(meddoprof-norm.tsv) |
| 许可证 | Creative Commons Attribution 4.0 International(CC BY 4.0) |
| 访问级别 | 开放(Zenodo 直接下载,无需注册申请) |
| DUO 标签 | NRES(无限制研究使用) |
| 语言 | 西班牙语(卡斯蒂利亚语,西班牙) |
| 首发日期 | 2021(共享任务版;金标准 v1 于 2021-07-05 发布 Zenodo) |
| 最后更新 | 2022-09-27(终版:meddoprof-norm.tsv 补全 SNOMED CT 全量归一化) |
| 发布机构 | 巴塞罗那超级计算中心文本挖掘单元(BSC-TeMU)& 都柏林城市大学(D-REAL);西班牙 Plan TL 立法推动计划资助 |
| 官方主页 | https://temu.bsc.es/meddoprof/ |
| 下载地址 | https://doi.org/10.5281/zenodo.7116201 |
| DOI | 10.5281/zenodo.7116201(数据)/ 10.26342/2021-67-21(任务概览论文) |
| 引用次数 | 26+(Semantic Scholar,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方 train/test 划分、33 页标注规范、CC BY 开放许可与归一化 TSV 齐备;扣分项:brat standoff 需自行转 BIO、无官方 DataLoader/预处理脚本、无逐例时间戳元数据 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核:本条目由千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 职业健康锚定、职业社会决定因素)、§7 偏倚分析。
数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
利益冲突声明:千方病案医数集与巴塞罗那超级计算中心(BSC)、西班牙 Plan TL 无任何商业利益关联。本页面不销售 MEDDOPROF 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受 BSC 或相关资助方的任何形式资助。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。MEDDOPROF 采用 CC BY 4.0 开放许可,可经 Zenodo 直接下载,再分发与商业使用均需完整署名并注明许可。DUO 标签仅供参考,具体使用限制以数据集官方许可协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? MEDDOPROF 是一份西班牙语临床文本金标准语料:1,844 份来自 20 余个专科的临床病例报告,由语言学家与临床专家逐句标注出其中出现的职业(如"建筑工人")、就业状态(如"退休"“失业”“无家可归”)和无酬活动,并把每个提及对应到欧洲职业技能分类 ESCO 与 SNOMED CT 标准编码。它因 2021 年 IberLEF 共享任务而生,随任务全程开放。
为什么重要? 职业是病历里最常被忽略、却直接影响健康的社会人口学变量:接触粉尘毒物、工伤风险、心理健康与就医可及性都与之相关。但"职业"在自由文本里写法五花八门,还常指医生、家属而非患者本人。MEDDOPROF 是首个把这些细节系统标注成机器可学数据集的公开资源,也是西班牙语临床 NLP 的基石语料之一。
我能用它做什么? 训练西语病历职业/就业状态识别模型(NER)、判断提及属于患者还是医护(归属分类)、把职业映射到标准职业分类码(归一化);也可以服务于病历匿名化、职业病队列构建、社会健康决定因素研究。数据 CC BY 4.0 完全开放,下载即用。
§1.1 摘要
MEDDOPROF(MEDical DOcuments PROFessions recognition)由巴塞罗那超级计算中心文本挖掘单元(BSC-TeMU)与都柏林城市大学联合组织,作为 IberLEF 2021(挂靠 SEPLN 2021)的评测任务于 2021 年发布。语料含 1,844 份西语临床病例(训练 1,500 / 测试 344),共 58,627 句、约 129 万 tokens,覆盖感染性疾病(含 COVID-19 病例报告)、心脏病学、神经学、肿瘤学、精神病学等 20 余个专科。标注在 33 页、70 余条规则的规范约束下进行,采用"语言学家 + 临床专家"双轨人工标注与多轮一致性质检,成对一致性(IAA)约 0.9。任务设三轨:NER(识别并分类职业/就业状态/活动,micro-F1 最佳 0.818)、CLASS(按归属分为患者/家属/医护/其他,最佳 0.793)、NORM(归一化到 ESCO 与 SNOMED CT,最佳 0.619),共 15 支队伍提交 94 个系统。2022-09-27 终版补全了全部提及的 SNOMED CT 归一化(meddoprof-norm.tsv 五列格式),并以 CC BY 4.0 在 Zenodo 完全开放。
§1.2 战略价值分析
维度一:填补职业健康 NLP 的数据空白。 医疗 NLP 数据集绝大多数围绕疾病、药物、解剖实体构建,职业与就业状态长期处于"有人提、没人标"的状态。MEDDOPROF 把职业提升为一等公民实体,并创新性地纳入广义就业状态——失业者、退休者、家庭照护者、无家可归者、依赖政府补助者都在标注范围内,强化了健康社会决定因素(SDOH)的建模能力。对职业医学、流行病学和公共卫生 AI 而言,这是目前西语世界几乎唯一的直接可用金标准。
维度二:低资源语言临床 NLP 的方法学标杆。 该任务完整呈现了"规范设计 → 双轨标注 → 一致性质检 → 三轨评测 → 术语归一"的金标准生产流水线,其 33 页规范与 IAA≈0.9 的质检记录为其他低资源语言的临床标注项目提供了可复制的模板。三轨设计还揭示了任务难度梯度:识别易、归属中、归一难(0.818 → 0.793 → 0.619),这一梯度对任何语言的临床概念归一化研究都有参照价值。
维度三:开放许可下的生态杠杆。 CC BY 4.0 意味着零门槛获取,社区已在其上衍生出 Hugging Face 生产级模型(prof-ner-es)、25,000+ 词条职业词典、13,357 篇文档的 Silver Standard 弱标注扩展集,并被 2025 年发表于 Scientific Reports 的真实医院场景外部验证研究所采用。对希望在西班牙语市场落地医疗 NLP 的团队,这是投入产出比最高的起点之一。
§1.3 同类数据集横向对比
| 数据集 | 语言/规模 | 文本类型 | 标注实体 | 与 MEDDOPROF 的差异化 |
|---|---|---|---|---|
| MEDDOPROF | 西语 / 1,844 份病例 | 西班牙临床病历 | 职业、就业状态、活动 + ESCO/SNOMED CT 归一 | 唯一聚焦职业与就业状态的临床金标准,三轨(NER/CLASS/NORM)齐备 |
| ProfNER | 西语 / ~10,000 推文 | 社交媒体(COVID-19) | 职业、就业状态 | 同一团队的前置任务,语域为推文而非病历,无术语归一化轨道 |
| Cantemist | 西语 / ~1,300 病例 | 西班牙临床病历 | 肿瘤形态学(ICD-O-3 归一) | 同组姊妹任务,实体域为肿瘤病理,含代码归一化轨道 |
| MEDDOCAN | 西语 / ~1,000 篇 | 西班牙临床病历 | 个人身份信息(PHI,匿名化) | 同组姊妹任务,面向去标识化而非社会人口学实体 |
| PharmaCoNER | 西语 / 1,000 份报告 | 西班牙临床病历 | 药物、活性物质(SNOMED CT 归一) | 同组姊妹任务,实体域为药理学 |
§1.4 版本演进时间轴
| 时间 | 版本/事件 | 说明 |
|---|---|---|
| 2021-02-08 | 标注规范定稿 | 33 页西语版规范(70+ 条规则)发布于 Zenodo(DOI: 10.5281/zenodo.4720833) |
| 2021 上半年 | 训练集发布 | 1,500 份病例 + 互补实体数据集 + 职业 Gazetteer(Zenodo record 4694769 等) |
| 2021-06-01 | 测试集发布 | 344 份测试病例开放,评测窗口开启 |
| 2021-06-09 | 提交截止 | 三轨共收到 94 个系统提交(NER 39 / CLASS 29 / NORM 26) |
| 2021-07-05 | 金标准 v1 | 完整金标准上线 Zenodo(DOI: 10.5281/zenodo.5070540) |
| 2021-09 | IberLEF @ SEPLN 2021 | 马拉加研讨会;概览论文刊于 Procesamiento del Lenguaje Natural 67:243-256 |
| 2022-09-27 | 终版更新 | meddoprof-norm.tsv 补全全部提及的 SNOMED CT 归一化(DOI: 10.5281/zenodo.7116201) |
| 2023 | Silver Standard | 13,357 篇文档的模型预测弱标注扩展集发布(Zenodo record 7937014) |
§1.5 典型 AI 应用场景
- 西语病历职业信息抽取引擎:以 MEDDOPROF-NER/CLASS 微调 bsc-bio-ehr-es 或 BETO,为西班牙及拉美医院病历系统提供"患者职业"结构化字段,供 EHR 社会人口学面板调用(BSC 官方 prof-ner-es 模型即为此路线,micro-F1 0.780)。
- 职业病与 SDOH 队列研究:抽取职业 → ESCO 编码 → 关联诊断,构建"职业-疾病"关联矩阵,复现 Scientific Reports 2025 在风湿科首诊笔记上的真实场景验证。
- 病历匿名化辅助:职业/雇主信息属准标识符,职业识别模型可作为西语病历去标识化管线的组成部分(官方明确指出匿名化是该语料的受益任务)。
- 跨语言临床 NLP 资源迁移:以西语金标准为源,经神经机器翻译 + 标注投影为加泰罗尼亚语等低资源语言生成训练数据(2024 年已发表验证)。
- 术语归一化基准:297 个 ESCO 码 + 49 个 SNOMED CT 码的归一化轨道,是检验临床术语链接器(entity linker)在低资源场景下粒度区分能力的天然基准。
§2 医学背景
§2.1 ICD-11 疾病分类锚定
MEDDOPROF 是非疾病特异性语料:其文本覆盖多专科,本身不携带 ICD 编码。职业信息在 ICD-11 中主要锚定于第 24 章"影响健康状态或与保健机构接触的因素"(QD 区段),这也是把语料标注结果接入疾病分类体系的推荐出口:
| 语料标签/概念 | ICD-11 编码 | 中文名称与说明 |
|---|---|---|
| SITUACION_LABORAL(失业) | QD80 | 失业问题(Problem associated with unemployment) |
| SITUACION_LABORAL(转岗/裁员) | QD81 / QD82 | 转岗问题 / 失业威胁问题 |
| 就业条件相关(工作压力等) | QD83 | 雇佣条件问题(含不称心工作 QD83.0、高压排班 QD83.1) |
| 职业暴露(粉尘/毒物/振动/工效学) | QD84 | 职业危险因素暴露(QD84.0 粉尘、QD84.1 农业毒物、QD84.2 工业毒物、QD84.3 振动、QD84.4 工效学风险) |
| 职业心理健康 | QD85 | 职业倦怠(Burnout) |
| SITUACION_LABORAL(无家可归) | QD71.0 | 无家可归(Homelessness,第 24 章居住问题) |
| 语料内 COVID-19 病例报告 | 1D60 | 冠状病毒病 2019(第 1 章某些感染性疾病) |
| 语料覆盖的其他专科 | 2A00-2F9Z / BA00-BE2Z / 6A00-6E8Z / 8A00-8E7Z | 肿瘤 / 循环系统 / 精神行为 / 神经系统疾病(章节级锚定) |
说明:QD80-QD85 须与主诊断后组配使用;将 MEDDOPROF 的抽取输出映射到 QD 区段可支撑职业病监测与 SDOH 结局研究。
§2.2 SNOMED CT 与 ESCO 术语映射
MEDDOPROF 的归一化采用双术语体系,这是它区别于一般 NER 数据集的核心结构:
| 实体/标签 | 归一化目标 | 规模 | 映射逻辑与示例 |
|---|---|---|---|
| PROFESION(职业) | ESCO(欧洲技能、能力、资格与职业分类,ISCO-08 四位码风格) | 297 个唯一码 / 3,191 条提及 | 优先匹配职业语义,如"médico de cabecera"(全科医生)→ ESCO 医生类码;ESCO 5161 涵盖占星师与占卜师等边缘职业 |
| SITUACION_LABORAL(就业状态) | SNOMED CT(SCTID 前缀码) | 49 个唯一码的一部分 | ESCO 无对应职业码时转投 SNOMED CT:退休、失业、无家可归、病休、领取补助等状态语义 |
| ACTIVIDAD(无酬活动) | SNOMED CT | 49 个唯一码的一部分 | 家庭照护者、志愿者等非雇佣活动 |
| PACIENTE/FAMILIAR/SANITARIO/OTRO(归属) | 无术语映射 | 4 类关系标签 | 归属分类轨(CLASS)的输出,不进入术语体系 |
截至终版(2022-09-27),官方 meddoprof-norm.tsv 已为全部 4,743 条提及给出 ESCO 或 SNOMED CT 码(五列 TSV:文件名、提及文本、字符区间、ESCO 码、SNOMED 码)。ESCO 版本以发布时的官方分类为准;后续第三方研究(如 Scientific Reports 2025)在自有场景中采用了 ESCO v1.1.1。
norm.tsv 每行一条提及-编码对(下表为字段语义示意,非逐字引用官方记录):
filename mention_text span esco_code snomed_code
S0042.txt médico de familia 312 344 2211 -
S0042.txt jubilado 401 408 - SCTID:…
S0107.txt cuidadora familiar 88 105 - SCTID:…
读法:职业行 ESCO 列有值、SNOMED 列留空;就业状态/活动行相反(SNOMED 码带 SCTID: 前缀,此处以"…"示意真实数字码)。两列的互斥空值正是 §4.5 信息性缺失分析的依据。
§2.3 职业为何是临床任务:背景与流行病学逻辑
职业医学是一门完整的临床专科,其核心前提是:职业决定暴露谱。粉尘与化学暴露指向呼吸系统疾病与职业性肿瘤;振动与工效学负荷指向肌肉骨骼疾患;轮班与高压就业指向心血管代谢风险与心理障碍;失业与经济不安全感本身就是抑郁、焦虑与全因死亡率的既定危险因素。WHO 与西班牙卫生部均将就业与工作条件列为健康的关键社会决定因素。COVID-19 大流行进一步凸显了这一点——医护人员与基础行业从业者的暴露风险显著不同,MEDDOPROF 语料中也相应收录了大量 COVID-19 病例报告。
然而在真实病历里,职业信息的记录质量参差不齐:或散落在主诉与社会史段落中,或以口语化、缩略、方言形式出现(“jornalero”(日结散工)、“autónomo”(个体户)),或根本缺失。流行病学研究要利用这一变量,第一步就是把非结构化文本中的职业提及可靠地抽出来——这正是 MEDDOPROF 定义的临床 NLP 任务。
职业-健康关联的典型研究路径(语料标注可直接支撑):
| 抽取输出 | 可对接的健康问题 | 对应 ICD-11 |
|---|---|---|
| 建筑工人、矿工、农民等职业 | 粉尘/毒物暴露 → 呼吸系统与职业性肿瘤 | QD84.0 / QD84.1 / QD84.2 |
| 搬运工、护士、流水线工人 | 振动与工效学负荷 → 肌肉骨骼疾患 | QD84.3 / QD84.4 |
| 轮班工作者、急诊医护 | 高压排班 → 心血管代谢风险与倦怠 | QD83.1 / QD85 |
| 失业、依赖补助、无家可归 | 经济不安全感 → 心理障碍与全因死亡率 | QD80 / QD71.0 |
| 家庭照护者(ACTIVIDAD) | 非正式照护负担 → 照护者综合征 | 第 24 章 QD 区段 |
§2.4 临床任务定义
在临床信息学语境下,MEDDOPROF 支撑的完整任务是"职业信息结构化"三级流水线,三轨评测与之一一对应:
| 轨道 | 输入 → 输出 | 标签集 | 官方最佳成绩 |
|---|---|---|---|
| MEDDOPROF-NER | 病例文本 → 提及边界 + 实体类型 | PROFESION / SITUACION_LABORAL / ACTIVIDAD | 0.818 |
| MEDDOPROF-CLASS | 同批提及 → 归属 | PACIENTE / FAMILIAR / SANITARIO / OTRO | 0.793 |
| MEDDOPROF-NORM | 提及 → 术语码 | ESCO 职业码 / SNOMED CT 状态码 | 0.619 |
任务定义要点:
- 检测(NER):在自由文本中定位全部职业类提及,并区分其语义类型——PROFESION(提供收入的职业)、SITUACION_LABORAL(就业状态:在职/失业/退休/病休/无家可归等)、ACTIVIDAD(无酬活动,如家庭照护)。注意提及上限约束:职业/活动 ≤10 tokens 且须在同一句内,就业状态 ≤5 tokens。
- 归属(CLASS):判断提及指代谁——患者本人(PACIENTE)、家属(FAMILIAR)、参与诊疗的医护(SANITARIO)或其他人(OTRO)。这一步是职业数据进入分析前的关键防火墙:语料中医护提及(1,525 条)甚至多于患者职业提及(1,158 条)。
- 归一(NORM):把提及映射到 ESCO 或 SNOMED CT 标准码,使其可跨中心、跨语言聚合,并与 ICD-11 QD 区段、ESCO 就业统计体系对接。
§2.5 语料人群与来源特征
| 维度 | 特征 |
|---|---|
| 文本来源 | 西班牙医院电子病历中的临床病例报告(case reports),经 BSC-TeMU 选择汇编 |
| 专科覆盖 | 20 余个专科:感染性疾病(含 COVID-19)、心脏病学、神经学、肿瘤学、精神病学、泌尿学、内科、急诊与重症、放射学、热带医学等 |
| 语言 | 西班牙语(卡斯蒂利亚语) |
| 编制时间 | 官方未逐例公布采集时间;依据语料含 COVID-19 病例报告及 2021 年发布节点推断为 2020-2021 年前后 |
| 患者人口学 | 官方未公布年龄/性别/种族分布统计(语料按文档而非患者队列组织) |
| 文档规模 | 1,844 份 / 58,627 句 / 1,291,186 tokens |
§2.6 临床价值与金标准属性
对 AI 研究者而言,该语料的临床价值在于:它是西语临床语境下唯一同时提供"提及边界 + 语义类型 + 指代归属 + 标准编码"四层监督信号的职业类数据集,可用于端到端训练,也可拆成三个独立子问题分别研究。
| 属性 | 内容 |
|---|---|
| 划分 | 官方 train 1,500 / test 344(约 82%/18%,测试集按约 20% 配置) |
| 标注方式 | 人工双轨标注(brat 工具,字符偏移 standoff),多轮规范迭代 + 一致性质检 |
| 标注者 | 语言学家 + 临床专家团队;约 10-15% 文档经内部标注员交叉复检 |
| 一致性 | 成对一致性(IAA)≈0.9 |
| 性质 | Gold Standard(金标准),另有 13,357 篇文档的 Silver Standard(模型预测弱标注)扩展 |
| 参考论文 | Lima-López et al., Procesamiento del Lenguaje Natural 67:243-256, 2021(DOI: 10.26342/2021-67-21) |
§3 数据集规格
§3.0 版本抉择矩阵
MEDDOPROF 在 Zenodo 有多个版本与衍生包,选错包会浪费大量排查时间:
| 你的需求 | 推荐获取 | 大小 | 理由 |
|---|---|---|---|
| 复现三轨任务 / 通用使用 | 金标准终版(DOI: 10.5281/zenodo.7116201) | 14.1 MB | 含全部三层标注 + 归一化 TSV + train/test 划分清单,一包到位 |
| 只做职业 NER | 同上(用 meddoprof-ner/ 子目录) | — | 无需单独下载比赛版训练包(其 NER 标签仅 2 类,已过时) |
| 需要 ESCO/SNOMED 全量编码 | 终版 meddoprof-norm.tsv | — | 仅 2022-09-27 终版含全部提及的 SNOMED CT 归一化 |
| 大规模弱监督/预训练 | Silver Standard(Zenodo record 7937014) | 25.7 MB | 13,357 篇文档、4,332 条模型预测标注,适合自训练/蒸馏 |
| 研究"职业与临床实体共现" | 互补实体数据集(DOI: 10.5281/zenodo.4775741) | — | 1,500 份训练文档附症状/疾病/操作/药物/生物/否定/不确定自动标注 |
| 构建职业词典/词典匹配系统 | 职业 Gazetteer(DOI: 10.5281/zenodo.4524659) | — | 25,000+ 西语职业词条,融合 DeCS/ESCO/SNOMED CT/WordNet |
§3.1 模态详细说明
单模态纯文本数据集:每份临床病例为一个 UTF-8 编码的纯文本文件,保留原始病历的段落与换行结构;标注以 brat standoff 格式(.ann)伴随发布,通过字符偏移与正文对齐,不改动原文。没有表格、影像或时序模态。文本为典型的西语临床叙事体——主诉、现病史、个人史、体格检查、辅助检查、诊断与病程记录混排,含临床缩写、量纲、日期与拉丁缩写。
§3.2 样本量拆分(官方划分精确计数)
| 划分 | 文档数 | 标注数(NER) | 唯一代码数 | 句子数 | Token 数 |
|---|---|---|---|---|---|
| 训练集 | 1,500 | 3,658 | 297 | 49,114 | 1,075,655 |
| 测试集 | 344 | 1,085 | 167 | 9,513 | 215,531 |
| 合计 | 1,844 | 4,657 | 346 | 58,627 | 1,291,186 |
补充口径:归一化轨道的提及-编码对共 4,743 条(含 CLASS 层标注的联合计数),对应 2,058 个唯一提及字符串;平均每份文档 2-3 条职业类标注。
§3.3 数据格式详情
| 组件 | 格式 | 说明 |
|---|---|---|
| 病例文本 | UTF-8 纯文本(.txt) | 每病例单文件,字符偏移的基准 |
| NER/CLASS 标注 | brat standoff(.ann) | T1 LABEL START END + 制表符后的提及文本;每病例同名配对 |
| 联合标注 | brat standoff(ner_class_joint/) | 双层标签拼接(如 PROFESION-PACIENTE) |
| 归一化 | TSV(meddoprof-norm.tsv) | 五列:filename、mention text、span、ESCO code、SNOMED code(SCTID: 前缀) |
| 划分清单 | 文本文件 | 训练/测试文件名各一列,官方唯一划分依据 |
| 归一化参考码表 | 文本列表 | NORM 轨道的合法 ESCO/SNOMED CT 码清单(比赛时发布) |
.ann 实体行(T 行)的语法解析:
| 片段 | 示例 | 说明 |
|---|---|---|
| 实体编号 | T5 |
文档内唯一,T 前缀;R 行为关系、E 行为事件、# 行为备注 |
| 标签 | PROFESION |
NER 目录为三类之一;CLASS 目录为四类归属之一;joint 目录为双层拼接 |
| 起止偏移 | 312 344 |
左闭右开字符区间(按解码后字符串计数,见坑点 1) |
| 提及文本 | médico de familia |
与 text[start:end] 逐字符一致,可作载入断言 |
§3.4 存储大小
完整金标准 ZIP 14.1 MB;比赛版训练集 ZIP 7.4 MB;Silver Standard ZIP 25.7 MB。解压后含 1,844×3 组文本/标注文件与 TSV,全库原始文本约 129 万 tokens(西语约 8-9 MB 文本体量),任何现代笔记本均可本地处理,无需分布式存储。Zenodo 平台该版本历史累计下载量约 215 次、数据分发光量 3.1 GB(截至 2026-09 快照)。
§3.5 标注方式
纯人工标注,无自动预标注进入金标准(互补实体集属另发的自动标注附属资源)。流程为:规范撰写 → 小规模试标 → 规范迭代 → 双标注员独立标注 → 一致性分析 → 约 10-15% 文档交叉复检 → 全量标注。标注在 brat 可视化工具中完成,保证偏移精确到字符。归一化(NORM)同样人工完成:先查 ESCO,未命中再查 SNOMED CT。
§3.6 标注者资质与一致性
标注团队由语言学专家与临床专家(含职业医学背景顾问,科学委员会含 ISGlobal 与西班牙国立卫生学院劳动医学学院专家)组成。质量证据链:(1) 33 页规范含 70+ 条正反例规则;(2) 多轮试标迭代直至 IAA 达标;(3) 全库成对一致性(pairwise)约 0.9;(4) 约 10-15% 文档由内部标注员系统性交叉质检。这一 IAA 水平在临床文本实体标注中属于高一致性区间。
§3.7 数据采集时间范围
官方未公布逐例采集/就诊时间戳,文本本身亦不含系统化时间元数据(见 §6.5 坑点 8)。可确证的时间锚点:标注规范定稿于 2021-02-08,训练集于 2021 年上半年发布,语料包含 COVID-19 病例报告——据此推断语料编制于 2020-2021 年前后。temporalCoverage 按 2020/2021 记录,使用时应以此推断属性为准。
§3.8 地理覆盖
西班牙(多医院、多专科临床病例报告,卡斯蒂利亚语拼写与表达习惯)。语料不含医院与地域标识;使用者应注意西语拉美变体(墨西哥、阿根廷等)在词汇与病历格式上存在差异,跨地区迁移需重新验证。
§3.9 文档技术规格(对应影像数据集的设备规格位)
文本数据集无采集设备概念,等效的技术规格为:编码 UTF-8;单位 = 单病例单文件;标注载体 = brat standoff(T 行实体 + 可选 R 行关系);偏移体系 = 字符级(Python 字符串索引语义,处理重音字符与换行时需按 UTF-8 解码后计数,见 §6.5 坑点 1);句子边界由换行与标点近似恢复(官方未随库发布分句信息)。
§3.10 深度溯源链
| 环节 | 主体 | 可验证痕迹 |
|---|---|---|
| 组织与资助 | BSC-TeMU + Plan TL + AI4ProfHealth 项目(PID2020-119266RA-I00) | Zenodo 各 record 致谢段、任务官网 |
| 语料汇编与标注 | BSC-TeMU(语言学家 + 临床专家)+ 都柏林城市大学 D-REAL(标注规范共同作者) | 概览论文 §3.1、规范 PDF 署名 |
| 质量控制 | 内部标注员交叉复检(10-15% 文档) | 概览论文、规范 README(IAA≈0.9) |
| 评测 | IberLEF 2021(SEPLN 2021),CodaLab 式提交通道,40 注册/15 参赛/94 提交 | 概览论文 §4、CEUR Vol-2943 论文集 |
| 发布与存档 | Zenodo(4 个版本 DOI,v1 2021-07-05,终版 2022-09-27) | Zenodo 版本页与 MD5 校验值 |
| 二次加工 | Silver Standard(13,357 篇)、互补实体集、Gazetteer | Zenodo record 7937014 / 4775741 / 4524659 |
§4 数据结构详解
§4.0 目录结构预览
完整金标准 ZIP 解压后的结构(每份病例在三个标注目录中各有一对同名 .txt/.ann 文件;训练/测试归属以官方文件名清单为准):
MEDDOPROF_GS/
├── meddoprof-ner/ # Track 1:职业/就业状态/活动实体标注
│ ├── S***.txt # 病例正文(UTF-8 纯文本)
│ └── S***.ann # brat standoff 标注(T 行实体)
├── meddoprof-class/ # Track 2:同批提及的归属标注(PACIENTE/FAMILIAR/SANITARIO/OTRO)
├── ner_class_joint/ # 双层联合标签(如 PROFESION-PACIENTE)
├── meddoprof-norm.tsv # Track 3:五列归一化表(filename, mention, span, ESCO, SNOMED)
├── train 划分清单 # 训练划分文件名列表(文件名以解压内容为准)
├── test 划分清单 # 测试划分文件名列表
└── (归一化参考码表:NORM 轨道合法 ESCO/SNOMED CT 码清单)
brat .ann 单行样例(T 编号、标签、起止偏移、提及文本):
T5 PROFESION 312 344 médico de familia
T6 SITUACION_LABORAL 401 408 jubilado
§4.1 DAIMS 标准化字段描述表
| 字段 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差/陷阱 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| filename | 字符串 | 病例唯一文件名,全库主键 | S***.txt | 关联三层标注与划分 | 同名文件在不同标注目录间内容相同,注意拼接路径 | 无 | 1,844 个唯一值 |
| text | 字符串 | 病例全文(UTF-8) | — | 模型输入;偏移对齐基准 | 换行/重音字符影响偏移计数 | 无 | 9,513-49,114 句/划分 |
| entity_id(.ann) | 字符串 | brat 实体编号 | T1、T5 | 重组标注结构 | 重叠提及按 G6 规则拆成多行 | 无 | 每文档 T1-Tn |
| label(ner) | 枚举 | 实体语义类型 | PROFESION | NER 分类目标 | 比赛版仅 2 类,终版 3 类(含 ACTIVIDAD) | 无 | PROFESION / SITUACION_LABORAL / ACTIVIDAD |
| start、end(span) | 整数 | 字符偏移区间(左闭右开) | 312 344 | span 级评测与 BIO 还原 | 必须按解码后字符串计数 | 无 | 0 - 文档长度 |
| mention_text | 字符串 | 提及原文 | jubilado | 词典/字符串匹配 | 2,058 个唯一串;性别屈折产生变体 | 无 | ≤10 tokens(状态 ≤5) |
| label(class) | 枚举 | 提及归属 | SANITARIO | CLASS 分类目标;防"提及≠患者"污染 | 医护提及占 1,525 条 | 无 | PACIENTE / FAMILIAR / SANITARIO / OTRO |
| esco_code | 字符串 | ESCO 职业码 | ISCO 风格四位码 | 归一化输出;跨库对齐 | 仅职业提及有值;长尾 297 码 | 空列 = 该提及归 SNOMED | 297 个唯一值 |
| snomed_code | 字符串 | SNOMED CT 码(SCTID: 前缀) | SCTID:**** | 状态/活动归一化 | 与 ESCO 列互斥 | 空列 = 该提及归 ESCO | 49 个唯一值 |
| split | 枚举 | 官方划分归属 | train | 复现官方成绩的划分依据 | 以官方清单为准,勿按目录名推断 | 无 | train(1,500)/ test(344) |
§4.2 标签分布统计
官方论文表 3 给出的全库 4,743 条标注的"实体类型 × 归属"交叉分布:
| 实体类型 \ 归属 | PACIENTE 患者 | FAMILIAR 家属 | SANITARIO 医护 | OTRO 其他 | 合计 |
|---|---|---|---|---|---|
| PROFESION 职业 | 1,158 | 134 | 1,525 | 410 | 3,227 |
| SITUACION_LABORAL 就业状态 | 1,047 | 119 | 0 | 203 | 1,369 |
| ACTIVIDAD 活动 | 122 | 7 | 0 | 18 | 147 |
| 合计 | 2,327 | 260 | 1,525 | 631 | 4,743 |
关键读数:(1) 职业提及中医护(SANITARIO)占近半——病历里最常见的"职业词"其实是描述医生护士自己;(2) 就业状态与活动两类没有任何 SANITARIO 归属(医护不存在失业标注),这一结构性先验可直接用于后处理规则;(3) 78% 的归属落在患者与医护两类,FAMILIAR/OTRO 合计不足 19%,类别不均衡显著。归一化侧:3,191 条映射 ESCO(297 码),1,552 条映射 SNOMED CT(49 码)。
§4.3 关键字段描述性统计
| 统计量 | 训练集 | 测试集 | 全库 |
|---|---|---|---|
| 文档数 | 1,500 | 344 | 1,844 |
| 每文档平均 tokens | ≈717 | ≈626 | ≈700 |
| 每文档平均标注数 | ≈2.4 | ≈3.2 | ≈2.5 |
| 唯一术语码 | 297 | 167 | 346 |
- 文档长度:全库 1,291,186 tokens / 1,844 文档 ≈ 每文档约 700 tokens,远短于 MIMIC-III 长篇笔记,接近"病例报告"体裁。
- 标注密度:每文档平均 2-3 条提及(4,657/1,844 ≈ 2.5);4,743 条归一化标注对应 2,058 个唯一字符串,说明约 43% 提及以重复形式出现——词典匹配具备基线价值。
- 类别频次:PROFESION : SITUACION_LABORAL : ACTIVIDAD ≈ 68% : 29% : 3%;ACTIVIDAD 为极少数类(147 条),微调时易被多数类淹没。
- 长尾:297 个 ESCO 码中大量码仅出现 1-2 次(未官方分组),归一化模型需显式处理零样本/少样本码。
- 序列长度:句子级 BIO 训练即可,无超长上下文需求;512 token 截断对绝大多数文档无损。
§4.4 数据层级关系
MEDDOPROF 为两级主键体系(无患者层):语料 → 文档(filename 主键) → 提及(T 编号 + 字符区间);提及再经 meddoprof-norm.tsv 一对一挂载术语码。三个标注目录(ner/class/joint)对同一文档集做平行描述,行间以 filename + 提及文本 + 区间 三元组对齐;官方未保证 .ann 的 T 编号在三个目录间一致,跨目录对齐必须经过文本与区间匹配,不能直接比较编号。
§4.5 缺失值情况与信息性缺失
金标准内部不存在"缺失标注"问题(全部提及人工标注、全部提及获得术语码),但存在两类结构性空值,属于信息性而非错误:
| 空值位置 | 语义 | 处理建议 |
|---|---|---|
| meddoprof-norm.tsv 的 ESCO 列为空 | 该提及是就业状态/活动,官方归一到 SNOMED CT | 按实体类型分支处理,勿当作编码失败 |
| meddoprof-norm.tsv 的 SNOMED 列为空 | 该提及是职业,归一到 ESCO | 同上,分支互斥 |
| 文档级元数据(时间戳、医院、科室、患者 ID) | 官方未随库发布 | 需要协变量时自建抽取或放弃该维度 |
另注意:互补实体数据集使用自动标注(PharmacoNER Tagger 改训版),其置信度与金标准不同级,混用时必须区分数据来源列。
§5 数据划分与使用建议
§5.1 官方数据划分
官方唯一划分为 train 1,500 / test 344(约 82/18),以两份文件名清单随金标准发布;共享任务期间测试集于 2021-06-01 才释出、2021-06-09 截止提交,每队每轨最多 5 次提交,成绩以测试集 span 级 micro-F1 排名。终版金标准未追加开发集。
§5.2 推荐划分策略
- 复现轨道:直接使用官方划分 + 测试集只做最终评估;从 1,500 份训练集内部切 10% 做开发集,用于早停与超参。
- 类别不均衡处理:按文档分层抽样(以文档内 PROFESION/SITUACION_LABORAL/ACTIVIDAD 计数分层),保证 ACTIVIDAD 少数类在各折可见。
- NORM 轨道:建议按"训练集内出现过的 ESCO 码"做分层,并单列报告未见码(zero-shot)子集指标——这是该任务真实的服务化瓶颈。
训练集内部开发集划分的最小实现:
import random
from collections import Counter
def stratified_dev_split(docs, dev_ratio=0.1, seed=42):
"""docs:[(filename, [(token, tag), ...]), ...],按主实体类型分层。"""
rng = random.Random(seed)
strata = {}
for name, bio in docs:
ent_types = frozenset(t[2:] for _, t in bio if t != "O") or {"EMPTY"}
key = ent_types if len(ent_types) == 1 else "MIXED"
strata.setdefault(key, []).append((name, bio))
dev, train = [], []
for key, group in sorted(strata.items()):
rng.shuffle(group)
k = max(1, round(len(group) * dev_ratio))
dev += group[:k]
train += group[k:]
return train, dev, Counter(k for k, _ in dev)
# train_docs, dev_docs, dev_profile = stratified_dev_split(list(train_stream))
# 检查 dev_profile:确认 ACTIVIDAD 等少数类在开发集中可见
§5.3 数据泄漏风险防御
- 重复提及字符串的词典泄漏:43% 提及重复出现,若用全库统计构建词典/词表再回标训练集,会把测试集分布间接带入。词典只允许从训练划分构建。
- 同一患者多份病例:语料按文档而非患者组织,存在同一患者多份病例同侧分布的理论风险;自划交叉验证时按文档切分并保持划分固定,禁止按提及行随机切分。
- 归一化参考码表泄漏:NORM 合法码清单在比赛期间即公开,属任务先验而非泄漏;但若用测试集归一化分布调参,则构成评测污染。
- Silver Standard 与金标准重叠:13,357 篇 Silver 文档是否与 1,844 篇金标准测试文档重叠,官方未明示;预训练用 Silver、评测用金标准测试集时,应先做文件名去重。
§5.4 交叉验证建议
小语料场景建议 5 折文档级交叉验证(分层维度 = 文档标注密度 + 主实体类型),报告均值 ± 标准差;NLNDE 获胜系统证明"策略性数据划分"在低资源下收益显著,复现研究应把划分策略作为受控变量之一。交叉验证结果不得与官方测试集成绩混排比较。
§5.5 外部验证
落自有场景前,参照两条已发表路径:(1) Scientific Reports 2025 将 MEDDOPROF 训练的模型零样本应用于马德里 Hospital Clínico San Carlos 风湿科 2,000 份首诊笔记并人工复核(详见 §7.8);(2) 跨语言路径用 NMT + 标注投影迁移至加泰罗尼亚语(Information 2024)。西语院内数据上线前,建议以本医院 200-500 份人工复核样本估计 span 级 F1 再决定部署阈值。
§6 AI 就绪指南
§6.0 云端快速启动
Google Colab / Kaggle 均可零成本跑通全流程:数据仅 14.1 MB,模型微调单卡 T4 足够。云上路径:wget 拉取 Zenodo 包 → 解压 → 转 BIO → 微调 BETO/bsc-bio-ehr-es,端到端约 30-60 分钟(3 epochs)。无需申请存储桶或凭据——这是 CC BY 开放数据集的独有优势。
§6.1 快速上手(本地 Python 版)
运行以下代码前,先确认目录结构预期:假定你已从 Zenodo 下载并解压金标准 ZIP,得到目录 meddoprof_GS/(含 meddoprof-ner/、meddoprof-class/、ner_class_joint/ 与 meddoprof-norm.tsv),data_root 即其路径;三个子目录内的文件与划分清单同名对应,最小可用子集为 meddoprof-ner 训练划分。
# 目录预期:data_root/meddoprof-ner/*.txt 与 *.ann 成对存放
# data_root 拼接关系:所有子路径都相对 data_root 展开
# 最小可用子集:meddoprof-ner(Track 1 标注)
from pathlib import Path
DATA_ROOT = Path("meddoprof_GS") # 金标准解压目录
NER_DIR = DATA_ROOT / "meddoprof-ner" # Track 1 标注目录
def load_case(txt_path: Path):
"""读取一份病例:返回 (正文, 实体列表)。偏移按解码后字符串计数。"""
text = txt_path.read_text(encoding="utf-8")
entities = []
ann_path = txt_path.with_suffix(".ann")
for line in ann_path.read_text(encoding="utf-8").splitlines():
if not line.startswith("T"):
continue # 跳过 R/E/# 等 non-entity 行
head, _, mention = line.partition("\t")
tag, start, end = head.split(" ")[1:4]
entities.append({"id": head.split(" ")[0], "label": tag,
"start": int(start), "end": int(end),
"text": mention})
return text, entities
cases = [load_case(p) for p in sorted(NER_DIR.glob("*.txt"))]
print(f"载入 {len(cases)} 份病例,"
f"共 {sum(len(e) for _, e in cases)} 条实体标注")
# 预期输出:载入 1844 份病例,共 4657 条实体标注(终版全库口径)
§6.2 数据获取流程
| 资源 | 地址 | 大小 | 流程 |
|---|---|---|---|
| 金标准终版(推荐) | https://doi.org/10.5281/zenodo.7116201 | 14.1 MB | Zenodo 页面直接下载,无注册/审批 |
| 比赛版训练集(历史) | https://zenodo.org/record/4694769 | 7.4 MB | 同上;注意 NER 仅 2 类标签 |
| 标注规范(33 页,西语) | https://doi.org/10.5281/zenodo.4720833 | 557.1 kB | 同上 |
| 互补实体数据集 | https://doi.org/10.5281/zenodo.4775741 | — | 同上 |
| 职业 Gazetteer | https://doi.org/10.5281/zenodo.4524659 | — | 同上 |
| Silver Standard | https://zenodo.org/records/7937014 | 25.7 MB | 同上 |
# 下载 + 校验 + 解压(Zenodo 页面公布金标准 zip 的 md5)
wget -c "https://zenodo.org/records/7116201/files/MEDDOPROF_GS.zip" -O MEDDOPROF_GS.zip
echo "58b641fe2bc31b934b7566a4506f3704 MEDDOPROF_GS.zip" | md5sum -c
unzip -q MEDDOPROF_GS.zip -d meddoprof_GS
ls meddoprof_GS # 应看到 meddoprof-ner/ meddoprof-class/ ner_class_joint/ meddoprof-norm.tsv
§6.3 预处理 Pipeline
格式转换(brat standoff → BIO/CoNLL,含重叠提及处理与分词)→ 清洗(非实体行过滤、全角/引号归一)→ 标准化(词级分词对齐)→ 增强策略(§6.6)。核心是把字符偏移无损落到词级标签:
# 步骤 1:brat standoff → 词级 BIO(官方规范 G5:提及不跨句、
# 职业/活动 ≤10 tokens、状态 ≤5 tokens;重叠提及见步骤 4)
import re
from pathlib import Path
TOKEN_RE = re.compile(r"\S+") # 空白分词:与官方模型卡的词级预分词口径一致
def tokenize_with_offsets(text):
return [(m.group(), m.start(), m.end()) for m in TOKEN_RE.finditer(text)]
def to_bio(text, entities):
tokens = tokenize_with_offsets(text)
tags = ["O"] * len(tokens)
# 优先标注更长提及,缓解嵌套/重叠(G6 两阶段标注的展平策略)
for ent in sorted(entities, key=lambda e: e["start"] - e["end"]):
for i, (tok, s, e) in enumerate(tokens):
if s >= ent["start"] and e <= ent["end"] and tags[i] == "O":
tags[i] = (f"B-{ent['label']}" if s == ent["start"]
else f"I-{ent['label']}")
return [(t, tag) for (t, _, _), tag in zip(tokens, tags)]
# 步骤 2:清洗——统一引号/省略号,保留重音与 ñ(西语形态学信号,勿小写化丢弃)
def clean(text):
return (text.replace("“", '"').replace("”", '"')
.replace("…", "..."))
# 步骤 3:训练/测试读取——以官方划分清单为准
# (划分清单为随库发布的文本文件,每行一个文件名;实际文件名以解压内容为准)
def read_split(data_root: Path, split_dir: Path, split_file: Path):
names = set(split_file.read_text(encoding="utf-8").split())
for txt in sorted(split_dir.glob("*.txt")):
if txt.name in names:
text = clean(txt.read_text(encoding="utf-8"))
ents = parse_ann(txt.with_suffix(".ann"))
yield text, to_bio(text, ents)
def parse_ann(ann_path: Path):
out = []
for line in ann_path.read_text(encoding="utf-8").splitlines():
if line.startswith("T"):
head, _, mention = line.partition("\t")
_, label, start, end = head.split(" ")[:4]
out.append({"label": label, "start": int(start),
"end": int(end), "text": mention})
return out
# 步骤 4:重叠提及的进阶处理——保留两阶段标注信息,
# 训练时用多标签 BIO 或按主类型展开;简单展平只保最长提及
如需对接 Flair/CRF 等序列标注框架,可导出为 CoNLL 格式(每行 token 空格 标签,空行分句,-DOCSTART- 分文档):
# 步骤 5:brat → CoNLL 导出(MUCIC 参赛代码的同款思路)
def export_conll(samples, out_path: Path):
"""samples:read_split 产出的 (text, [(token, tag), ...]) 流。"""
with out_path.open("w", encoding="utf-8") as fh:
for text, bio in samples:
fh.write("-DOCSTART- -X- O O\n\n")
sent = []
prev_tag = None
for tok, tag in bio:
# G5 同句约束的近似分句:句末标点处断行
sent.append((tok, tag))
if tok in {".", "!", "?"} or tok.endswith("."):
fh.writelines(f"{t} {g}\n" for t, g in sent)
fh.write("\n")
sent, prev_tag = [], None
else:
prev_tag = tag
if sent:
fh.writelines(f"{t} {g}\n" for t, g in sent)
fh.write("\n")
# export_conll(read_split(DATA_ROOT, NER_DIR, SPLIT_FILE), Path("train.conll"))
导出后自检三件套:(1) BIO 序列无悬空
I-(连续性校验);(2) 重新解析 CoNLL 还原 span,应与 .ann 的 4,657 条(展平口径)一致;(3) 标签分布与 §4.2 的官方比例同向。
§6.4 框架加载(PyTorch DataLoader 完整代码)
以下代码构建可运行的 Dataset + DataLoader,使用 HuggingFace tokenizer 做子词对齐(输入先按空白分词,符合官方模型卡的词级预分词要求):
import torch
from torch.utils.data import Dataset, DataLoader
from transformers import AutoTokenizer
MODEL_NAME = "PlanTL-GOB-ES/bsc-bio-ehr-es" # 官方获奖模型同源底座
LABELS = ["O", "B-PROFESION", "I-PROFESION",
"B-SITUACION_LABORAL", "I-SITUACION_LABORAL",
"B-ACTIVIDAD", "I-ACTIVIDAD"]
LABEL2ID = {l: i for i, l in enumerate(LABELS)}
class MEDDOPROFDataset(Dataset):
"""输入:步骤 3 产出的 (text, [(token, tag), ...]) 流。"""
def __init__(self, samples, tokenizer, max_len=256):
self.samples, self.tokenizer, self.max_len = samples, tokenizer, max_len
def __len__(self):
return len(self.samples)
def __getitem__(self, idx):
text, bio = self.samples[idx]
words = [w for w, _ in bio]
tags = [LABEL2ID[t] for _, t in bio]
enc = self.tokenizer(words, is_split_into_words=True,
truncation=True, max_length=self.max_len,
padding="max_length", return_tensors="pt")
word_ids = enc.word_ids(0)
aligned = []
prev = None
for wid in word_ids:
if wid is None:
aligned.append(-100) # 特殊 token 不计损失
elif wid != prev:
aligned.append(tags[wid])
else:
aligned.append(-100) # 子词延续位不计损失
prev = wid
return {"input_ids": enc["input_ids"].squeeze(0),
"attention_mask": enc["attention_mask"].squeeze(0),
"labels": torch.tensor(aligned)}
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
# SPLIT_FILE 指向官方训练划分清单(文件名以解压内容为准)
SPLIT_FILE = next(p for p in DATA_ROOT.glob("*.txt") if "train" in p.name.lower())
train_ds = MEDDOPROFDataset(list(read_split(DATA_ROOT, NER_DIR, SPLIT_FILE)), tokenizer)
loader = DataLoader(train_ds, batch_size=16, shuffle=True, num_workers=2)
batch = next(iter(loader))
print({k: v.shape for k, v in batch.items()})
# 预期:input_ids/attention_mask/labels 均为 (16, 256)
配套训练循环(HuggingFace Trainer,含官方口径的 seqeval 指标):
import numpy as np
from transformers import (AutoModelForTokenClassification, Trainer,
TrainingArguments)
import seqeval
def compute_metrics(eval_pred):
logits, labels = eval_pred
preds = np.argmax(logits, axis=-1)
true, pred = [], []
for row_l, row_p in zip(labels, preds):
keep = row_l != -100 # 只统计词级首 token
true.append([LABELS[i] for i in row_l[keep]])
pred.append([LABELS[i] for i in row_p[keep]])
return {"micro_f1": seqeval.metrics.f1_score(true, pred)}
model = AutoModelForTokenClassification.from_pretrained(
MODEL_NAME, num_labels=len(LABELS), id2label=dict(enumerate(LABELS)),
label2id=LABEL2ID)
args = TrainingArguments(
output_dir="prof-ner-es-meddoprof", learning_rate=5e-5,
per_device_train_batch_size=16, num_train_epochs=4,
weight_decay=0.01, eval_strategy="no", save_strategy="no",
seed=42)
trainer = Trainer(model=model, args=args, train_dataset=train_ds,
compute_metrics=compute_metrics)
trainer.train()
trainer.save_model("prof-ner-es-meddoprof/final")
复现建议:决赛圈成绩(NLNDE 0.818)依赖 MLM 领域继续预训练与策略性数据划分,直接微调 bsc-bio-ehr-es 的预期区间是 0.76-0.78(官方模型卡实测 0.780)。
§6.5 常见坑点(8 个真实失败模式)
⚠️ 坑点 1:brat 偏移体系与嵌套/重叠标注的双重陷阱(分类:工程陷阱)
问题:.ann 中的起止偏移按"解码后字符串的字符索引"计数,而不是 UTF-8 字节偏移;同时官方规范 G6 对重叠/嵌套提及采用两阶段标注,单层 BIO 展平会丢失部分标注。
症状:含重音字符(á é í ó ú ñ)的段落里抽出的提及文本与 .ann 记录错位若干字符;展平后统计标注数少于 4,657,或训练集出现"悬空"实体。
解决:
- 简单方法:
text = open(..., encoding="utf-8").read()之后再用text[start:end]切片(Python 3 字符串即码点索引),绝不要对 bytes 切片;载入时断言text[start:end] == mention。- 进阶方法:按"最长提及优先 + 已占位跳过"策略展平(见 §6.3 步骤 1/4),或改用多标签 BIO 同时保留两层标注;评测用 span 级精确匹配还原重叠。
- SOTA 方法:NLNDE 等获奖系统的做法是把 span 抽取与分类解耦,用独立分类头处理嵌套候选,而不是在 BIO 层硬塞。
参考:官方概览论文 §3.1.2(corpus format);标注规范 G6 规则(DOI: 10.5281/zenodo.4720833)。
⚠️ 坑点 2:标签体系版本漂移——比赛版 2 类 vs 终版 3 类(分类:标签理解)
问题:共享任务进行期间(Zenodo record 4694769)NER 只有 PROFESION 与 SITUACION_LABORAL 两类;2021-07 金标准及 2022-09-27 终版引入第三类 ACTIVIDAD(无酬活动)。网上教程与旧代码大多基于 2 类口径。
症状:复现教程时标签数对不上;统计"就业状态"占比时把 147 条活动误并;从旧训练集迁移的模型在终版评测时 ACTIVIDAD 全部漏检。
解决:
- 简单方法:只使用终版金标准(DOI: 10.5281/zenodo.7116201),标签集写死为 3 类;比赛版训练包仅作历史参考。
- 进阶方法:在配置中显式声明
label_schema_version,加载器按版本映射(2 类旧数据 → ACTIVIDAD 合并进 O 或丢弃并记录)。- SOTA 方法:复现论文对比时区分"任务口径"(比赛 2 类)与"语料口径"(终版 3 类),两套结果分开列表,绝不混排。
参考:Zenodo record 4694769(比赛版)vs 7116201(终版)说明文字;概览论文表 3。
⚠️ 坑点 3:把"职业提及"当"患者职业"——SANITARIO 主导的语义陷阱(分类:标签理解)
问题:全库职业提及 3,227 条中,1,525 条(47%)归属是 SANITARIO(描述参与诊疗的医护人员),真正属于患者的只有 1,158 条;NER 轨道不区分归属。
症状:直接用 NER 模型做"患者职业队列"统计,职业病/SDOH 分析被大量"医生护士"污染,暴露谱完全失真;下游 “职业-疾病” 关联矩阵出现"医生-化疗"这类荒谬关联。
解决:
- 简单方法:NER 之后必接归属分类(CLASS 轨任务),只保留 PACIENTE 提及进入分析层。
- 进阶方法:利用结构先验——就业状态(SITUACION_LABORAL)与活动(ACTIVIDAD)在语料中不存在 SANITARIO 归属(0 条),可对这两类跳过归属分类直接归患者侧(仍建议抽验)。
- SOTA 方法:训练联合标签模型(ner_class_joint 目录的 PROFESION-PACIENTE 双层标签端到端预测),Scientific Reports 2025 的 ATTRIBUTION 模型即采用"职业模型 + 归属模型"双模型流水线并在真实医院数据上验证。
参考:概览论文表 3(标签分布);Scientific Reports 2025(DOI: 10.1038/s41598-025-05294-5)。
⚠️ 坑点 4:NORM 轨道的双术语互斥与长尾码——0.619 不是模型太差(分类:评估误用)
问题:归一化是双轨制——职业走 ESCO、就业状态/活动走 SNOMED CT,两列互斥;且 297 个 ESCO 码中大量为 1-2 次的长尾码。三轨中 NORM 最佳 F1 仅 0.619,明显低于 NER 的 0.818。
症状:把所有预测强行映射到单一术语体系导致大量无效码;按整体准确率汇报掩盖了高频码与零样本码之间 40+ 分的差距;用 NER 成绩预估 NORM 难度而排期失误。
解决:
- 简单方法:按实体类型分支路由(PROFESION → ESCO 候选表,其余 → SNOMED 候选表),配合字符串归一化(大小写/重音折叠)做检索式基线。
- 进阶方法:分桶报告指标——训练集出现 ≥5 次的码 / <5 次的码 / 未见码三档;长尾段用描述-码双塔编码器(mention text + ESCO 首选标签 + 同义词扩展)。
- SOTA 方法:TALP 冠军方案用多语 DistilBERT 表征 + BiLSTM 排序;工程落地建议再加 Gazetteer(25,000+ 词条,Zenodo 4524659)候选召回与缩写展开后处理。
参考:概览论文 §4.2(各队成绩);Vicomtech(CEUR Vol-2943,BERT + 近似字符串匹配);Suárez-Paniagua & Casey(同卷)。
⚠️ 坑点 5:跳过词级预分词直接喂子词分词器(分类:预处理陷阱)
问题:官方在 Hugging Face 模型卡(prof-ner-es)中明确警告:模型以"先按词切分、再子词化"的方式训练,直接把整段文本交给 tokenizer 会导致词级标签对齐口径漂移,性能明显受影响。
症状:沿用tokenizer(raw_text)的流水线在测试集上比预期低 2-5 分;同一模型在官方脚本与自建脚本上成绩不可复现。
解决:
- 简单方法:一律
is_split_into_words=True+ 预先用空白分词(与 §6.3 的TOKEN_RE口径一致)。- 进阶方法:把分词器口径(空白 vs spaCy es)写进实验配置并在论文/模型卡中声明;评测时用
word_ids还原到词级再算 span。- SOTA 方法:训练/评测/推理三端共用同一个"分词 + 对齐"模块并加单元测试固定边界用例(含重音、连字符、数字单位)。
参考:https://huggingface.co/BSC-NLP4BIA/prof-ner-es 模型卡使用说明;MUCIC 开源 notebook(brat_to_conll,spacy ‘es’)。
⚠️ 坑点 6:G5 长度与同句约束——自建分句器制造"非法 span"(分类:预处理陷阱)
问题:规范 G5 规定职业/活动提及 ≤10 tokens 且必须落在同一句内、就业状态 ≤5 tokens;官方标注遵循此口径。若自建管线用不同的分句/分词标准,评测协议会与标注口径脱节。
症状:候选 span 超出长度上限被过滤,召回率人为下降;句子切分差异导致同一文档在训练与评测阶段的 token 计数不一致,复现结果抖动。
解决:
- 简单方法:直接用空白分词(与官方模型口径一致),把"同句"约束交给模型上下文窗口自然满足,不做激进分句。
- 进阶方法:若必须句级建模,固定使用一个分句器(如 spaCy es)并在结果表中声明;对 >10 token 的候选保持原样输出,交给评测脚本的 span 匹配裁决,不要预过滤。
- SOTA 方法:文档级滑动窗口 + span 回投(把窗口内预测拼回全文偏移),兼顾长文档与 G5 约束,窗口重叠处做 span 去重投票。
参考:标注规范 G5/表 3-表 7(DOI: 10.5281/zenodo.4720833);概览论文 §3.1。
⚠️ 坑点 7:Silver Standard 与全库词典的泄漏通道(分类:数据泄漏)
问题:官方发布了 13,357 篇文档的 Silver Standard(模型预测标注)与 25,000+ 词条 Gazetteer;两者覆盖面可能触及金标准测试集的文档与词汇。用它们做预训练/词典后直接在官方测试集上报成绩,构成事实上的评测泄漏。
症状:测试集成绩显著高于交叉验证成绩;论文审稿被质疑"Gazetteer 是否见过测试提及";同一模型两次运行分数差异异常大。
解决:
- 简单方法:用 Silver/Gazetteer 前先按文件名与金标准全部 1,844 份文档去重;评测只用官方 train 划分构建的词典。
- 进阶方法:预训练(Silver)与微调(Gold train)分阶段冻结,评测报告两个版本(含/不含 Silver 预训练)供对比。
- SOTA 方法:把"资源接触面"作为实验变量写进消融表(NLNDE 的策略性数据划分研究即强调划分与资源的受控比较)。
参考:Zenodo record 7937014(Silver Standard);概览论文 §3.2(Gazetteer);NLNDE 系统论文(CEUR Vol-2943)。
⚠️ 坑点 8:无时间戳、无医院元数据——分布漂移完全不可见(分类:偏倚陷阱)
问题:语料不携带就诊时间、医院、科室与患者 ID 等元数据,官方也未公布逐例脱敏流程细节;这意味着跨中心部署时无法从数据内部监测"在哪漂移、何时漂移"。
症状:模型在自家医院成绩骤降却无从归因;把语料当成"西语病历全集"做文档级流行病学统计(患病率、年龄分布)而不自知其无代表性。
解决:
- 简单方法:部署后用自己的在线数据监控预测分布(各标签占比、SANITARIO/PACIENTE 比值、PSI),不依赖语料内基线。
- 进阶方法:上线前做一次小规模外部验证(参照 Scientific Reports 2025 的 2,000 份首诊笔记人工复核范式),建立本中心基线。
- SOTA 方法:把 MEDDOPROF 明确定位为"标注规范 + 起点权重"的来源,在自有数据上继续标注 200-500 份(复用其 33 页规范与 IAA≈0.9 质检流程)再做域适应微调。
参考:概览论文(语料描述);Scientific Reports 2025(外部验证方法学);标注规范 Zenodo record 4720833。
§6.6 数据增强
| 策略 | 安全性 | 说明 |
|---|---|---|
| Gazetteer 同义替换(替换职业词并同步标签区间) | ✅ | 用官方 25,000+ 词条 Gazetteer 做受控替换,保持句法角色不变 |
| 非实体句子的删除/拼接重组 | ✅ | 仅动 O 句,实体句保持完整,符合 G5 同句约束 |
| Token 级 dropout(仅限 O token) | ✅ | 模拟病历笔误与省略 |
| 子词 masking + MLM 领域继续预训练(Silver 文档) | ✅ | 去重后使用(见坑点 7) |
| 跨语言回译生成新样本 | ❌ | 西语→英语→西语的回译会破坏偏移对齐与性别屈折一致性,标签区间需重标 |
| 随机删除/替换实体 token | ❌ | 破坏"提及-归属-编码"三层一致性,制造伪影标签 |
| 全文小写化 | ❌ | 西语专名与缩写信息丢失,实测相关模型均保留原生大小写 |
| 用 MLM 整句改写实体所在句 | ❌ | 归属(CLASS 标签)可能随句义翻转,无法同步标注 |
§6.7 模型推荐
| 模型/方案 | 任务 | 已验证成绩(测试集 micro-F1) | 适用场景 |
|---|---|---|---|
| bsc-bio-ehr-es 微调(BSC 官方模型 prof-ner-es 同底座) | NER | 0.780(PROFESION 0.853 / SITUACION_LABORAL 0.645,模型卡自报) | 工程首选,西语临床底座 |
| transformers + MLM 继续预训练 + CRF(NLNDE 方案) | NER / CLASS | 0.818 / 0.793(IberLEF 2021 冠军) | 冲榜复现,低资源策略研究 |
| Flair + BERT 嵌入(MUCIC 方案) | NER / CLASS | 0.800 / 0.764(亚军) | 代码全开源,易复现 |
| 多语 DistilBERT + BiLSTM(TALP 方案) | NORM | 0.619(冠军) | 归一化轨道起点 |
| BERT + 近似字符串匹配(Vicomtech/EdIE 方案) | NORM | 0.603 档(亚军 Fadi 为 BERT) | 检索式归一化基线 |
提示:上表成绩来自同一官方测试集与统一评测协议,轨内可比;不同轨、不同标签口径(2 类/3 类)之间不可直接比较。
§6.8 计算资源需求
| 阶段 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| 数据解析(brat→BIO) | CPU 2 核 / 4 GB 内存 | 普通笔记本 | 全库 14.1 MB,秒级完成 |
| NER 微调(129 万 tokens,3-5 epochs) | 1×GPU 8 GB(T4/3060) | 1×GPU 16 GB(A10/T4 高显) | batch 16、max_len 256 即可 |
| CLASS 联合训练 | 同上 | 同上 | 标签数 4,负担略低 |
| NORM(双塔/排序) | 1×GPU 12 GB | 1×GPU 24 GB | 需编码 297+49 个码的描述侧 |
| Silver 预训练(13,357 篇,557 万 tokens) | 1×GPU 16 GB | 多卡或 Colab Pro | 可选阶段 |
§6.9 评估指标
官方三轨均以span 级精确匹配的 micro-F1 排名(NER/CLASS 评实体边界 + 标签,NORM 评提及 + 术语码)。以下是可直接运行的对齐实现:
# pip install seqeval
from seqeval.metrics import classification_report, f1_score
def evaluate_bio(gold_seqs, pred_seqs):
"""输入:文档级 BIO 序列列表(词级标签)。
返回:官方口径一致的 span 级 micro-F1。"""
print(f"micro-F1 = {f1_score(gold_seqs, pred_seqs):.3f}")
print(classification_report(gold_seqs, pred_seqs, digits=3))
# NORM 轨道:提及 → 码 的精确匹配准确率/F1
def norm_metrics(gold, pred):
"""gold/pred:[(filename, start, end, code), ...],码为最终归一化输出。"""
gset, pset = set(gold), set(pred)
tp = len(gset & pset)
p, r = tp / max(len(pset), 1), tp / max(len(gset), 1)
print(f"precision={p:.3f} recall={r:.3f} f1={2*p*r/max(p+r, 1e-9):.3f}")
注意:seqeval 默认 lenient 模式;与官方对齐请使用 strict 模式(类型敏感的 span 匹配),并固定 3 类标签口径(见坑点 2)。分桶指标(高频码/长尾码/未见码,见坑点 4)建议随主指标一并汇报。
典型的分标签评测报告结构(复现时按此格式汇报,便于与官方榜单对齐):
| 汇报层级 | 指标 | 说明 |
|---|---|---|
| 总体 | micro-F1(strict span) | 官方排名指标 |
| 分标签 | PROFESION / SITUACION_LABORAL / ACTIVIDAD 各自 F1 | 官方模型卡即按此汇报(0.853 / 0.645 / —) |
| 分归属 | PACIENTE / FAMILIAR / SANITARIO / OTRO 各自 F1 | CLASS 轨使用,少数类必须单列 |
| 分桶 | 高频码 / 低频码 / 未见码 | NORM 轨使用,暴露长尾瓶颈 |
| 稳定性 | 5 折 CV 均值 ± 标准差 | 小语料下必报,单点分数不可信 |
§6.10 MLOps 笔记
- 数据版本化:以 Zenodo DOI 锁定数据版本(推荐 10.5281/zenodo.7116201 + md5 58b641fe…),训练配置记录
label_schema_version(2 类/3 类)防止口径漂移(坑点 2)。 - 术语版本锁定:ESCO 与 SNOMED CT 各自随时间更新,NORM 模型上线时把码表快照随模型一起版本化(第三方研究有采用 ESCO v1.1.1 的先例)。
- 监控:在线流量监控标签占比与 SANITARIO/PACIENTE 比值;PSI > 0.1 触发人工抽检(语料无时间元数据,漂移只能靠外部信号,见坑点 8)。
- 模型卡义务:CC BY 4.0 分发的衍生模型须署名数据集与论文;声明训练标签口径与分词方式(坑点 5)。
- 回归测试:把含重音字符、嵌套提及、超长状态提及的边界用例固化进 CI,防止预处理改动静默破坏偏移对齐(坑点 1/6)。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 专科覆盖偏倚 | 20+ 专科但未公布逐专科配比,感染/肿瘤等叙事密集专科的"职业提及"密度可能更高 | 中 | 自建数据时按专科分层评测 |
| 提及对象偏倚 | 医护提及占职业类 47%(1,525/3,227),模型天然偏向 SANITARIO 语境 | 高 | NER 后强制接归属分类(坑点 3) |
| 语言/地域偏倚 | 仅西班牙卡斯蒂利亚语,拉美变体词汇(如职业俚语)覆盖不足 | 中 | 拉美部署前补域内标注 |
| 长尾类别偏倚 | ACTIVIDAD 仅 147 条;297 个 ESCO 码大量低频 | 高 | 分桶评估 + 检索式兜底(坑点 4) |
| 标注员背景偏倚 | 标注由语言学家 + 临床专家完成,对口语化/非标准职业词的容忍度可能与普通书写者不同 | 低 | 用 Silver Standard 扩大语域覆盖 |
| 时代偏倚 | 语料推断编制于 2020-2021(含 COVID-19 病例),职业词与病历模板随时间演化 | 中 | 上线后 PSI 监控(坑点 8) |
§7.2 标注质量评估
质量证据链完整:33 页规范(70+ 条正反例规则,含 G1-G6 全局规则与就业状态专章)→ 多轮试标迭代 → 双轨标注 → 成对一致性 IAA≈0.9 → 约 10-15% 文档内部交叉复检。在临床实体标注任务中(同类任务 IAA 常见 0.8-0.85 区间),0.9 属于高一致性水平。局限:官方未公布分标签别的 IAA 拆解,ACTIVIDAD 与 FAMILIAR 等少数类的标注稳定性缺乏独立证据;归一化一致性(同一提及是否总映射到同一码)未见官方量化。
§7.3 泛化性讨论
| 部署场景 | 失效风险 | 证据/机制 |
|---|---|---|
| 西班牙其他医院 | 低-中 | 同语种同文体,但专科与模板差异存在;SciRep 2025 在风湿科首诊笔记上验证可行,需人工复核兜底 |
| 拉美西语医院 | 中-高 | 词汇与病历书写习惯差异(墨西哥/阿根廷/智利变体),职业俚语覆盖不足 |
| 社交媒体/推文语域 | 高 | 语域跳跃;同类任务应改用同组 ProfNER 语料(SMM4H 2021) |
| 其他语言(英/葡/加泰) | 高 | 单语数据集;跨语言迁移已验证需 NMT + 标注投影 + 专家校验 |
| 拉美/欧洲以外职业分类对接 | 中 | ESCO 为欧洲职业分类,对接美国 SOC/中国职业分类需映射表 |
§7.4 伦理考量
语料以 CC BY 4.0 完全开放,获取无伦理审批门槛,但由此产生的责任移交给使用者:(1) 文本为真实临床病例,官方仓库未逐例记录脱敏流程,残余 PHI 风险需按临床文本治理规范管理,禁止任何再识别尝试;(2) 就业状态标签(失业、无家可归、病休)属敏感社会属性,衍生系统不得用于雇佣歧视、保险核保或信贷评估等高危害用途;(3) 引用义务:使用语料须引用概览论文(Lima-López et al. 2021),再分发需保留署名与许可。
§7.5 公平性评估
需关注三层公平性:(1) 语言性别公平——西语职业名词高度性别化(médico/médica、enfermero/enfermera),模型若在训练中把词形与 SANITARIO 归属过度绑定,会在性别变体上产生系统性差异,评估时应按词形拆分指标;(2) 归属公平——SANITARIO 提及的天然多数地位(47%)可能挤压 FAMILIAR/OTRO 类的召回,少数类应单独报告;(3) 职业谱系公平——低频职业(家政、农业散工等)恰是职业健康研究最关心的群体,但正是长尾码重灾区,服务化系统必须配备检索式兜底而非纯模型输出。官方未发布分亚组的公平性审计,以上为基于语料结构的分析性提示。
§7.6 数据漂移提示
三类漂移源:(1) 术语漂移——ESCO 与 SNOMED CT 版本更新会改变合法码集合与首选标签,NORM 输出需锁版本;(2) 书写漂移——病历模板化程度上升会压缩自由文本职业叙述的多样性,历史语料训练的模型对新模板词汇敏感度下降;(3) 劳动力结构漂移——新职业(平台经济类)不在 2021 年语料词分布中。建议以在线预测分布 PSI 与季度性人工抽检双轨监控(语料本身无时间轴,见坑点 8)。
§7.7 DAIMS 24 项数据就绪度评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 数据为宽格式(每行一个样本/事件) | ✅ | standoff 每行一实体;norm.tsv 每行一提及-码对 |
| 2 | 有唯一标识符列 | ✅ | filename 文档级主键 + T 编号 + 字符区间 |
| 3 | 无 Unicode 或特殊字符 | ⚠️ | 西语重音/ñ 为语义必需,但换行、全角引号与临床缩写需清洗 |
| 4 | 无重复行 | ✅ | 文档无重复;提及字符串重复为自然语言现象(2,058 唯一串) |
| 5 | 缺失值已识别并编码 | ✅ | 金标准无缺失;norm.tsv 空列具互斥语义(§4.5) |
| 6 | 标签列被明确标识 | ✅ | 三层标签体系(类型/归属/码)各有明确列 |
| 7 | 已对罕见类别(<3%)进行分组 | ⚠️ | ACTIVIDAD 3%、大量 1-2 次 ESCO 码,官方未分组 |
| 8 | 偏倚评估已完成 | ⚠️ | 论文讨论标注挑战,无正式偏倚审计章节(本条目 §7.1 补齐) |
| 9 | 有完整的数据字典 | ✅ | 33 页规范 + Zenodo README 五列定义 |
| 10 | 对"信息性缺失"有明确编码解释 | ✅ | ESCO/SNOMED 互斥空列语义清晰(§4.5) |
| 11 | 数据采集设备和设置已记录 | ⚠️ | 纯文本任务无设备概念;来源医院/科室未记录 |
| 12 | 已移除完全共线性变量 | ✅ | 单模态文本任务,不存在结构化共线性问题 |
| 13 | 对编码的映射标准已说明 | ✅ | ESCO + SNOMED CT 双体系、映射逻辑在规范中说明 |
| 14 | 对时间戳的处理已明确说明 | ⚠️ | 无逐例时间戳元数据,temporalCoverage 为推断值 |
| 15 | 训练/验证/测试划分建议已给出 | ✅ | 官方 train 1,500 / test 344 清单 |
| 16 | 数据泄漏风险已被讨论 | ⚠️ | 官方未专门讨论;本条目 §5.3 与坑点 7 补充 |
| 17 | 标签分布已被分析 | ✅ | 论文表 3 完整交叉分布 |
| 18 | 选择性测量偏倚已被讨论 | ✅ | G4-G6 规则显式约束测量口径(全提及、长度、同句) |
| 19 | 外部验证建议已给出 | ✅ | §5.5/§7.8,含已发表真实医院验证路径 |
| 20 | 数据更新和版本信息已记录 | ✅ | Zenodo 4 个版本 DOI + 2022-09-27 更新日志 |
| 21 | 最小必要预处理脚本已提供 | ⚠️ | 官方未随库发布转换脚本;社区有转换 notebook,本条目 §6.3 提供实现 |
| 22 | 合规使用要求已明确 | ✅ | CC BY 4.0,无注册/审批门槛 |
| 23 | 多模态对齐方法已说明 | ✅ | 单模态纯文本,无对齐需求;互补实体集与正文以文件名对齐 |
| 24 | 去标识化方法已被记录 | ⚠️ | 官方仓库未逐例记录脱敏协议,残余 PHI 风险需使用者自管 |
DAIMS 评分:19 / 24
评分解读:优秀——15 个 ✅ 来自教科书级的标注治理(33 页规范、IAA≈0.9、官方划分、双术语全量归一、四版本 Zenodo 存档);8 个 ⚠️ 全部属于"文本任务的结构性盲区"而非治理缺陷:无时间戳与来源元数据、长尾未分组、无官方预处理脚本、脱敏记录不完备。在临床 NLP 金标准中,这一治理密度属第一梯队。
对你意味着什么:(1) 可以放心把它当"基准真值"用于三轨任务复现与模型选型——划分、规范、码表、一致性记录齐全;(2) 上线自有场景前必须补三件事:外部小样本验证(§7.8 路径)、归属分类防火墙(坑点 3)、在线分布监控(坑点 8);(3) 若任务涉及时间趋势或院内流行病学统计,此语料只能提供"能力训练",不能提供"分布基线"——元数据空白意味着一切文档级统计都不具人群代表性。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| HCSC-MSKC 风湿科首诊笔记(2,000 份,人工金标) | Hospital Clínico San Carlos(马德里) | 职业 NER + 归属(OCCUPATION/ATTRIBUTION 双模型,brat + 官方评测脚本复用) | 见原文(微平均 P/R/F1,seqeval 分标签) | 零样本迁移至单专科真实病历 | MEDDOPROF 训练模型可用于真实场景职业信息收集研究;归属模型可再回收约 10% 患者职业提及;ESCO v1.1.1 用于编码归一 |
| 加泰罗尼亚语临床 NER(标注投影) | BSC-TeMU 等(Information 2024) | 跨语言 NER 资源生成 | 见原文(专家校验后的投影质量) | NMT 翻译 + 投影 + 专家在环 | 西语金标准可经机器翻译标注投影迁移至低资源语言,专家校验成本可控 |
§8 基准性能与生态
§8.1 排行榜(IberLEF 2021 官方评测,测试集 span 级 micro-F1)
Track 1 — MEDDOPROF-NER
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | NLNDE | 0.818(P 0.855 / R 0.783) | 2021 | transformers + MLM 继续预训练 + CRF + 策略性数据划分 | Lange, L., Adel, H., and Strötgen, J. 2021, “NLNDE at MEDDOPROF: Boosting Transformers in a Low-Resource Setting”, Proceedings of IberLEF 2021, CEUR-WS Vol-2943, pp. 737-746(CEUR: http://ceur-ws.org/Vol-2943/) | 未公开 |
| 2 | MUCIC | 0.800 | 2021 | Flair + BERT 嵌入序列标注 | Balouchzahi, F., Sidorov, G., and Shashirekha, H.L. 2021, “ADOP FERT: Automatic Detection of Occupations and Profession in Medical Texts using Flair and BERT”, Proceedings of IberLEF 2021, CEUR-WS Vol-2943, pp. 747-757 | https://github.com/fazlfrs/MUCIC-MEDDOPROF |
Track 2 — MEDDOPROF-CLASS
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | NLNDE | 0.793(P 0.830 / R 0.759) | 2021 | 同 NER 冠军系统 | Lange et al. 2021, CEUR-WS Vol-2943, pp. 737-746 | 未公开 |
| 2 | MUCIC | 0.764 | 2021 | 同 NER 亚军系统 | Balouchzahi et al. 2021, CEUR-WS Vol-2943, pp. 747-757 | https://github.com/fazlfrs/MUCIC-MEDDOPROF |
Track 3 — MEDDOPROF-NORM
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | TALP | 0.619(P 0.675 / R 0.572) | 2021 | 多语 DistilBERT + BiLSTM | Medina Herrera, S. and Turmo Borràs, J. 2021, “Everything Transformers: Recognition, Classification and Normalisation of Professions and Family Relations”, Proceedings of IberLEF 2021, CEUR-WS Vol-2943, pp. 770-775 | 未公开 |
| 2 | Fadi | 0.603 | 2021 | BERT | Universitat Rovira i Virgili 参赛队,见概览论文表 6 与 CEUR Vol-2943 | 未公开 |
可比性说明:三表成绩均产生于同一官方测试集与同一评测窗口(2021-06),轨内可直接比较;但轨间(NER/CLASS/NORM)任务定义不同,分数不可横比。后续论文若改用不同标签口径(2 类/3 类)或自行切分,数值与官方榜单不可直接对齐。
§8.2 SOTA 总结与选型建议
官方赛后公开可用的最强工程基线是 BSC 自家的 prof-ner-es(bsc-bio-ehr-es 微调,micro-F1 0.780,Apache-2.0,Apache 许可便于商用),而学术 SOTA(0.818)来自未开源的 NLNDE 系统,其公开技术要点(MLM 继续预训练 + CRF + 数据划分策略)可作为增量改造方向。做 NORM 请默认按 0.62 天花板规划兜底检索。选型路径:商用 → prof-ner-es 起步;冲榜/论文 → 复现 NLNDE 三件套;归一化 → TALP 结构 + Gazetteer 候选召回。
§8.3 官方评测协议
| 协议要素 | 内容 |
|---|---|
| 评测窗口 | 测试集 2021-06-01 发布,2021-06-09 截止提交 |
| 提交限制 | 每队每轨最多 5 次提交,取最优成绩排名 |
| 排名指标 | 测试集 span 级精确匹配 micro-F1(NER/CLASS:边界 + 标签;NORM:提及 + 码) |
| 轨道依赖 | NER 与 CLASS 相互独立;NORM 需以至少一个前置轨道的检测输出为输入 |
| 参赛规模 | 40 队注册、15 队提交、94 个提交(NER 39 / CLASS 29 / NORM 26) |
| 成果存档 | 8 篇系统论文经同行评审进入 CEUR Vol-2943(pp. 737-813);概览论文刊于 PLN 67 |
| 奖项 | 每子任务前三名获 BSC-Plan TL 奖励(总奖金池 3,000 欧元) |
复现注意:官方评测代码按 2021 年 Python 生态编写,直接运行需固定依赖版本;用 §6.9 的 seqeval strict 口径可对齐成绩。赛后无持续运营的公开排行榜,新成绩应以"同测试集 + 同标签口径"自行对照。
§8.4 相关数据集
| 数据集 | 关系 | 一句话差异 |
|---|---|---|
| ProfNER | 同组前置任务(SMM4H 2021) | 西语 COVID-19 推文的职业/就业状态识别,语域为社交媒体 |
| Cantemist | 同组姊妹任务(2020) | 肿瘤形态学实体 + ICD-O-3 归一,同款 brat/三轨范式 |
| MEDDOCAN | 同组姊妹任务(2019) | 西语临床文本 PHI 匿名化(span 检测) |
| PharmaCoNER | 同组姊妹任务(2019) | 药物/活性物质 NER + SNOMED CT 归一 |
| LivingNER | 同组后续任务(2022) | 物种/病原体/人类/食品提及的多轨识别 |
| MEDDOPLACE | 同组后续任务(2023) | 临床文本地点与患者移动的识别、归一与分类 |
§8.5 关键论文 Top 7
- Lima-López, S., Farré-Maduell, E., Miranda-Escalada, A., Brivá-Iglesias, V., Krallinger, M. (2021). “NLP applied to occupational health: MEDDOPROF shared task at IberLEF 2021 on automatic recognition, classification and normalization of professions and occupations from medical texts.” Procesamiento del Lenguaje Natural, 67: 243-256. DOI: 10.26342/2021-67-21 —— 任务概览与全部基准数字的原始出处。
- Lange, L., Adel, H., Strötgen, J. (2021). “NLNDE at MEDDOPROF: Boosting Transformers in a Low-Resource Setting.” CEUR-WS Vol-2943, pp. 737-746 —— NER/CLASS 双冠军的低资源策略(MLM + CRF + 划分策略)。
- Balouchzahi, F., Sidorov, G., Shashirekha, H.L. (2021). “ADOP FERT: Automatic Detection of Occupations and Profession in Medical Texts using Flair and BERT.” CEUR-WS Vol-2943, pp. 747-757 —— 双亚军系统,代码完全开源、最适合复现。
- Medina Herrera, S., Turmo Borràs, J. (2021). “Everything Transformers: Recognition, Classification and Normalisation of Professions and Family Relations.” CEUR-WS Vol-2943, pp. 770-775 —— NORM 轨冠军(0.619)。
- Zotova, E., García-Pablos, A., Cuadros, M. (2021). “Vicomtech at MEDDOPROF: Automatic Information Extraction and Disambiguation in Clinical Text.” CEUR-WS Vol-2943, pp. 776-787 —— 归一化消歧与近似匹配工程路线。
- Miranda-Escalada, A., et al. (2021). “The ProfNER shared task on automatic recognition of occupation mentions in social media.” Proceedings of SMM4H @ NAACL-HLT 2021, pp. 13-20. DOI: 10.18653/v1/2021.smm4h-1.3 —— 姊妹任务概览,语料为推文、规范同源。
- 慢性风湿病研究组 (2025). “Deep learning for occupation…” Scientific Reports, 15: 20944. DOI: 10.1038/s41598-025-05294-5 —— MEDDOPROF 模型在真实医院场景的外部验证与 SDOH 研究应用范式。
§8.6 社区活跃度
MEDDOPROF 属"基准型"而非"持续运营型"资源:任务社区在 2021 年赛后基本收官(官网停止更新竞赛内容),生态延续依赖 Zenodo 存档(该版本下载 215 次、全版本分发光量 3.1 GB,截至 2026-09)与 Semantic Scholar 26+ 引用的稳定学术使用。活跃触点:BSC-NLP4BIA 的 Hugging Face 组织(模型与后续任务模型持续发布)、nlp4bia 团队 GitHub、以及 SDOH/职业健康 NLP 论文的常规引用。期望长期排行榜更新的用户应关注同组后续任务(LivingNER/MEDDOPLACE/BioASQ 系)的官网。
§8.7 生态快照
| 资源 | 类型 | 链接 | 状态(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| MEDDOPROF 官网 | 任务门户 | https://temu.bsc.es/meddoprof/ | 在线(赛后静态) | 权威入口与资源索引 |
| 金标准终版 | 数据 | https://doi.org/10.5281/zenodo.7116201 | 在线,CC BY 4.0 | 一包含三轨标注 + 归一化 TSV |
| 标注规范 | 文档 | https://doi.org/10.5281/zenodo.4720833 | 在线 | 33 页 70+ 规则,自建标注直接复用 |
| Silver Standard | 衍生数据 | https://zenodo.org/records/7937014 | 在线 | 13,357 篇弱标注,预训练燃料 |
| prof-ner-es 模型 | 模型 | https://huggingface.co/BSC-NLP4BIA/prof-ner-es | 在线,Apache-2.0 | 开箱即用的西语职业 NER |
| meddroprof_scielowiki_es | 模型 | https://nlp.johnsnowlabs.com/2021/07/26/meddroprof_scielowiki_es.html | 在线 | John Snow Labs 生态内可直接加载 |
| CEUR Vol-2943 | 论文集 | http://ceur-ws.org/Vol-2943/ | 在线 | 8 篇系统论文全文 |
| 概览论文 | 论文 | https://doi.org/10.26342/2021-67-21 | 开放获取 | 全部官方统计数字出处 |
§9 相关资源与引用
官方资源
- 任务官网与注册信息:https://temu.bsc.es/meddoprof/
- 语料描述页(规模、格式、轨道):https://temu.bsc.es/meddoprof/data
- 轨道定义页(三轨细则与示例):https://temu.bsc.es/meddoprof?p=323
- 出版物页(概览论文 + 系统论文索引):https://temu.bsc.es/meddoprof/publications
- 金标准终版(Zenodo,CC BY 4.0):https://doi.org/10.5281/zenodo.7116201
- 比赛版训练集(历史存档):https://zenodo.org/record/4694769
- 标注规范(33 页 PDF,西语):https://doi.org/10.5281/zenodo.4720833
- 互补实体数据集:https://doi.org/10.5281/zenodo.4775741
- 职业 Gazetteer(25,000+ 词条):https://doi.org/10.5281/zenodo.4524659
- Silver Standard:https://zenodo.org/records/7937014
- 系统论文集(CEUR Vol-2943):http://ceur-ws.org/Vol-2943/
- 联系方式:encargo-pln-life@bsc.es(官网公布)
BibTeX 引用(使用语料、模型或基准数字时引用)
@article{meddoprof,
title = {NLP applied to occupational health: {MEDDOPROF} shared task at {IberLEF} 2021
on automatic recognition, classification and normalization of professions
and occupations from medical texts},
author = {Lima-L{\'o}pez, Salvador and Farr{\'e}-Maduell, Eul{\`a}lia and
Miranda-Escalada, Antonio and Briv{\'a}-Iglesias, Vicent and
Krallinger, Martin},
journal = {Procesamiento del Lenguaje Natural},
volume = {67},
pages = {243--256},
year = {2021},
issn = {1989-7553},
doi = {10.26342/2021-67-21},
url = {http://journal.sepln.org/sepln/ojs/ojs/index.php/pln/article/view/6393}
}
@dataset{meddoprof_corpus,
title = {MEDDOPROF corpus: complete gold standard annotations for occupation
detection in medical documents in Spanish},
author = {Lima-L{\'o}pez, Salvador and Farr{\'e}-Maduell, Eul{\`a}lia and
Miranda-Escalada, Antonio and Briv{\'a}-Iglesias, Vicent and
Krallinger, Martin},
year = {2022},
publisher = {Zenodo},
version = {2022-09-27},
doi = {10.5281/zenodo.7116201},
license = {CC-BY-4.0}
}
@dataset{meddoprof_guidelines,
title = {MEDDOPROF guidelines: Identificaci{\'o}n de Profesiones y Ocupaciones
en Casos Cl{\'i}nicos - Gu{\'i}as de anotaci{\'o}n},
author = {Farr{\'e}-Maduell, Eul{\`a}lia and Krallinger, Martin and
Miranda-Escalada, Antonio and Lima-L{\'o}pez, Salvador and
Ag{\"u}ero-Torales, Marvin and Briv{\'a}-Iglesias, Vicent},
year = {2021},
publisher = {Zenodo},
doi = {10.5281/zenodo.4720833}
}
@inproceedings{nlnde_meddoprof,
title = {{NLNDE} at {MEDDOPROF}: Boosting Transformers in a Low-Resource Setting},
author = {Lange, Lukas and Adel, Heike and Str{\"o}tgen, Jannik},
booktitle = {Proceedings of the Iberian Languages Evaluation Forum (IberLEF 2021),
CEUR Workshop Proceedings},
volume = {2943},
pages = {737--746},
year = {2021},
url = {http://ceur-ws.org/Vol-2943/}
}
@inproceedings{mucic_meddoprof,
title = {{ADOP FERT}: Automatic Detection of Occupations and Profession in Medical
Texts using Flair and {BERT}},
author = {Balouchzahi, Fazlourrahman and Sidorov, Grigori and
Shashirekha, Hosahalli Lakshmaiah},
booktitle = {Proceedings of the Iberian Languages Evaluation Forum (IberLEF 2021),
CEUR Workshop Proceedings},
volume = {2943},
pages = {747--757},
year = {2021},
url = {http://ceur-ws.org/Vol-2943/}
}
@inproceedings{profner_task,
title = {The {ProfNER} shared task on automatic recognition of occupation mentions
in social media: systems, evaluation, guidelines, embeddings and corpora},
author = {Miranda-Escalada, Antonio and Farr{\'e}-Maduell, Eul{\`a}lia and
Lima-L{\'o}pez, Salvador and Gasc{\'o}, Luis and
Briv{\'a}-Iglesias, Vicent and Ag{\"u}ero-Torales, Marvin M. and
Krallinger, Martin},
booktitle = {Proceedings of the Sixth Social Media Mining for Health Workshop
(SMM4H) @ NAACL-HLT 2021},
pages = {13--20},
year = {2021},
doi = {10.18653/v1/2021.smm4h-1.3}
}
引用指南
最小引用集 = 概览论文(meddoprof)+ 数据集(meddoprof_corpus);若使用了归一化轨道的标注规则或复用标注流程,请追加引用规范(meddoprof_guidelines);对比成绩时引用对应系统论文。再分发数据或衍生模型须保留 CC BY 4.0 署名链。
教程与学习资源
- 标注规范(必读):33 页西语版 PDF(DOI: 10.5281/zenodo.4720833),含正反例规则表与就业状态专章——做错误分析前先通读,能解释绝大多数"疑似标注错误"。
- MUCIC 开源 notebook:https://github.com/fazlfrs/MUCIC-MEDDOPROF —— brat→CoNLL 转换 + Flair/BERT 全流程,Colab 可跑,最适合入门复现。
- BSC 官方推理示例:https://huggingface.co/BSC-NLP4BIA/prof-ner-es 模型卡内含最小推理代码与 nlp4bia-bsc 团队的 simple_inference notebook 链接。
- 概览论文附录:PLN 67 开放获取(DOI: 10.26342/2021-67-21),附录含各队全部提交成绩,是超参数与 trick 的金矿。
- 任务系列脉络:ProfNER(推文)→ MEDDOPROF(病历)→ LivingNER / MEDDOPLACE(物种/地点),官网串联页可作低资源临床 NLP 的系统学习路径。
§10 AI 使用声明卡
§10.1 AI 模型使用
| AI 模型 | 版本 | 用途 |
|---|---|---|
| fast-model(CodeBuddy) | 2026-09 | 初稿生成:INFOBOX 数据汇编、§1-§9 结构化写作、§6 代码示例生成、JSON-LD 构建 |
| WebSearch(多源检索) | 2026-09-17 | 5 组检索:官方页面与语料描述、任务概览论文与统计数字、Zenodo 版本与许可、系统成绩与 CEUR 论文集、后续应用与引用快照 |
§10.2 AI 参与范围
AI 参与范围:初稿生成 + 资料整理 + 代码生成 + 格式化排版。
AI 在本页面的工作中负责:(1) 从任务官网、Zenodo 存档、概览论文与 CEUR 论文集中整理结构化信息;(2) 生成 §6 的 Python 代码示例;(3) 系统化组织 §6.5 的 8 个坑点与 §7.1 偏倚表;(4) 执行 G1/G2/G3 排版规范检查与中英文格式标准化;(5) 构建 §C 统一 JSON-LD @graph。
§10.3 输入来源
- Lima-López et al. (2021), Procesamiento del Lenguaje Natural 67:243-256(DOI: 10.26342/2021-67-21)——任务概览论文(语料统计、标签分布、参赛系统成绩)
- MEDDOPROF 官网(https://temu.bsc.es/meddoprof/)与语料描述页(/data、Tracks 页)
- Zenodo 金标准终版 record 7116201(README:目录结构、md5、版本更新说明)
- Zenodo 比赛版训练集 record 4694769(比赛期 NER 两类标签口径)
- Zenodo 标注规范 record 4720833(33 页规范、IAA≈0.9、G1-G6 规则)
- Zenodo 互补实体数据集 record 4775741 与职业 Gazetteer record 4524659
- Zenodo Silver Standard record 7937014(13,357 篇弱标注统计)
- ACL Portal 任务征集页(https://www.aclweb.org/portal/node/4811,时间表与奖项设置)
- CEUR-WS Vol-2943 论文集(8 篇系统论文完整条目,pp. 737-813)
- Hugging Face 模型卡 BSC-NLP4BIA/prof-ner-es(micro-F1 0.780、分词要求、Apache-2.0)
- John Snow Labs 模型页 meddroprof_scielowiki_es(2021-07-26 发布)
- Scientific Reports 15:20944(2025,DOI: 10.1038/s41598-025-05294-5,外部验证研究)
- dblp(Salvador Lima-López 出版列表:ProfNER/MEDDOPLACE/跨语言迁移论文条目)
- Semantic Scholar 引用快照(26+,截至 2026-09)与 Dialnet 论文书目页
- FindACode / WHO ICD-11 浏览器(QD80-QD85、QD71.0、1D60 编码核对)
§10.4 人工校验
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(ICD-11 锚定、双术语映射) | 千方病案医学编辑部 | 与 WHO ICD-11 浏览器及官方规范交叉比对 | ✅ 已验证 |
| §3 数据集规格(样本量、版本矩阵) | 千方病案医学编辑部 | 与 Zenodo README 及概览论文表 2 交叉比对 | ✅ 已验证 |
| §4 数据结构(字段字典、标签分布) | 千方病案医学编辑部 | 与概览论文表 2/表 3 逐数核对 | ✅ 已验证 |
| §5 数据划分策略 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §6 代码示例与坑点 | 千方病案医学编辑部 | 逻辑审查 + 与官方模型卡/规范条款比对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数表述 | 千方病案医学编辑部 | 与概览论文摘要及 Semantic Scholar 快照交叉比对 | ✅ 已验证 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema v3.9 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.5 公平性分析、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
§10.6 最后审核
最后一次人工审核日期:2026-09-05
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- pharmaconer — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- distemist — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- cantemist — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- umls — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- radgraph — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- maccrobat — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- thyme — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- carmen — 共享标签:医疗NLP / 临床文本 / 命名实体识别
- mimic-iv-ext-pe — 共享标签:医疗NLP / 临床文本
- rad-coreference-resolution — 共享标签:医疗NLP / 临床文本
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

