CHEMDNER — 化学实体识别与药物发现文本挖掘 AI-Ready Wikipedia

10,000 篇摘要、84,355 个化学实体标注的化学 NER 基准

来源 BioCreative(CNIO 结构计算生物学组等) url: http://www.biocreative.org/resources/biocreative-iv/chemdner-corpus/发布时间: 2026-09-16最后更新: 2026-09-25 阅读 42
CHEMDNER — 化学实体识别与药物发现文本挖掘 AI-Ready Wikipedia

信息速览

数据集名称CHEMDNER — 化学实体识别与药物发现文本挖掘 AI-Ready Wikipedia
数据类型10,000 篇 PubMed 摘要,84,355 个化学实体提及,19,805 个唯一化学实体,约 14 MB 英文文本,开放获取
规模不适用(公开文献摘要语料,无患者数据)
接入方式BioCreative(CNIO 结构计算生物学组等) url: http://www.biocreative.org/resources/biocreative-iv/chemdner-corpus/
AI 就绪度

数据集封面

CHEMDNER — 化学实体识别与药物发现文本挖掘 AI-Ready Wikipedia


INFOBOX

数据集名称 CHEMDNER
英文全称 The CHEMDNER corpus of chemicals and drugs(BioCreative IV Chemical and Drug Mention Recognition)
别名/简称 CHEMDNER corpus、BioCreative IV CHEMDNER、CHEMDNER challenge corpus
疾病分类 不适用(文献标注语料,无患者诊断维度;下游药物发现场景涉及肿瘤 ICD-11:2A00-2F9Z 等章节,见 §2.1)
SNOMED CT 不适用(非临床编码语料;化学实体可经 ChEBI/PubChem/UMLS 映射至 105576004 Substance、373873005 Pharmaceutical / biologic product 等类目,见 §2.1b)
数据模态 英文科学文献文本(标题 + 摘要),化学实体 span 与类别标注
AI 任务类型 命名实体识别(CEM,chemical entity mention recognition)、文档级化学索引(CDI,chemical document indexing)
样本总数 10,000 篇 PubMed 摘要 / 84,355 个化学实体提及 / 19,805 个唯一化学名
数据大小 约 14 MB(13,947,379 字符 / 2,199,757 词元,未压缩)
数据格式 纯文本 + TSV 标注;BioC XML(v2 镜像)
许可证 开放获取(论文 CC BY 4.0;语料经 BioCreative 官方页免费发布,无显式许可文件)
访问级别 开放(无注册、无申请门槛)
DUO 标签 NRES(无限制,公开文献数据)
语言 英语
首发日期 2013(BioCreative IV 挑战数据发布);2015-01-19 语料论文正式发表
最后更新 2021(BioC v2 语料随 BioCreative VII NLM-Chem 任务复核发布)
发布机构 西班牙国家癌症研究中心(CNIO)结构计算生物学组(Martin Krallinger、Alfonso Valencia)等 19 国 53 位作者联合署名
官方主页 http://www.biocreative.org/resources/biocreative-iv/chemdner-corpus/
下载地址 NCBI FTP BioC v2 / BioCreative 官方资源页
DOI 10.1186/1758-2946-7-S1-S2(语料论文)/ 10.1186/1758-2946-7-S1-S1(挑战概述论文)
引用次数 451+(SciSpace 学术语聚合计数,截至 2026-09;ResearchGate 同期显示 325+)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方三分划分 + 评估脚本 + 标注指南齐备、两种格式可选;扣分项:原生 TSV/BioC 需自行解析、无官方 PyTorch/HuggingFace 官方适配(社区镜像除外)、银标准与团队预测易与金标准混淆
页面状态 published

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

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(药物发现文本挖掘背景、ICD-11/SNOMED 映射)、§7 偏倚分析。

数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。CHEMDNER 语料经 BioCreative 官方资源页免费公开发布,语料论文与标注指南采用 CC BY 4.0 许可,使用时应引用原始论文(见 §9)。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 30 秒速览

这是什么? CHEMDNER 是 BioCreative IV(2013-2014 年第四届生物文献挖掘社区挑战赛)发布的化学与药物名称识别黄金标准语料库:10,000 篇覆盖各主要化学学科的 PubMed 摘要,由受训化学文献策展人逐词人工标注出 84,355 个化学实体提及,并按 SACEM 体系分为缩写、家族、分子式、标识符、多重、系统命名、俗名七个类别(Krallinger et al., 2015)。

为什么重要? 从海量文献中自动找到化学名与药物名,是药物发现、毒理筛选和知识库构建的第一步,而这一步长期缺乏大规模、高质量的人工标注基准。CHEMDNER 以 91% 的标注者一致性和 27 支国际团队的公开竞赛,第一次系统量化了"机器识化学品"这一任务的难度上限:最佳系统 F 值 87.39%(CEM)/ 88.20%(CDI),至今仍是化学 NER 的关键参照系(PubMed 25810766)。

我能用它做什么? 训练化学命名实体识别模型(CRF 到 BioBERT 均可);构建文档级化学索引为文献策展做初筛;为化学语言模型提供微调语料;或将标注映射到 ChEBI/PubChem 做知识库链接。数据完全开放下载,无注册门槛,训练/开发/测试三分划分开箱即用。

§1.1 技术摘要

CHEMDNER 语料由西班牙国家癌症研究中心(CNIO)结构计算生物学组牵头,联合马德里理工大学、纳瓦拉大学 CIMA 等 19 国 53 位研究者构建(ResearchGate 论文页)。构建流程分四步:首先从 PubMed 检索"近期发表"且覆盖各主要化学学科的摘要,抽得 10,000 篇;其次由受过专门训练的化学文献策展人按任务专属标注指南,穷尽式标注每个可链接到化学结构的名称(排除蛋白等大分子与极泛化化学术语);再次为每个提及赋予 SACEM 类别并做标注者一致性研究,得 91% 的百分比一致性;最后将语料随机切分为训练 3,500 / 开发 3,500 / 测试 3,000 三份,配合 BioCreative 官方评估脚本以 micro-averaged F 值对外发布。挑战采用四阶段推进(预发布→训练→开发→测试),测试期禁止任何人工干预,仅接受全自动预测(J Cheminform 7(S1):S1)。

除金标准外,发布包还包含 26 支参赛队伍在 3,000 篇测试摘要上的自动预测(供错误分析)、17,000 篇随机 PubMed 摘要的银标准自动标注(供弱监督)以及 BioC XML 格式版本(db.cngb 文献镜像)。2021 年,BioCreative VII NLM-Chem 任务对语料做了复核并以 BioC v2 格式重新发布,成为当前最便于程序化获取的镜像。

§1.2 战略价值

维度一:化学 NER 的"难度标尺"。 化学名表达极度多样——系统命名(IUPAC)、俗名、缩写、分子式、数据库标识符、非连续提及并存,同一实体还常与日常词汇重叠。CHEMDNER 用 84,355 个提及、七类 SACEM 标注把这个多样性首次变成可量化对象:人类专家一致性 91%,最佳机器 87.39%-88.20%,两者之间的差距即为后续十年的算法进步空间。任何新化学 NER 方法都可以在此语料上与这条标尺对齐,避免"自建测试集自说自话"。

维度二:药物发现管线的第一公里。 文献仍是化学结构与生物活性信息最大的非结构化来源,而化学实体识别是药物-靶点关系抽取、毒性信号挖掘、知识图谱填充等下游任务的前置步骤。CHEMDNER 提供的文档级(CDI)与提及级(CEM)双层标注,恰好对应文献策展工作流中的"选文"与"抽取"两个环节,可直接服务于药企与数据库团队(如 CTD 类策展机构)的自动化改造(BioCreative-IV virtual issue)。

维度三:跨代模型的公共考场。 从 2015 年的混合 CRF + 词聚类系统,到今天的 BioBERT/PubMedBERT 微调,CHEMDNER 因划分固定、评估脚本公开、结果可复现,成为少有的能横向比较"规则时代 vs 深度学习时代"的语料。其 2021 年 BioC v2 复核版又保证了与 BioC 生态工具链的兼容,工程接入成本低。

§1.3 同类数据集横向对比

数据集 规模 文本类型 标注对象 与 CHEMDNER 的差异
CHEMDNER 10,000 篇摘要 / 84,355 提及 PubMed 摘要(英文) 化学实体(SACEM 七类) 规模最大、类别体系最细、附官方竞赛排名
BC5CDR 1,500 篇(500 train/500 dev/500 test) PubMed 摘要(英文) 化学品 + 疾病 + 化学品-疾病关系 规模小一个量级,但增加疾病实体与关系层
CHEMDNER patents(BC V) 21,000 条专利摘要(14,000 全标注) 药物化学专利摘要 化学实体(CEMP)+ 基因/蛋白(GPRO) 同一团队方法学在专利域的延伸,文本更难
NLM-Chem(BC VII) 5,000 篇全文(150 篇金标准精标) PMC 全文 化学实体(链接 MeSH) 从摘要走向全文,语料 v2 与 CHEMDNER 同源
JNLPBA 2,400 篇摘要 PubMed 摘要(英文) 基因/蛋白等生物实体 实体类型侧重生物分子而非化学品

§1.4 版本时间轴

时间 版本/事件 说明
2013 BioCreative IV Track 2 启动 CHEMDNER 挑战立项,发布标注指南与样本集
2013-2014 挑战四阶段推进 预发布 → 训练(3,500 篇)→ 开发(3,500 篇)→ 测试(3,000 篇盲测),27 支团队提交
2015-01-19 两篇论文同刊发表 挑战概述(S1,doi:10.1186/1758-2946-7-S1-S1)与语料标注原则(S2,doi:10.1186/1758-2946-7-S1-S2)
2015 BioCreative V CHEMDNER patents 专利版延伸:21,000 条药物化学专利摘要,CEMP/CPD/GPRO 三子任务
2016 Markyt 平台上线 Database 期刊论文(doi:10.1093/database/baw120),支持赛后持续自测与可视化比对
2021 BioC v2 复核发布 BioCreative VII NLM-Chem 任务将语料以 v2 BioC 格式置于 NCBI FTP,成为主要程序化获取渠道

§1.5 典型应用场景

  1. 化学 NER 模型训练与基准评测:用训练/开发集微调 BioBERT、PubMedBERT 或 CRF 基线,在 3,000 篇测试摘要上以官方脚本计算 micro-F,与 87.39%/88.20% 的竞赛标杆对齐。
  2. 文献策展自动初筛(CDI 场景):对海量新入库 PubMed 文献做文档级化学相关性排序,将人工策展的阅读量压缩数十倍(BioCreative IV 中 CTD 策展协作即为此设计)。
  3. 药物发现知识库填充:将识别出的化学名经 ChEBI/PubChem 归一化后,作为药物-基因、药物-疾病关系抽取系统的前置实体层。
  4. 化学语言模型预训练/微调语料:SACEM 七类标签可用于训练区分俗名/系统名/分子式的多任务识别头,提升化学预训练模型的实体感知能力。
  5. 弱监督与半监督研究:利用 17,000 篇银标准摘要做自训练、伪标签或 distant supervision 实验(注意银标准含自动提取噪声,见坑点 6)。

§1.6 何时不适合使用本数据集

以下场景请另择数据集或补充配套资源,避免"拿锤子找钉子":

  1. 需要疾病实体或化学-疾病关系:CHEMDNER 只有化学实体层,疾病标注与关系抽取请用 BC5CDR。
  2. 需要化学结构或实体 ID:语料不含 mol/sdf 结构文件与 ChEBI/PubChem ID,归一化需自建管线(见 §4.5)。
  3. 需要全文或专利语境:语料仅有标题与摘要两段,全文场景见 NLM-Chem(BC VII),专利场景见 CHEMDNER patents(BC V)。
  4. 需要非英语或多语言能力:语料 100% 英语,跨语言评测需另建目标语言测试集。
  5. 临床决策直接落地:摘要域模型不能未经独立验证就用于病历文本(见 §7.3 与 §0 免责声明)。

§2 医学背景

§2.1 语料应用域与 ICD-11 映射

CHEMDNER 本身是化学实体标注语料,不含疾病或诊断标签;其医学价值体现在下游——识别出的药物与化学品名用于构建药物-疾病证据链。下表给出语料高频下游应用所涉及的疾病主题及 ICD-11 对应,供团队建立"语料→医院术语体系"的翻译层参考(语料对疾病主题无排他覆盖,映射为应用场景级而非标注级)。

下游应用疾病主题 ICD-11 编码 ICD-11 中文名
抗肿瘤药物文献挖掘(语料高频药物类) 2A00-2F9Z 原发于特定部位的恶性肿瘤及肿瘤章节整体
抗感染药物筛选 1A00-1H0Z 感染性疾病章节整体
心血管药物重定位 BA00-BE2Z 循环系统疾病章节整体
呼吸系统用药证据挖掘 CA00-CB7Z 呼吸系统疾病章节整体

§2.1b SNOMED CT 映射

化学实体归一化建议经 ChEBI 或 PubChem 完成(语料原生不提供实体 ID),下表为化学品/药品在 SNOMED CT 中的顶层类目锚点,便于把识别结果接入医院术语体系。

语料实体范畴 词表来源 SNOMED CT 码 SNOMED 术语
一般化学物质(FORMULA/SYSTEMATIC 提及常见归一目标) SNOMED CT 子类目 105576004 Substance(物质)
药品/生物制品 SNOMED CT 子类目 373873005 Pharmaceutical / biologic product(药品/生物制品)
具体药物产品 SNOMED CT 子类目 763158003 Medicinal product(药物产品)

(SNOMED/ICD-11 映射需经 UMLS 交叉词表或 ChEBI-PubChem 管线完成,上表为顶层类目锚点,用于建立"化学名→临床术语"的翻译层。)

§2.2 医学背景简介:为什么要在文献里找化学品

新化学实体的首次描述几乎都发生在文献中:药化论文报告新合成的候选分子,毒理学论文报告环境化学物暴露效应,临床药理论文报告药物反应。CATHY/ChEMBL/CTD 等知识库的每一个条目,源头都是人工阅读并抽取的文献句子——这个过程极为昂贵。化学实体识别(chemical entity recognition, CER)就是用 NLP 把"文献句子→化学品名"这一步自动化的技术,它是药物发现文本挖掘的第一公里:只有先准确找到"这个句子里在说哪个化合物",后续的药物-靶点、药物-不良反应、构效关系抽取才有可靠的输入。

医学层面,CER 的价值链延伸至真实临床问题:药物警戒系统靠它从病例报告文献中捕捉未知的药物不良事件;精准医学知识库靠它把基因变异与靶向药物关联;公共卫生监测靠它追踪新精神活性物质的出现。CHEMDNER 把这条链路的第一环变成了可训练、可评测的标准任务。

从证据经济学看,人工文献策展需要逐句精读,成本随文献量线性增长,而数据库每年的新增文献远超人工阅读能力上限。CHEMDNER 的 10,000 篇摘要中有 8,301 篇(83.0%)至少提及一个化学品,意味着文献流中化学信息密度极高——自动初筛的收益随文献量线性放大,这正是 CDI 任务与 CTD 类策展机构工作流直接挂钩的根本原因。

§2.3 任务定义与临床/研究工作流位置

CHEMDNER 定义了两个互补任务,对应文献策展工作流的两个环节:

任务 全称 输出粒度 对应工作流环节 竞赛最佳成绩
CEM Chemical Entity Mention recognition 提及级:字符偏移 span 从选中文献中逐个抽取化学名 F 87.39%
CDI Chemical Document Indexing 文档级:化学名 + 排序 在海量文献中挑选化学相关文献并排序 F 88.20%

两个任务的提交格式均为"PMID + 化学名或偏移 + 排名 + 置信度"四列(CEM 偏移形如 T:start:end 或 A:start:end,分别以标题、摘要段为参照),评估采用 micro-averaged 精确率/召回率/F 值,且只计精确匹配——部分重叠按错误处理。在临床证据合成(如系统综述的文献筛选)中,CDI 等价于一个"化学相关性检索器";在知识库生产中,CEM 是实体链接的前置层。

自行复现时的实用建议:直接用官方评估脚本读取同一提交格式,而不是自造解析器——四列制式中排名与置信度列的语义在官方文档中有明确定义,自造解析最容易在"同分排序""空置信度"等边角引入口径偏差。

§2.4 语料覆盖画像

本数据集无患者人群维度,以下为文献覆盖画像(详见 §3.2)。

维度 取值
文本来源 PubMed 收录学术期刊摘要
语言 英语
期刊覆盖 203 种(训练 193 / 开发 188 / 测试 188)
学科覆盖 各主要化学学科(多学科化学、药物化学、生物化学等)分层抽样
文本规模 13,947,379 字符 / 2,199,757 词元
时间特征 语料冻结于 2013-2014 年(挑战期),2021 年 BioC v2 复核

§2.5 临床与研究价值

对临床研究机构,CHEMDNER 支撑两类高价值工作流:其一,系统综述与证据图谱的文献初筛——CDI 模型可以把"提到任何化学/药物实体"的文献自动排序,配合疾病实体识别器(如 BC5CDR 训练的模型)形成双轴筛选,显著压缩人工阅读量;其二,药物安全信号检测——先以 CEM 抽出病例报告中的暴露药物,再交给下游关系抽取模型判断药物-不良事件关联,是 FAERS 文献佐证链条的自动化路径。对药企,该语料训练的模型可接入专利监控管线(结合 CHEMDNER patents 专利版语料),追踪竞争对手的新化合物披露。从预算视角,CHEMDNER 训练的初筛模型在策展工作流中的角色是"把人工全读压缩为人工复核",其收益可粗估为:文献量 × 化学相关率 ×(精读成本 − 复核成本),该框架可直接用于立项测算。

§2.6 金标准标注体系

维度 内容
标注对象 摘要中所有可链接到化学结构的名称(排除蛋白等大分子、极泛化化学术语,另设小停用词表)
标注方式 人工穷尽式标注(提及 span + SACEM 类别双层)
标注者 受训化学文献策展人(expert chemistry literature curators,具备文献策展经验的化学专业人士)
质量控制 标注者间一致性研究:percentage agreement 91%
标注类别 SACEM 七类:ABBREVIATION / FORMULA / IDENTIFIER / MULTIPLE / SYSTEMATIC / TRIVIAL / FAMILY(另有 113 个 NO CLASS 残留提及)
发布形态 训练 3,500 / 开发 3,500 / 测试 3,000(随机切分),附官方评估脚本

§2.7 化学命名的语言学多样性:任务难度的根源

化学名识别难在"同一个分子有七种合法写法"。SACEM 七类正是对这种多样性的分类学,下表以通用化学示意(非语料原文摘录)说明每类的形态特征与识别难点:

SACEM 类别 示意写法 识别难点
TRIVIAL aspirin、titanium dioxide 与日常词汇同形,需上下文消歧(见坑点 3)
SYSTEMATIC N-(4-hydroxyphenyl)acetamide 长跨度、嵌套括号、连字符密集,边界易漂移(见坑点 2)
ABBREVIATION DTIC、NSAID 与普通缩写冲突,展开形式多变
FORMULA C9H8O4 字符敏感;数字/字母混淆直接破坏 span(见坑点 8 的 OCR 问题)
IDENTIFIER CAS 号、数据库 ID 模式固定但极稀有(1,824 个,占 2.2%),见坑点 5
FAMILY benzodiazepines 指向一类物质而非单个分子,是否含修饰语的边界模糊
MULTIPLE 并列列举中被连接词隔开的多个片段 非连续 span,BIO 序列无法编码(见坑点 4)

真实摘要中的化学名往往携带修饰语(盐型、水合物、立体化学前缀),官方指南据此规定了边界细则——这解释了为何在精确匹配协议下"差一个字符即为全错",也解释了人类专家自身 91% 的一致性上限:边界判定本质上存在主观灰区。


§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本 大小 理由
快速跑通 NER 基线、复现竞赛成绩 BioC v2(NCBI FTP) gzip 压缩 XML,解压约 14 MB 文本 单文件包含全量 10,000 篇与标注,BioC 工具链成熟,2021 年复核过
需要 CDI 任务官方提交格式与评估脚本 BioCreative 官方资源页原始包 约 14 MB(未压缩文本)+ 脚本 含标注指南 PDF、四阶段发布材料与官方评估脚本
PyTorch/HuggingFace 生态直接加载 Hugging Face bigbio/chemdner 镜像 加载脚本 + 自动下载 load_dataset("bigbio/chemdner") 一行接入,含 source 与 bigbio_kb 两种 schema
研究专利域迁移、构建鲁棒性测试 CHEMDNER patents(BC V,另行获取) 21,000 条专利摘要 同一标注方法学的专利域对照集,可做域适应实验

§3.1 模态详情

  • 文本模态:每条记录 = 1 篇 PubMed 摘要,含标题(T)与摘要正文(A)两段;标注偏移分别以这两段为参照基准。
  • 标注模态:提及级 span(start:end 字符偏移)+ SACEM 七类标签;文档级化学名清单(CDI 用)。
  • 语言:英语(全部摘要)。
  • 不含:全文正文、作者与机构字段、化学结构文件(mol/sdf)、实体数据库 ID(需经 ChEBI/PubChem 二次归一化)。

§3.2 按子集样本数统计

统计项 训练集 开发集 测试集 全语料
摘要数 3,500 3,500 3,000 10,000
字符数 4,883,753 4,864,558 4,199,068 13,947,379
词元数 770,855 766,331 662,571 2,199,757
含提及的摘要数 2,916 2,907 2,478 8,301
提及数(mentions) 29,478 29,526 25,351 84,355
唯一化学名数 8,520 8,677 7,563 19,805
期刊数 193 188 188 203

(数据来源:语料论文 Table 1,PMC4331692;挑战概述论文另将唯一化学名总数计为 19,806,差异源于统计口径。)

§3.3 数据格式

格式 内容 适用场景
纯文本 + TSV(官方原始包) 摘要文本 + 提及标注四列/五列 复现 CDI/CEM 官方提交与评估
BioC XML(v2) collection→document→passage→annotation 层级树 程序化解析、与 BioC 生态工具互操作
HuggingFace Arrow(社区镜像) source / bigbio_kb / bigbio_text 三种 schema datasets.load_dataset 快速接入 PyTorch

§3.4 存储大小

全语料文本约 14 MB(13,947,379 字符);BioC XML v2 单 gzip 包从 NCBI FTP 直接下载;官方原始包含指南与脚本后亦在数十 MB 量级。任何一台笔记本即可完成全量训练(详见 §6.8)。下载完成后先跑一遍 §3.12 的规模核算恒等式再开工。

§3.5 标注方式

人工穷尽式标注:受训化学策展人对每篇摘要的标题与摘要逐词检查,凡"可潜在链接到化学结构"的名称均标注 span,并赋 SACEM 类别。标注指南对"什么算化学实体"(排除蛋白等大分子、极泛化术语与停用词表内高频词)与"span 边界如何界定"做了专门规定。竞赛评估不要求预测 SACEM 类别,类别标签仅供细粒度研究使用。

§3.6 标注者资质与一致性

标注者皆为具备文献策展经验的化学专业人士(化学文献策展人),上岗前接受任务专属指南培训。一致性研究测得标注者间 percentage agreement 为 91%,该数字被官方用作机器性能的"人类上限"参照(PubMed 25810766)。全语料仍有 113 个提及未获类别(NO CLASS),体现化学名边界判定的固有模糊性。

§3.7 采集周期

摘要抽样与人工标注集中于 BioCreative IV 挑战周期(2013-2014 年);语料随挑战四阶段分批释放;2021 年经 BioCreative VII NLM-Chem 任务复核形成 BioC v2 版本。

§3.8 地域与来源覆盖

摘要选自 PubMed 收录的 203 种英文期刊,覆盖各主要化学学科(含多学科化学、药物化学、生物化学、分析化学等方向),来源期刊为国际分布;语料冻结于 2013-2014 年,不覆盖此后新发表的文献与新出现的化学实体。

§3.9 深度溯源链

PubMed 原始文献 → 学科分层抽样(10,000 篇)→ 化学策展人人工标注(SACEM 指南)→ 一致性抽检(91%)→ 随机三分切分 → BioCreative IV 四阶段发布 → 2021 年 BioC v2 复核(NCBI FTP)。每个环节均有官方论文或资源页背书,无第三方转手处理。

§3.10 标注指南要点速览

官方标注指南与语料同页分发(PDF),规定了"什么算化学实体"与"边界怎么切"两类规则,要点定性归纳如下(边界争议请以指南原文为最终依据):

  1. 纳入标准:凡可潜在链接到化学结构的名称均标注,覆盖药物、化学品、材料与化学家族名。
  2. 排除标准:蛋白/基因等生物大分子(属基因规范化任务范畴)、极泛化化学术语、停用词表内的极高频通用物质词。
  3. 边界细则:对括号修饰、盐型/水合物后缀、立体化学前缀等给出判定规则,修饰语是否并入取决于其是否属于名称本体。
  4. SACEM 赋类:按七类定义归类,无法归类者保留为 NO CLASS(全语料 113 个,见 §4.5)。
  5. 质控机制:标注者上岗培训 + 一致性抽样核查,发布指标为 91% percentage agreement。

§3.11 BioC v2 格式速查

BioC 是 NCBI 主导的文献标注交换格式,CHEMDNER v2 镜像的层级与字段语义如下:

层级 关键属性/子元素 本语料语义
collection source、date、key 语料集级元信息
document @id PMID(10,000 个文档节点)
passage infon(key=type)、@offset、text T=标题段 / A=摘要段;@offset 为该段文本基准
annotation infon(key=type)、location(@offset/@length)、text SACEM 类别 + 提及 span(相对所在 passage)

两点易错:① annotation 的 offset 相对所在 passage 而非整个 document,与官方 CEM 提交格式的段基准一致(见坑点 1);② 切片校验 passage.text[offset:offset+length] 必须等于 annotation 的 text 子元素,建议固化为解析器自检断言(见 §4.6)。

§3.12 规模数字交叉核算

拿到数据后先核对下载与解析完整性,以下恒等式全部来自官方 Table 1(PMC4331692):

  • 摘要数:3,500 + 3,500 + 3,000 = 10,000
  • 含提及摘要数:2,916 + 2,907 + 2,478 = 8,301
  • 提及数:29,478 + 29,526 + 25,351 = 84,355
  • 字符数:4,883,753 + 4,864,558 + 4,199,068 = 13,947,379
  • 词元数:770,855 + 766,331 + 662,571 = 2,199,757
  • SACEM 七类 + NO CLASS:25,610 + 19,138 + 13,118 + 12,028 + 11,935 + 1,824 + 589 + 113 = 84,355

任一恒等式不成立,即提示下载不完整或混入非官方来源(回查坑点 6、坑点 7)。


§4 数据结构

§4.0 目录树

以下为推荐的数据组织方式(以 BioC v2 为主数据源,官方原始包补充材料并置):

chemdner/
├── BC7T2-CHEMDNER-corpus-training.BioC.xml      # 训练集:3,500 篇摘要 + 金标准标注
├── BC7T2-CHEMDNER-corpus-development.BioC.xml   # 开发集:3,500 篇摘要 + 金标准标注
├── BC7T2-CHEMDNER-corpus-test.BioC.xml          # 测试集:3,000 篇摘要 + 金标准标注
├── guidelines/                                   # SACEM 标注指南(BioCreative 官方资源页分发)
├── evaluation/                                   # BioCreative 官方评估脚本(micro P/R/F)
└── team_predictions/                             # 26 支参赛队测试集自动预测(仅做错误分析用)

BioC XML 内部层级:collection → document(@id=PMID) → passage(infons: section=T/A, offset) → text + annotation(infons: type=SACEM 类别, location: offset/length)。

以下为 BioC v2 的结构示意(节点属性为教学示例值,非语料原文摘录):

<collection>
  <source>BioCreative</source>
  <document id="23380242">
    <passage offset="0">
      <infon key="type">T</infon>
      <text>标题原文</text>
    </passage>
    <passage offset="247">
      <infon key="type">A</infon>
      <text>摘要正文原文</text>
      <annotation id="1">
        <infon key="type">TRIVIAL</infon>
        <location offset="528" length="14"/>
        <text>提及原文</text>
      </annotation>
    </passage>
  </document>
</collection>

§4.1 DAIMS 字段字典

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
pmid string PubMed 文献唯一标识,BioC document @id “23380242” 主键、外部链接 PubMed 无(官方权威 ID) 无 9-10 位数字字符串
section string 提及所在段:T=标题 / A=摘要正文 “A” 偏移坐标系基准(见坑点 1) 无 无 {“T”, “A”}
passage_text string 标题或摘要原文 “Titanium dioxide nanoparticles…” 模型输入文本 无(原文照录) 无 自由文本
start int 提及起始字符偏移(相对 section 段) 528 NER 标签对齐 边界判定含 9% 人类分歧 无 [0, 段长)
length int 提及字符长度 14 与 start 共同恢复 span 同上 无 ≥1
mention_text string 提及原文串 “titanium dioxide” 归一化、词典构建 无(与 span 一致) 无 自由文本
sacem_class string SACEM 七类标签 “TRIVIAL” 多任务分类头、类别分析 113 个提及为 NO CLASS “NO CLASS”(不删)
split string 官方划分(从文件名推断) “train” 复现官方协议 无 无

§4.2 标签分布(SACEM 七类)

SACEM 类别 定义 训练集 开发集 测试集 全语料 占比
TRIVIAL 俗名、通用名与商品名 8,832 8,970 7,808 25,610 30.4%
SYSTEMATIC IUPAC 系统命名 6,656 6,816 5,666 19,138 22.7%
ABBREVIATION 化学名缩写与首字母词 4,538 4,521 4,059 13,118 15.6%
FORMULA 分子式 4,448 4,137 3,443 12,028 14.3%
FAMILY 有明确结构的化学家族名 4,090 4,223 3,622 11,935 14.1%
IDENTIFIER 化学数据库标识符 672 639 513 1,824 2.2%
MULTIPLE 非连续提及 202 188 199 589 0.7%
NO CLASS 未赋类别残留 40 32 41 113 0.1%

(来源:PMC4331692 Table 1,占比为全语料提及数计算所得。)

§4.3 关键统计

  • 平均每篇摘要约 8.4 个化学提及;含至少一个提及的摘要占 83.0%(8,301/10,000)。
  • 唯一化学名 19,805 个,平均每个化学名出现约 4.3 次,长尾显著(高频名如 titanium dioxide 类俗名反复出现,多数名仅出现 1-2 次)。
  • 测试集 25,351 个提及、7,563 个唯一化学名,规模与训练/开发集同量级,官方竞赛即在此三分之二的划分上评测。
  • 七类标签分布极不均衡:最常见 TRIVIAL(25,610)与最罕见 IDENTIFIER(1,824)相差约 14 倍。
  • 全语料 13,947,379 字符折合平均每篇约 1,395 字符(13,947,379 / 10,000),属短文本 NER 场景,512 token 窗口几乎不构成截断约束。

§4.4 数据层级

语料(10,000 篇)
└── 文档 document(PMID 级)
    └── 段落 passage(T 标题 / A 摘要正文)
        └── 提及 annotation(字符偏移 span + SACEM 类别)
            └── (可选)归一化目标:ChEBI / PubChem 实体 ID(需自行链接)

与患者数据四级层级(患者→检查→序列→切片)不同,本文本语料的核心推理单元是"提及",跨文档的实体同一性(同一化学名的多次提及)需要使用者通过字符串匹配或归一化自行建立。

§4.5 缺失值与信息性缺失

现象 数量 处理建议
NO CLASS 提及(有 span 无类别) 113(全语料) NER 训练保留 span 标签;SACEM 分类任务中作为"信息性缺失"单独成类或剔除并在实验报告中说明
停用词表内高频化学品名(如部分极通用物质) 官方指南规定不标注 文档级 CDI 评估时勿将未标注的停用词计入漏检
无实体数据库 ID 全语料 归一化属下游任务,经 ChEBI/PubChem/UMLS 自行完成
银标准摘要(17,000 篇) 独立集合 自动提取产物,含噪声,勿与金标准合并训练/评估(见坑点 6)

§4.6 一条标注记录的完整解读

以 §4.1 字段字典的示例值为线索,一条金标准提及的解析路径如下:

  1. document @id=23380242 定位唯一摘要;
  2. 在其 passage 中找 infon type=A 的摘要段(标题段为 T);
  3. 遍历该段 annotation,infon type 给出 SACEM 类别(如 TRIVIAL);
  4. 读 location 的 offset=528、length=14,在摘要段文本上切片 text[528:542] 得提及原文;
  5. 若类别为 MULTIPLE,按坑点 4 决定拆分或过滤策略;
  6. 输出 (pmid, section, start, length, class) 五元组,进入 §6.3 的 BIO 转换。

第 4 步的切片结果必须与 annotation 的 text 子元素完全一致——不一致即坐标系错误(坑点 1)的首要症状,建议将该一致性检查固化为解析器自检断言。


§5 数据划分与使用建议

§5.1 官方划分

语料随机切分为训练集 3,500 篇(29,478 提及)、开发集 3,500 篇(29,526 提及)、测试集 3,000 篇(25,351 提及),切分在摘要级完成,保证同一篇摘要不会跨集出现。官方竞赛协议为:参赛队用训练+开发集(7,000 篇)构建系统,对测试集盲测提交(BioCreative-IV virtual issue)。

§5.2 社区惯例划分

  • 官方协议复现:train=training+development(7,000 篇),test=3,000 篇,micro-F 报告——与竞赛数字直接可比。
  • HuggingFace bigbio 镜像:将 BioC v2 的 training/development/test 文件分别映射为 TRAIN/(开发并轨)/TEST,行为与官方一致。
  • NER 常规做法:部分研究把 7,000 篇再按 90/10 切出内部验证集做早停,最后在官方测试集一次性评测;切勿在测试集上调参。

§5.3 划分策略与泄漏风险

  1. 摘要级切分已保证文档不泄漏,但实体会跨集重复:19,805 个唯一化学名按提及数均值 4.3 次出现,同一化学名几乎必然同时出现在训练与测试集。这不是缺陷而是真实分布——若你的实验目标是"识别已知化学名",直接用官方划分;若目标是"识别未见新实体",请自行按唯一化学名做实体级切分并在论文中明确声明。
  2. 团队预测文件泄漏:发布包含 26 支队伍在测试集上的自动预测,若误当作金标准读入,会得到虚高甚至荒谬的评估结果(见坑点 7)。
  3. 银标准独立存放:17,000 篇银标准摘要与金标准集合独立,任何混合都应显式声明为弱监督实验。

§5.4 交叉验证建议

小样本方法(规则、词典、少样本微调)建议在训练+开发 7,000 篇上做 5 折摘要级交叉验证,报告各折 micro-F 的均值与标准差;最终模型合并训练后仅在官方测试集评一次。分层抽样建议以"是否含 IDENTIFIER/MULTIPLE 稀有类"为分层变量。

§5.4.1 实体级切分参考实现

面向"识别未见新实体"研究目标的非官方切分(论文中使用必须显式声明与官方划分的区别):

# entity_split.py — 按唯一化学名切分:同一化学名的所有提及只落同一侧
import random

def mention_text(section_texts, m):
    sec, start, length, _cls = m
    return section_texts[sec][start:start + length]

def entity_level_split(docs, test_ratio=0.2, seed=42):
    """docs 为 §6.1 load_bioc 的输出;返回 (train_docs, test_docs)"""
    rng = random.Random(seed)
    names = sorted({mention_text(passages, m)
                    for _pmid, passages, ms in docs for m in ms})
    rng.shuffle(names)
    test_names = set(names[:int(len(names) * test_ratio)])
    train, test = [], []
    for doc in docs:
        side = test if any(mention_text(doc[1], m) in test_names for m in doc[2]) else train
        side.append(doc)
    return train, test

代价提示:文档按"是否含测试实体"整篇归侧,两侧摘要数会偏离 3,500/3,500/3,000 且不再随机;报告时需同时给出两侧的摘要数与实体数,并说明该协议不可与官方竞赛数字直接比较。

§5.5 外部验证建议

训练完成的模型建议迁移到三个外部域检验泛化:① CHEMDNER patents(BC V 专利摘要,同标注方法学,直接可比);② NLM-Chem 全文语料(BC VII,含 MeSH 链接,测全文场景);③ BC5CDR(测化学品+疾病联合抽取的兼容性)。跨域下降幅度应作为泛化性证据写入模型卡片(参照 §7.3)。


§6 AI 就绪指南

§6.0 云端快速启动

Colab/Kaggle 单元格直接加载社区镜像(约 1 分钟出数据,无需手工下载):

# 云端一键加载(Hugging Face 社区镜像,source schema 保留 BioC 原始结构)
from datasets import load_dataset
ds = load_dataset("bigbio/chemdner", "chemdner_source")
print(ds)                # 含 train / test 两个 split(对应官方 training+development / test)
ex = ds["train"][0]
print(ex["passages"][0]["text"][:120])   # 预览首段文本

§6.1 快速上手:解析 BioC v2

目录结构预期:假设你已从 NCBI FTP 下载 BC7T2-CHEMDNER-corpus_v2.BioC.xml.gz 并解压到 data/chemdner/,三个分卷 XML 与本目录并置(见 §4.0 目录树)。data_root 与文件名的拼接关系如下代码所示。最小可用子集:仅 training 卷即可完成首个 NER 实验(3,500 篇、29,478 提及)。

# quickstart_bioc.py — 解析 CHEMDNER BioC v2,产出 (文本, 提及列表) 对
# 目录预期:data/chemdner/ 下含 BC7T2-CHEMDNER-corpus-{training,development,test}.BioC.xml
import xml.etree.ElementTree as ET
import os

data_root = "data/chemdner"                       # 解压后的数据根目录
xml_path = os.path.join(data_root, "BC7T2-CHEMDNER-corpus-training.BioC.xml")

def load_bioc(path):
    """返回 [(pmid, {section: text}, [(section, start, length, sacem_class)])...]"""
    docs = []
    for doc in ET.parse(path).getroot().iter("document"):
        pmid = doc.get("id")
        passages, mentions = {}, []
        for p in doc.iter("passage"):
            sec = p.find(".//infon[@key='type']").text if p.find(".//infon[@key='type']") is not None else "A"
            passages[sec] = (p.findtext("text") or "", int(p.get("offset", 0)))
            for ann in p.iter("annotation"):
                cls = ann.find(".//infon[@key='type']").text
                loc = ann.find("location")
                mentions.append((sec, int(loc.get("offset")), int(loc.get("length")), cls))
        docs.append((pmid, passages, mentions))
    return docs

docs = load_bioc(xml_path)
pmid, passages, mentions = docs[0]
text, base = passages["A"]
span = text[mentions[0][1]: mentions[0][1] + mentions[0][2]]
print(f"PMID={pmid} | 首个提及: {span!r} 类别={mentions[0][3]}")   # 偏移以 A 段自身为基准

段内偏移与全文偏移的互转仅在必须拼接标题与摘要时使用(正常流程按段独立处理,见坑点 1):

# offset_convert.py — 段内偏移 ↔ 全文偏移互转(passages: {sec: (text, base_offset)})
def to_global(section, local_start, length, passages):
    return passages[section][1] + local_start, length      # 全文偏移 = 段基准 + 段内偏移

def to_local(section, global_start, length, passages):
    return global_start - passages[section][1], length     # 逆向换算:输出官方协议前必做

§6.2 数据获取

渠道 内容 格式 获取方式
BioCreative 官方资源页 金标准语料 + 标注指南 + 评估脚本 文本/TSV 免费直接下载,无注册
NCBI FTP BioC v2 全量(2021 复核) BioC XML(gzip) wget 直下
HuggingFace bigbio/chemdner 社区镜像(source/bigbio_kb/bigbio_text) Arrow load_dataset 自动下载
# 命令行获取 BioC v2(推荐主数据源)
wget -P data/chemdner \
  https://ftp.ncbi.nlm.nih.gov/pub/lu/BC7-NLM-Chem-track/BC7T2-CHEMDNER-corpus_v2.BioC.xml.gz \
  && gunzip data/chemdner/BC7T2-CHEMDNER-corpus_v2.BioC.xml.gz
# 解压后按官方三分卷组织目录(见 §4.0)

注:BioC v2 包仅含金标准三卷;17,000 篇银标准与 26 支参赛队预测需从 BioCreative 官方资源页的原始发布包获取,两者永不进入金标准加载器(坑点 6、坑点 7)。

§6.3 预处理全流程:BioC → BIO 序列标注

标准 NER 管线需要把"偏移 + 长度"标注转成 token 级 BIO 标签,并处理 SACEM 类别与 MULTIPLE 非连续提及:

# preprocess.py — BioC 偏移标注 → BIO 序列(以字符级切分为例,可替换为 BPE tokenizer 对齐)
def spans_to_bio(text, spans):
    """spans: [(start, length, sacem_class)],返回 char 级 BIO 标签串"""
    tags = ["O"] * len(text)
    for start, length, cls in spans:
        for i in range(start, min(start + length, len(text))):
            tags[i] = f"B-{cls}" if i == start else f"I-{cls}"
    return tags

def iter_examples(docs, drop_multiple=False):
    """drop_multiple=True 时跳过 589 个 MULTIPLE 非连续提及(序列标注无法直接表示)"""
    for pmid, passages, mentions in docs:
        for sec, (text, base) in passages.items():
            spans = [(m[1], m[2], m[3]) for m in mentions if m[0] == sec]
            if drop_multiple:
                spans = [s for s in spans if s[2] != "MULTIPLE"]
            yield {"pmid": pmid, "section": sec, "text": text,
                   "char_tags": spans_to_bio(text, spans)}

# 7,000 篇训练+开发集全量展开后即可接入 tokenizer 对齐与 CRF/Transformer 训练

§6.3.1 tokenizer 对齐与标签集构建(完整代码)

# align_labels.py — char 级 BIO → token 级标签(处理 BPE 子词、特殊 token 与截断)
from transformers import AutoTokenizer

LABELS = ["O"] + [f"{p}-{c}"
                  for c in ["ABBREVIATION", "FAMILY", "FORMULA", "IDENTIFIER",
                            "MULTIPLE", "SYSTEMATIC", "TRIVIAL"]
                  for p in ["B", "I"]]
lbl2id = {l: i for i, l in enumerate(LABELS)}
id2lbl = {i: l for l, i in lbl2id.items()}

def align(text, char_tags, tok, max_len=512):
    enc = tok(text, truncation=True, max_length=max_len,
              return_offsets_mapping=True, return_special_tokens_mask=True)
    labels = []
    for (s, e), is_spec in zip(enc["offset_mapping"], enc["special_tokens_mask"]):
        if is_spec or s >= len(char_tags):        # 特殊 token 或截断窗口外
            labels.append(-100)
        else:
            labels.append(lbl2id.get(char_tags[s], lbl2id["O"]))
    return enc, labels                             # token 首字符继承 char 标签

要点:① token 标签取首字符的 char 标签,B 子词继承 B-、I 子词继承 I-,无需二次改写;② 全语料平均每篇约 220 词元(2,199,757 / 10,000),标准 512 窗口几乎不触发截断;③ MULTIPLE 已按 §6.3 过滤,如需保留请改用 span-based 头(见坑点 4)。

§6.4 PyTorch DataLoader 完整代码

# chemdner_dataset.py — BioBERT 风格 token 分类数据管线(完整可运行)
import torch
from torch.utils.data import Dataset, DataLoader
from transformers import AutoTokenizer

class ChemdnerNERDataset(Dataset):
    """先跑 §6.1 的 load_bioc 与 §6.3 的 iter_examples 生成 samples 列表"""

    def __init__(self, samples, model_name="dmis-lab/biobert-base-cased-v1.2", max_len=512):
        self.samples, self.max_len = samples, max_len
        self.tok = AutoTokenizer.from_pretrained(model_name)

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

    def __getitem__(self, idx):
        s = self.samples[idx]
        enc = self.tok(s["text"], truncation=True, max_length=self.max_len,
                       return_offsets_mapping=True)
        labels = []
        for off in enc["offset_mapping"]:
            if off[0] == off[1]:                       # special token
                labels.append(-100)
            else:
                ch = s["char_tags"][off[0]]            # token 首字符继承 char 标签
                labels.append(self.lbl2id.get(ch, 0))
        return {"input_ids": torch.tensor(enc["input_ids"]),
                "attention_mask": torch.tensor(enc["attention_mask"]),
                "labels": torch.tensor(labels)}

    lbl2id = {"O": 0}  # 实际使用时由全量标签集构建(含 B-/I- 七类)

def build_loader(samples, batch_size=8, shuffle=True):
    ds = ChemdnerNERDataset(samples)
    return DataLoader(ds, batch_size=batch_size, shuffle=shuffle,
                      collate_fn=lambda b: {            # 动态 padding
                          k: torch.nn.utils.rnn.pad_sequence(
                              [x[k] for x in b], batch_first=True, padding_value=0 if k != "labels" else -100)
                          for k in b[0]})

§6.4.1 训练循环示例(HuggingFace Trainer 最小闭环)

# train_ner.py — BioBERT token 分类微调(train_ds/dev_ds 由 §6.4 管线或 datasets.map 生成)
from transformers import (AutoModelForTokenClassification, Trainer, TrainingArguments,
                          DataCollatorForTokenClassification)
from transformers import AutoTokenizer

model = AutoModelForTokenClassification.from_pretrained(
    "dmis-lab/biobert-base-cased-v1.2",
    num_labels=len(LABELS), id2label=id2lbl, label2id=lbl2id)
tok = AutoTokenizer.from_pretrained("dmis-lab/biobert-base-cased-v1.2")

args = TrainingArguments(
    output_dir="ckpt/chemdner-ner",
    per_device_train_batch_size=8,
    learning_rate=5e-5,
    num_train_epochs=3,
    eval_strategy="epoch",          # transformers 新版参数名(旧版为 evaluation_strategy)
    save_strategy="epoch",
    load_best_model_at_end=True,
    fp16=True,
    logging_steps=100,
)

trainer = Trainer(model=model, args=args,
                  train_dataset=train_ds, eval_dataset=dev_ds,
                  data_collator=DataCollatorForTokenClassification(tok))
trainer.train()
trainer.save_model("ckpt/chemdner-ner/final")

训练侧三条建议:① 损失自动忽略 labels=-100 的 token(特殊 token 与截断区),无需手工掩蔽;② 每个 epoch 结束在开发集上跑 §6.9 的官方协议 exact-match——比 seqeval 的实体级 F 更贴近竞赛口径(seqeval 默认容忍边界外再多算,口径不一致会误判收敛);③ 早停以开发集 F 为准,测试集只在最终模型上评一次(见 §5.2)。

§6.5 坑点 8 个:CHEMDNER 真实特有失败模式

⚠️ 坑点 1:CEM 偏移坐标系按"段"而非"全文"计算(分类:工程陷阱)

问题:官方 CEM 偏移以 T(标题)或 A(摘要)段自身起点为参照(T:start:end / A:start:end),而多数现代管线把标题与摘要拼接成单字符串后用全文偏移。两套坐标系混用会使全部标注系统性错位。
症状:可视化检查时发现标注框整体偏移标题长度个字符;按偏移切出的字符串与 mention_text 对不上;F 值莫名接近 0。
解决:

  1. 简单方法:按段独立处理,永远不拼接标题与摘要;每个提及用 (section, start, length) 三元组定位。
  2. 进阶方法:必须拼接时,用 BioC passage 的 offset 属性把段内偏移换算为全文偏移:global = passage_offset + local,并在输出评估前做逆向换算(含代码见 §6.1)。
  3. SOTA 方法:统一采用 BioC v2 的 passage+offset 结构作为内部标准格式,写一层 SpanIndex 抽象,入站自动识别段内/全文坐标系。
    参考:J Cheminform 7(S1):S1 Table 1 提交格式;BioC 规范。

⚠️ 坑点 2:精确匹配评估——部分重叠记 0 分(分类:评估误用)

问题:官方评估只接受与金标准完全一致的字符 span;部分重叠既不算 TP,还同时计入 FP 与 FN,双重扣分。用 spaCy/规则引擎跑出的"80% 重叠"实体在官方协议下一文不值。
症状:自测时"看起来很准"(可视化大量命中),官方脚本 F 值却显著偏低;FP 与 FN 数量异常同步增长。
解决:

  1. 简单方法:训练后做边界校准后处理——化学名首尾的括号、连字符、介词(如 “of titanium dioxide nanoparticles on…” 中的边界)按字符类规则修剪。
  2. 进阶方法:报告两组指标——官方 exact-match micro-F 与 relaxed F(span 重叠即算对),分别用于竞赛对标与错误分析;二者差距即"边界质量差距"。
  3. SOTA 方法:用 span-level 动态规划对齐预测与金标准,输出边界漂移统计(左/右溢出分布),针对性微调 tokenizer 或加入边界分类头。
    参考:PMC4331685 评估指标节。

⚠️ 坑点 3:TRIVIAL 类俗名与普通英语词汇混淆(分类:标签理解)

问题:TRIVIAL 是最大类别(25,610 个提及,占 30.4%),含 titanium、常见药物俗名等与日常词汇同形的名称;官方指南还设小停用词表,部分极通用化学品名刻意不标注。
症状:词典匹配系统召回率虚高(把停用词也算上);模型在 “iron”、“carbon” 等词上摇摆(上下文决定是否指化学品);CDI 文档级结果与 CEM 提及级结果自相矛盾。
解决:

  1. 简单方法:下载并遵循官方停用词表,词典法先过滤停用词再匹配。
  2. 进阶方法:上下文分类器二次判定——对高频普通词候选,用句子级二分类判断"此处是否为化学品指称"。
  3. SOTA 方法:Transformer + 词典特征融合(word embedding 与 exact-dictionary hit 并联),让模型自行学习指称歧义;竞赛中 CRF+词典组合正是靠此策略达标 87%+。
    参考:PMC4331692 Table 1;语料论文图 2b 高频提及统计。

⚠️ 坑点 4:589 个 MULTIPLE 非连续提及无法用 BIO 表示(分类:预处理陷阱)

问题:SACEM 的 MULTIPLE 类表示非连续提及(如并列列举中被连接词隔开的多个片段共指同一实体,全语料 589 个),标准 BIO/BILOU 序列标注无法编码非连续 span。
症状:盲目跑 BIO 转换时这些提及被静默丢弃或错误切成多个独立实体;训练/测试提及数与官方统计对不齐(差几十个)。
解决:

  1. 简单方法:按 §6.3 显式过滤 MULTIPLE(drop_multiple=True),并在实验报告中声明覆盖率口径。
  2. 进阶方法:把每个非连续提及拆成多个连续子 span,各自赋相同归一化目标 ID,评估时按官方连续 span 粒度计分。
  3. SOTA 方法:采用 span-based NER 头(枚举候选 span 分类)替代序列标注,天然支持非连续实体。
    参考:PMC4331692 Table 1;SACEM 类别定义(PMC4331685)。

⚠️ 坑点 5:SACEM 类别极不均衡拖垮分类头(分类:偏倚陷阱)

问题:若在 NER 之外追加 SACEM 类别预测(多任务/实体分类),IDENTIFIER 仅 1,824 个、MULTIPLE 仅 589 个,而 TRIVIAL 有 25,610 个——直接训练的类别头对稀有类几乎失明。
症状:总体准确率很高(被 TRIVIAL 主导),但 IDENTIFIER 召回接近 0;macro-F 远低于 micro-F(差距常达两位数百分点)。
解决:

  1. 简单方法:训练时按类别倒数频率重加权(inverse-frequency class weights)。
  2. 进阶方法:分层采样批次 + 稀有类过采样,同时报告 macro 与 micro 两套指标。
  3. SOTA 方法:稀有类(IDENTIFIER/MULTIPLE)用词典/规则后处理兜底——标识符有强模式(如 ChEBI:、CAS 号),规则召回成本极低。
    参考:PMC4331692 Table 1 标签分布。

⚠️ 坑点 6:银标准(17,000 篇)是自动提取产物,含噪声(分类:数据泄漏)

问题:发布包中的 CHEMDNER silver standard corpus 由自动系统在 17,000 篇随机摘要上提取生成,标注质量显著低于人工金标准,却被部分使用者误当人工标注合并训练。
症状:合并银标准后训练集增大 2.7 倍但测试 F 值不升反降;错误分析发现大量边界与类别一致的"系统化错误"(同一错误模式反复出现)。
解决:

  1. 简单方法:银标准仅用于预训练/自训练/伪标签实验,最终评估与报告一律只用金标准。
  2. 进阶方法:自训练时用金标准模型给银标准文本重新打分,置信度过滤后再纳入(noisy student 范式)。
  3. SOTA 方法:把银标准视为弱监督信号源,用置信学习(confident learning)清洗后再做蒸馏。
    参考:语料论文摘要(db.cngb 镜像)。

⚠️ 坑点 7:26 支参赛队的预测文件混入金标准(分类:数据泄漏)

问题:发布包在 3,000 篇测试摘要上附带了 26 支参赛队伍的自动预测提及(供社区错误分析)。解析脚本若按"所有 annotation"读取,会把机器预测当金标准。
症状:评估 F 值高得离谱(预测 vs 预测);重复某竞赛团队论文的数字却复现不了;语料统计与官方 Table 1 对不上。
解决:

  1. 简单方法:只从 annotation 且来源为 gold 标注层读取;team_predictions 目录下的文件永不进入训练/评估加载器。
  2. 进阶方法:加载器加断言——全语料提及总数必须等于 84,355(训练 29,478 / 开发 29,526 / 测试 25,351),超出即报警。
  3. SOTA 方法:数据版本锁定——用 DVC 或等价工具对解析产物做指纹,任何引入非官方来源的变更都会在 CI 中显影。
    参考:语料论文(ResearchGate 全文)。

⚠️ 坑点 8:摘要域模型迁移到专利/全文域性能骤降(分类:偏倚陷阱)

问题:CHEMDNER 金标准全部来自 PubMed 摘要——句子紧凑、术语规范。专利文本(数百页、拼写与 OCR 错误密集、科学+技术+法律语言混合)与全文实验部分的结构差异极大,摘要域模型直接迁移会显著掉点。
症状:在 CHEMDNER patents(BC V CEMP 任务)上 F 值比摘要任务低数个百分点;长句中的化学品名被截断(max_len=512 的 BERT 编码器处理不了专利长段);OCR 数字/字母混淆(l/1、O/0)破坏分子式识别。
解决:

  1. 简单方法:迁移前在目标域做词典增补与分句预处理,保证每个输入片段 ≤ 512 token。
  2. 进阶方法:域适应继续预训练(domain-adaptive pretraining)——先在专利/全文语料上 MLM 训练再微调 CHEMDNER 标注。
  3. SOTA 方法:混合域训练 + OCR 纠错预处理(基于化学词典的字符混淆表),BC V 参赛系统证明词典+统计混合方法在专利域更稳。
    参考:Database baw061(专利化学识别);CHEMDNER patents 任务概述。

§6.6 数据增强

  • ✅ 安全:句子级 dropout(随机遮蔽非实体词)、同义上下文替换(保留实体 span 不动)、金标准摘要与银标准摘要混合的 curriculum 学习、以词典合成"化学名替换"增强(替换同名类别的俗名/系统名,保持 span 类别一致)。
  • ❌ 危险:随机删除括号或连字符(直接改变化学名边界,破坏精确匹配评估的边界一致性);对分子式做字符级噪声注入(FORMULA 类对字符敏感);把标题拼进摘要做"伪长句"增强(破坏偏移坐标系,见坑点 1)。

同类替换增强的参考实现(替换名取自金标准唯一化学名清单,类别保持一致):

# augment.py — 同 SACEM 类别化学名替换(从后往前替换,偏移不失效)
import random

def augment_sample(text, spans, name_bank, rng=random):
    """spans: [(start, length, cls)];name_bank: {cls: [替换名, ...]}"""
    new_text, new_spans = text, []
    for start, length, cls in sorted(spans, reverse=True):
        repl = rng.choice(name_bank.get(cls, [text[start:start + length]]))
        new_text = new_text[:start] + repl + new_text[start + length:]
        new_spans.append((start, len(repl), cls))
    return new_text, sorted(new_spans)

注意:替换后 span 长度随新名变化,offset 由新 span 直接重建;FORMULA 类替换应从分子式专用清单取样,避免产生非法化学式;增强副本只进训练集,开发/测试集保持原样。

§6.7 模型推荐

模型 适用任务 预期表现 说明
CRF(字级 + 词典特征) CEM/CDI 基线 F 约 85%-88% 竞赛主力方案,CPU 可训,强可解释
BioBERT(dmis-lab/biobert-base-cased-v1.2) CEM F 约 88%-91% 生物医学 BERT 首选,token 分类微调即达 SOTA 量级
PubMedBERT(microsoft/BiomedNLP-PubMedBERT) CEM F 约 88%-91% 从零 PubMed 预训练,化学名子词切分更友好
SciBERT CEM/CDI F 约 87%-90% 科学文献语料预训练,学术文本适配好
Span-based NER 头(BIOS/span 枚举) 含 MULTIPLE 的全类别 覆盖 100% 提及类型 唯一能直接建模非连续提及的架构(见坑点 4)

§6.7.1 选型决策速查

你的约束 推荐 理由
无 GPU、要可解释的审计基线 CRF(字级 + 词典特征) 竞赛主力方案,CPU 数小时可训
标准 CEM 提交、对标 87.39% BioBERT 微调 单卡数小时收敛,token 分类即达 SOTA 量级
需要覆盖 MULTIPLE 非连续提及 span-based 头 序列标注无法编码非连续 span(坑点 4)
需要 SACEM 类别联合预测 Transformer + 类别重加权 稀有类需过采样或规则兜底(坑点 5)
要迁移到专利/全文域 域适应预训练 + 词典增补 摘要域模型直接迁移会显著掉点(坑点 8)
只有 CPU 且要快速验证管线 解析自检断言 + 小样本试跑 先验证 84,355 提及断言再谈建模(§3.12、坑点 7)

§6.8 硬件需求

配置 适用实验 说明
CPU 4 核 / 8 GB RAM CRF 基线、数据解析与评估 语料仅约 14 MB,全量解析秒级完成
1 × GTX 1060 / 8 GB BioBERT 微调(batch 4-8,max_len 256) 一个 epoch 数分钟,单卡数小时收敛
1 × A100 / 24 GB 全类别多任务 + 超参搜索 batch 32 + 混合精度,快速迭代

§6.9 评估指标代码

# eval_exact.py — 官方协议等价的精确匹配 micro P/R/F(CEM span 级)
def exact_match_f(pred_spans, gold_spans):
    """pred/gold: {(pmid, section, start, end), ...},end = start + length"""
    pred, gold = set(pred_spans), set(gold_spans)
    tp = len(pred & gold)
    precision = tp / len(pred) if pred else 0.0
    recall = tp / len(gold) if gold else 0.0
    f1 = 2 * precision * recall / (precision + recall) if precision + recall else 0.0
    return precision, recall, f1

# CDI 文档级评估:把 span 键降维为 (pmid, normalized_chemical) 后复用同一函数
# 对齐检查:官方测试集 gold 提及数应为 25,351,若不符请回查坑点 7

CDI 文档级评估参考实现(文档-化学名集合匹配 + top-k 排名截断变体):

# eval_cdi.py — CDI 评估:文档级化学名集合匹配
def normalize(name):
    return name.strip().lower()

def cdi_prf(pred_docs, gold_docs, top_k=None):
    """pred/gold: {pmid: [(name, rank, confidence), ...]};top_k=None 为全量主协议"""
    from collections import defaultdict
    gold = {pmid: {normalize(n) for n, _r, _c in items} for pmid, items in gold_docs.items()}
    pred_all = {pmid: {normalize(n) for n, _r, _c in items} for pmid, items in pred_docs.items()}
    tp = fp = fn = 0
    for pmid, preds in pred_docs.items():
        keep = sorted(preds, key=lambda x: x[1])[:top_k] if top_k else preds
        p_set = {normalize(n) for n, _r, _c in keep}
        g_set = gold.get(pmid, set())
        tp += len(p_set & g_set)
        fp += len(p_set - g_set)
    for pmid, g_set in gold.items():
        fn += len(g_set - pred_all.get(pmid, set()))
    p = tp / (tp + fp) if tp + fp else 0.0
    r = tp / (tp + fn) if tp + fn else 0.0
    return p, r, (2 * p * r / (p + r) if p + r else 0.0)

CDI 评估三点注意:① 同一化学名在文档内多次提及只计一次(集合语义);② CDI 金标准可由 CEM 标注按提及文本归一化降维生成,但竞赛官方以参赛者提交清单为准,两种口径的数字存在差异;③ 大小写与前导修饰的归一化策略需在复现声明中固定,否则与官方数字存在系统性偏差。

§6.10 MLOps 笔记

  • 数据版本:锁定 BioC v2(2021 复核版)文件指纹;原始包与 v2 包差异需在实验记录中声明。
  • 评估复现:任何模型改动后在固定测试集上一次性评测;用 §6.9 断言(25,351)防数据装载漂移。
  • 漂移监控:上线后的文献 NER 服务应监控"新化学名命中率"(词典外实体占比),2013 年后出现的新实体是首要漂移源。
  • 归一化层独立演进:NER 模型与 ChEBI/PubChem 链接器解耦部署,便于词典更新而不重训 NER。

§6.11 推理与部署注意事项

  • 输入切分:生产输入可能是全文或网页文本;先做章节/段落切分再分别过模型,输出统一为 (section, start, length) 段内坐标系,与训练坐标系一致,规避坑点 1。
  • 阈值选点:NER 头 softmax 阈值默认取 0;上线前在开发集上按业务选点——文献策展初筛偏召回,知识库生产偏精确。
  • 长文本滑窗:平均每篇约 220 词元,但个别长摘要仍可能超窗;滑窗拼接时对窗口边界上的重复 span 去重。
  • 版本绑定:模型、tokenizer、标签集、预处理代码同版本发布;BioC v2 文件哈希写入模型卡片(与 §6.10 的数据版本锁定呼应)。
  • 线上监控:词典外率与超短实体(≤3 字符)占比骤变通常意味着输入域漂移(混入专利/临床文本),先查输入分布再归因模型。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
类别分布偏倚 TRIVIAL 25,610 vs IDENTIFIER 1,824,相差约 14 倍 中 重加权/过采样;稀有类规则兜底(见坑点 5)
文本域偏倚 全部为 2013-2014 年 PubMed 摘要,无全文/专利/临床文本 高 外部验证(§5.5);域适应预训练(见坑点 8)
语言偏倚 仅英语 中 多语化学名识别需迁移或另建语料
学科抽样偏倚 203 种期刊覆盖主要化学学科,但生物医学化学比重高 低-中 使用时明确目标域;必要时加权采样
人类标注上限 一致性 91%,约十分之一提及存在边界/类别分歧 中 用 relaxed 指标辅助错误分析;承认上限(87.39% 已很接近)
时间冻结偏倚 不含 2014 年后新化学实体 中 定期用银标准/新文献做自训练更新(见 §6.10)

§7.2 标注质量

标注由受训化学策展人完成,配套任务专属指南与一致性研究:91% 的 percentage agreement 在化学 NER 语料中属第一梯队水平,官方明确将其用作机器性能上限参照。需要留意的是:① 指南刻意排除了蛋白等大分子与极泛化术语,因此语料不是"一切化学词"的完备标注;② 113 个 NO CLASS 提及是标注流程的真实残留,应按信息性缺失处理而非清洗掉;③ 评估不要求 SACEM 类别,做类别级研究时需自担七类不均衡(见 §4.2)。

从工程视角解读 91%:它不是"9% 的提及是错的",而是"标注者对 span 边界与类别完全一致的比率"。分歧集中在少数可预期的模式——长系统命名的嵌套边界、家族名的范围划定(家族名是否包含修饰语)、缩写展开后的边界归属。错误分析时优先复核这三类模式,比全量抽样更高效。

§7.3 泛化性

部署场景 失效风险 证据
PubMed 摘要(同分布) 低 竞赛最佳 F 87.39%(CEM)/ 88.20%(CDI),接近 91% 人类一致性
专利文本 高 BC V CEMP 任务专门为此组织(top F 0.89 但文本更难);专利含 OCR 错误、法律语言混合(Database baw061)
全文(PMC) 中-高 全文长、章节异质;BC VII NLM-Chem 任务另立金标准,摘要模型不可直接套用
临床病历文本 高 缩写文化、非规范拼写与文献域差异大,无同行评审迁移证据,须独立验证
非英语文献 高 语料仅英语,无跨语言证据

§7.4 伦理考量

语料全部由公开发表的学术摘要构成,不含患者可识别信息、无人类受试者数据,不涉及知情同意问题;论文与标注指南以 CC BY 4.0 开放许可发布,语料经 BioCreative 官方渠道免费开放,二次分发时应保留官方出处与许可声明。使用其训练的模型用于临床决策前须独立验证(见 §0 免责声明)。

§7.5 公平性

语料层面的公平性问题主要体现为语言与学科代表性:英语单一语言、期刊与学科分布冻结于 2013-2014 年,可能使低资源语言与新兴交叉学科(如计算材料学)中的化学品名识别能力不足。若产品面向多语言或跨学科场景,应以 CHEMDNER 为起点而非终点,补建目标域评测集。操作建议:凡跨语言或跨学科部署,先在目标域抽样构建小型人工评测集测出基线落差,再决定是否微调——成本远低于上线后发现系统性失效。

§7.6 数据漂移

化学实体的增长率意味着任何静态 NER 模型都会老化:2014 年后批准的新药、新材料术语在训练分布之外。建议:① 每年用当期 PubMed 抽样评测词典外实体占比;② 用银标准式自动提取 + 人工抽检做半年度自训练;③ 监控 IDENTIFIER/TRIVIAL 比例变化(新数据库标识符涌现会改变类别结构);④ 把 NLM-Chem 全文金标准作为年度外部回归测试集,检测摘要→全文的漂移方向。

§7.7 DAIMS 数据集质量检查表

# 检查项 状态 说明
1 宽格式可用 ✅ BioC/TSV 均可展平为 (pmid, section, start, length, class) 单表
2 唯一标识 ✅ PMID 文档级唯一;提及以 (pmid, section, start, end) 复合键唯一
3 特殊字符处理 ⚠️ 化学名含括号/连字符/希腊字母,tokenize 与边界处理需专门规则
4 重复行 ✅ 无重复标注;同一化学名多次提及为合理多实例
5 缺失编码 ⚠️ 113 个 NO CLASS 提及构成信息性缺失,需显式策略
6 标签标识 ✅ SACEM 七类定义明确(官方指南文档化)
7 罕见类分组 ✅ IDENTIFIER/MULTIPLE 稀有但可由规则/结构特征兜底
8 偏倚评估 ✅ 官方论文含学科分布与类别分布统计;91% 一致性有据
9 数据字典 ✅ 标注指南 + 本档案 §4.1 字段字典
10 信息性缺失解释 ✅ NO CLASS 与停用词表机制均有官方解释
11 设备记录 ❌ 文本语料,无设备维度(不适用)
12 共线性 ✅ 无数值协变量,不适用
13 编码映射 ⚠️ 官方不提供实体 ID,归一化需经 ChEBI/PubChem/UMLS 自建
14 时间戳处理 ✅ 语料时间冻结明确(2013-2014),PMID 可回溯发表时间
15 划分建议 ✅ 官方三分划分固定,可直接复现竞赛协议
16 泄漏讨论 ✅ 实体跨集重复与团队预测文件风险均已文档化(§5.3、坑点 7)
17 标签分布 ✅ 七类分布全量公开(§4.2)
18 测量偏倚 ✅ 标注者一致性与人类上限(91%)有量化研究
19 外部验证建议 ✅ patents/全文/临床三域迁移路径明确(§5.5、§7.3)
20 版本记录 ✅ 2013 挑战版 → 2015 论文版 → 2021 BioC v2 复核版,谱系清晰
21 预处理脚本 ⚠️ 官方提供评估脚本;解析/转换需按 §6.1-§6.3 自建(社区镜像可替代)
22 合规要求 ✅ 开放获取、无注册门槛,引用即可使用
23 多模态对齐 ❌ 纯文本单模态,不适用
24 去标识化 ✅ 无个人敏感信息,公开文献无需去标识化

DAIMS 评分:18.5 / 24

评分解读:数据本体质量极高——划分、标签体系、版本谱系、泄漏风险文档全部到位,这正是 2013-2014 年社区挑战"以赛促数据"模式的产出优势。失分项集中在文本语料的固有边界(无设备/多模态维度不适用)与生态便利性(无官方实体 ID 映射、预处理需自建脚本),不影响核心研究价值。

对你意味着什么:可以直接把 CHEMDNER 当作化学 NER 的"默认考场"——官方划分 + 评估协议能让你 1 天内产出与 27 支竞赛团队可比的基线;上项目前先做三件事:① 用 §6.1 代码把 BioC 解析产物过一遍 84,355 提及断言;② 决定 MULTIPLE 与 NO CLASS 的处理口径并写进实验配置;③ 若产品要上专利/全文/临床场景,把 §7.3 的三域迁移验证排进计划,而不是指望摘要模型通吃。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
CHEMDNER patents(BC V CEMP) CNIO/CIMA/UPM/Vigo(同一组织方) 专利摘要化学 NER top F 0.89(21 队 93 runs) 同方法学跨域保持高水准 词典+统计混合系统在专利域最稳健(BC V 论文集)
CHEMDNER patents(BC V CPD) 同上 专利摘要化学相关性二分类 top MCC 0.88(9 队 40 runs) — 文档级分类比提及抽取更易达到高 MCC
CHEMDNER patents(BC V GPRO) 同上 专利基因/蛋白 NER top F 0.81(4 队 16 runs) 低于化学实体任务 基因/蛋白在专利文本中更难(命名更不规范)
Markyt 赛后评测 sing-group(维戈大学等) CEM/CDI 持续自测 平台公开榜单 赛后系统可持续对齐竞赛数字 平台至今开放,任何团队可上传预测比对(PMC5001550)

(矩阵仅收录有同行评审或官方 proceedings 支撑的结果;相对内部变化列"—"表示任务文本域不同、不可直接换算。)

把上表读作"方法学的跨域迁移证据"而非"性能排名":BC V 三子任务共同说明——同一家标注方法学在专利域依然成立,但任务粒度(提及/文档/基因)之间的难度排序在摘要域与专利域并不一致,选型时应以目标域的同粒度结果为准。


§8 基准性能与生态

§8.1 排行榜(BioCreative IV 官方评测,测试集 3,000 篇)

排名 模型/系统 性能 年份 关键技术 完整引用 代码
1(CDI) 混合 CRF + 多尺度词聚类系统 CDI F 88.20%(同系统 CEM 87.11%,第二名) 2015 字级+词级双 CRF 融合、Brown 词聚类、skip-gram 多尺度聚类 Krallinger, M. et al. 组织评测, 2015, Journal of Cheminformatics 7(Suppl 1):S1-S4. doi:10.1186/1758-2946-7-S1-S4 未公开
1(CEM) 官方概览记载的最佳 CEM 系统 CEM F 87.39% 2015 CRF 为主流方案,配合化学/药物词典与领域规则 Krallinger, M., Leitner, F., Rabal, O., Vazquez, M., Oyarzabal, J., Valencia, A., 2015, Journal of Cheminformatics 7(Suppl 1):S1. doi:10.1186/1758-2946-7-S1-S1 未公开
赛后改进 同 CDI 第一名系统(skip-gram 扩展版) CDI F 88.71%(非官方提交,赛后复现) 2015 多尺度词聚类 + skip-gram 语义聚类 同 S1-S4 论文. doi:10.1186/1758-2946-7-S1-S4 未公开

数值不可直接比较的原因:① CEM 与 CDI 任务粒度不同(span 级 vs 文档级),分数不可跨行比较;② CDI 88.71% 为赛后改进数字,未经过官方盲测提交流程;③ 人类标注者一致性 91% 是 percentage agreement 而非 F 值,与系统分数仅为量级参照关系;④ 完整 26 队排名需查阅 workshop 论文集与 Markyt 平台,官方概览论文摘要级仅公布最佳成绩(PubMed 25810766、PMC4331694)。

§8.2 SOTA 总结与选型建议

竞赛时代(2013-2015):CRF 是绝对主力,决定性特征是词聚类与化学词典,融合字级/词级双模型是 CDI 冠军的关键。深度学习时代:BioBERT/PubMedBERT 微调在同类化学 NER 语料上普遍达到或超越 88%-91% 区间,正式建议是——先跑 CRF 基线(1 天),再上 BioBERT 微调(1 周),用 Markyt 或 §6.9 脚本对齐官方协议后与 87.39%/88.20% 对标。选型原则:需要可解释与低算力选 CRF 系;追求极致召回与类别覆盖选 span-based + Transformer 组合。

方法学脉络一句话:词典与规则给出第一波 85% 量级 → 字级/词级 CRF + 词聚类把上限推到 87%-88% → 2021 年 NLM-Chem 复核确认语料仍可支撑 Transformer 时代评测 → 当前社区在 BioC v2 上以 BioBERT/PubMedBERT 微调为主流。复现时按"先 CRF 基线后 BERT 微调"的顺序推进,最能建立每一步改进的归因。

§8.3 评测协议

官方协议要点:① 测试集 3,000 篇盲测,禁止人工干预,仅全自动预测;② CEM 按 span 精确匹配、CDI 按文档级化学名排序匹配;③ 指标为 micro-averaged precision/recall/F1,F1 为官方主指标;④ 每篇文档允许带排名与置信度的多条预测;⑤ 官方评估脚本随语料分发,可本地复现(J Cheminform 7(S1):S1)。

CEM 与 CDI 的提交文件均按官方模板组织并携带排名与置信度列;CDI 的主指标按全量返回计算,排名信息用于文档级 prioritization 变体评测。结果解读的两条纪律:一是 CEM 与 CDI 分数不可互比(粒度不同);二是与排行榜对表时必须确认任务、划分与匹配协议版本完全一致(见 §8.1 的四点说明与 §8.8 清单)。

数据集 关系 用途
CHEMDNER patents(BC V) 同组织方专利域延伸 域适应与鲁棒性测试
BC5CDR 同为 BioCreative 系化学语料 化学+疾病联合抽取
NLM-Chem(BC VII) 语料 v2 同源、全文域 全文化学抽取与 MeSH 链接
NCBI-Disease 同期 NLM 疾病语料 疾病 NER 对照与联合训练
JNLPBA 经典生物实体语料 基因/蛋白 NER 对照

§8.5 关键论文 Top 6

  1. Krallinger, M., Leitner, F., Rabal, O., Vazquez, M., Oyarzabal, J., Valencia, A., 2015, Journal of Cheminformatics 7(Suppl 1):S1. doi:10.1186/1758-2946-7-S1-S1 — 挑战概述:任务设计、27 队结果、CEM 87.39%/CDI 88.20% 基准确立。
  2. Krallinger, M., Rabal, O., Leitner, F., et al., 2015, Journal of Cheminformatics 7(Suppl 1):S2. doi:10.1186/1758-2946-7-S1-S2 — 语料本体论文:SACEM 七类标注体系、91% 一致性、银标准与 BioC 版本。
  3. Krallinger, M., et al., 2015, Proceedings of the Fifth BioCreative Challenge Evaluation Workshop, 63-75 — CHEMDNER patents 专利版任务概述(CEMP/CPD/GPRO 三子任务与 21,000 条专利摘要规模)。
  4. Pérez-Pérez, M., Pérez-Rodríguez, G., Rabal, O., et al., 2016, Database. doi:10.1093/database/baw120 — Markyt 平台:标注、预测、赛后持续评测三位一体。
  5. “Chemical entity recognition in patents by combining dictionary-based and statistical approaches”, 2016, Database. doi:10.1093/database/baw061 — 专利域化学识别的词典+统计混合方案与专利文本难点剖析。
  6. BioCreative-IV virtual issue, 2014, Database. doi:10.1093/database/bau039 — BC IV 五条赛道全景,含 CHEMDNER 65 队注册、27 队提交的挑战生态背景。

§8.6 社区活跃度

论文引用持续增长(语料论文 451+ 次,截至 2026-09,SciSpace 聚合);HuggingFace 社区镜像 bigbio/chemdner 月下载量 67 次(截至 2026-09,HF 页面),属稳定小众研究负载;Markyt 平台自 2016 年起持续开放赛后评测;后续影响体现在 NLM-Chem(BC VII)对语料 v2 的官方复核复用。综合判断:非热点大规模语料,但为化学 NER 子领域公认的一级基准,维护主体(BioCreative 系)学术信誉高。

§8.7 生态快照

资源 类型 链接 推荐理由
BioCreative 官方资源页 语料+指南+评估脚本 biocreative.org/resources/biocreative-iv/chemdner-corpus/ 官方原始发布渠道,含标注指南
NCBI FTP BioC v2 程序化数据镜像 ftp.ncbi.nlm.nih.gov/…/BC7T2-CHEMDNER-corpus_v2.BioC.xml.gz 2021 复核版,BioC 生态兼容
HuggingFace bigbio/chemdner 社区镜像 huggingface.co/datasets/bigbio/chemdner load_dataset 一行接入 PyTorch
Markyt 在线评测平台 markyt.org / GitHub sing-group/Markyt 赛后持续自测与可视化错误分析

§8.8 复现检查清单

发布复现结果或新基线前逐项确认:

  • [ ] 使用官方 3,000 篇测试集,未混入 26 支团队预测文件(坑点 7);
  • [ ] 评估为 span 精确匹配 + micro 平均(§6.9),未以 relaxed 指标冒充官方协议(坑点 2);
  • [ ] 偏移坐标系为段内基准,或已通过双向换算验证(坑点 1);
  • [ ] MULTIPLE(589 个)与 NO CLASS(113 个)的处理口径已写入实验配置;
  • [ ] 声明所用语料版本(2013 挑战版 / 2015 论文版 / 2021 BioC v2 复核版);
  • [ ] 与 87.39%(CEM)/ 88.20%(CDI)对标时确认任务、划分与匹配协议完全一致。

§9 相关资源与引用

§9.1 官方资源

§9.2 BibTeX 引用

@article{Krallinger2015chemdner_corpus,
  title   = {The CHEMDNER corpus of chemicals and drugs and its annotation principles},
  author  = {Krallinger, Martin and Rabal, Obdulia and Leitner, Florian and Vazquez, Miguel and Salgado, David and Lu, Zhiyong and Leaman, Robert and Lu, Yanan and Ji, Donghong and Lowe, Daniel M. and Sayle, Roger A. and others},
  journal = {Journal of Cheminformatics},
  volume  = {7},
  number  = {Suppl 1},
  pages   = {S2},
  year    = {2015},
  doi     = {10.1186/1758-2946-7-S1-S2}
}

@article{Krallinger2015chemdner_challenge,
  title   = {CHEMDNER: The drugs and chemical names extraction challenge},
  author  = {Krallinger, Martin and Leitner, Florian and Rabal, Obdulia and Vazquez, Miguel and Oyarzabal, Julen and Valencia, Alfonso},
  journal = {Journal of Cheminformatics},
  volume  = {7},
  number  = {Suppl 1},
  pages   = {S1},
  year    = {2015},
  doi     = {10.1186/1758-2946-7-S1-S1}
}

@article{PerezPerez2016markyt,
  title   = {The Markyt visualisation, prediction and benchmark platform for chemical and gene entity recognition at BioCreative/CHEMDNER challenge},
  author  = {P{\'e}rez-P{\'e}rez, Mart{\'i}n and P{\'e}rez-Rodr{\'i}guez, Gael and Rabal, Obdulia and Vazquez, Miguel and Oyarzabal, Julen and Fdez-Riverola, Florentino and Valencia, Alfonso and Krallinger, Martin and Louren{\c{c}}o, An{\'a}lia},
  journal = {Database},
  volume  = {2016},
  pages   = {baw120},
  year    = {2016},
  doi     = {10.1093/database/baw120}
}

@inproceedings{Krallinger2015chemdner_patents,
  title     = {Overview of the CHEMDNER patents task},
  author    = {Krallinger, Martin and Rabal, Obdulia and Louren{\c{c}}o, An{\'a}lia and P{\'e}rez-P{\'e}rez, Mart{\'i}n and P{\'e}rez-Rodr{\'i}guez, Gael and Vazquez, Miguel and Leitner, Florian and Oyarzabal, Julen and Valencia, Alfonso},
  booktitle = {Proceedings of the Fifth BioCreative Challenge Evaluation Workshop},
  pages     = {63--75},
  year      = {2015}
}

§9.3 引用指南

使用语料时请引用语料论文(Krallinger et al. 2015, S2);复现竞赛成绩或使用官方评估协议时请同时引用挑战概述论文(S1);使用 Markyt 平台做评测时请引用 Pérez-Pérez et al. 2016。CC BY 4.0 要求注明原始出处与许可。

§9.4 教程与工具链

  • BioC 格式规范与参考解析库:SourceForge 项目 bioc(bioc.sourceforge.net),配合 §6.1 的 v2 镜像解析使用。
  • bigbio 项目:BioCreative 系语料的统一加载 schema(github.com/bigbio),§6.0 的 HuggingFace 镜像即来自该项目。
  • Markyt 使用文档与开源仓库(sing-group/Markyt):赛后自测、可视化错误分析与排行榜。
  • 通用 token 分类教程(HuggingFace Transformers 文档):§6.3.1-§6.4.1 管线的背景知识。

§9.5 获取支持与问题反馈

  • 语料内容问题(标注争议、指南疑问):BioCreative 官方资源页与两篇挑战论文为唯一权威依据,本档案不替代官方答疑渠道。
  • 评估脚本问题:以官方分发的脚本版本为准;使用 §6.9 自建实现前,先在开发集上与官方脚本对齐数字,再用于测试集。
  • 工程与镜像问题:HuggingFace bigbio/chemdner 页面的 Discussions 区与 Markyt 仓库 Issues 是当前仍活跃的两条社区反馈路径。

§10 AI 使用声明卡

§10.1 本页面生产使用的 AI 模型

模型 用途
千方内容生产助手(大语言模型) 资料整理、结构化写作、代码示例起草

§10.2 AI 参与范围说明

AI 参与了以下环节:WebSearch 检索结果的结构化整理、章节起草、代码示例编写、表格整理。AI 不参与:关键数字的最终采信(全部数字须回溯至官方论文/资源页并可验证)、医学与数据工程结论的审核定稿(由千方病案医学编辑部完成)。

§10.3 输入来源列表

  1. Krallinger, M. et al., 2015, Journal of Cheminformatics 7(Suppl 1):S1. doi:10.1186/1758-2946-7-S1-S1 — PubMed 25810766
  2. Krallinger, M. et al., 2015, Journal of Cheminformatics 7(Suppl 1):S2. doi:10.1186/1758-2946-7-S1-S2 — PMC4331692
  3. 语料论文 Table 1(语料总览统计)— PMC4331692 Table 1
  4. 挑战概述论文全文(任务、评估与提交格式)— PMC4331685
  5. 语料论文全文(ResearchGate 上传版)— ResearchGate 271588386
  6. BioCreative-IV virtual issue(赛道生态与团队数量)— Database bau039
  7. 混合 CRF + 多尺度词聚类系统论文(CDI/CEM 成绩)— PMC4331694,doi:10.1186/1758-2946-7-S1-S4
  8. CHEMDNER patents 任务概述(BC V proceedings, 63-75)— Google Scholar 缓存版
  9. Markyt 平台论文 — PMC5001550,doi:10.1093/database/baw120
  10. 专利域化学识别论文 — Database baw061
  11. CHEMDNER 官方资源页 — biocreative.org
  12. NCBI FTP BioC v2 镜像 — ftp.ncbi.nlm.nih.gov
  13. HuggingFace bigbio/chemdner 数据卡与加载脚本 — huggingface.co/datasets/bigbio/chemdner
  14. Martin Krallinger 学术主页/发表列表(机构沿革)— BSC、SciSpace 作者页(引用统计)

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§2 医学背景(ICD-11/SNOMED 锚点映射、任务定义) 千方病案医学编辑部 交叉审核 ✅ 已通过
§3 数据集规格(3,500/3,500/3,000 划分、84,355 提及、SACEM 分布) 千方病案医学编辑部 与语料论文 Table 1 逐项比对 ✅ 已验证
§4 数据结构(DAIMS 字段字典、层级树) 千方病案医学编辑部 与 BioC v2 结构及官方指南交叉比对 ✅ 已验证
§5 数据划分策略 千方病案医学编辑部 交叉审核 ✅ 已通过
§6 代码示例与坑点 千方病案医学编辑部 逻辑审查 + 与官方评估协议比对 ✅ 已通过
§7 质量评估与 DAIMS 评分 千方病案医学编辑部 交叉审核 ✅ 已通过
§8 排行榜与引用数表述 千方病案医学编辑部 与官方论文及 SciSpace 统计快照交叉比对 ✅ 已验证
§C JSON-LD @graph 千方病案医学编辑部 Schema 字段逐项校验 ✅ 已通过

§10.5 AI 生成章节标注

本页面各章节均由 AI 辅助起草,经千方病案医学编辑部按 §10.4 记录逐模块人工校验后发布;关键数字(规模、划分、一致性、基准成绩)均以 §10.3 列出的官方来源为准。

§10.6 最后人工审核日期

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

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


相关数据集导航

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

  • chebi — 共享标签:医疗NLP / 药物发现与化学 / 化学信息学
  • iuphar-bps — 共享标签:医疗NLP / 药物发现与化学 / 化学信息学
  • dgidb — 共享标签:医疗NLP / 药物发现与化学 / 化学信息学
  • rxnorm — 共享标签:医疗NLP / 药物发现与化学
  • chemprot — 共享标签:医疗NLP / 药物发现与化学 / 生物医学文献
  • cadec — 共享标签:医疗NLP / 药物发现与化学
  • open-pmc — 共享标签:医疗NLP / 生物医学文献
  • zinc — 共享标签:药物发现与化学 / 化学信息学
  • pdbbind — 共享标签:药物发现与化学 / 化学信息学
  • toxcast — 共享标签:药物发现与化学 / 化学信息学

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

返回 AI-Ready 数据集