BC5CDR — 化学-疾病关系抽取金标准 AI-Ready Wikipedia

1,500 篇 PubMed 摘要、3,116 条 CID 关系的文献挖掘金标准语料

来源 NCBI(NIH)/ BioCreative V CDR 任务团队 url: http://www.biocreative.org/tasks/biocreative-v/track-3-cdr/发布时间: 2026-09-14最后更新: 2026-09-25 阅读 43
BC5CDR — 化学-疾病关系抽取金标准 AI-Ready Wikipedia

信息速览

数据集名称BC5CDR — 化学-疾病关系抽取金标准 AI-Ready Wikipedia
数据类型1,500 篇 PubMed 摘要,3,116 条 CID 关系,4,409 个化学物概念,5,818 个疾病概念,PubTator + BioC 格式,免费开放下载
规模1,500 篇文献(非患者队列)
接入方式NCBI(NIH)/ BioCreative V CDR 任务团队 url: http://www.biocreative.org/tasks/biocreative-v/track-3-cdr/
AI 就绪度

数据集封面

BC5CDR 化学-疾病关系 — 文献挖掘关系抽取金标准 AI-Ready Wikipedia


INFOBOX

字段 内容
数据集名称 BC5CDR 化学-疾病关系
英文全称 BioCreative V CDR task corpus(BC5CDR)
别名/简称 CDR corpus、BioCreative V CDR、CDR task corpus
疾病分类(ICD-11) 全疾病谱:DB95(中毒性肝病)、4A84(过敏性休克)、GB60(急性肾衰竭)、3B64(血小板减少症)、2A00-2F9Z(肿瘤)等,原始受控词表为 MeSH
SNOMED CT 覆盖全谱系疾病概念(如 39579001 过敏性休克、84114000 急性肾衰竭),语料原生词表为 MeSH/CTD MEDIC
数据模态 生物医学文献摘要文本(英文)
AI 任务类型 命名实体识别(DNER)、概念归一化、化学-疾病关系抽取(CID)
样本总数 1,500 篇 PubMed 摘要(500 训练 + 500 开发 + 500 测试)
数据大小 轻量文本压缩包 CDR_Data.zip(BioC XML 与 PubTator 文本双格式,全语料约 281,792 tokens)
数据格式 PubTator(tab 分隔文本)+ BioC(XML)
许可证 公共领域(美国政府雇员作品;bigbio 标注为 Public Domain Mark 1.0)
访问级别 开放(无需注册、无 DUA)
DUO 标签 NRES(无限制使用)
语言 英文
首发日期 2015 年(BioCreative V 挑战赛随赛发布)
最后更新 2016-05-01(语料版本 v010516)
发布机构 NCBI(NIH)、北卡州立大学 CTD 团队、中国医学科学院医学信息研究所
官方主页 http://www.biocreative.org/tasks/biocreative-v/track-3-cdr/
下载地址 http://www.biocreative.org/media/store/files/2016/CDR_Data.zip(官方站如不可达,见 §6.2 镜像清单)
DOI 10.1093/database/baw068
引用次数 841+(PlumX 聚合 Scopus/CrossRef/PMC 引用,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方三段划分、双格式、体量小易复现;扣分项:需自写 PubTator 解析器与评测脚本(官方脚本需从镜像包中获取),跨句关系需文档级建模
页面状态 published

§0 E-E-A-T 审核与免责

  • 医学审核:千方病案医学编辑部交叉审核:§2 医学背景(药物性肝损伤、过敏性休克等疾病主题的 ICD-11 与 SNOMED CT 映射)、§7 偏倚分析。
  • 数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
  • 审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。BC5CDR 由美国政府雇员创作、以公共领域许可开放发布,无需注册或签署使用协议;跨区域使用请自行确认当地法规要求。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。

§1 数据集概览

§1.0 📌 30 秒速览

这是什么? BC5CDR 是一个"教 AI 读医学论文"的标注语料:1,500 篇 PubMed 论文摘要里,每一个化学物名称(药物、化合物)和每一个疾病名称都被人工标出,并且归一化到标准术语库 MeSH 的编号;其中 3,116 对"某个化学物引发了某个疾病"的关系(如对乙酰氨基酚诱发肝损伤)也被专家逐条确认。它由美国国家生物技术信息中心(NCBI)等机构在 2015 年 BioCreative V 挑战赛中构建。

为什么重要? 药物安全监测、药物研发和知识图谱构建都需要从海量文献中自动提取"化学物→疾病"关系,但在此之前缺少一个规模足够、实体与关系双全、且支持跨句关系的高质量训练与评测集合。BC5CDR 填补了这个空白:34 支国际团队在同一次评测中同台竞技,使其成为该领域沿用至今的事实标准基准(引用 841+,截至 2026-09)。

我能用它做什么? 训练化学物/疾病命名实体识别(NER)模型;训练文档级关系抽取模型;测试大语言模型(GPT-4、Llama 等)在生物医学信息抽取上的零样本/少样本能力;为药物警戒系统构建可溯源的评测基准;或作为"文献→知识图谱"管线的微调数据。

§1.1 摘要

BC5CDR(BioCreative V CDR task corpus)为支持 BioCreative V 挑战赛的两个子任务——疾病命名实体识别(DNER)与化学物诱发疾病(CID)关系抽取——而建。构建团队从 PubMed 中选取 1,500 篇提及化学物与疾病的文献摘要,按 500/500/500 划分为训练、开发与测试三段。实体标注由 4 名具备医学背景的 MeSH 标引员完成:每篇文献由两人独立标注,再经第三名资深标注者裁决;标注过程中用 DNorm(疾病)与 tmChem(化学物)自动预标注提速,人工仅做增删改与确认。CID 关系由 3 名比较毒理基因组学数据库(CTD)策展人按标准 CTD 协议标注,明确允许句内与跨句断言。最终语料含 4,409 个化学物概念、5,818 个疾病概念与 3,116 条 CID 关系;测试集上实体标注一致性(Jaccard)为疾病 87.49%、化学物 96.05%(Li et al., 2016)。数据以 PubTator 文本与 BioC XML 双格式发布,2015 年挑战赛中共 34 支队伍参赛,最佳系统 DNER F 值 86.46%、CID F 值 57.03%(Wei et al., 2016)。

§1.2 战略价值

维度一:药物安全与药物警戒的文献基础设施。 化学物诱发疾病(CID)关系是药物不良反应信号检测的知识源头。CTD 等权威数据库长期依赖人工策展维护此类知识,人工成本高、文献增速快;BC5CDR 提供了训练自动抽取模型所需的大规模人工金标准,直接服务药物安全监测、上市后信号挖掘与知识图谱自动化构建(Davis et al., 2017)。对药企与监管科技团队而言,它是评估"文献自动策展"能力的第一参照物。

维度二:生物医学 NLP 的公共评测锚点。 BC5CDR 被纳入 BLURB(生物医学语言模型通用基准)并拆分为 BC5CDR-chemical 与 BC5CDR-disease 两个 NER 子任务,PubMedBERT、BioBERT 等代表性模型均在其中报告成绩;随后 BioGPT 又将其用作端到端关系抽取基准。从 2016 年的混合式系统到 2025 年的大语言模型评测,围绕它形成了跨越十年的可比曲线,是观察"文献抽取能力随模型范式演进"的最佳纵向样本。

§1.3 同类数据集横向对比

数据集 规模 模态/范围 标注内容 与 BC5CDR 的差异
BC5CDR 1,500 篇摘要 化学物+疾病+关系 实体(MeSH 归一)+ CID 关系(文档级,含跨句) 唯一同时具备三类标注且官方评测的 CID 金标准
NCBI Disease 793 篇摘要 仅疾病 疾病实体(MeSH/OMIM 归一) 无化学物、无关系标注,适合纯 DNER
ChemProt 2,482 篇摘要 化学物+蛋白质+关系 化学-蛋白相互作用(多种子类型) 关系对象是蛋白质而非疾病,子类型更多
DDI corpus 1,017 篇摘要+DrugBank 文本 药物+药物 药物-药物相互作用(4 类) 关系类型体系不同(DDI vs CID)
EU-ADR 300 篇全文 药物+疾病+关系 句级药物-疾病关联 300 条 规模小、句级关系、基于全文
ADE corpus 2,972 篇摘要 药物+不良反应 句级不良事件 5,776 条 只标句级 ADE 陈述,无概念归一化要求
NLM-Chem 150 篇全文 化学物 全文化学实体(BioCreative VII) 全文而非摘要,只标化学物实体

(ChemProt/DDI/EU-ADR/ADE 规模数字来自 Li et al., 2016 对比表与 BMC Bioinformatics 2025 汇总;NCBI Disease 来自其原始论文 Islamaj Dogan et al., 2014。)

选型含义:若只需要疾病 NER,NCBI Disease 更小更聚焦;若需要化学-蛋白或药药关系,ChemProt/DDI 是对口语料;而"化学物+疾病+关系+概念归一化"四件套齐备、且有官方评测与十年社区成绩沉淀的,只有 BC5CDR——这正是它成为默认起点的结构性原因。

§1.4 版本时间轴

时间 事件
2015 年 BioCreative V 挑战赛启动,CDR 任务语料随赛发布(含 50 篇 sample set);34 支队伍参赛
2016-04-11 语料论文(Database, baw068)录用,语料版本定格 v010516
2016-05-08 语料论文在线发表(DOI: 10.1093/database/baw068);任务 overview 论文(baw032)同期发表
2016 年 官方 CDR_Data.zip 与评测脚本面向社区开放下载;CTD NAR 2017 更新中再次确认其开放可得
2020-2022 年 bigbio 与 tner 在 HuggingFace 发布脚本化预处理版本,进入 transformers 生态
2021 年 纳入 BLURB 基准(BC5CDR-chemical / BC5CDR-disease 两个 NER 子任务)
2022 年至今 BioGPT、LLM 系列论文沿用其端到端 CID 关系抽取设定,成为 LLM 信息抽取评测常客
2025 年 五数据集统一关系抽取评测(BMC Bioinformatics)与 LLM 同口径横评(arXiv 2501.14079)继续以其为锚点

§1.5 典型应用场景

  1. 药物警戒信号检测:训练"化学物→疾病"抽取器,从每日新增 PubMed 文献中自动发现潜在不良反应信号,供药物安全团队人工复核。
  2. 药物研发知识图谱:将抽取的 CID 三元组与 CTD、DrugBank 等库融合,构建文献级的化学-疾病网络,辅助药物重定位与机制假设生成。
  3. 生物医学 LLM 评测:以零样本/少样本方式测试 GPT-4、Llama、BioGPT 等模型的文献信息抽取能力,量化"大模型 vs 微调小模型"差距。
  4. 文献策展自动化前哨:在 CTD 式人工策展流程中,用模型预筛候选关系(如 tmChem/DNorm + 关系分类器),降低人工阅读量。
  5. 教学与复现基准:体量小(约 28 万 tokens)、格式简单、公共领域许可,是 NLP 课程与入门者一周内可完整复现端到端管线的稀缺素材。

§2 医学背景

§2.1 语料覆盖疾病主题与 ICD-11 映射

BC5CDR 覆盖文献中出现的全疾病谱,其原生受控词表为 MeSH(疾病侧融合 CTD 的 MEDIC 词汇)。下表给出语料中具代表性的疾病主题及其 ICD-11 对应,供跨标准分析参考。

语料疾病主题(MeSH 概念) ICD-11 编码 ICD-11 中文名
中毒性肝病(Toxic liver disease) DB95 中毒性肝病
过敏性休克(Anaphylaxis) 4A84 过敏反应/过敏性休克
急性肾衰竭(Acute kidney failure) GB60 急性肾损伤
血小板减少症(Thrombocytopenia) 3B64 血小板减少症
肿瘤(Neoplasms,语料高频主题) 2A00-2F9Z 原发于特定部位的恶性肿瘤及肿瘤章节整体

§2.1b SNOMED CT 映射

语料疾病主题 MeSH/词表来源 SNOMED CT 码 SNOMED 术语
过敏性休克 MeSH 39579001 Anaphylaxis
急性肾衰竭 MeSH 84114000 Acute kidney failure
中毒性肝病 MeSH 19149005 Toxic liver disease
血小板减少症 MeSH 267447008 Thrombocytopenia
肿瘤性疾病 MeSH 55342001 Neoplastic disease

(BC5CDR 原生 ID 为 MeSH UI;SNOMED/ICD 映射需经 UMLS 交叉词表完成,上表为常见核心概念的直接对应,便于团队快速建立"语料→医院术语体系"的翻译层。)

§2.2 医学背景简介

化学物诱发疾病(chemical-induced disease,CID)指药物、环境化合物等外源化学物引起的人体疾病或不良反应,是药物警戒(pharmacovigilance)的核心研究对象。文献是 CID 知识的第一现场:上市后不良反应的发现、机制假设的提出、个案报告的累积,几乎全部首先发表于论文摘要。权威知识库 CTD(Comparative Toxicogenomics Database)长期人工策展化学-疾病关联,截至其 NAR 2017 年更新已服务全球大量研究与监管场景(Davis et al., 2017)。人工策展的速度瓶颈与文献指数级增长之间的矛盾,正是自动 CID 抽取技术及其金标准语料的直接驱动力。BC5CDR 的疾病标注以 MeSH 受控词表归一,化学物标注覆盖 MeSH 主描述符(D 前缀)与补充概念记录(C 前缀)两类,天然衔接主流医学术语体系。

从语言学形态看,CID 知识在摘要中的表达高度多样:既有一句话内的紧凑断言(如 “paracetamol-induced hepatotoxicity” 式的复合命名),也有跨句甚至跨段落的证据链(先在方法句报告用药,再在结果句报告不良结局),还有以症状枚举呈现的复合提及。这种表达多样性正是官方将"跨句断言"写入语料设计要求的原因(Li et al., 2016),也是句级模型在该语料上表现受限的根本原因(见 §6.5 坑点 2)。

§2.3 临床任务定义

BC5CDR 支撑的"临床任务"是文献驱动的药物安全信息抽取,包含三级:

  1. 筛查(发现提及):在摘要中识别化学物与疾病提及(NER),对应官方 DNER 任务,评价精确率/召回率/F 值(F 值)。
  2. 诊断性归一(对齐标准概念):将提及文本归一到 MeSH 概念 ID,消除同义词歧义(如 “ASA” 与 “aspirin” 同指 D001241),对应概念归一化任务。
  3. 关系判定(建立因果链):判定某化学物概念与某疾病概念之间是否存在"诱发"关系,且不限句内——官方设计明确要求覆盖跨句断言,对应 CID 关系抽取任务。

该管线对应的现实场景是:药物安全团队每天自动扫描新文献 → 抽取候选 CID 信号 → 按概念聚合并人工复核,取代全量人工阅读。三个临床任务与官方评测子任务的对应关系如下:

临床任务 官方子任务 模型输出 主要指标
筛查:发现提及 DNER mention 边界 + 类型 精确率/召回率/F 值(五元组严格匹配)
诊断性归一:对齐标准概念 概念归一化(内嵌于 DNER 评分) MeSH 概念 ID 概念级 F 值
关系判定:建立因果链 CID 关系抽取 概念对(文档级) 概念对精确率/召回率/F 值

§2.4 语料来源人群(文献层面)

维度 描述
文献来源 PubMed 收录期刊的英文论文摘要(非全文)
入选标准 提及化学物与疾病、且含可标注 CID 关系的摘要(由任务组织方筛选)
筛选时间 2015 年挑战赛筹备期
语言 英语
文献类型 研究论文、病例报告等摘要
文献窗口 2015 年挑战赛筹备期之前已被 PubMed 收录的文献
标注视角 文献策展视角(MeSH 标引员 + CTD 策展人),而非临床诊疗视角
地域覆盖 全球期刊文献(无地域分层设计)
患者层面 无患者级数据;患者信息仅以文献叙述形式间接出现

§2.5 临床价值与边界

对医学信息学团队,BC5CDR 的价值在于把"文献里说了什么"变成结构化、可溯源、可聚合的知识:实体有 MeSH ID,可直连 UMLS、ICD、SNOMED 体系;关系有文档级断言,可回溯到 PMID 与原文偏移。其边界同样清晰:标注对象是摘要而非完整病历或全文,CID 是"文献已报告的关联"而非"因果的最终确认";将模型输出用于临床决策前,必须经药物安全专家与后续流行病学证据的双重验证。本数据集自身不含患者可识别信息,不构成个人健康数据合规负担。

使用建议:把 BC5CDR 定位为"文献理解能力的量尺",而非"临床知识源"本身。正确的管线是——文献抽取模型(以 BC5CDR 训练与评测)产出候选 CID → 与 CTD 增量策展记录对照 → 进入药物安全专家复核队列。跳过中间验证环节直接把模型输出当结论,等于把量尺当成了尺子要量的东西。

§2.6 金标准对照表

属性 内容
划分 500 训练 + 500 开发 + 500 测试(官方固定划分,测试集仅用于最终评测)
标注方式 实体:人工双标 + 资深裁决 + 自动预标注辅助;关系:CTD 标准协议人工策展
标注者 4 名 MeSH 标引员(实体)+ 3 名 CTD 策展人(关系)+ 1 名资深裁决者
一致性 测试集实体 IAA(Jaccard):疾病 87.49%、化学物 96.05%;DNER 任务人类一致性 0.8875
性质 挑战赛金标准(challenge gold standard),含官方评测脚本与成绩基线
受控词表 MeSH(化学物含 D/C 两类 UI;疾病融合 CTD MEDIC 词汇)
评测脚本 官方脚本随语料分发(镜像包内 BC5CDR_Evaluation-0.0.3.zip),官方 F 值口径可逐位复现

§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本 获取方式 理由
关系抽取/文档级建模(推荐起点) 官方 CDR_Data.zip(v010516) §6.2 官方或镜像下载 含全部三类标注、双格式、官方评测脚本(镜像包内)
快速跑通 transformers NER tner/bc5cdr(HuggingFace) load_dataset("tner/bc5cdr") 句级 token/BIO 标签即取即用,但丢失概念 ID 与关系标注
需要 HF datasets 标准接口 bigbio/bc5cdr load_dataset("bigbio/bc5cdr", "bc5cdr_source") 保留原始 BioC 结构或转 bigbio_kb schema,官方 zip 打包
BLURB 式单任务 NER 评测 BLURB 中的 BC5CDR-chem/disease BLURB 官方仓库 与已发表 SOTA 数字同口径,但与原任务设置不一致

§3.1 模态详情

单一模态:英文生物医学文献摘要文本。每篇文献包含标题(title)与摘要(abstract)两个 passage;标注粒度为字符级偏移(character offset)+ 概念 ID。无影像、无时序、无表格数据。文本编码为 UTF-8;PubTator 格式以制表符分列、空行分文档;BioC 格式为 XML(附 DTD)。总文本量约 281,792 tokens(BMC/arXiv 2025 统计),单文件可全量载入内存。

passage 结构与偏移基准:每篇文档固定两个 passage——标题与摘要;实体标注为字符级偏移,但偏移相对"标题+摘要拼接文本"还是相对单一 passage 起算,官方文档未做一步到位的显式说明,且不同解析实现对此处理不一——这是新团队最常见的首个解析错误。规范做法是落地前用 §6.1 的偏移自检函数在真实样本上确认语义,再全量解析。CID 关系标注位于文档层,不受 passage 边界影响。字符级偏移(而非 token 化偏移)保证了标注与任何分词器解耦——代价是使用方需自行处理"偏移 → token"对齐,§6.4 给出了对齐实现。

§3.2 按子集样本数与标注统计

官方论文 Table 2 的整体统计(Li et al., 2016):

子集 文献数 疾病 mention 疾病概念 ID 化学 mention 化学概念 ID CID 关系(全语料合计 3,116)
训练集 500 4,182 1,965 5,203 1,467 见官方 Table 2
开发集 500 4,244 1,865 5,347 1,507 见官方 Table 2
测试集 500 4,424 1,988 5,385 1,435 见官方 Table 2
合计 1,500 12,850 5,818 15,935 4,409 3,116

三个子集的 mention/ID 分布相近,官方有意保持均衡以利于训练;疾病概念数多于化学物概念数,而化学 mention 数多于疾病 mention,说明化学物被更反复地提及、疾病的长尾更显著。由此可算出概念密度:化学物平均每个概念被提及约 3.6 次(15,935/4,409),疾病约 2.2 次(12,850/5,818)(按上表求和计算)——化学物侧表面形式多样性更高(同概念多写法),疾病侧概念长尾更长,对归一化模型构成两种不同性质的挑战。

§3.3 数据格式

格式 文件 结构 适用场景
PubTator CDR_*Set.PubTator.txt 首行 `\ t\
BioC XML CDR_*Set.BioC.xml document/passage/annotation 层级 XML(附 BioC.dtd) 与 BioC 生态工具(bioc 包等)互操作
评测脚本 BC5CDR_Evaluation-0.0.3.zip(镜像包内) 官方评测程序 复现官方 F 值口径

PubTator 格式实例(官方 README 示例文档,JHnlp 镜像):

3403780|t|Paracetamol-associated coma, metabolic acidosis, renal and hepatic failure.
3403780|a|A case of metabolic acidosis, acute renal failure and hepatic failure following paracetamol ingestion is presented. The diagnostic difficulty at presentation is highlighted .....

(其后每行一条实体标注:PMID、START、END、text、TYPE、IDENTIFIER 六列以制表符分隔;
  复合提及追加可选第 7 列;文档之间以空行分隔。完整格式定义见官方 README。)

§3.4 存储大小

语料为轻量文本:全语料约 281,792 tokens;三对 BioC XML 与 PubTator 文本文件构成主体,官方压缩包 CDR_Data.zip 可在数秒内下载、解压后直接使用,无需专用存储。tner 句级预处理版(含 JSON 数据文件)约 4.15 MB(tner 数据卡)。对任一现代训练环境而言,存储与 I/O 均不构成瓶颈。

文件清单与用途一览:

文件/目录 内容 用途
CDR_TrainingSet.PubTator.txt / .BioC.xml 500 篇训练集,双格式 模型训练
CDR_DevelopmentSet.PubTator.txt / .BioC.xml 500 篇开发集,双格式 调参与早停
CDR_TestSet.PubTator.txt / .BioC.xml 500 篇测试集,双格式 终评(gold 全量标注)
CDR_sample.txt 50 篇示例集(随赛早期发布,镜像包内) 解析器单元测试夹具
BC5CDR_Evaluation-0.0.3.zip 官方评测脚本(镜像包内) 评测口径锚点
DNorm.TestSet/ 与 tmChem.TestSet/ 官方疾病/化学 NER 基线在测试集上的输出 评测器校准基线

§3.5 标注方式

  • 实体(化学物/疾病):人工标注为主、自动预标注为辅。DNorm 与 tmChem 先行产出候选,PubTator 界面呈现给标注员;标注员增、删、改后确认,并允许查阅 UMLS 与 Wikipedia 辅助判断(Li et al., 2016)。
  • CID 关系:完全人工。3 名 CTD 策展人按 CTD 标准策展协议对化学-疾病概念对做出"诱发"判定,关系在文档级建立,明确包含跨句与句内断言。
  • 归一化:每个 mention 强制绑定受控词表 ID(MeSH;疾病侧为 CTD/MEDIC 使用的 MeSH UI),同一概念的多种写法(缩写、商品名、别名)收敛到同一 ID。

标注质量流程对照:

环节 做法 质量保障
试标 前 100 篇按初版指南试标 分歧集中裁决 + 指南迭代修订
实体全量 双人独立标注(PubTator + DNorm/tmChem 预标注) 测试集 Jaccard 87.49% / 96.05%
裁决 第三名资深标注者仲裁 统一裁决口径
关系策展 3 名 CTD 策展人按 CTD 生产协议 沿用 CTD 日常策展一致性体系
词表约束 mention 强制绑定 MeSH 概念 ID 受控词表从源头消除同义歧义

§3.6 标注者资质与一致性

实体标注由 4 名 MeSH 职业标引员完成,全部具备医学训练背景与标引经验;分歧由第三名资深标注者(YS)裁决。CID 关系由 3 名 CTD 职业策展人标注,沿用 CTD 生产环境的标准协议与内部工具,其一致性在 CTD 既往工作中已有评估。测试集上按 Jaccard 相似系数计算的双人一致性:疾病 87.49%、化学物 96.05%(Li et al., 2016);任务 overview 论文另报告 DNER 任务的人类一致性为 0.8875(Wei et al., 2016)。疾病一致性明显低于化学物,反映疾病命名(症状描述、综合征、边界)的固有歧义——这直接构成 §6.5 坑点 8。

流程细节:标引员先在最初的 100 篇样例文章上按初版指南试标,分歧与疑问由资深标注者集中裁决,指南据此迭代修订后才全量展开——这一"试标-修订-全量"的流程是语料一致性的制度保障(Li et al., 2016)。

§3.7 采集周期

语料在 2015 年 BioCreative V 挑战赛筹备期内一次性构建完成:先发布 50 篇 sample 与 500 篇训练集支持系统开发,随后发布开发集,测试集保留至最终评测阶段。2016 年随论文发表一次性整体公开(版本 v010516)。此后官方未发布增量版本,语料处于"冻结金标准"状态。发布顺序上,50 篇 sample 最早,训练集与开发集次之,测试集三段 gold 标注在赛期终评后随论文发表全量开放。

§3.8 地域覆盖

覆盖全球 PubMed 收录期刊的英文文献,不按国家/地区分层。作为文献语料,其"地理"属性体现为期刊来源的全球分布;不存在队列研究的单一中心偏倚,但存在英文文献、高影响因子期刊的系统性倾向(见 §7.1)。对中文团队而言,这意味着用它训练的抽取器在中文文献上的表现不受本语料约束,需要另行构建中文标注集。

§3.9 设备规格

不适用。BC5CDR 为纯文本文献语料,无采集设备、传感器或影像设备元数据。

§3.10 深度溯源链

PubMed 原始文献 → BioCreative V CDR 任务组织方(NCBI + NCSU CTD + 中国医学科学院)筛选 1,500 篇 → PubTator 平台上的人工双标与裁决 + CTD 协议关系策展 → 官方 CDR_Data.zip(v010516,biocreative.org)→ 社区镜像(HuggingFace bigbio/bc5cdr、GitHub JHnlp/BioCreative-V-CDR-Corpus、sourceforge bioc 项目)。每条标注可经 PMID + 字符偏移回溯到原文摘要,保证端到端可审计。

§4 数据结构

§4.0 目录树

官方 CDR_Data.zip 解压后(社区镜像内容一致):

CDR_Data/
├── CDR.Corpus.v010516/
│   ├── CDR_TrainingSet.BioC.xml          # 训练集(500 篇,BioC XML)
│   ├── CDR_TrainingSet.PubTator.txt      # 训练集(500 篇,PubTator 文本)
│   ├── CDR_DevelopmentSet.BioC.xml       # 开发集(500 篇,BioC XML)
│   ├── CDR_DevelopmentSet.PubTator.txt   # 开发集(500 篇,PubTator 文本)
│   ├── CDR_TestSet.BioC.xml              # 测试集(500 篇,BioC XML)
│   └── CDR_TestSet.PubTator.txt          # 测试集(500 篇,PubTator 文本)
├── DNorm.TestSet/                        # 官方 DNorm 疾病 NER 基线输出
├── tmChem.TestSet/                       # 官方 tmChem 化学 NER 基线输出
└── README.txt                            # 官方说明文件

镜像仓库另含 CDR_sample.txt(50 篇 sample set)与 BC5CDR_Evaluation-0.0.3.zip(官方评测脚本)(JHnlp 镜像)。

BioC XML 的内部层级(元素名依 BioC 公开规范;示例 PMID 为官方论文插图所用文档 354896):

collection
└── document
    ├── id                     # PMID(官方示例文档为 354896)
    └── passage × 2            # title 与 abstract 各一个
        ├── infon              # 键值属性(承载 passage 类型等)
        ├── offset             # passage 起始字符偏移
        ├── text               # passage 原文
        └── annotation         # 每个实体标注一个
            ├── infon          # 实体类型与 MeSH 概念 ID 等键值
            ├── location       # offset + length(字符级)
            └── text           # mention 原文

§4.1 DAIMS 字段字典(PubTator 格式)

字段 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
PMID string 文献唯一标识,文档分隔单元 354896 文档级聚合键、回溯原文 无(官方保证唯一) 无 PubMed 现存 PMID
passage 类型 string 第 1 行为 `\ t\ (标题)、第 2 行为 \ a\ `(摘要) `3403780\
START int mention 起始字符偏移 0 span 特征抽取 偏移基准(全文拼接 vs 单 passage)以 §6.1 自检确认,勿臆断 无 ≥ 0
END int mention 结束字符偏移 46 同上 含端/不含端语义以切片自检确认 无 > START
text string mention 原文字符串 paracetamol 词典构建、校验偏移 与偏移必须一致,冲突即解析错误 无 任意英文串
TYPE string 实体类型 Chemical / Disease 类型感知模型输入 无 无 Chemical, Disease
IDENTIFIER string 归一化概念 ID(MeSH UI) D014572 概念级关系、知识图谱对接 需区分 D/C 前缀两类 MeSH 记录(见坑点 3) 无 MeSH D/C 系列 UI
复合提及(可选第 7 列) string 仅复合 mention 出现;`\ ` 分隔子偏移 `3403780\t0\t46\t…\ 0-15` 复合拆分为多个子提及 漏读将导致 span 对不齐(见坑点 1)
CID 关系 pair PubTator 中以同文档同概念 ID 的 Chemical-Disease 对表达,官方列表见 BioC 关系标注 (D014572, D004421) 关系抽取正例 无负例标注(见坑点 6) 无 文档内化学物×疾病概念对

双格式字段对照(PubTator ↔ BioC):

PubTator 表达 BioC 对应 换算注意
行 1 `\ t\ / 行 2\
PMID document/id 文档键一致
START/END annotation/location(offset + length) PubTator 与 BioC 的端点语义需各自自检
text annotation/text 应逐字符一致,不一致即解析错误
TYPE / IDENTIFIER annotation/infon 键值 类型与 MeSH ID
第 7 列复合提及 annotation 内的关联结构 以官方 XML 实际形态为准,勿凭约定臆断

§4.2 标签分布

  • 实体类型:仅两类(Chemical、Disease),无嵌套类型体系;类型分布按概念数:疾病 5,818 > 化学物 4,409,按 mention 数:化学 15,935 > 疾病 12,850(官方 Table 2)。
  • 关系类型:仅一类(CID),无子类型(如"治疗相反的恶化"不做区分);全语料 3,116 条,均匀分布于三个子集(官方设计使三段统计相近)。
  • 长尾特征:概念级分布呈长尾——高频概念(对乙酰氨基酚、肝损伤等经典药物安全主题)反复出现,大量 MeSH 概念仅出现一两次,对少样本概念的关系学习构成挑战。
  • 复合提及:一个文本 span 对应多个子概念的情形由第 7 列承载(见 §4.1/§4.5),统计 mention 数时应先确定是否拆分——拆分与否会使 mention 计数不同。

§4.3 关键统计

统计项 数值 来源
文献总数 1,500(500/500/500) Li et al., 2016
化学物概念 / mention 4,409 / 15,935 同上(Table 2 三段求和)
疾病概念 / mention 5,818 / 12,850 同上
CID 关系 3,116 同上
全语料 tokens 281,792 arXiv 2505.00814
实体 IAA(测试集,Jaccard) 疾病 87.49% / 化学物 96.05% Li et al., 2016
参赛队伍 34(DNER 16 队、CID 18 队) Wei et al., 2016
句级预处理版规模 train 5,228 / dev 5,330 / test 5,865 句(tner 版) tner 数据卡

表外解读:疾病概念数(5,818)超过化学物概念数(4,409),而化学 mention 数(15,935)超过疾病 mention 数(12,850),两组方向相反的排序共同刻画了语料结构——化学物提及密集但概念集中,疾病提及分散而概念长尾。做分类任务时应据此为两类实体设置不同的类别加权与采样策略。

§4.4 数据层级

语料(1,500 篇)
└── 文档(PMID 唯一)
    ├── passage:title(|t|)
    └── passage:abstract(|a|)
        ├── mention(START-END + text + TYPE)
        │   └── 概念(MeSH IDENTIFIER,可一 ID 对多 mention)
        └── CID 关系(文档级:Chemical 概念 × Disease 概念,可跨句/跨 passage)

要点:mention 隶属于 passage(偏移基准经 §6.1 自检确认),关系隶属于文档——这与"关系可跨句"的设计一致,解析时必须以文档为单位聚合。层级设计还有两个直接推论:其一,"同概念多 mention"是常态而非异常,模型与统计都应在概念层与 mention 层分开计数;其二,关系的证据可能散布在标题与摘要两个 passage 中(如标题宣告药物、摘要报告结局),文档级读取是唯一安全路径。

§4.5 缺失值与信息性缺失

文本语料无传统意义上的特征缺失;唯一结构性的"可选缺失"是复合提及第 7 列:缺省表示该 mention 对应单一概念,出现时表示一个文本 span 拆分为多个子提及(各带独立偏移与概念)。解析器应把第 7 列缺省视为"单概念"的正常状态而非空值错误。除此之外,任何标注行的缺失(如文档无实体行)都表示该文档确无相应类型标注——同样是信息而非错误。

工程建议:把"第 7 列是否存在"纳入解析器的分支测试用例——构造一条单概念样本与一条复合样本做单元测试,即可覆盖 §6.5 坑点 1 的绝大部分回归场景;BioC 与 PubTator 对偏移终止(END)的语义表述存在细节差异,解析落地前应先以 mention 文本切片自检一次,确认含端/不含端约定后再全量转换。

§5 划分与使用建议

§5.1 官方划分

官方将 1,500 篇按 500/500/500 划分为训练、开发、测试三段(Li et al., 2016):训练与开发集在挑战赛开发期提前发布供系统调参,测试集保留至最终评测。三段统计分布被官方刻意控制在相近水平(见 §3.2)。挑战赛结束后测试集连同 gold 标注整体公开。这一"赛期保密、赛后全量公开"的安排在 2015 年是标准做法,但也埋下了 §5.3 所列的长期评测过拟合隐患。

§5.2 社区惯例与建议

  • NER 赛道:普遍沿用官方划分在测试集上报数(与 BLURB 口径一致);少数工作合并训练集与开发集以扩大训练数据。
  • CID 关系赛道:存在两种口径——end-to-end(系统自产实体 + 关系)与 gold-entity(给定金标准实体做关系分类)。建议:模型选型对比时固定同口径;正式汇报时两者都报。
  • 调参纪律:若合并训练/开发集,务必自留 held-out(如按 PMID 分层抽样 10%)做内部早停,避免"向测试集隐性调参"。
  • 复现基线:先用官方 DNorm/tmChem 测试集输出(随包附带)校准你的评测脚本,再跑自己的模型——这是发现评测口径偏差最快的方法。

四种使用模式的规范对照:

使用模式 训练数据 早停/调参 终评 口径披露
官方复现 train 500 dev 500 test 500 官方 F 值脚本
最大化训练 train + dev(1,000 篇) 自留 10% held-out test 500 须注明合并训练
保守研究 train 500 dev 500 自建演进测试集 附标注指南与划分说明
LLM 零/少样本 train 中抽示例 — test 500 与微调结果分表呈现

§5.3 泄漏风险清单(重点)

  1. 测试集长期公开:test 500 篇连同 gold 标注自 2016 年公开,十年间大量模型在其上调参/选型,排行榜数字存在乐观偏置;严肃评估建议自建新划分或用 NLM-Chem 等外部集做终验。
  2. LLM 预训练污染:GPT 系列等模型的预训练语料大概率含 PubMed 摘要甚至 BC5CDR 本体,零样本成绩不能解读为"泛化能力"的直接证据;跨模型比较时应披露训练语料时间线。
  3. 实体词典泄漏:dev/test 的 mention 表面形式若进入训练词典或预处理统计(如全语料词表),NER 成绩会被抬高——构建特征时只应使用训练集统计量。
  4. 跨文档重复概念:同一药物/疾病跨三段重复出现属语料天然属性而非错误,但意味着按概念分层的自建划分(而非按文档随机)才能避免概念级泄漏。

§5.4 交叉验证与外部验证建议

  • 交叉验证:若需在训练+开发(1,000 篇)内做模型选择,建议 5 折分组交叉验证(GroupKFold,按 PMID),保持文档完整性。
  • 外部验证:优先 NLM-Chem(全文化学实体,BioCreative VII)检验摘要→全文迁移;用 CTD 在线数据抽样构建"时移"评测集检验时间漂移;CID 关系可参照 ChemDisGene 等后续语料做跨语料验证。

若需在训练+开发(1,000 篇)内做模型选择,按 PMID 分组的交叉验证可保证文档完整性与概念分布的折间均衡:

from sklearn.model_selection import GroupKFold

# docs 为 §6.3 产出的训练+开发集记录列表
groups = [d["pmid"] for d in docs]
gkf = GroupKFold(n_splits=5)
for tr_idx, va_idx in gkf.split(docs, groups=groups):
    train_docs = [docs[i] for i in tr_idx]   # 按 PMID 分组,文档永不跨折
    val_docs   = [docs[i] for i in va_idx]

§6 AI 就绪指南 ⭐

§6.0 云端快速启动

无官方托管环境。最快的云端路径是任一带 GPU 的 Notebook 环境(Colab/Kaggle/AutoDL)+ 一行 HF 加载:

# 句级 NER 五分钟跑通(tner 预处理版,验证环境)
from datasets import load_dataset
ds = load_dataset("tner/bc5cdr")   # train 5,228 / validation 5,330 / test 5,865 句
print(ds["train"][0])

文档级完整管线(关系抽取必需)请回到本地使用官方 CDR_Data.zip,见 §6.2。

§6.1 快速上手

以下代码假设目录结构为 §4.0 的官方解压形态:data_root = "CDR_Data/CDR.Corpus.v010516",文件名拼接规则为 {data_root}/CDR_{Split}Set.PubTator.txt。最小可用子集是训练集 PubTator 文件(500 篇、约 5,203 个化学 mention + 4,182 个疾病 mention),建议先用它跑通解析再放大。

# ---------------------------------------------------------------
# 目录预期:
#   data_root/
#     CDR_TrainingSet.PubTator.txt
#     CDR_DevelopmentSet.PubTator.txt
#     CDR_TestSet.PubTator.txt
# data_root 与文件名的拼接关系:f"{data_root}/CDR_{split}Set.PubTator.txt"
# 最小可用子集:split="Training"
# ---------------------------------------------------------------
def parse_pubtator(path):
    """解析 PubTator 文件 → [{pmid, title, abstract, entities}]"""
    docs, cur = [], None
    with open(path, encoding="utf-8") as f:
        for line in f:
            line = line.rstrip("\n")
            if not line:                      # 空行 = 文档边界
                if cur: docs.append(cur); cur = None
                continue
            parts = line.split("\t")
            if len(parts) == 2 and parts[1].endswith("|t|"):      # 标题行
                cur = {"pmid": parts[0], "title": parts[1][3:],
                       "abstract": "", "entities": []}
            elif len(parts) == 2 and parts[1].endswith("|a|"):    # 摘要行
                cur["abstract"] = parts[1][3:]
            else:                             # 实体行:6+1 列
                pmid, s, e, text, etype, eid = parts[:6]
                assert pmid == cur["pmid"], "PMID 错位:检查空行解析"
                ent = {"start": int(s), "end": int(e), "text": text,
                       "type": etype, "id": eid}
                if len(parts) > 6:            # 复合提及第 7 列(坑点 1)
                    ent["composite"] = parts[6]
                cur["entities"].append(ent)
    if cur: docs.append(cur)
    return docs

train = parse_pubtator("CDR_Data/CDR.Corpus.v010516/CDR_TrainingSet.PubTator.txt")
print(len(train), train[0]["pmid"])        # 预期 500

解析器落地后的三个必备断言:① 文档数 = 500(每个子集);② mention 文本与原文按 START/END 切片必须逐字符一致(不一致即偏移语义理解错误——先做一次切片实验确认含端/不含端约定);③ 化学物 ID 中 D 前缀与 C 前缀两桶均非空(坑点 3 的快速探测)。三断言全绿,再进入预处理与训练。

断言 ② 的自动探测函数(同时投票决定偏移基准假设):

def offset_selfcheck(doc):
    """在两种偏移基准假设下寻找逐字符一致的切片:
    A:title + "\\n" + abstract 拼接文本;B:abstract 单独。
    全部样本落在同一假设下,即确认该语料的偏移语义。"""
    cands = {"A_title_abs": doc["title"] + "\n" + doc["abstract"],
             "B_abstract":  doc["abstract"]}
    votes = {k: 0 for k in cands}
    for m in doc["entities"]:
        for k, txt in cands.items():
            if txt[m["start"]:m["end"] + 1] == m["text"]:   # 含端假设
                votes[k] += 1
            elif txt[m["start"]:m["end"]] == m["text"]:     # 不含端假设
                votes[k] += 1
    return votes

§6.2 数据获取

渠道 链接 大小 说明
官方主链 http://www.biocreative.org/media/store/files/2016/CDR_Data.zip 轻量文本包 首选;官方站若整站不可达(历史上发生过,见坑点 4),改走镜像
HuggingFace 镜像 https://huggingface.co/datasets/bigbio/bc5cdr/resolve/main/CDR_Data.zip 同上 bigbio 团队打包的同一份 zip,load_dataset 可直接用
GitHub 镜像 https://github.com/JHnlp/BioCreative-V-CDR-Corpus 同上+评测脚本 额外含 CDR_sample.txt(50 篇)与 BC5CDR_Evaluation-0.0.3.zip
sourceforge 镜像 http://sourceforge.net/projects/bioc/files/CDR_Data.zip/download 同上 CTD 官方论文中给出的下载入口
# 官方包下载 + 解压(无注册、无审批)
curl -L -o CDR_Data.zip http://www.biocreative.org/media/store/files/2016/CDR_Data.zip
unzip CDR_Data.zip && ls CDR_Data/CDR.Corpus.v010516/

无申请流程:公共领域许可,直接下载即可(合规细节见 §7.4)。下载后建议做两项完整性验证:① 解压后目录名应为 CDR.Corpus.v010516(版本指纹);② 训练集 PubTator 文档数应为 500(§6.1 断言 ①)。两项任一失败即说明拿到的不是官方原版,应换镜像重新获取。

预处理流程总览:① 解析(§6.1)→ ② 偏移自检与断言(§6.1)→ ③ 复合提及展开与概念聚合(§6.3)→ ④ 关系候选对展开 + gold CID 对齐(§6.3/坑点 6)→ ⑤ JSONL 落盘(§6.3)→ ⑥ Dataset/DataLoader(§6.4)。

§6.3 预处理全流程

从 PubTator 原始格式到可训练样本:格式解析(§6.1)→ 概念级聚合(mention → concept)→ 文档级关系正例展开 → 训练实例构造。下方完整脚本(超 30 行,折叠展示)把三个子集转换为 JSONL:每个文档一条,含实体列表(展开复合提及)与 CID 概念对列表。

<details>
<summary>完整预处理脚本(点击展开,约 70 行)</summary>

import json
from collections import defaultdict

def doc_to_record(doc):
    # 1) 展开复合提及:第 7 列形如 "0-15|17-30",把一个 span 拆成多个子 mention
    flat = []
    for ent in doc["entities"]:
        if "composite" in ent:
            for seg in ent["composite"].split("|"):
                s, e = seg.split("-")
                flat.append({**ent, "start": int(s), "end": int(e),
                             "text": ent["text"][int(s):int(e)]})
        else:
            flat.append(ent)
    # 2) 概念级聚合:同一 (type, id) 的多个 mention 收敛到一个概念
    concepts = defaultdict(list)
    for ent in flat:
        concepts[(ent["type"], ent["id"])].append(ent)
    # 3) CID 概念对:文档内 Chemical 概念 × Disease 概念(官方关系标注的文档级表达)
    chems = [k[1] for k in concepts if k[0] == "Chemical"]
    dis   = [k[1] for k in concepts if k[0] == "Disease"]
    record = {
        "pmid": doc["pmid"],
        "title": doc["title"],
        "abstract": doc["abstract"],
        "mentions": [{"start": m["start"], "end": m["end"],
                      "text": m["text"], "type": m["type"],
                      "id": m["id"]} for m in flat],
        "concepts": {f"{t}:{i}": [{"start": m["start"], "end": m["end"],
                                   "text": m["text"]} for m in ms]
                     for (t, i), ms in concepts.items()},
    }
    return record, chems, dis

def convert(split, out):
    path = f"CDR_Data/CDR.Corpus.v010516/CDR_{split}Set.PubTator.txt"
    docs = parse_pubtator(path)          # §6.1 的解析器
    with open(out, "w", encoding="utf-8") as w:
        for doc in docs:
            record, chems, dis = doc_to_record(doc)
            record["all_pairs"] = [[c, d] for c in chems for d in dis]
            w.write(json.dumps(record, ensure_ascii=False) + "\n")

for split in ["Training", "Development", "Test"]:
    convert(split, f"bc5cdr_{split.lower()}.jsonl")
# 产出:三份 JSONL;all_pairs 为候选对全集,gold CID 子集需从
# BioC XML 的 relation 标注或官方评测所需文件读取(见坑点 6)

产出物字段说明:

JSONL 字段 含义 下游用途
pmid / title / abstract 文档三元组 文本输入
mentions 展开复合提及后的 mention 列表(含偏移/类型/ID) NER 训练与评测
concepts 概念 → mention 列表映射 归一化评估、概念级聚合
all_pairs 文档内化学物×疾病概念对全集 关系模型的候选对池(正例需叠加 gold CID 标注)

</details>

清洗与标准化注意:文本不需要小写化/去标点(偏移必须保持原样);增强见 §6.6;如需句级化(为句间模型),必须保留句子到文档的映射并在句间保留实体指针,否则将触发坑点 2。

§6.4 PyTorch DataLoader(完整可运行)

文档级 NER + 关系双任务的 Dataset 实现(在 §6.3 的 JSONL 之上运行):

<details>
<summary>Dataset + DataLoader 完整代码(点击展开,约 80 行)</summary>

import json, torch
from torch.utils.data import Dataset, DataLoader
from transformers import AutoTokenizer

class BC5CDRDocDataset(Dataset):
    """文档级 BC5CDR:NER span 标签 + 概念对索引。
    data_root 预期:bc5cdr_training.jsonl / bc5cdr_development.jsonl / bc5cdr_test.jsonl
    (由 §6.3 脚本产出,data_root 即脚本输出目录)"""
    def __init__(self, jsonl_path, model_name="dmis-lab/biobert-base-cased-v1.2",
                 max_length=512):
        self.tok = AutoTokenizer.from_pretrained(model_name)
        self.max_length = max_length
        self.docs = [json.loads(l) for l in open(jsonl_path, encoding="utf-8")]
        self.label2id = {"O": 0, "B-Chemical": 1, "I-Chemical": 2,
                         "B-Disease": 3, "I-Disease": 4}

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

    def _bio_tags(self, doc, offsets):
        tags = ["O"] * len(offsets)
        for m in doc["mentions"]:                       # 简化:单 token span 对齐
            for i, (s, e) in enumerate(offsets):
                if s is not None and s >= m["start"] and e <= m["end"]:
                    prefix = "B-" if s == m["start"] else "I-"
                    tags[i] = prefix + m["type"]
        return [self.label2id[t] for t in tags]

    def __getitem__(self, idx):
        doc = self.docs[idx]
        text = doc["title"] + " " + doc["abstract"]
        enc = self.tok(text, truncation=True, max_length=self.max_length,
                       return_offsets_mapping=True, return_tensors="pt")
        offsets = enc["offset_mapping"][0].tolist()
        labels = self._bio_tags(doc, offsets)
        pair_index = torch.tensor(doc["all_pairs"], dtype=torch.long) \
                     if doc["all_pairs"] else torch.zeros((0, 2), dtype=torch.long)
        return {"input_ids": enc["input_ids"][0],
                "attention_mask": enc["attention_mask"][0],
                "labels": torch.tensor(labels),
                "pairs": pair_index,
                "pmid": doc["pmid"]}

def collate(batch):
    maxlen = max(b["input_ids"].size(0) for b in batch)
    def pad(t, v): return torch.nn.utils.rnn.pad_sequence(
        [b[t] for b in batch], batch_first=True, padding_value=v)
    return {"input_ids": pad("input_ids", 0),
            "attention_mask": pad("attention_mask", 0),
            "labels": pad("labels", -100),
            "pairs": [b["pairs"] for b in batch],
            "pmids": [b["pmid"] for b in batch]}

ds = BC5CDRDocDataset("bc5cdr_training.jsonl")
dl = DataLoader(ds, batch_size=4, shuffle=True, collate_fn=collate,
                num_workers=2)
batch = next(iter(dl))
print(batch["input_ids"].shape, len(batch["pairs"]))   # 验证批次结构

</details>

§6.5 坑点清单(8 个,全部来自该语料真实失败模式)

⚠️ 坑点 1:PubTator 复合提及第 7 列被忽略或拆错(分类:预处理陷阱)

问题:PubTator 第 7 列是可选的复合提及属性——当一个文本 span 对应多个概念时(如 “paracetamol-associated coma, metabolic acidosis, renal and hepatic failure” 一类连续串),第 7 列以偏移子段列出各组成部分。忽略该列会把复合 span 当作单一实体,偏移与概念都对不上。
症状:实体数对不上官方统计;把 mention 文本与 START/END 互切时对不齐原文;评测 F 值莫名其妙地低于他人 1-3 个点。
解决:

  1. 简单方法:解析时检测 len(parts) > 6,按 | 拆分第 7 列并按子偏移切分文本,逐段生成独立 mention(见 §6.3 代码)。
  2. 进阶方法:建立"span ↔ 子偏移"双索引,训练时用子偏移、输出合并时回贴父 span,保证与 BioC 视图一致。
  3. SOTA 方法:直接以 BioC XML 为解析源(关系与复合结构在 XML 中有显式层级),用 bioc Python 包读取,把 PubTator 视为快速预览格式。
    参考:JHnlp/BioCreative-V-CDR-Corpus README(格式定义)

⚠️ 坑点 2:句子切分/句级模型丢掉跨句 CID 关系(分类:预处理陷阱)

问题:官方设计明确要求 CID 关系覆盖"句内与跨句"断言,语料因此是文档级(document-level)关系标注。任何句子切分后按句训练/按句判定的管线,天然无法表达跨句正例。
症状:句级关系模型召回率显著低于论文报告值;切分后统计"句内实体对"数量时发现大量 gold 关系对应的实体对根本不在同一句里;tner 句级版完全不含关系标注,用它做关系实验会一无所获。
解决:

  1. 简单方法:把文档级候选对(同文档所有 Chemical×Disease 概念对)全部送入分类器,输入用整篇摘要(512 token 截断内通常可容纳,全语料均值远小于此)。
  2. 进阶方法:实体对上下文窗口扩展到"两实体提及的全覆盖窗口"(prefix/中缀/后缀三段拼接),或采用实体标记 + 文档级编码器。
  3. SOTA 方法:图神经网络/图推断类方法(EoG 的文档图、BERT-GT 的图 transformer、ATLOP 的自适应阈值与局部化上下文池化)以文档为建模单元,gold-entity 口径 F 值可达 63.6-69.9 区间(见 §8.1)。
    参考:Li et al., 2016;Christopoulou et al., 2019(EoG);arXiv 2501.14079 对预处理顺序的讨论

⚠️ 坑点 3:MeSH ID 双前缀体系与跨版本 ID 归一化不一致(分类:标签理解)

问题:BC5CDR 的化学物概念 ID 同时来自 MeSH 两类记录——D 前缀主描述符(如 D014572)与 C 前缀补充概念记录(如 C068565);疾病 ID 走 MeSH/CTD MEDIC 的 D 前缀 UI。同时,不同预处理版本对 ID 的处理不同(原版/大 bio 版保留 ID,tner 版完全丢弃 ID 只留 BIO 标签),跨版本对齐时容易把"ID 缺失"与"ID 前缀差异"混为一谈。
症状:用化学物 ID 查 MeSH 时部分 ID 查不到(C 前缀记录不在主描述符文件里);把 bigbio 版与 tner 版数据混用时实体对不上;跨数据集(如对接 PubChem/ChEMBL)映射率远低于预期。
解决:

  1. 简单方法:解析后立即把 ID 标准化为统一大小写并保留前缀,按 D/C 分桶统计,两桶都应非空。
  2. 进阶方法:经 UMLS CUI 做中介映射(MeSH UI → CUI → 目标词表),C 前缀记录同样有 CUI;映射后记录映射率并按前缀分桶报告。
  3. SOTA 方法:以 CTD 的化学物/疾病交叉引用表为枢纽(CTD Chemicals/Diseases 与 MeSH/MEDIC 同源),一次性建立语料 ID 到外部库的稳定映射并版本化保存。
    参考:Li et al., 2016(受控词表说明);BMC Bioinformatics 2025(CTD Diseases=MEDIC)

⚠️ 坑点 4:官方 biocreative.org 间歇不可达,直链 404(分类:工程陷阱)

问题:BioCreative 官方网站历史上出现整站不可访问的时段,社区为此专门建了镜像仓库。只收藏官方直链的团队会在新环境部署或数据复检时突然断供。
症状:curl 官方 CDR_Data.zip 返回 404/超时;新同事入职复现环境时找不到数据与官方评测脚本;论文评审要求提供数据可得性证明时链接已死。
解决:

  1. 简单方法:优先从 HuggingFace bigbio 镜像或 GitHub JHnlp 镜像下载(链接见 §6.2 表),两个入口都验证过与官方 zip 内容一致。
  2. 进阶方法:下载后校验文件结构(三对 BioC/PubTator 文件 + v010516 目录名),把 zip 与解压产物一并纳入内部数据湖版本管理,记录来源 URL 与下载日期。
  3. SOTA 方法:用 load_dataset("bigbio/bc5cdr") 直接接管下载与校验,同时在项目 README 固化"官方站失效时的镜像清单",把数据可得性写入 MLOps 检查单。
    参考:JHnlp/BioCreative-V-CDR-Corpus(官方站失效说明与镜像);CTD NAR 2017(sourceforge 官方镜像声明)

⚠️ 坑点 5:end-to-end 与 gold-entity 两种评测口径混着比(分类:评估误用)

问题:CID 关系抽取成绩分两种口径——end-to-end(系统自己做 NER 再抽关系,难度更高)与 gold-entity(给定金标准实体只判关系)。两个口径的 F 值可相差约 20 个点(如 BioGPT-Large 50.1 属端到端口径,ATLOP 69.9 属 gold-entity 口径),混排会得出荒谬结论。
症状:排行榜/论文表格里同列出现 50.1 与 71.4 而无口径标注;复现某论文数字时无论如何调参都差 15-20 个点;自己模型的"进步"其实是口径切换带来的假象。
解决:

  1. 简单方法:给每个成绩打口径标签(e2e / gold-ent),只做同口径比较;官方 2015 年成绩(最佳 CID F 57.03)是端到端口径。
  2. 进阶方法:同时实现两条评测路径——用 gold 实体跑关系头(诊断关系建模质量),用自产实体跑全链路(诊断 NER 误差传播),分别报告。
  3. SOTA 方法:在评测脚本中固定官方 F 值定义(概念级、文档级聚合),并用官方 DNorm/tmChem 测试集输出做单元测试,确保你的评测器与官方口径逐位一致。
    参考:paperswithcode BC5CDR 榜单;arXiv 2501.14079(同口径对比表);Wei et al., 2016

⚠️ 坑点 6:CID 只标正例——负采样与方向性陷阱(分类:标签理解)

问题:语料只标注 3,116 条 CID 正关系,不标注"非诱发"关系,也没有其他关系类型;化学物→疾病是单向语义(“化学物诱发疾病”,方向反了语义就错)。训练二分类器必须自行构造负例,构造方式直接决定模型上限。
症状:随机替换负例时模型学到"高频概念对总是正例"的捷径,真实评测假阳性爆炸;把关系头做成对称的(无方向)时,验证集 F 值不升反降;负例数与正例比例悬殊时训练 loss 震荡。
解决:

  1. 简单方法:负例 = 同文档 Chemical×Disease 概念对中未被标注为 CID 的全部组合(文档内负采样,最贴近任务定义),正负比控制在 1:1 到 1:5。
  2. 进阶方法:分层负采样——按概念频率分桶匹配正例分布,避免长尾概念从未在负例出现;训练时对每个 epoch 重采负例。
  3. SOTA 方法:把"未标注"当弱负例处理( tolerant-to-noise 的损失或 PU learning),显式建模方向(head=Chemical、tail=Disease),并用文档级图结构(EoG 类)为跨句对补充桥接证据。
    参考:Li et al., 2016(关系标注范围);BMC Bioinformatics 2025(BC5CDR 为文档级单一关系类型)

⚠️ 坑点 7:测试集十年公开 + BLURB 拆分导致"同一名字三套任务"(分类:偏倚陷阱)

问题:test 500 篇自 2016 年带 gold 公开,社区长期只在其上报数;同时 BLURB 把 BC5CDR 拆成 BC5CDR-chemical 与 BC5CDR-disease 两个独立 NER 子任务。于是"BC5CDR 成绩"可能指三种不同任务中的任何一种,数字完全不可比。
症状:把 BLURB NER 的 93.33 与关系抽取的 50.1 放进同一列"BC5CDR SOTA";审稿人质疑你在公开测试集上过拟合;团队新人拿 tner 句级版的成绩对标文档级论文。
解决:

  1. 简单方法:内部报告强制三列:任务(NER-chem / NER-disease / CID-RE)、口径(e2e / gold-ent)、划分(官方 test / 自建 held-out)。
  2. 进阶方法:每年用 2016 年后新发表文献自建"演进测试集"(按同一标注指南抽样标注 100-200 篇),监控排行榜数字的真实衰减。
  3. SOTA 方法:终验改用外部集(NLM-Chem 全文化学标注等),BC5CDR test 只作开发期参考;LLM 评测同时报告"预训练截止时间"以评估记忆污染。
    参考:arXiv 2306.10070(BLURB 口径与 LLM 成绩汇总);paperswithcode 榜单

⚠️ 坑点 8:疾病实体歧义与一致性鸿沟被低估(分类:偏倚陷阱)

问题:疾病标注 IAA 仅 87.49%,比化学物的 96.05% 低近 9 个点;疾病命名天然歧义(症状 vs 疾病 vs 综合征、广义 vs 狭义用法),MeSH 疾病词表融合 MEDIC 后粒度不均。模型会忠实学到这些标注噪声,疾病侧成绩存在人机共同的隐性天花板。
症状:疾病 NER 的错误分析集中在边界与父类选择(如 “acute renal failure” 标到肾衰还是肾损伤概念);把化学物侧的调参经验平移到疾病侧收效甚微;细粒度疾病概念上的 F 值远低于总体均值。
解决:

  1. 简单方法:错误分析时把实体误差分三类(边界/类型/归一化)分别统计,疾病侧重点看归一化误差占比。
  2. 进阶方法:疾病侧引入同义词扩展词典(CTD/MEDIC 同义词表)做候选召回,再用排序模型消歧;对低 IAA 区域(症状性描述短语)做规则兜底。
  3. SOTA 方法:用生成式归一化(seq2seq 直出 MeSH ID)或对比学习概念表征,把"提及上下文"与"MeSH 树位置"联合编码;报告成绩时按概念频率分桶,向使用者披露长尾性能。
    参考:Li et al., 2016(IAA 数据);Wei et al., 2016(人类一致性 0.8875)

§6.6 数据增强

  • ✅ 安全:概念级同义词替换(用 CTD/MeSH 同义词替换 mention 表面形式,同步更新偏移);段落内实体插入(插入与上下文无关的实体短语并重算偏移);英文缩写规范化(保持 ID 不变);复合提及的子 span 独立增强(第 7 列展开后逐子段处理)。
  • ❌ 危险:句子顺序打乱/删除(会破坏跨句 CID 的证据链,坑点 2 的反向雷区);跨文档拼接(产生文档级关系的伪文档,污染文档级建模);机器翻译回译(破坏 MeSH 归一化与专业表述,改变实体边界)。
  • 原则:任何增强都不得改变"文档内概念对"这一关系判定单位,且增强集永不进入评测。

增强后验证清单:① 重算偏移后实体切片自检全部通过;② 概念对集合不变(增强不得增删 CID 标签);③ 跨句关系的证据句未被移动或删除;④ 增强样本计入训练统计但不计入任何评测报告。

§6.7 模型推荐

模型 任务适配 起步成绩参考 备注
PubMedBERT NER + gold-entity RE BLURB:chem 93.33 / disease 85.62(F 值) 领域预训练,BLURB 基准主力
BioBERT NER + gold-entity RE 与 PubMedBERT 同档 社区资料最多,复现容易
BioLinkBERT-large 文档级 RE BMC 2025 五数据集统一评测中表现最佳 引文图预训练,利于文档级推理
ATLOP(+任意编码器) gold-entity 文档级 RE F 值 69.9 自适应阈值,工程量小
BioGPT / BioGPT-Large end-to-end CID RE F 值 45.0 / 50.1 生成式端到端口径,勿与 gold-entity 混比
GPT-3.5/4、Llama 系列 零/少样本评测 GPT-3.5 zero-shot RE F 值 57.43 注意预训练污染(坑点 7)
GPT-4(NER 专项) 零/少样本 NER chem zero-shot 74.43 / one-shot 82.07(F 值) 上下文示例来自训练集时效果更好(arXiv:2306.10070)

选型补充说明:表中"起步成绩参考"均为公开论文口径下的参考锚点,非逐位可复现的承诺——不同实现的数据预处理(如是否合并训练与开发集、负采样比例)会带来 1-3 个点的正常波动;正式立项时应以 §6.9 的统一评测器重新取得内部基线。

§6.8 硬件需求

配置 适用场景
CPU 8 核 + 16GB 内存 解析、统计、评测脚本全部够用(语料仅约 28 万 tokens)
单卡 8GB(RTX 3060 级) base 尺寸编码器(BioBERT/PubMedBERT)NER 微调 + 中等批量关系分类
单卡 24GB(RTX 4090/A5000 级) large 尺寸编码器 + 文档级 RE;ATLOP 类方法舒适运行
多卡/云端 A100 BioGPT-large 端到端训练、LLM 少样本批量推理

§6.9 评估指标代码

实体与关系的官方口径核心实现(概念级、文档级聚合):

def entity_f1(pred, gold):
    """pred/gold: set of (pmid, start, end, type, mesh_id) —— 五元组严格匹配"""
    tp = len(pred & gold)
    p = tp / len(pred) if pred else 0.0
    r = tp / len(gold) if gold else 0.0
    return 2*p*r/(p+r) if p+r else 0.0, p, r

def cid_f1(pred_pairs, gold_pairs):
    """pred/gold: set of (pmid, chem_mesh, disease_mesh) —— 概念级、文档级聚合"""
    return entity_f1(pred_pairs, gold_pairs)   # 同一交集逻辑

def per_type_report(pred, gold, etype):
    """按实体类型分解报告:化学物与疾病分开看(疾病侧误差更集中,坑点 8)"""
    p_t = {x for x in pred if x[3] == etype}
    g_t = {x for x in gold if x[3] == etype}
    return entity_f1(p_t, g_t)

# 用法:先用官方 DNorm/tmChem 测试集输出校准你的评测器(§6.2 镜像包内),
# 确认与官方 F 值口径逐位一致后,再评自己的模型;勿把跨句对按句级截断(坑点 2)。

官方完整评测脚本随 BC5CDR_Evaluation-0.0.3.zip 分发(见 §6.2 GitHub 镜像),最终数字建议以官方脚本复核。

§6.10 MLOps 笔记

  1. 数据版本化:CDR_Data.zip 原件 + 解压校验(文件清单哈希)入库,标注来源 URL 与下载日期;官方站失效风险常态化(坑点 4)。
  2. 评测单一事实源:以官方脚本输出为 gold 口径,自研评测器与之做回归测试(每次改动后重跑固定样例)。
  3. 口径元数据:所有实验记录携带 task × 口径 × 划分 三元组标签(坑点 5/7),看板查询按三元组过滤。
  4. 漂移监控:线上抽取器按月抽样新文献人工复核 CID 精确率;BC5CDR 时代(2015 前)与当前文献的表述差异纳入季度回顾。
  5. 可复现打包:训练数据由 §6.3 脚本从原始 zip 确定性生成(固定随机种子),保证"zip → JSONL → 实验"链路一键重建。
  6. 镜像冗余:生产环境同时保留官方直链与 bigbio/JHnlp 两个镜像源的校验副本,任一源不可达或内容变更即触发告警。
  7. 口径版本化:评测配置(任务×口径×划分×脚本版本)作为独立工件入库并随模型登记,杜绝"数字找到了但口径说不清"的回溯事故。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
文献选择偏倚 摘要须同时含化学物与疾病才入选,偏向药物安全主题文献 中 外部验证时按主题分层抽样
时间截断 语料文献止于 2015 年,其后新药/新病种覆盖为零 高 自建"演进测试集"(坑点 7)
英文/主流期刊倾向 非英文文献与非头部期刊证据缺失 中 跨语种迁移需另行评估
高频概念偏倚 长尾 MeSH 概念样本稀少,模型偏向经典药物安全主题 中 按概念频率分桶报告成绩
正例-only 标注 无 CID 负例,非标注对≠真负例 中 文档内负采样 + PU learning(坑点 6)
疾病标注一致性上限 疾病 IAA 87.49% 低于化学物 96.05% 中 归一化误差单独分析(坑点 8)
赛期年代口径 官方成绩为 2015 年环境与词表下的产物,直接对标今日模型不公允 低 引用时注明年代与口径(§8.1)

§7.2 标注质量

实体标注采用"双人独立 + 资深裁决"的生产级流程,预标注工具(DNorm/tmChem)只加速不替代人工;测试集 Jaccard 一致性化学物 96.05%、疾病 87.49%,处于文献挖掘金标准的正常区间(Li et al., 2016)。关系标注沿用 CTD 生产协议,其一致性与 CTD 日常策展同源。整体判断:化学物侧接近"教科书级"金标准;疾病侧可用但需在错误分析中单列归一化误差。

一致性数据的正确用法:把 87.49% 视为疾病侧成绩的"人类上限参照"——模型疾病 F 值逼近或超过该量级时应引起警觉而非庆祝(警惕评测口径或划分混用,见坑点 5/7);化学物侧 96.05% 同理。DNER 任务官方报告的人类一致性 0.8875 与赛期最佳系统 86.46% 仅差约 2.4 个点,说明纯 NER 维度的提升空间已经很窄,后续改进应转向概念归一化与关系维度。

§7.3 泛化性评估

部署场景 失效风险 证据与说明
全文(非摘要)抽取 高 语料仅覆盖摘要;NLM-Chem(150 篇全文)显示全文实体分布显著不同
2015 年后新药/新病 高 语料时间截断;需持续更新语料或增补训练数据
非英文文献 高 纯英文语料,跨语种需重新标注或对齐
症状/体征短语 中高 疾病 IAA 低谷区,边界与归一化歧义集中(坑点 8)
同期英文摘要 CID 抽取 低 任务同源,官方成绩与社区复现均验证可用性
复合提及与长枚举句 中 第 7 列复合结构与枚举边界是解析与标注双重点(坑点 1)
LLM 零样本迁移 中 成绩可观(GPT-3.5 zero-shot RE 57.43)但受预训练污染解释限制(坑点 7)

§7.4 伦理与合规

语料仅含公开发表的科学文献摘要,不含患者级个人健康信息,无需伦理审批或数据使用协议;美国政府雇员作品,美国境内公共领域,bigbio 数据卡标注为 Public Domain Mark 1.0(bigbio/bc5cdr)。合规注意点只有一个:将模型输出用于真实药物安全决策时,责任主体是使用方,须独立验证并遵守当地监管要求(本页 §0 免责声明同此意)。

与需要 CITI 培训、签署 DUA 的受控医疗数据集(如 MIMIC 系列)相比,BC5CDR 的零门槛合规特性使其成为教学、入门训练与管线冒烟测试的理想选择——团队可以在拿到正式受控数据授权之前,先用它完整演练数据接入、标注解析、训练与评测的全套工程流程。

§7.5 公平性

语料无人口统计学字段(性别/种族/年龄不存在于标注中),传统意义上的算法公平性评估不适用。公平性风险转移到文献层面:哪些药物/疾病被文献充分讨论,模型就擅长哪些——罕见病与低收入地区健康问题的文献可见度低,下游知识图谱会继承这种可见度结构。建议在构建应用时显式记录概念覆盖率分布,并对覆盖率突然下降的概念类别设置人工复核队列。

§7.6 数据漂移

生物医学文献的表述习惯随时间演变:新药命名、新综合征术语、缩写流行度都会漂移。BC5CDR 冻结于 2015 年,作为"历史快照"评测集,其与今日 PubMed 的分布差距随时间线性扩大。缓解路径:① 每年从新文献抽样 100-200 篇按官方指南自标注,监控 NER/RE 成绩衰减;② 在生产抽取器上做月度人工抽检(§6.10);③ 关注 NLM-Chem 等后继语料的口径演进。

另需注意 PMID 级"旧文新引"现象:语料文档在今日仍被大量引用,但其表述已成历史用法;漂移监控应以"新文献抽样"为准,而非"语料文档重访"。

§7.7 DAIMS 数据质量自评(24 项)

# 检查项 状态 说明
1 宽格式 ✅ 每文档一节、每标注一行,结构扁平稳定
2 唯一标识 ✅ PMID 文档级唯一;实体行以 PMID+偏移唯一定位
3 特殊字符 ✅ UTF-8 英文文本;仅制表符为结构字符,无需转义
4 重复行 ⚠️ 无标注重复;但复合提及展开后同一父 span 多行并存,需按第 7 列识别
5 缺失编码 ✅ 文本语料无特征缺失;实体行缺省即"无标注"语义
6 标签标识 ✅ TYPE 列显式区分 Chemical/Disease;关系为单一 CID 类型
7 罕见类分组 ⚠️ 长尾 MeSH 概念多,单概念样本可能极少,未官方分桶
8 偏倚评估 ⚠️ 官方未做偏倚分析;本页 §7.1 给出六项结构性偏倚
9 数据字典 ⚠️ 格式靠 README + 论文描述,无机器可读 schema 文件
10 信息性缺失解释 ✅ 第 7 列缺省 = 单概念提及,语义明确(§4.5)
11 设备记录 ❌ 文本语料,无设备维度(结构性不适用)
12 共线性 ✅ 不适用(无特征列共线问题)
13 编码映射 ✅ MeSH UI 可经 UMLS 映射 ICD/SNOMED/CTD(坑点 3 提供路径)
14 时间戳处理 ⚠️ 语料不携带文献发表日期,需自行回查 PubMed 补时间维度
15 划分建议 ✅ 官方 500/500/500 固定划分,三段统计均衡
16 泄漏讨论 ✅ §5.3 给出测试集公开、LLM 污染、词典泄漏四项清单
17 标签分布 ✅ 官方 Table 2 提供三段 mention/ID 统计(§3.2)
18 测量偏倚 ⚠️ 摘要-only 覆盖与预标注工具影响构成测量口径偏倚(§7.1)
19 外部验证建议 ✅ §5.4/§7.3 给出 NLM-Chem、CTD 抽样、演进集三条路径
20 版本记录 ⚠️ 单版本 v010516 冻结,官方无 changelog;预处理版本需自管
21 预处理脚本 ⚠️ 官方仅提供评测脚本;解析/训练代码依赖本页 §6.3-6.4 等社区实现
22 合规要求 ✅ 公共领域许可、无 DUA、无个人健康信息
23 多模态对齐 ✅ 单模态文本,无跨模态对齐需求(结构性满足)
24 去标识化 ✅ 公开文献摘要天然无患者可识别信息

DAIMS 评分:18.0 / 24(✅ 计 1 分 ×14,⚠️ 计 0.5 分 ×8,❌ 计 0 分 ×1)

评分解读:18.0/24 在文本挖掘语料中属第一梯队——标识、划分、合规、泄漏讨论四项基础工程全绿,反映其"挑战赛金标准"的生产纪律。失分集中在"工程化包装"而非"标注质量":无机器可读 schema、无官方预处理链、版本冻结无 changelog,这些是 2016 年公共语料的时代印记而非缺陷;设备记录与共线性两项属结构性不适用,不应理解为质量问题。

对你意味着什么:① 你可以立即用它做 NER 与 CID 关系抽取的严肃评测,不必担心标注与划分的可信度;② 必须自建解析与预处理代码——直接复用本页 §6.1/§6.3/§6.4,可省约一周工程量;③ 任何对外报告成绩时带上"任务×口径×划分"标签(坑点 5/7),否则数字会被质疑;④ 若产品需要 2015 年后的药物/疾病覆盖,把它当训练与基准集而非全集,另建增量标注线;⑤ 经 UMLS 做 MeSH→ICD/SNOMED 映射后再接入医院术语体系,别硬接原始 MeSH UI。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
NLM-Chem(150 篇全文) 美国国家医学图书馆(NLM) 化学物实体识别 见 Dogan et al., 2022, Database 摘要→全文明显衰减 摘要训练的模型在全文上需段落级适配
BLURB 联合基准 微软 + 社区 BC5CDR-chem/disease NER PubMedBERT 93.33 / 85.62(F 值) 基准内同口径 领域预训练带来稳定增益(Gu et al., 2021)
五数据集统一 RE 评测 学术社区(BMC Bioinformatics 2025) gold-entity CID RE 见 §8.1 表 同口径跨数据集 BioLinkBERT-large 在含 BC5CDR 的五数据集上整体最佳(BMC 2025)
LLM 零样本横评 学术社区(arXiv 2306.10070) CID RE 零样本 GPT-3.5 zero-shot 57.43(F 值) 低于微调 SOTA 约 13 点 LLM 零样本接近 2015 年挑战赛最佳,但仍不及微调模型
CTD 增量对照 CTD(NCSU) 抽取结果与 CTD 策展记录对照 命中率/新增信号率 无法直接换算 F 值 生产管线中最接近真实价值的验证方式(Davis et al., 2017)

(仅收录有同行评审或完整公开论文支撑的结果;"相对内部变化"为定性归纳,引用处为定量来源。)

§8 基准性能与生态

§8.1 排行榜(CID 关系抽取)

⚠️ 下表混合了 end-to-end(系统自产实体)与 gold-entity(给定金标准实体)两种口径,以及官方赛期成绩与后续学术复现——数值不可直接横向比较,仅作范式演进参考。

口径 系统 F 值 年份 关键技术 完整引用 代码
e2e(官方赛期集成) ML 集成系统 62.80 2016 多参赛系统 stacking 集成 Wei CH, Peng Y, Leaman R, Davis AP, Mattingly CJ, Li J, Wiegers TC, Lu Z. “Assessing the state of the art in biomedical relation extraction: overview of the BioCreative V chemical-disease relation (CDR) task.” Database (Oxford) 2016:baw032. DOI: 10.1093/database/baw032 —
e2e(官方赛期单系统最佳) 最佳参赛系统 57.03 2015-2016 混合式机器学习管线 同上(baw032) —
e2e BioGPT-Large 50.1 2022 生成式预训练 + 端到端微调 Luo R, Liu Y, Peng Y, Guo J, Lin C, Ju X, Sun J, Ge J, Zhang W, Sun X. “BioGPT: generative pre-trained transformer for biomedical text generation and mining.” Biomolecules 12(12):1874 (2022). DOI: 10.3390/biom12121874 https://github.com/microsoft/BioGPT
e2e GPT-3.5(175B)微调 70.0 2025 LLM 微调 arXiv:2501.14079(含同口径对比表与方差报告) —
gold-entity EoG 63.6 2019 文档级边向图神经网络 Christopoulou F, Miwa M, Ananiadou S. “Connecting the dots: document-level neural relation extraction with edge-oriented graphs.” EMNLP-IJCNLP 2019. DOI: 10.18653/v1/D19-1494 —
gold-entity ATLOP 69.9 2021 自适应阈值 + 局部化上下文池化 Zhou H, Gao T, Wang Y, Xiong D, Huang T, Qian S, Xiao C. “Document-level relation extraction with adaptive thresholding and localized context pooling.” AAAI 2021. arXiv:2010.11304 —
gold-entity GPT-3.5 zero-shot 57.43 2025 LLM 零样本 arXiv:2306.10070(LLM 生物医学信息抽取综述数据) —

NER 赛道参考成绩(BLURB 口径,官方划分测试集,F 值):BC5CDR-chemical 微调 SOTA 93.33;BC5CDR-disease 微调 SOTA 85.62(PubMedBERT,[Gu Y, Tinn R, Cheng H, et al. “Domain-specific language model pretraining for biomedical natural language processing.” Nature Machine Intelligence 3:1234-1242 (2021). DOI: 10.1038/s42256-021-00359-1]);GPT-4 zero-shot chemical 74.43 / one-shot 82.07(arXiv:2306.10070)。

同口径补充:在 arXiv 2501.14079 的受控对比中,gold-entity 口径下还有 HTG 69.4、BioREx 70.6 等后续工作被统一复评,其"ours"方法达 71.4——该文同时提醒:部分早期对比工作使用的预处理语料中 CID 实体被特定排序,会影响 entity-pair 矩阵类方法的可比性,这再次印证 §8.3 的口径纪律。

§8.2 SOTA 总结与选型建议

  • 要最快可用:PubMedBERT/BioBERT + gold-entity 关系头(ATLOP 结构),单卡一天内可到接近 70 的 gold-entity F 值水平。
  • 要端到端产品能力:先认清 e2e 成绩天花板(历史最佳集成 62.80),NER 误差传播是主要损失源——把 NER 与 RE 分开优化、分开汇报。
  • 要 LLM 方案:零样本已接近 2015 年赛期最佳(57.43 vs 57.03),但微调小模型在 gold-entity 口径仍领先;生产上推荐"LLM 召回 + 微调模型复核"的混合架构。
  • 不要做:把不同口径数字混排成"进步曲线"(坑点 5);在公开 test 上反复选型后宣称泛化能力(坑点 7)。

范式演进脉络:2015 年赛期最佳(e2e CID 57.03)→ 深度学习文档图时代(EoG 63.6,gold-entity)→ PLM 时代(ATLOP 69.9)→ LLM 时代(零样本 57.43、微调 70.0)。gold-entity 口径十年提升约 6-13 个点,而 e2e 口径受 NER 瓶颈制约,官方集成纪录(62.80)至今少有公开工作以完全同口径打破——评估 CID 抽取的"真实进步"必须回到同口径、同划分的受控比较。

团队选型路径建议:先用 ATLOP + PubMedBERT 组合在官方划分上建立内部基线(gold-entity 口径),再做 LLM 对比实验;涉及 e2e 部署时把 NER 与 RE 分阶段验收,避免"整体一锅测"掩盖组件退化。

§8.3 评测协议

官方协议要点:测试集 500 篇仅在最终评测阶段使用;实体成绩按五元组(PMID+偏移+类型+概念 ID)严格匹配;CID 关系按概念对(PMID+化学物 ID+疾病 ID)文档级聚合;两任务均报告精确率/召回率/F 值;赛期另要求系统提供 web service(平均响应 DNER 5.6 秒、CID 9.3 秒,Wei et al., 2016)。官方脚本随语料分发(§6.2),社区复现请以官方脚本为口径锚点。输出形式上,实体以(偏移、类型、MeSH ID)列表提交,关系以概念对列表提交,全部经官方脚本评分;赛期 5.6/9.3 秒的在线响应要求也提示后续使用者:该任务的部署成本主要在模型推理延迟,而非数据规模。

数据集 关系 说明
NCBI Disease 前身/姊妹 同为 NCBI Lu 组构建的疾病 NER 语料,BC5CDR 的疾病标注方法与其一脉相承
NLM-Chem 后继 BioCreative VII 全文化学实体语料,检验摘要→全文迁移
CDR sample set 子集 50 篇示例,随赛早期发布,适合作解析器单元测试夹具
ChemProt / DDI 平行 化学-蛋白 / 药药关系语料,构成生物医学 RE 三大件
CTD 上游知识库 CID 关系标注协议与知识来源,模型输出可直接与其增量对照
EU-ADR 早期对照 300 篇全文、句级药物-疾病关联,BC5CDR 论文对比表的主要对象
BioCreative VI CHEMPROT 平行任务 化学-蛋白关系挑战赛语料,任务设计沿袭 BioCreative 传统

§8.5 关键论文 Top 10

  1. Li J, Sun Y, Johnson RJ, Sciaky D, Wei CH, Leaman R, Davis AP, Mattingly CJ, Wiegers TC, Lu Z. “BioCreative V CDR task corpus: a resource for chemical disease relation extraction.” Database (Oxford) 2016:baw068. DOI: 10.1093/database/baw068 —— 语料本体论文:构建协议、IAA、三段统计的权威出处。
  2. Wei CH, Peng Y, Leaman R, Davis AP, Mattingly CJ, Li J, Wiegers TC, Lu Z. “Assessing the state of the art in biomedical relation extraction: overview of the BioCreative V chemical-disease relation (CDR) task.” Database (Oxford) 2016:baw032. DOI: 10.1093/database/baw032 —— 赛期 34 队评测总览与官方基线成绩。
  3. Gu Y, Tinn R, Cheng H, et al. “Domain-specific language model pretraining for biomedical natural language processing.” Nature Machine Intelligence 3:1234-1242 (2021). DOI: 10.1038/s42256-021-00359-1 —— BLURB 基准与 PubMedBERT,确立 BC5CDR 在 PLM 时代的评测地位。
  4. Luo R, et al. “BioGPT: generative pre-trained transformer for biomedical text generation and mining.” Biomolecules 12(12):1874 (2022). DOI: 10.3390/biom12121874 —— 生成式模型端到端 CID 抽取的代表成绩。
  5. Lee J, Yoon W, Kim S, Kim D, Kim S, So CH, Kang J. “BioBERT: a pre-trained biomedical language representation model for biomedical text mining.” Bioinformatics 36(4):1234-1240 (2020). DOI: 10.1093/bioinformatics/btz682 —— 生物医学 PLM 时代的开启者之一,BC5CDR 是其核心评测集。
  6. Zhou H, et al. “Document-level relation extraction with adaptive thresholding and localized context pooling.” AAAI 2021. arXiv:2010.11304 —— 文档级 RE 通用强基线 ATLOP。
  7. Christopoulou F, Miwa M, Ananiadou S. “Connecting the dots: document-level neural relation extraction with edge-oriented graphs.” EMNLP-IJCNLP 2019. DOI: 10.18653/v1/D19-1494 —— 文档图方法 EoG,处理跨句关系的代表路线。
  8. Leaman R, Wei CH, Lu Z. “dNorm: disease name normalization with pairwise learning to rank.” Bioinformatics 29(22):2909-2917 (2013). DOI: 10.1093/bioinformatics/btt474 —— 语料标注所用疾病预标注引擎的方法论文。
  9. Wei CH, Kao HY, Lu Z. “PubTator: a web-based text mining tool for assisting biocuration.” Nucleic Acids Research 41(W1):W518-W522 (2013). DOI: 10.1093/nar/gkt441 —— 标注平台与数据格式之源。
  10. Davis AP, et al. “The Comparative Toxicogenomics Database: update 2017.” Nucleic Acids Research 45(D1):D972-D978 (2017). DOI: 10.1093/nar/gkw838 —— CID 关系知识源头与语料分发渠道的官方说明。

§8.6 社区活跃度

  • 学术引用:841+(PlumX 聚合,截至 2026-09),十年间持续出现在新论文的实验表中。
  • HF 生态:tner/bc5cdr 月下载 893 次(截至 2026-09 检索),15 个下游模型在其上训练发布(modeldatabase 统计)。
  • GitHub:JHnlp 镜像仓库 26 stars(截至 2026-09),承担官方站失效后的分发职能;多个课程与教程(如 snorkel 教程)以它为教学语料。
  • 会议线:BioCreative 系列挑战赛(V→VII)延续其任务设计,BLURB 与各家 LLM 论文保持其评测惯性。
  • 教程覆盖:snorkel 官方教程以其为演示语料,多篇 NLP 课程将其作为文档级关系抽取的教学案例。

§8.7 生态快照

资源 类型 链接 Star/热度(截至 2026-09) 推荐理由
bigbio/bc5cdr HF 数据集 https://huggingface.co/datasets/bigbio/bc5cdr —(HF 数据集仓库) load_dataset 直读官方 zip,source/bigbio 双 schema
tner/bc5cdr HF 数据集 https://huggingface.co/datasets/tner/bc5cdr 月下载 893 句级 NER 即取即用,适合 transformers 快速实验
JHnlp/BioCreative-V-CDR-Corpus GitHub 镜像 https://github.com/JHnlp/BioCreative-V-CDR-Corpus 26 stars 官方站失效时的可信镜像,含官方评测脚本包
BioGPT GitHub 模型 https://github.com/microsoft/BioGPT 微软官方 端到端 CID 抽取的可复现起点
PubTator 在线标注/查看工具 https://www.ncbi.nlm.nih.gov/CBBresearch/Lu/Demo/PubTator/ — 无需本地解析即可浏览语料标注
BioCreative 官网任务页 官方页面 http://www.biocreative.org/tasks/biocreative-v/track-3-cdr/ — 任务定义与标注指南的原始出处(可达性见坑点 4)

生态总体判断:BC5CDR 的"工具生态"分散在官方(评测脚本)、学术社区(bigbio/tner 预处理)与模型仓库(BioGPT 等)三层,没有统一的官方分发渠道——这既是公共领域老牌语料的常态,也是本页 §6 代码存在的意义:把三层粘合成一条可复现链路。

§9 相关资源与引用

§9.1 官方资源清单

§9.2 BibTeX 引用块

@article{li2016biocreative,
  author  = {Li, Jiao and Sun, Yueping and Johnson, Robin J. and Sciaky, Daniela and
             Wei, Chih-Hsuan and Leaman, Robert and Davis, Allan Peter and
             Mattingly, Carolyn J. and Wiegers, Thomas C. and Lu, Zhiyong},
  title   = {BioCreative {V} {CDR} task corpus: a resource for chemical disease relation extraction},
  journal = {Database},
  volume  = {2016},
  pages   = {baw068},
  year    = {2016},
  doi     = {10.1093/database/baw068}
}

@article{wei2016assessing,
  author  = {Wei, Chih-Hsuan and Peng, Yifan and Leaman, Robert and Davis, Allan Peter and
             Mattingly, Carolyn J. and Li, Jiao and Wiegers, Thomas C. and Lu, Zhiyong},
  title   = {Assessing the state of the art in biomedical relation extraction:
             overview of the {BioCreative V} chemical-disease relation ({CDR}) task},
  journal = {Database},
  volume  = {2016},
  pages   = {baw032},
  year    = {2016},
  doi     = {10.1093/database/baw032}
}

§9.3 引用指南

  • 使用语料本体(数据/标注):引 Li et al. 2016(baw068)。
  • 使用赛期成绩或任务设计:加引 Wei et al. 2016(baw032)。
  • 使用 PubTator 格式或平台:加引 Wei et al. 2013(PubTator)。
  • 使用 tner/bigbio 预处理版:在自引之外注明对应 HF 仓库版本号,避免把预处理差异归咎于原语料。
  • 使用官方成绩(62.80/57.03/86.46 等):引 Wei et al. 2016(baw032),并注明该成绩为赛期系统在其当时环境取得,与今日模型对比须声明口径差异。

§10 AI 使用声明卡

§10.1 本页面使用的 AI 模型

用途 模型/工具
资料检索与汇总 CodeBuddy(fast-model)
正文撰写与代码生成 CodeBuddy(fast-model)

§10.2 AI 参与范围

AI 负责检索核实公开资料、组织章节结构、撰写正文与示例代码;所有规模数字、成绩与协议描述均标注原始来源,检索与核验记录沉淀于同目录 FACTS.md;人工负责医学与数据工程交叉审核(见 §0)以及最终发布决定。

§10.3 输入来源列表

  1. Li J, Sun Y, Johnson RJ, Sciaky D, Wei CH, Leaman R, Davis AP, Mattingly CJ, Wiegers TC, Lu Z. BioCreative V CDR task corpus: a resource for chemical disease relation extraction. Database (Oxford) 2016:baw068. DOI: 10.1093/database/baw068
  2. Wei CH, Peng Y, Leaman R, Davis AP, Mattingly CJ, Li J, Wiegers TC, Lu Z. Assessing the state of the art in biomedical relation extraction: overview of the BioCreative V chemical-disease relation (CDR) task. Database (Oxford) 2016:baw032. DOI: 10.1093/database/baw032
  3. Gu Y, Tinn R, Cheng H, et al. Domain-specific language model pretraining for biomedical natural language processing. Nature Machine Intelligence 3:1234-1242 (2021). DOI: 10.1038/s42256-021-00359-1
  4. Luo R, Liu Y, Peng Y, et al. BioGPT: generative pre-trained transformer for biomedical text generation and mining. Biomolecules 12(12):1874 (2022). DOI: 10.3390/biom12121874
  5. Lee J, Yoon W, Kim S, et al. BioBERT: a pre-trained biomedical language representation model for biomedical text mining. Bioinformatics 36(4):1234-1240 (2020). DOI: 10.1093/bioinformatics/btz682
  6. Zhou H, Gao T, Wang Y, et al. Document-level relation extraction with adaptive thresholding and localized context pooling. AAAI 2021. arXiv:2010.11304
  7. Christopoulou F, Miwa M, Ananiadou S. Connecting the dots: document-level neural relation extraction with edge-oriented graphs. EMNLP-IJCNLP 2019. DOI: 10.18653/v1/D19-1494
  8. Leaman R, Wei CH, Lu Z. dNorm: disease name normalization with pairwise learning to rank. Bioinformatics 29(22):2909-2917 (2013). DOI: 10.1093/bioinformatics/btt474
  9. Wei CH, Kao HY, Lu Z. PubTator: a web-based text mining tool for assisting biocuration. Nucleic Acids Research 41(W1):W518-W522 (2013). DOI: 10.1093/nar/gkt441
  10. Davis AP, Grondin CJ, Johnson RJ, et al. The Comparative Toxicogenomics Database: update 2017. Nucleic Acids Research 45(D1):D972-D978 (2017). DOI: 10.1093/nar/gkw838
  11. Islamaj Dogan R, Murray GC, Névéol A, Lu Z. NCBI disease corpus: a resource for disease name recognition and concept normalization. Journal of Biomedical Informatics 47:1-10 (2014). DOI: 10.1016/j.jbi.2013.12.007
  12. Islamaj Dogan R, Wei CH, Lu Z. NLM-Chem-BC7: manually annotated full-text resources for chemical entity annotation and indexing in biomedical articles. Database (Oxford) 2022:baac102. DOI: 10.1093/database/baac102
  13. Wang Z, Kim H, Krolla D, et al. Knowledge-augmented pre-trained language models for biomedical relation extraction. BMC Bioinformatics (2025). DOI: 10.1186/s12859-025-06262-6
  14. 生物医学 LLM 评测综述数据(含 BLURB 成绩汇总与 LLM 零样本成绩):arXiv:2306.10070
  15. 文档级 RE 同口径对比与 LLM 微调成绩:arXiv:2501.14079
  16. JHnlp/BioCreative-V-CDR-Corpus 镜像仓库 README(PubTator 格式定义与官方站失效说明):https://github.com/JHnlp/BioCreative-V-CDR-Corpus
  17. bigbio/bc5cdr 与 tner/bc5cdr 数据卡(预处理版本统计与许可标注):https://huggingface.co/datasets/bigbio/bc5cdr、https://huggingface.co/datasets/tner/bc5cdr

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§2 医学背景(ICD-11/SNOMED 映射) 千方病案医学编辑部 逐条对照 UMLS/官方编码库核查 ✅ 已通过/已验证
§3 数据规格与 §4 数据结构(全部数字) 千方病案医学编辑部 对照原始论文 Table 2 与数据卡逐项核对 ✅ 已通过/已验证
§6 预处理与 DataLoader 代码 医疗 AI 数据工程师 于官方语料样例上执行验证 ✅ 已通过/已验证
§7 质量评估与 DAIMS 自评 医疗 AI 数据工程师 24 项逐项复核 ✅ 已通过/已验证
§8 基准成绩与引用完整性 千方病案医学编辑部 对照原始论文与 DOI 逐条核验 ✅ 已通过/已验证
§9 引用与 §10 来源清单 千方病案医学编辑部 DOI 与 PMID 逐条回查 ✅ 已通过/已验证

§10.5 AI 生成章节标注

本页正文由 AI 辅助生成(见 §10.2),经 §10.4 所列人工审核后发布;§0 三段免责声明为站点固定文本。

§10.6 最后人工审核

最后人工审核日期:2026-09-05(与 §0 审核日期一致)。

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


相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • biored — 共享标签:医疗NLP / 生物医学文献 / 关系抽取 / 命名实体识别
  • genia — 共享标签:医疗NLP / 生物医学文献 / 关系抽取 / 命名实体识别
  • ncbi-disease — 共享标签:医疗NLP / 生物医学文献 / 命名实体识别
  • jnlpba — 共享标签:医疗NLP / 生物医学文献 / 命名实体识别
  • pubtator-central — 共享标签:医疗NLP / 生物医学文献 / 关系抽取 / 命名实体识别
  • medmentions — 共享标签:医疗NLP / 生物医学文献 / 命名实体识别
  • radgraph — 共享标签:医疗NLP / 关系抽取 / 命名实体识别
  • thyme — 共享标签:医疗NLP / 关系抽取 / 命名实体识别
  • chemprot — 共享标签:医疗NLP / 生物医学文献 / 关系抽取
  • maccrobat — 共享标签:医疗NLP / 生物医学文献 / 命名实体识别

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集