JNLPBA — 五类生物实体 NER 金标准 AI-Ready Wikipedia

2,404 篇 MEDLINE 摘要、59,963 个实体标注的五类生物 NER 基准

来源 GENIA 项目(日本国立情报学研究所 NII / 东京大学) url: http://www.geniaproject.org/shared-tasks/bionlp-jnlpba-shared-task-2004发布时间: 2026-09-15最后更新: 2026-09-25 阅读 28
JNLPBA — 五类生物实体 NER 金标准 AI-Ready Wikipedia

信息速览

数据集名称JNLPBA — 五类生物实体 NER 金标准 AI-Ready Wikipedia
数据类型2,404 篇 MEDLINE 摘要,59,963 个实体标注,IOB2 格式,5 类生物实体,CC-BY-3.0 开放下载
规模不适用(公开文献文本语料,不含患者数据)
接入方式GENIA 项目(日本国立情报学研究所 NII / 东京大学) url: http://www.geniaproject.org/shared-tasks/bionlp-jnlpba-shared-task-2004
AI 就绪度

数据集封面

JNLPBA 生物实体识别语料 — 五类生物 NER 金标准 AI-Ready Wikipedia


INFOBOX

字段 内容
数据集名称 JNLPBA 生物实体识别语料
英文全称 JNLPBA Shared Task Corpus(International Joint Workshop on Natural Language Processing in Biomedicine and its Applications,BioNLP/NLPBA 2004)
别名/简称 JNLPBA 2004、Genia4ER、BioNLP/NLPBA 2004 Shared Task、JNLPBA corpus
疾病分类(ICD-11) 不适用 — 分子生物学文献语料,不限定疾病章节(应用域映射见 §2.1)
SNOMED CT 不直接编码(五类实体经 UMLS/ChEBI 等术语系统间接关联,见 §2.1b)
数据模态 英文生物医学文献文本(MEDLINE 标题与摘要,单模态文本)
AI 任务类型 命名实体识别(NER)/ 序列标注 / 词元分类
样本总数 2,404 篇摘要(train 2,000 / test 404);59,963 个实体标注;22,402 个标注句子
数据大小 压缩包约 3.2 MB,解压后约 10.6 MB
数据格式 IOB2(TSV 逐行 token \t 标签,空行分句,###MEDLINE: 分文档)
许可证 CC-BY-3.0
访问级别 开放下载(无需注册)
DUO 标签 NRES(无限制使用,按 CC BY 署名即可)
语言 英语
首发日期 2004-08(瑞士日内瓦 NLPBA/BioNLP 2004 共享任务)
最后更新 2004-08(官方静态语料,此后未再修订)
发布机构 GENIA 项目(日本国立情报学研究所 NII / 东京大学 / CREST JST)
官方主页 http://www.geniaproject.org/shared-tasks/bionlp-jnlpba-shared-task-2004
下载地址 http://www.nactem.ac.uk/GENIA/current/Shared-tasks/JNLPBA/
DOI 10.3115/1567594.1567610
引用次数 730+(Semantic Scholar,截至 2026-09)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 官方固定划分、格式自解释、有社区转换脚本与 HF 一键加载;扣分项:无官方验证集、嵌套实体已展平、分词粒度非主流分词器输出、需自行处理文档边界行
页面状态 published

§0 审核信息与免责声明

审核声明:本页面由 [千方病案医学编辑部] 交叉审核:§2 医学背景(术语映射与分子生物学概念)、§7 偏倚分析(标注一致性、类别不均衡与时间漂移)。
数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。JNLPBA 语料按 CC-BY-3.0 开放分发,使用时须署名原发布方(GENIA 项目 / JNLPBA 2004 共享任务组织者)并引用原始论文。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 30 秒速览

这是什么? JNLPBA 是生物医学自然语言处理(NLP)领域最早、引用最广的实体识别基准之一。它由 2,404 篇 MEDLINE 文献摘要组成(训练 2,000 篇、测试 404 篇),每篇摘要逐词标注了五类分子生物学实体:Protein(蛋白质)、DNA、RNA、Cell line(细胞系)、Cell type(细胞类型),共 59,963 处实体标注,以 IOB2 序列格式发布(官方任务论文)。

为什么重要? 2004 年通用领域 NER 的 F1 已接近 90 分,而生物医学文本因命名混乱、边界模糊,当时的最佳系统只有 72.6 分——这 30 分的"领域鸿沟"正是 JNLPBA 第一次精确量化的。此后二十年,从 CRF、SVM 到 BioBERT 的每一次生物医学 NER 突破都在这个数据集上留下了可比的坐标(BioBERT 论文)。

我能用它做什么? 训练或评测从文献中自动抽取基因/蛋白/细胞实体的模型;为知识库构建、药物发现文本挖掘提供标注引擎;也可以把它当作"领域迁移难度"的标尺——官方测试集刻意混入了不同时段(1978-2001)和不同主题域的摘要,是少数自带时间漂移与跨域评估设计的语料(任务论文 §Data)。

§1.1 技术摘要

JNLPBA 语料源自 GENIA 3.02 版全量语料。GENIA 项目先用 MeSH 词表 ‘human’、‘blood cells’、‘transcription factors’ 对 MEDLINE 做受控检索,选出摘要交给领域标注员按 48 类(其中 36 个终端类实际启用)分类体系标注;JNLPBA 2004 共享任务组织者将 36 个终端类归并映射为五类(protein、DNA、RNA、cell_line、cell_type),并删除嵌套内嵌实体以满足线性 IOB2 的表达能力,随后从 3.02 版 2,000 篇训练摘要(约 472,006 tokens)外单独抽 404 篇做测试(约 96,780 tokens)(任务论文;ORKG 结构化档案)。测试集一半与训练同域、一半为超域,并按发表年份切成 1978-1989 / 1990-1999 / 2000-2001 三个时段桶,用于度量术语随时间漂移带来的性能衰减(Lacuna 论文导读)。当年 8 支队伍参赛,冠军 Zhou & Su 以 SVM + 深层知识特征拿到 72.56 F1;而今预训练语言模型已把成绩推到 83 以上(BioBERT)。

§1.2 战略价值

维度一:生物医学 NER 的"公尺原器"。 生物医学 NER 论文五花八门,但要做公平对比,社区长期默认回到 JNLPBA 的官方测试集上。它提供了三个稀缺保障:固定划分(不可篡改的 404 篇测试摘要)、固定标签集(五类)、固定评估协议(实体级精确边界 F1)。跨论文比较 BC2GM、NCBI-disease 等单类语料时,JNLPBA 常被用作"多类混合难度"的对照锚点——BioBERT 论文的 8 数据集评测表中它就代表最难的 NER 任务之一(BioBERT Table 4)。

维度二:领域漂移的可控实验场。 多数语料只给一个"训练+测试",而 JNLPBA 官方把测试摘要按 1978-1989、1990-1999、2000-2001 三桶+超域两半切分,等于免费送你一组"时间维度"和"领域维度"的外部验证矩阵。参与队伍当年就发现:模型在 1990 年代文献上最好,往两头都掉分,证实科学术语的时效性衰减(任务论文分析)。今天评估 LLM 或 RAG 系统对旧文献的适应力,这套设计依然可以直接借用。

§1.3 同类数据集横向对比

数据集 规模 实体类型 标注方式 与 JNLPBA 的差异
JNLPBA(本页) 2,404 篇摘要 / 59,963 实体 Protein、DNA、RNA、Cell line、Cell type(5 类) GENIA 3.02 人工标注,36 类归并为 5 类 多类混合、自带时间/领域分桶,嵌套已展平
GENIA 3.02 2,000 篇摘要全量 36 终端类(XML 层级) 同源人工标注 JNLPBA 的母语料;含嵌套与事件扩展,但无官方 NER 测试划分
BC2GM 20,000 句 / 24,596 实体 仅 gene/protein(1 类) BioCreative II 竞赛标注 单类任务、边界更干净;提供 ALTGENE 替代边界
NCBI Disease 6,892 篇摘要 / 5,134 疾病提及 仅 Disease(1 类) 双标注员 + 一致性审核 疾病聚焦、规模小,与分子实体互补
CRAFT 97 篇全文 多本体(ChEBI、NCBI Taxon 等) 概念级深度标注 全文级 + 本体归一化,但训练量小一个量级
BioNLP’09 事件抽取语料 事件+触发词 GENIA 团队延伸标注 任务从 NER 升级到事件结构,依赖 JNLPBA 同源文本

§1.4 版本时间轴

时间 版本/事件 说明
2003 GENIA 3.02 发布 母语料定版:MeSH 受控检索 + 36 终端类人工标注(Kim et al. 2003)
2004-08 JNLPBA 共享任务发布 5 类归并版 2,404 篇摘要开放下载;8 队参赛,冠军 72.56 F1(任务论文)
2004 后 官方静态 语料冻结为任务评估版,官方未再修订(任务报告页)
2017 前后 社区 standoff 转换版 spyysalo/jnlpba 提供 standoff 格式与 MUID-PMID 映射(GitHub)
2020 前后 Hugging Face 镜像 jnlpba/jnlpba 与 bigbio/jnlpba 上线,load_dataset 一键加载(HF)

§1.5 典型应用场景

  1. 文献知识库构建:从 PubMed 摘要流中批量抽取基因/蛋白/细胞实体,回填 UniProt、Entrez Gene 等数据库的提及证据链。
  2. 药物发现文本挖掘:靶点-疾病文献关联管线的第一步是实体识别,JNLPBA 训练的模型可承担蛋白与细胞系抽取。
  3. 领域 LLM 能力评测:把 JNLPBA 测试集改造成少样本 prompt 评测,度量通用大模型在分子生物学术语上的边界敏感度。
  4. NER 课程教学基准:规模小(3 MB)、格式简单(每行 token+标签),适合作为生物医学 NLP 的第一个实战数据集。
  5. 时间漂移与跨域研究:利用官方时段分桶与超域测试半区,研究术语演化、领域迁移与语料更新策略。

§2 医学背景与术语映射

§2.1 术语与 ICD-11 映射

JNLPBA 是文献级语料,不限定任何疾病;其标注对象(分子生物学实体名称)本身不是疾病分类学概念。下表给出五类实体高频出现的疾病语境与 ICD-11 章节的对应关系,供下游把"实体提及"落到疾病语境时参考:

概念标签 ICD-11 编码(示例章节) ICD-11 术语 说明
蛋白/DNA/RNA 提及(不限疾病) 不适用 — 全文献谱覆盖 — 语料覆盖 MEDLINE 分子生物学文献,不限定疾病章节
转录因子研究相关语境 2A00-2F9Z 恶性肿瘤 癌基因/转录因子(如 NF-kappaB 家族)与肿瘤文献高度重叠
血细胞与免疫相关语境 3A00-3B9Z 血液与造血器官疾病 测试集超域半区即聚焦血细胞与转录因子主题
遗传病研究相关语境 20 号章 发育异常 基因突变与发育异常文献中的 DNA/protein 密集提及

⚠️ 上表为章节级示例映射,ICD-11 编码以 WHO 官方浏览器为准;JNLPBA 本身不提供句子与任何 ICD-11 编码的链接。

§2.1b SNOMED CT 映射

语料要素 SNOMED CT 关联方式 术语说明
Protein 实体 无单一直接概念,经 UMLS Metathesaurus 关联"蛋白物质"类概念 语料只给表层字符串,不含 SNOMED 编码;归一化需外接 UniProt/ChEBI 词典
DNA/RNA 实体 经 UMLS 关联核酸物质类概念 建议以 ChEBI(DNA/RNA 化学实体)为中间层再桥接 SNOMED
Cell type 实体 可对齐 Cell Ontology / SNOMED 细胞结构层级 例:T 淋巴细胞等细胞类型词在 SNOMED 形态学轴有对应概念
Cell line 实体 SNOMED 无直接对应 细胞系是实验室产物,建议对接 ATCC/CelloSaurus 词典而非临床术语轴

§2.2 背景简介:为什么生物医学实体识别难

分子生物学文献的实体命名是自然语言中最混乱的子领域之一。官方任务论文归纳了三类系统性困难(任务论文 §1):

  1. 命名缺乏正字法规律:同一蛋白可有全名、缩写、希腊字母变体、家族名等多种写法,大小写与标点规则形同虚设(如 “NF-kappaB”、“IL-2R alpha”)。
  2. 边界主观性:描述性定语是否算入实体名(如 “murine T lymphocyte precursors” 中的物种词与状态词)连专家都会摇摆,后续第三方审计量化了这种不一致(见 坑点 5)。
  3. 术语时效性:科学命名随发现进程快速演化,1980 年代的命名习惯与 2000 年后明显不同,官方测试集按时段分桶正是为了让这一现象可度量。

与通用新闻语料(CoNLL-2003,F1 接近 90)相比,首届 JNLPBA 冠军仅 72.56 F1,这约 30 分的差距就是"生物领域难度"的历史定量注脚(任务论文)。

同一句 MEDLINE 原文在五类标签下的典型标注形态(构造自任务论文 Figure 1 的例句与 IOB2 规则):

句子片段 标注结果 说明
interleukin-1 (IL-1) interleukin-1 → B-protein,IL-1 → B-protein 全名与缩写各自成实体
IL-2 receptor alpha (IL-2R alpha) gene IL-2 receptor alpha → B-protein + I-protein,gene → B-DNA “gene” 触发词把头部切成 DNA 类
CD4-CD8- murine T lymphocyte precursors B-cell_type + I-cell_type … 描述性定语并入与否是最大边界争议点
transcription O 过程词不标注,考验"实体 vs 过程"的区分

§2.2b 实体类型速查

类型 生物学含义 典型例子 边界难度来源
protein 蛋白质/基因产物名称 NF-kappaB、IL-2、p53 家族名、缩写、磷酸化形式变体
DNA 基因/ DNA 区域(含 “XX gene”) IL-2 gene、promoter region 与 protein 嵌套(“IL-2 gene”)
RNA RNA 分子/转录物 mRNA、U6 snRNA 独立词形少、与 protein 共享词
cell_line 实验室细胞系 HeLa、Jurkat 与 cell_type 语义纠缠
cell_type 细胞类型 T lymphocyte、neutrophil 描述性修饰语边界摇摆

§2.3 任务定义

JNLPBA 定义的是句级实体识别与分类(实体级 NER):给定 MEDLINE 摘要的一个句子(已分词),系统需输出每个实体的起止 token 与五类之一。评价时只有精确边界匹配才算正确(社区亦报告左/右边界放松的变体,见 §6.5 坑点 6)。它是三层任务栈的底座:

  • 底座(本语料):实体识别 → 输出 span + 类型;
  • 中层:实体归一化(把 “IL-2” 映射到 UniProt/Entrez Gene ID);
  • 顶层:关系/事件抽取(如蛋白-蛋白相互作用),通常以 BioNLP’09 等延伸语料承担。

在临床工作流中,该任务对应"文献证据结构化":把非结构化摘要转为可供检索、统计与知识图谱构建的结构化提及,是药物警戒、靶点发现与临床证据综述自动化的前置步骤。

§2.4 语料来源人群(文献源)画像

本语料不含患者;"样本"是文献摘要,其画像如下:

维度 描述
来源 MEDLINE 受控检索(MeSH:‘human’、‘blood cells’、‘transcription factors’)
发表年份 覆盖 1978-2001(测试集按 1978-1989 / 1990-1999 / 2000-2001 分桶)
文献类型 研究论文标题+摘要,不含全文
语种 英语(ASCII 化处理)
主题域 训练集:血细胞与转录因子相关分子生物学;测试集:一半同域 + 一半超域
伦理审查 不适用 — 公开发表文献,无人类受试者原始数据

§2.5 临床与科研价值

对医学科研与临床信息学而言,JNLPBA 类模型是"文献 → 结构化证据"管线的第一公里:电子病历研究中引用的分子标志物证据、药物重定位假设、生物标志物综述,都始于从海量摘要中准确圈出"哪个蛋白、哪段 DNA、哪种细胞"。实体识别质量每提高 1 个 F1 点,下游归一化与关系抽取的错误率会按链式放大收敛,因此这个底座任务的长期价值远超其表面规模。

§2.6 金标准表

划分 摘要数 标注方式 标注者 性质
train 2,000 GENIA 3.02 人工逐词标注,36 类归并为 5 类 GENIA 项目领域标注员(单一标注员为主 + 专家复核体系) 官方训练集
test 404 同一标注体系;含同域/超域两半与三个年份桶 同上 官方评估集(禁止调参)

注:GENIA/JNLPBA 未发布标注者间一致性 kappa;第三方研究引用生物医学 NER 一致性文献区间为 87%-89%,并系统记录了 JNLPBA 中的四类标注不一致(Song et al. 扩展分析,BMC Bioinformatics 2006)。


§3 数据集规格

§3.0 版本抉择矩阵

你的需求 推荐版本 大小 理由
快速实验 / 教学 Hugging Face jnlpba/jnlpba 约 3.2 MB load_dataset("jnlpba/jnlpba") 一键加载,字段已是 tokens + ner_tags
需要字符偏移标注(与别的语料统一管线) spyysalo/jnlpba standoff 版 数 MB 提供 .txt/.ann standoff 与转换工具,可接 brat/Doccano 类工具链
复现 2004 论文基准数字 官方 tar.gz 原始包 约 3.2 MB 逐 token IOB2 与当年评估协议完全一致
需要嵌套/36 类原始层级 GENIA 3.02 全量语料 数十 MB XML JNLPBA 已展平嵌套并归并类别,复杂结构须回母语料
回溯 PubMed 全文 / 补全元数据 官方包 + MUID-PMID 映射表 映射表 <1 MB 文件名是旧 MedLine UID,须转换才能查 PubMed(见 坑点 7)

§3.1 模态详情

  • 文本类型:MEDLINE 研究论文的标题与摘要(TI+AB),不含全文、图表或表格。
  • 预处理:官方分词已完成(token 化粒度较主流分词器更粗,见 坑点 6);文本经 ASCII 化,希腊字母等被转写。
  • 标注层:单层线性序列标注(IOB2),每 token 恰有一个标签,无嵌套、无跨句实体。
  • 元数据层:文档边界以 ###MEDLINE: 行标记;文件名为旧 MedLine UID,可通过社区映射表回溯 PMID(spyysalo/jnlpba)。

§3.2 按子集样本数

划分 摘要数 句子数(HF 统计) tokens 实体数
train 2,000 18,546 472,006 51,301
test(HF 中标记为 validation) 404 3,856 96,780 8,662
合计 2,404 22,402 568,786 59,963

来源:ORKG 结构化档案(tokens/实体数)、HF 数据集卡片(句子数)。

§3.3 实体类型分布

实体类型 train 实体数 test 实体数 train token 占比 test token 占比
protein 30,269 5,067 11.2% 9.7%
DNA 9,533 1,056 5.1% 2.8%
RNA 951 118 0.5% 0.3%
cell_type 6,718 1,921 3.1% 4.9%
cell_line 3,830 500 2.3% 1.5%
O(非实体) — — 77.8% 80.8%
合计实体 51,301 8,662 — —

来源:ORKG 档案、Ponomareva et al. 2007。注意 protein 与 RNA 的 token 占比相差约 20 倍以上——类别不均衡是该语料的核心统计事实。

§3.4 存储大小

形态 大小
官方两个 tar.gz(train+test) 约 3.2 MB(HF 下载统计 3,171,072 字节)
解压后 IOB2 文本 约 10.6 MB(HF dataset_size 10,577,272 字节)
内存中 tokens+tags 列表(Python) 约几十 MB,单机 CPU 即可全量加载

§3.5 标注方式

  • 人工标注:GENIA 项目由领域标注员在 XML 编辑环境中逐词标注 36 个终端类;JNLPBA 版本将其映射归并为五类(映射关系见任务论文,另见 §7.2)。
  • 非自动、非弱监督:标注全部人工完成;无模型预标注流水线记录。
  • 归并规则:嵌套内嵌实体被删除(只保留最外层),以满足 IOB2 线性表达能力(任务论文)。

§3.6 标注者资质与一致性

GENIA 项目采用领域标注员 + 专家复核的流程,标注对象为分子生物学文献。语料官方未发布标注者间一致性数字;相关生物医学 NER 一致性研究在同类任务上报告 87%-89% 的一致率,第三方对 JNLPBA 的系统审计确认了前置形容词、嵌套、cell line/type、漏标四类不一致(BMC Bioinformatics 2006 扩展分析)。使用者应把"绝对金标准"理解为"最佳可用标准",并在误差分析中容忍这些已知噪声。

§3.7 采集周期

母语料 GENIA 3.02 于 2003 年定版;JNLPBA 摘要发表于 1978-2001 年间;共享任务语料于 2004 年 8 月发布并冻结(任务论文)。

§3.8 地域覆盖

语料为全球 MEDLINE 英语文献,不按作者地域筛选;受控检索词(human/blood cells/transcription factors)决定了主题域而非地理覆盖。

§3.9 “设备规格”(文本语料不适用项)

文本语料无采集设备。等价的技术规格为:官方分词器(GENIA 项目内部分词)、ASCII 编码、TSV 行格式、每行 token<TAB>TAG、空行分句、###MEDLINE: 行分文档(Apache OpenNLP 格式文档)。

技术规格明细表:

规格项 值 对工程的影响
字符编码 ASCII 化文本 希腊字母/重音符号已被转写;还原需外部对照
行分隔 \n,每行一条 token 记录 流式读取安全
字段分隔 制表符 \t,恰好两列 split("\t") 即可,勿用空白切分(token 内无空格)
句边界 空行 空行前最后一句需 flush(见 §6.1 代码)
文档边界 ###MEDLINE:<UID> 行 解析器必须显式识别,见 坑点 2
标签词表 11 个固定字符串 勿假设字母序,用 HF ClassLabel 顺序(§4.2)
嵌套 不支持(已展平) 需嵌套回母语料(见 坑点 4)

§3.10 深度溯源链

MEDLINE (PubMed)
   └─ MeSH 受控检索: 'human' + 'blood cells' + 'transcription factors'
        └─ GENIA 3.02 语料 (2003 定版, 36 终端类人工标注)
             ├─ GENIA 3.02 全量 XML (含嵌套, 含事件扩展)
             └─ JNLPBA 2004 共享任务版 (2,404 摘要, 5 类, IOB2, 嵌套展平)
                  ├─ 官方 tar.gz (NaCTeM 镜像)
                  ├─ spyysalo/jnlpba standoff 转换版 (+ MUID-PMID 映射)
                  └─ Hugging Face 镜像 (jnlpba/jnlpba, bigbio/jnlpba)

每一级都有公开可核查的出处:检索与标注规则见 任务论文;转换流程见 GitHub 仓库 README。

§3.11 质量控制流程(标注侧)

GENIA/JNLPBA 的标注质量控制可归纳为四层(依据任务论文与项目公开文档):

层级 机制 对使用者的可见性
1. 标注规范 48 类分类体系 + 36 终端类定义文档,实体判定有章可循 任务论文附录与 GENIA 项目文档
2. 标注执行 领域标注员在 XML 标注环境中逐词标注 标注结果即 iob2 文件
3. 归并映射 36 → 5 类的映射由共享任务组织者统一定义 任务论文描述(无机器可读文件,见 DAIMS 第 13 项)
4. 一致性审计 官方未发布 kappa;一致性由第三方研究事后量化 见 §7.2 四类不一致清单

使用者视角的要点:这份语料的"金标准"地位来自规模与广泛采用,而非已发布的双标注一致率;在方法论文中引用它时应同时引用第三方审计,以示对噪声上限的知情。


§4 数据结构

§4.0 目录树

官方 tar.gz 解压后(文件名已由社区 README 核实):

jnlpba/
├── Train/
│   └── Genia4ERtraining.tar.gz      # 解压后含 Genia4ERtask1.iob2 / Genia4ERtask2.iob2
├── Evaluation/
│   └── Genia4ERtest.tar.gz          # 解压后含 Genia4EReval1.iob2 / Genia4EReval2.iob2
└── (社区补充:MUID-PMID-map.txt,见 spyysalo/jnlpba 仓库 conversion/ 目录)

spyysalo/jnlpba 社区仓库结构(standoff 工作流):

spyysalo-jnlpba/
├── original-data/       # 官方 BIO 格式原始数据存档
├── standoff/
│   ├── train/           # 每文档一组 .txt / .conll / .ann 文件
│   └── test/
├── conversion/          # jnlpbasplit.py、jnlpba2standoff.py、extractTIAB.py、MUID-PMID-map.txt
├── LICENSE              # 数据许可条款
└── README.md

IOB2 文件内部结构示例:

###MEDLINE:87103532        ← 文档边界行(旧 MedLine UID)
IL-2	B-DNA              ← token<TAB>标签
gene	I-DNA
expression	O
and	O
NF-kappaB	B-protein
.	O
                           ← 空行 = 句子结束

§4.1 DAIMS 字段字典

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
token str 官方分词后的词元 NF-kappaB 模型输入 分词粒度与主流分词器不一致 无缺失 ASCII 字符串
tag str 该 token 的 IOB2 标签 B-protein 监督信号 见 §7.2 标注不一致 无缺失(O 显式编码) O;B-/I- ×
doc_id str ###MEDLINE: 行给出的旧 MedLine UID 87103532 文档级分组、溯源 有 3 个重复 UID(社区以 -2 后缀区分) 无缺失 数字字符串
sentence_id 派生 空行分隔得到的句序号(需自行生成) doc87103532_s3 句级打包、CV 折切分 自派生字段,注意与 HF guid 对齐 — 自定义
split 派生 train / test(HF 中 test 名为 validation) train 严格复现官方划分 HF 命名易误导,见 坑点 1 —
entity_span 派生 由 B-/I- 序列重组的实体起止 token 索引 (0, 1, DNA) 评估与错误分析 嵌套已展平,重组规则需处理 I- 无前驱 B- 的异常 — 任意 token 区间
entity_type 派生 实体五类归一类型 DNA 类别评估、宏平均 类别混淆集中区见 坑点 5 — 5 类
label_id 派生 HF ClassLabel 整数编码 9 模型标签空间 顺序固定勿重排 — 0-10(O 至 I-protein)

§4.2 标签空间与分布

HF 镜像的 ClassLabel 顺序(共 11 类,整数编码 0-10,勿假设字母序):

id 标签 id 标签
0 O 6 I-cell_line
1 B-DNA 7 B-cell_type
2 I-DNA 8 I-cell_type
3 B-RNA 9 B-protein
4 I-RNA 10 I-protein
5 B-cell_line

来源:HF jnlpba.py 源码。分布统计见 §3.3。

§4.3 关键统计

  • 平均每句 25.5 tokens(568,786 tokens / 22,402 句);平均每摘要约 25 个实体。
  • 实体平均长度约 1.8 tokens(protein 类多为 2-3 tokens,RNA 类多为单词)。
  • 超过 78% 的 token 是 O 类——准确率(accuracy)在此语料上无意义,必须用实体级 F1(见 §6.9)。
  • 测试集 404 篇 = 同域半区 + 超域半区(血细胞/转录因子),另含三个年份桶。

§4.4 数据层级

JNLPBA 是典型的四层文本层级:

语料 (2,404 摘要)
 └─ 文档 (摘要, doc_id = 旧 MedLine UID)
     └─ 句子 (空行分隔, 平均 25.5 tokens)
         └─ token (行级记录, tag ∈ 11 类)
             └─ 实体 (连续 B-/I- 片段, 五类)

注意:实体是派生结构而非存储结构——需要你从 B-/I- 序列重组;这也是评估脚本的第一处出错点。

§4.5 缺失值与信息性缺失

  • 无缺失值:IOB2 格式下每行必有 token 与 tag,空行与 ###MEDLINE: 行是结构性而非数据性缺失。
  • 信息性缺失的两处已知坑:① 漏标——第三方审计发现训练集存在 “T cell”、“Peripheral blood neutrophil”、“NK cell” 未标 cell_line 的实例(BMC Bioinformatics 2006),它们以 O 标签出现,属于"沉默缺失";② 重复文档 UID——3 个文档以 -2 后缀重名,合并文档级统计时需去重(spyysalo/jnlpba)。

§4.6 原始格式与 HF 镜像字段对照

原始 IOB2 概念 HF jnlpba/jnlpba 字段 转换要点
token 行 tokens: Sequence[str] 逐行收集,空行触发样本切分
标签字符串 ner_tags: Sequence[int](ClassLabel) 字符串→整数按 §4.2 顺序映射
###MEDLINE: 行 被丢弃(早期版本曾引发重复 guid 报错,后修复) doc_id 信息在 HF 镜像中不可恢复,需要文档级分析请用官方包
空行(句边界) 样本边界 HF 的一"行"= 一个句子
文档归属 无 需文档级分组/年份分析时必须回到原始文件
split 命名 train / validation validation = 官方 test(见 坑点 1)

选择建议:只要 token 级训练用 HF 镜像最快;任何涉及文档、年份、standoff 偏移的分析,一律回到官方 tar.gz 或 spyysalo standoff 版。


§5 划分与使用建议

§5.1 官方划分

划分 规模 用途 官方约束
train(Genia4ERtask1.iob2) 2,000 篇 / 18,546 句 训练 允许叠加任何外部资源(当年允许 gazetteer)
test(Genia4EReval1.iob2) 404 篇 / 3,856 句 最终评估 仅限提交前一次评估;禁止据此调参

§5.2 社区惯例划分

  • Hugging Face 惯例:把官方 test 命名为 validation 加载——这是历史包袱而非新协议,直接在其上调参会污染官方测试集(见 坑点 1)。
  • 自留验证集:社区普遍从 train 内按文档(非按句)切 10%-15% 做验证,避免摘要级信息重叠。
  • 交叉验证:论文中常见 5 折文档级 CV 用于超参搜索,最终在官方 test 报告一次。

§5.3 划分策略与泄漏风险

  1. 按句切分是错误姿势:同一摘要的句子共享术语与缩写定义,句级随机切分会让验证集"背过答案"。切分单位必须是文档。
  2. 缩写定义泄漏:生物文献惯例是首现即定义缩写(“interleukin-1 (IL-1)”),同文档跨句复制该模式是 NER 模型最强的"作弊"途径。
  3. gazetteer 双刃剑:从 train 抽实体词典参与训练合法(官方允许外部资源),但把 test 文本的词典喂进模型即构成测试集污染。
  4. 重复 UID:3 个重复文档 ID 若一在 train 一在 test 附近使用需谨慎核查(官方划分本身固定,风险主要在自建划分时)。

§5.4 交叉验证建议

文档级 5 折,各折内保持年份桶与实体类型分布大体均衡(分层抽样键 = (年份桶, 实体密度分位))。RNA 类在 404 篇测试里只有 118 处,任何按句洗牌的 CV 都会出现某折 RNA 接近为零的病态折。

§5.5 外部验证建议

  • 时间维度:直接复用官方 1978-1989 / 1990-1999 / 2000-2001 三桶报告分段 F1,量化术语漂移。
  • 领域维度:对比同域半区 vs 超域半区的 F1 差值,估计迁移代价。
  • 跨语料维度:在 BC2GM(单类基因)或 CRAFT(全文多本体)上复测同一模型,检验对 JNLPBA 分词粒度与标签体系的依赖(见 坑点 6)。

§5.6 一个防泄漏的完整工作流

从拿到数据到产出可报告数字的推荐顺序:

步骤 动作 防泄漏要点
1 下载官方 tar.gz,解析为文档级结构(§6.1) 保留 doc_id,丢弃 HF 镜像命名
2 从 train 按文档切 10% 作验证集 固定随机种子并入库存档,防止"重新选验证集"式过拟合
3 gazetteer/词典只从 train 的 train 部分(不含验证)提取 词典来源写进实验记录
4 超参搜索与早停只看验证集 任何"顺手看一眼 test"的调试都视为违规
5 模型定型后对官方 test 评估一次 保存原始预测输出文件,便于事后审计
6 补充分类别、分年份桶、分同域/超域报告 一次性产齐,避免反复触碰 test

§6 AI 就绪指南

§6.0 云端快速启动

最短路径(任何有 Python 3.8+ 的环境):

from datasets import load_dataset
ds = load_dataset("jnlpba/jnlpba")   # 注意:其 "validation" 即官方 test,勿用于调参
print(ds)
# train: 18,546 句;validation: 3,856 句(= 官方 404 篇测试摘要)

§6.1 快速上手:读原始 IOB2

以下代码假设你已把官方包解压为:

data_root/
├── train/Genia4ERtask1.iob2
└── test/Genia4EReval1.iob2

data_root 与代码内相对路径直接拼接,无需其他目录。最小可用子集:只需这两个 iob2 文件。

from pathlib import Path

def read_iob2(path):
    """读取 JNLPBA IOB2 文件 -> (docs, sentences, tokens, tags) 嵌套结构。
    结构约定: docs[doc_id] = list[sentence]; sentence = list[(token, tag)]
    """
    docs, cur_doc, cur_sent = {}, None, []
    for line in Path(path).read_text(encoding="utf-8").splitlines():
        line = line.strip()
        if line.startswith("###MEDLINE:"):          # 文档边界行
            cur_doc = line.split(":", 1)[1]
            continue
        if not line:                                 # 空行 = 句子结束
            if cur_sent:
                docs.setdefault(cur_doc, []).append(cur_sent)
                cur_sent = []
            continue
        token, tag = line.split("\t")
        cur_sent.append((token, tag))
    if cur_sent:
        docs.setdefault(cur_doc, []).append(cur_sent)
    return docs

train = read_iob2("data_root/train/Genia4ERtask1.iob2")
test  = read_iob2("data_root/test/Genia4EReval1.iob2")
print(len(train), "train docs;", len(test), "test docs")
# 预期约 2,000 与 404(重复 UID 文档按 ID 去重后计数,见坑点 7)

§6.2 数据获取

通道 链接 大小 流程
官方训练包 http://www.nactem.ac.uk/GENIA/current/Shared-tasks/JNLPBA/Train/Genia4ERtraining.tar.gz 合计约 3.2 MB 直接下载解压,无注册无申请
官方测试包 http://www.nactem.ac.uk/GENIA/current/Shared-tasks/JNLPBA/Evaluation/Genia4ERtest.tar.gz 见上 同上
HF 镜像 https://huggingface.co/datasets/jnlpba/jnlpba 约 3.2 MB load_dataset 自动下载
standoff 版 https://github.com/spyysalo/jnlpba 数 MB git clone 后按 README 转换
mkdir -p data_root/train data_root/test
wget -O data_root/train/Genia4ERtraining.tar.gz \
  "http://www.nactem.ac.uk/GENIA/current/Shared-tasks/JNLPBA/Train/Genia4ERtraining.tar.gz"
wget -O data_root/test/Genia4ERtest.tar.gz \
  "http://www.nactem.ac.uk/GENIA/current/Shared-tasks/JNLPBA/Evaluation/Genia4ERtest.tar.gz"
tar xzf data_root/train/Genia4ERtraining.tar.gz -C data_root/train
tar xzf data_root/test/Genia4ERtest.tar.gz  -C data_root/test
# 解压后按 §6.1 目录结构放置 Genia4ERtask1.iob2 与 Genia4EReval1.iob2

许可提示:CC-BY-3.0,论文与数据中署名即可商用;无需 DUA、无需伦理审批(无人类受试者数据)。

§6.3 预处理全流程

格式转换 → 清洗 → 标准化三步走(可运行):

from pathlib import Path

LABELS = ["O", "B-DNA", "I-DNA", "B-RNA", "I-RNA",
          "B-cell_line", "I-cell_line", "B-cell_type", "I-cell_type",
          "B-protein", "I-protein"]
L2ID = {l: i for i, l in enumerate(LABELS)}

def spans_from_iob(tags):
    """IOB2 -> [(start, end, type)]; end 为闭区间。
    容错: 处理 I- 无前驱 B- 的异常(将其视作 B-)。"""
    spans, start, typ = [], None, None
    for i, t in enumerate(tags):
        if t == "O" or t.startswith("B-"):
            if start is not None:
                spans.append((start, i - 1, typ))
            start, typ = (i, t[2:]) if t.startswith("B-") else (None, None)
        elif t.startswith("I-"):
            if start is None:            # 异常 I- 开头: 当作 B- 起始
                start, typ = i, t[2:]
    if start is not None:
        spans.append((start, len(tags) - 1, typ))
    return spans

def clean_and_encode(docs):
    """清洗+标准化: 去空句、转 label_id、抽实体 span。"""
    out = []
    for doc_id, sents in docs.items():
        for sent in sents:
            tokens = [w for w, _ in sent]
            tags   = [t for _, t in sent]
            if not tokens:
                continue
            out.append({
                "doc_id": doc_id,
                "tokens": tokens,
                "label_ids": [L2ID[t] for t in tags],
                "spans": spans_from_iob(tags),
            })
    return out

train_ds = clean_and_encode(read_iob2("data_root/train/Genia4ERtask1.iob2"))
test_ds  = clean_and_encode(read_iob2("data_root/test/Genia4EReval1.iob2"))
print(train_ds[0]["tokens"][:8], train_ds[0]["spans"][:2])

要点:① 官方已分词,不要再对自己的分词器重切,否则实体边界全毁;② I- 孤儿标签的容错必须有,否则 span 重组会静默丢实体;③ 文本已 ASCII 化,若要还原希腊字母需自行决定(会影响词表 OOV)。

<details>
<summary>扩展:IOB2 ↔ IOBES 转换脚本(部分现代解码器需要,约 25 行)</summary>

def iob2_to_iobes(tags):
    """IOB2 -> IOBES: B- 开头且下一 token 非同型 I- 则为 S-;
    I- 结尾则为 E-。"""
    iobes, n = [], len(tags)
    for i, t in enumerate(tags):
        if t == "O":
            iobes.append("O"); continue
        prefix, typ = t.split("-")
        nxt = tags[i + 1] if i + 1 < n else "O"
        if prefix == "B":
            cur_typ = typ
            if not (nxt.startswith("I-") and nxt[2:] == cur_typ):
                iobes.append(f"S-{typ}")          # 单 token 实体
            else:
                iobes.append(t)
        else:                                      # prefix == "I"
            prv = tags[i - 1] if i > 0 else "O"
            same = prv[2:] == typ and prv != "O"
            nxt_same = nxt.startswith("I-") and nxt[2:] == typ
            if same and not nxt_same:
                iobes.append(f"E-{typ}")          # 实体结束
            elif not same:
                iobes.append(f"S-{typ}")          # 孤儿 I- 按单实体处理(与 §6.3 容错一致)
            else:
                iobes.append(t)
    return iobes

# 注意: 报告结果时必须声明所用编码, IOB2 与 IOBES 的 F1 数值可比但预测输出不可混用

</details>

§6.4 PyTorch DataLoader

完整可运行的词分类管线(Hugging Face transformers 分词 + 对齐):

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

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

MODEL_NAME = "dmis-lab/biobert-base-cased-v1.2"   # 也可换 bert-base-cased / allenai/scibert
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
MAX_LEN = 256                                     # JNLPBA 多为摘要单句, 256 足够

class JnlpbaDataset(Dataset):
    """clean_and_encode() 产出的记录列表 -> token 分类样本。
    对齐策略: 每个原始 token 取其首子词的预测位, 其余子词标 -100。"""
    def __init__(self, records):
        self.records = records
    def __len__(self):
        return len(self.records)
    def __getitem__(self, idx):
        rec = self.records[idx]
        enc = tokenizer(rec["tokens"],
                        is_split_into_words=True,
                        truncation=True, max_length=MAX_LEN,
                        padding="max_length", return_tensors="pt")
        word_ids = enc.word_ids(batch_index=0)
        labels, prev = [], None
        for wid in word_ids:
            if wid is None:
                labels.append(-100)              # 特殊 token / padding
            elif wid != prev:
                labels.append(rec["label_ids"][wid])
                prev = wid
            else:
                labels.append(-100)              # 同一原始 token 的后续子词
        return {"input_ids": enc["input_ids"][0],
                "attention_mask": enc["attention_mask"][0],
                "labels": torch.tensor(labels, dtype=torch.long)}

train_loader = DataLoader(JnlpbaDataset(train_ds), batch_size=32, shuffle=True,
                          num_workers=2, drop_last=False)
test_loader  = DataLoader(JnlpbaDataset(test_ds),  batch_size=64, shuffle=False)

batch = next(iter(train_loader))
print(batch["input_ids"].shape, batch["labels"].shape)
# torch.Size([32, 256]) torch.Size([32, 256])

</details>

§6.5 坑点 8 个

以下坑点全部来自该语料的官方文档、第三方审计论文与社区 issue 的真实失败模式,每条给出由浅入深的解法。

⚠️ 坑点 1:把 HF 镜像的 “validation” 当验证集调参(分类:评估误用)

问题:Hugging Face jnlpba/jnlpba 出于历史原因把官方 404 篇测试摘要加载成 validation split。不知情的用户会拿它做早停和超参搜索,然后把成绩报成"JNLPBA 测试集结果",构成测试集污染。
症状:你的模型"测试成绩"与文献同模型差距显著偏小;或同一模型两次运行官方数字对不上——因为你调参的过程已经把测试集信息泄漏进训练决策。
解决:

  1. 简单方法:加载后立即改名——ds = load_dataset("jnlpba/jnlpba"); official_test = ds["validation"],全程禁止 touch,只在最终报告时评估一次。
  2. 进阶方法:从 train 内按文档切 10% 做真正的验证集(doc_id % 10 == 0),早停/调参只看这份验证集。
  3. SOTA 方法:把官方 test 放进独立进程/独立环境评估,训练脚本物理上不持有测试数据路径,CI 中以只读挂载。
    参考:HF 加载源码(_FILENAMES 映射)、官方任务论文。

⚠️ 坑点 2:###MEDLINE: 行与空行被当成普通句子(分类:预处理陷阱)

问题:原始 IOB2 文件用 ###MEDLINE:87103532 行标记文档边界、空行标记句子边界。朴素的"按空行分句"解析器会把文档头当 token、把跨文档内容粘连,还会让句子 ID 跨文档串号。
症状:句子数显著多于 22,402;出现以 # 开头的"幽灵 token";HF 早期加载脚本曾因此抛出 DuplicatedKeysError(guid 冲突)。
解决:

  1. 简单方法:解析循环里先判 line.startswith("###MEDLINE:") 再判空行(见 §6.1 代码),永不把 # 行送入分词。
  2. 进阶方法:句 ID 组合 doc_id + 句序 保证全局唯一;遇到重复 doc_id 时统一加 -2 后缀(与社区 standoff 版本一致)。
  3. SOTA 方法:改用 spyysalo standoff 版(每文档独立 .txt/.ann 文件),从根上消除边界行解析问题,同时获得字符偏移。
    参考:HF 讨论区重复键修复、spyysalo/jnlpba README。

⚠️ 坑点 3:类别极不均衡让微平均"看起来很美"(分类:标签理解)

问题:训练集 token 层面 protein 占 11.2% 而 RNA 只占 0.5%(实体数 30,269 vs 951,相差约 32 倍),77.8% 的 token 是 O。只报微平均 F1 时,RNA 上的崩盘会被 protein 的高分稀释掉。
症状:总体 F1 高达 75+,但 RNA 的 F1 可能只有 60 上下甚至更低;模型把一切含糊词判成 protein(文献记录了这种"向多数类塌缩"倾向)。
解决:

  1. 简单方法:永远同时报告五类的分类别 F1 + 宏平均(seqeval 一行搞定,见 §6.9)。
  2. 进阶方法:训练时对稀有类做标签加权或对含 RNA/cell_line 的句子过采样;评估时按类抽错误样本人工复核。
  3. SOTA 方法:分桶评估——对每个 (实体类型 × 年份桶) 组合报 F1;参考 POSBIOTM 扩展分析按类诊断边界松弛收益(protein 左边界松弛 +4.0,cell_line 右边界松弛 +9.0)。
    参考:Ponomareva et al. 2007(标签分布统计)、BMC Bioinformatics 2006 扩展分析。

⚠️ 坑点 4:嵌套实体已被展平,线性 IOB 表达不了它们(分类:标签理解)

问题:官方构建时删除了内嵌实体(如 DNA 名 “IL-2 gene” 内部的蛋白名 “IL-2”)。如果你的下游任务需要嵌套结构(生物医学 NER 的 SOTA 方向之一),JNLPBA 直接训练出来的模型天生不会报嵌套。
症状:模型对 “IL-2 gene” 只会输出一个整体标签;与母语料 GENIA 3.02 XML 对不上数;第三方审计甚至在 JNLPBA 内部发现不一致——59 处 “IL-2 gene” 中 13 处把 IL-2 标成 protein、46 处把整体标为 DNA。
解决:

  1. 简单方法:明确把任务定义为"扁平 NER",论文写作时声明该限制。
  2. 进阶方法:需要嵌套时回到 GENIA 3.02 母语料 XML 重新导出,或改用支持嵌套的跨度枚举模型(span-based classifier)。
  3. SOTA 方法:用 JNLPBA 训练扁平模型、用 GENIA 3.02 训练嵌套模型做蒸馏/联合训练,并在测试时对重叠 span 做规则仲裁。
    参考:任务论文(结构简化说明)、BMC Bioinformatics 2006(嵌套不一致量化)。

⚠️ 坑点 5:cell_line 与 cell_type 系统性混淆 + 已知漏标(分类:偏倚陷阱)

问题:细胞系是细胞类型的实验室衍生物,语义边界天然模糊(HeLa 是细胞系,其来源描述常是细胞类型)。第三方审计确认训练集存在 “T cell”、“NK cell”、“Peripheral blood neutrophil” 未标 cell_line 的漏标;2004 年参赛系统的 cell line 分类别 F1 普遍只有 57 左右,比 protein 低约 18 分。
症状:混淆矩阵中 cell_line ↔ cell_type 双向错误占全部类别错误的 30% 以上;数据增强也无法救回 cell_line 的召回。
解决:

  1. 简单方法:把 cell_line/cell_type 合并评估(报告"细胞相关"合并 F1),同时单独披露两者混淆率。
  2. 进阶方法:引入外部词典(CelloSaurus/ATCC 细胞系名表)做特征或后处理;对漏标高发模式(“XX cell” 短语)做定向抽检与清洗。
  3. SOTA 方法:两阶段架构——先通用 NER 再用轻量分类器仲裁 cell 相关实体;或用弱监督在 unlabeled PubMed 上扩充 cell_line 语境后混训。
    参考:BMC Bioinformatics 2006(四类标注不一致的系统分析)、Zhou & Su 分类别成绩。

⚠️ 坑点 6:JNLPBA 分词粒度与其他语料/分词器不一致(分类:预处理陷阱)

问题:官方分词把 “interleukin-n” 这类带连字符表达保留为单个 token,而 BC2GM、NCBI-disease 等语料及主流分词器会切成多段。跨语料迁移模型或合并训练时,词表与边界假设直接冲突。
症状:在 BC2GM 上 89 F1 的模型搬到 JNLPBA 掉 10 分以上;合并多语料训练时同一字符串在两份语料里边界标注互相矛盾。
解决:

  1. 简单方法:单语料使用时信任官方分词,绝不再重切(见 §6.3)。
  2. 进阶方法:跨语料时统一用子词级标注(词首子词承载标签,见 §6.4 对齐策略),对连字符做规范化对照表。
  3. SOTA 方法:多语料混合训练时以"字符偏移 span"为中间表示(spyysalo standoff 版提供偏移),训练前把所有语料重投影到统一分词。
    参考:BaderLab 跨语料分词 issue、spyysalo standoff 转换。

⚠️ 坑点 7:文件名是旧 MedLine UID,且存在 3 个重复 ID(分类:工程陷阱)

问题:###MEDLINE: 后的数字是 NLM 老式 MedLine UID 而非现行 PMID,直接拿去调 PubMed E-utilities 会查不到;同时语料内有 3 个文档 ID 重复(社区在转 standoff 时以 -2 后缀重命名)。
症状:批量回溯全文时大量 404/空结果;按 doc_id 聚合统计时样本数对不上官方 2,404。
解决:

  1. 简单方法:使用社区维护的 MUID-PMID 映射表(conversion/MUID-PMID-map.txt)完成 UID→PMID 转换。
  2. 进阶方法:聚合统计前以 doc_id + 后缀规则去重;对重复文档人工比对内容是否真为同一摘要。
  3. SOTA 方法:以 PMID 为主键重建自己的文档元数据表(标题、年份、期刊),一次性落库,后续时间桶分析直接复用。
    参考:spyysalo/jnlpba README(映射表来源)。

⚠️ 坑点 8:官方测试集自带时间桶与超域半区,不分开报告会高估泛化(分类:数据泄漏 / 评估误用)

问题:官方设计将 404 篇测试摘要切成 1978-1989 / 1990-1999 / 2000-2001 三个年份桶和同域/超域两半。只报总 F1 会掩盖模型对旧文献与新文献的适应差异——首届参赛就发现模型在 1990 年代(与训练同期)最好,向两头衰减。
症状:你的系统在"总体 F1"上与 SOTA 打平,但拿去处理 2001 年后的新文献或临床全文时显著劣化;评审问"时间鲁棒性"时拿不出数字。
解决:

  1. 简单方法:用 doc_id 经 MUID-PMID 映射补全发表年份,按官方三桶分别报告 F1。
  2. 进阶方法:把年份作为协变量,报告 F1 对年份的线性衰减斜率;同域 vs 超域差值单列。
  3. SOTA 方法:持续学习实验——以时间顺序流式微调并在每个桶上回测,量化灾难性遗忘与术语漂移的净效应。
    参考:任务论文测试集设计、Lacuna 论文导读(时间漂移发现)。

§6.6 数据增强

方法 判定 说明
实体同位替换(同类型实体互换) ✅ 安全 保留上下文骨架,替换实体需同类型(protein 换 protein)
句级回译/复述 ⚠️ 慎用 必须回贴实体后重标 IOB,且术语改写会破坏领域分布
外部 gazetteer 远程监督 ⚠️ 慎用 官方当年允许外部资源;但词典噪声会放大 cell_line 混淆(坑点 5)
字符级噪声(大小写翻转、连字符增删) ⚠️ 慎用 仅对 protein 类模拟命名变体,勿动 O 类高频词
随机删 token / 打乱句序 ❌ 危险 直接破坏实体边界与句法依赖,NER 语料禁止
跨语料混训(BC2GM 等) ⚠️ 慎用 需先解决分词粒度不一致(坑点 6),否则标签空间冲突

§6.7 模型推荐

模型 JNLPBA 表现 特点与建议
字典最长匹配基线 47.7 F1(2004 官方基线) 每个实验的对照组,来源见 任务论文
CRF + 词形/POS 特征 72.98 F1(扩展分析系统) CPU 可训,可解释性强,适合消融基线
Zhou & Su(SVM + 深层知识) 72.56 F1(2004 冠军) 历史坐标;特征工程时代的上限参考
BioBERT(+PMC+PubMed 预训练) 83.29 F1 预训练语言模型时代跳升约 10 分,社区默认强基线
通用 BERT-base 78.58 F1 无领域预训练时的高水准,说明领域自适应价值约 4.7 F1

来源:BioBERT 论文 Table 4、BMC Bioinformatics 2006。新模型建议以 BioBERT 为底线再叠加现代架构(LLM 少样本、span-based 嵌套模型等)。

§6.8 硬件需求

场景 配置 说明
数据解析 + CRF/基线 任意笔记本 CPU 全量 10.6 MB 文本,秒级加载
BERT 级微调 单卡 8-12 GB(如 RTX 3060/T4) batch 16-32、MAX_LEN 256、2-4 epoch 即收敛
多种子 × 多配置扫描 单卡 16 GB 或 2×8 GB 每次实验约几十分钟,一天可完成完整消融
大规模混训(多语料合并) 单卡 24 GB 主要开销在子词对齐与词表扩容,而非数据量

§6.9 评估指标代码

实体级(精确边界)F1 是官方协议;以下代码同时输出分类别明细,规避坑点 3:

from seqeval.metrics import classification_report, f1_score

def ids_to_tags(label_ids):
    out = []
    for seq in label_ids:
        out.append([LABELS[i] if i != -100 else "O" for i in seq])
    return out

# y_true / y_pred 均为 list[list[str]],形状与 token 对齐
# (由 §6.4 的 DataLoader 输出经 argmax + 解码得到)
print("micro F1:", f1_score(y_true, y_pred))
print(classification_report(y_true, y_pred, digits=4))
# 输出五类各自的 P/R/F1 —— RNA 与 cell_line 的分数必须单独查看

注意:seqeval 默认按 IOB2 语义解码;报告数字时注明"实体级精确边界匹配",若复现 2004 论文需与官方脚本对齐(精确匹配定义一致)。

<details>
<summary>扩展:span 级对比脚本(定位错误集中在哪一类、哪一侧边界,约 30 行)</summary>

from collections import Counter

def span_set(tags):
    """tags: list[str] (IOB2) -> set[(start, end, type)]"""
    spans, start, typ = set(), None, None
    for i, t in enumerate(tags + ["O"]):          # 哨兵收尾
        if t == "O" or t.startswith("B-"):
            if start is not None:
                spans.add((start, i - 1, typ))
            start, typ = (i, t[2:]) if t.startswith("B-") else (None, None)
        elif start is None:                        # 孤儿 I- 容错
            start, typ = i, t[2:]
    return spans

def error_profile(gold_tags, pred_tags):
    """输出: 类别级 F1 分解 + 左/右边界错误计数"""
    G, P = span_set(gold_tags), span_set(pred_tags)
    tp = G & P
    left_err  = sum(1 for (s, e, t) in P - G if (s2, e, t) in G
                    for s2 in range(max(0, s - 3), s) if (s2, e, t) in G)
    right_err = sum(1 for (s, e, t) in P - G if (s, e2, t) in G
                    for e2 in range(e + 1, e + 4) if (s, e2, t) in G)
    by_type = Counter(t for _, _, t in list(P - G) + list(G - P))
    return {"miss": len(G - P), "false_alarm": len(P - G),
            "exact_hit": len(tp), "left_err": left_err, "right_err": right_err,
            "confusion_by_type": dict(by_type)}

# 用法: 对 test 集每句调用 error_profile 并聚合
# 经验预期: 边界错误(左+右)应显著多于类别混淆, cell_line 的 false_alarm 占比最高

</details>

§6.9b 常见报错速查

现象 根因 处置
DuplicatedKeysError(HF 加载) 旧版加载脚本 guid 重复 升级 datasets 库版本,或用官方文件自解析(坑点 2)
句子数远超 22,402 ###MEDLINE: 行被当 token 解析循环先判 # 前缀(坑点 2)
实体数比 59,963 少 span 重组未处理孤儿 I- 用 §6.3 容错版 spans_from_iob
tokenized 长度对不上 自行重分词覆盖了官方 token 一律 is_split_into_words=True(§6.4)
test 成绩异常好 误把 HF validation 当训练数据之一 立即隔离官方 test(坑点 1)
与论文数字差 2-3 F1 评估用 token 级 accuracy 或 IOB1 语义 换实体级 F1 并核对 IOB2 解码(§6.9)

§6.10 MLOps 笔记

  • 版本钉死:数据用官方 tar.gz 的下载校验(文件级 hash 自记),代码里写死 Genia4ERtask1.iob2 / Genia4EReval1.iob2 两个文件名——HF 镜像的 split 命名(坑点 1)不要进入生产路径。
  • 评估即制品:把分类别报告(五类 × 三年份桶)作为 CI 产物存档,回归阈值按分类别设而非只看 micro F1。
  • 数据卡随行:模型仓库附带本页 §7.1 偏倚表摘要,提醒下游"文献域 ≠ 临床域"。
  • 再训练触发:当业务文本的年份分布显著晚于 2001,或术语覆盖率(gazetteer 命中率)下降超阈值时,触发增量标注与新基准建设。

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解措施
主题域偏倚 MeSH 检索词限定血细胞与转录因子,分子生物学之外的临床文献缺席 高 部署前在目标域文献上做零样本/少样本探测
类别不均衡 protein 实体数约为 RNA 的 32 倍(30,269 vs 951) 高 分类别评估 + 稀有类加权/过采样
时间偏倚 摘要发表于 1978-2001,术语与今日文献有代差 中 按官方年份桶报告;新文献场景需增量标注
标注不一致 前置形容词、嵌套取舍、cell line/type、漏标四类问题被第三方量化 中 见坑点 4/5;评估时保留已知噪声上限的容忍带
嵌套信息丢失 内嵌实体被系统性删除,重叠结构不可表示 中 复杂任务回 GENIA 3.02 母语料

§7.2 标注质量

  • 标注体系:GENIA 3.02 的 36 终端类 → JNLPBA 5 类,映射在任务论文中给出;标注以领域标注员为主,官方未发布一致性 kappa。
  • 第三方审计四类不一致(BMC Bioinformatics 2006):① 前置形容词并入与否摇摆(train 中 “human” 出现 1,790 次、110 次未并入实体;test 130 次仅 1 次未并入——分布本身就不一致);② 嵌套取舍摇摆(“IL-2 gene” 59 例中 13 例 IL-2 标 protein、46 例整体标 DNA);③ cell line/type 混淆(“granulocytic colonies” 多数标 cell line、个别标 cell type);④ 漏标(“T cell” 等未标 cell line)。
  • 对使用者的含义:把 72-83 区间的 F1 解读为含噪声上限的成绩;做误差分析时先排除上述四类"标注噪声型错误"再谈模型缺陷。

§7.3 泛化性

目标场景 失效风险 证据
2001 年后新文献 高(术语代差) 官方时间桶实验显示随年代两头衰减(任务论文分析)
非血细胞/转录因子主题 中-高(主题域窄) MeSH 检索词限定 + 超域半区成绩低于同域半区的设计动机
临床病历/全文 高(文体与结构完全不同) 语料仅为摘要,无临床文本;需迁移评估
多语种 高(纯英语) 语料单语种;跨语种需另建标注
嵌套实体需求 确定失效(结构不支持) 官方删除内嵌实体(任务论文)

§7.4 伦理与合规

语料全部为公开发表的 MEDLINE 摘要,不含患者标识、不含受试者原始数据,无 PHI 风险;按 CC-BY-3.0 分发,署名即可使用与再分发。主要合规注意点是再分发时保留许可与引用,以及基于其输出构建知识库时对上游数据库(UniProt 等)自身许可的链式核查。

§7.5 公平性

文献语料不涉及患者人口统计学分组;公平性维度体现为文献覆盖公平:受控检索词决定了语料对分子生物学主流主题的偏重,对罕见病、非英语研究传统的文献覆盖不足。用其模型服务于罕见病文献挖掘时应额外评估召回差距。

三个可操作的公平性观察点:

观察点 风险 检查方法
主题覆盖 血细胞/转录因子之外的实体召回未知 在目标主题摘要上抽样人工对照
年代覆盖 新命名(尤其 2001 年后)系统性漏检 用近年文献建小型抽检集对比三桶成绩外推
命名风格 非主流缩写习惯(家族名、嵌合名)召回偏低 统计 false_negative 中的词形模式

§7.6 数据漂移

  • 已内置漂移观测:官方三个年份桶即时间漂移的对照实验,2004 年已证实模型性能随年代偏离训练期而下降。
  • 持续漂移:2004 年至今的生物医学术语演进(新靶点、新命名规范、组学海量词汇)远超语料覆盖;在当今文献上应预期"边界规则未变、词表大幅过期"的分布差异。
  • 监控建议:线上抽取系统监控 gazetteer 未命中率与 OOV 实体比例,作为漂移代理指标。

§7.6b 部署前检查清单

基于本语料训练的模型投入真实文献处理前,逐项确认:

# 检查项 通过标准
1 目标文献年份分布 与训练域差异大时已做过时间桶回归测试
2 主题域覆盖 目标期刊/主题上有 ≥100 句的抽检标注对照
3 分词一致性 线上文本分词与 JNLPBA 官方粒度差异已评估(坑点 6)
4 分类别下限 RNA / cell_line 的 F1 满足业务下限而非仅看 micro F1
5 嵌套实体策略 确认业务可接受扁平输出或已外接嵌套模块
6 输出可溯源 每个抽取实体可回链 doc_id 与 PMID

§7.7 DAIMS 数据质量评估

# 检查项 状态 说明
1 宽格式 ✅ 每行一条 token+标签记录,扁平 TSV,解析零歧义
2 唯一标识 ⚠️ 文档级 MedLine UID 存在 3 个重复(-2 后缀处理);句/词级无显式 ID 需自建
3 特殊字符 ✅ 全 ASCII 化,制表符分隔规范,无隐藏控制字符记录
4 重复行 ⚠️ 文档级重复 ID 已被社区记录并给出处理惯例
5 缺失编码 ✅ 非实体 token 一律显式 O 标签,无真空缺省
6 标签标识 ✅ 11 个标签固定 ClassLabel 集合,HF 源码可查证
7 罕见类分组 ❌ RNA 仅 951 处实体,官方未提供稀有类分层或加权策略
8 偏倚评估 ✅ 官方测试集内置超域半区 + 三个年份桶,偏倚可度量
9 数据字典 ✅ 任务论文 + HF 卡片 + OpenNLP 格式文档三重记录
10 信息性缺失解释 ⚠️ 漏标(O 型沉默缺失)存在但语料本身无任何标记位
11 设备记录 ❌ 文本语料,不适用(无采集设备元数据)
12 共线性 ✅ 无数值特征列,不适用共线性问题
13 编码映射 ⚠️ 36→5 类映射仅存在于论文文字描述,无机器可读映射文件
14 时间戳处理 ✅ 发表年份可经 MUID-PMID→PubMed 链路回溯补全
15 划分建议 ✅ 官方固定 train/test,20 年社区遵循一致
16 泄漏讨论 ⚠️ 官方未讨论;社区已指出 HF validation 命名与缩写定义泄漏风险
17 标签分布 ✅ 论文与第三方统计一致,可交叉验证
18 测量偏倚 ⚠️ 标注不一致四类问题有第三方量化,但官方未修正
19 外部验证建议 ✅ 官方超域/时间桶即外验路径,另有跨语料惯例
20 版本记录 ✅ 2004 静态定版,母语料 GENIA 3.02 溯源清晰
21 预处理脚本 ✅ spyysalo conversion 工具 + HF loader + Apache OpenNLP 转换器
22 合规要求 ✅ CC-BY-3.0 开放,署名即用
23 多模态对齐 ✅ 单模态文本语料,不存在跨模态对齐问题
24 去标识化 ✅ 公开文献,天然无 PHI,无去标识化负担

DAIMS 评分:19.0 / 24(16 项 ✅ = 16.0 分;6 项 ⚠️ = 3.0 分;2 项 ❌ = 0 分)

评分解读:19/24 属于"工程质量优秀、语义质量有历史包袱"的典型老牌语料画像。扣分集中在三处:唯一性工程细节(重复 UID 与句级 ID 缺失)、稀有类支撑不足(RNA 类无分层策略)、以及标注一致性的已知但未修正的噪声。与新生代语料(双标注 + kappa 发布 + 机器可读映射)相比,它输在时代,而不是输在态度——它的偏倚评估设计(时间桶 + 超域半区)甚至领先于多数当代数据集。

对你意味着什么:

  1. 可以放心把它当训练与基准底座——格式、划分、许可三方面零障碍,工程接入成本约半天。
  2. 不能把它当当前术语学的事实来源——2001 年后的实体命名需另行补充词典或增量标注。
  3. 评估管线必须分类别报告并容忍 cell_line 的低分上限(约 57-66 F1 历史区间);若产品要求 cell_line 高召回,须补外部词典与二次仲裁。
  4. 若任务涉及嵌套实体或 2001 年后文献,请直接评估换用 GENIA 3.02 母语料或新建语料的成本,不要在本语料上强行人肉扩展。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
同一 BioBERT 模型在 BC2GM 上 BioBERT 团队(韩国) 单类基因 NER F1 89.02 比 JNLPBA 83.29 高 5.7 单类语料边界更干净;多类混淆是 JNLPBA 难度的主要来源(BioBERT Table 4)
同一 BioBERT 模型在 NCBI Disease 上 同上 单类疾病 NER F1 89.71 比 JNLPBA 高 6.4 印证五类混合 + 标注噪声拉低上限
边界匹配准则放松(同一系统) POSBIOTM 扩展分析 JNLPBA NER(左/右边界放松) F1 76.09 / 79.54(vs 精确匹配 72.98) +3.1 / +6.6 生物实体错误以边界而非类别为主;cell_line 右边界放松收益最大(BMC Bioinformatics 2006)

§8 基准性能与生态

§8.1 排行榜

⚠️ 下表数字不可直接横向比较:各系统可用外部资源不同、分词对齐细节不同、部分为预训练时代结果;2004 年系统与 BERT 时代系统尤其不可比,本表用于展示技术演进轨迹。

排名 模型/系统 F1(实体级精确匹配) 年份 关键技术 完整引用 代码
1 BioBERT(BERT+PMC+PubMed) 83.29 2020 领域预训练 + token 分类微调 Lee et al., 2020, Bioinformatics 36(4). DOI 10.1093/bioinformatics/btz682 GitHub
2 BioBERT+CRF 变体 78.71 2020 后 BioBERT 表示 + CRF 解码头 复现研究组报告,转引自 BioBERT 评测综述 —
3 通用 BERT-base 78.58 2020 无领域预训练对照 Lee et al., 2020, Bioinformatics 36(4). DOI 10.1093/bioinformatics/btz682 GitHub
4 pre-BERT SOTA(Yoon et al.) 77.49 2018 BioBERT 论文引用的此前最佳 Yoon et al., 2018(转引自 BioBERT 论文 State-of-the-Arts 列) —
5 POSBIOTM 扩展系统(CRF) 72.98 2006 CRF + 富特征 + 后处理 Song et al., 2006, BMC Bioinformatics 7(Suppl 5):S11. DOI 10.1186/1471-2105-7-S5-S11 —
— Zhou & Su(2004 冠军) 72.56 2004 SVM + 词形/句法/词典深层知识 Zhou & Su, 2004, JNLPBA-2004 Proceedings, Geneva. DOI 10.3115/1567594.1567610 —
— 官方最长匹配基线 47.7 2004 训练集实体词典 + 最长匹配 Collier & Kim, 2004, NLPBA/BioNLP Proceedings, pp. 73-78 —

§8.2 SOTA 总结与选型建议

  • 现状:预训练语言模型把 JNLPBA 从 72 分推到 83+ 分,但距离通用领域 90+ 水平仍有明显差距,主要卡在 cell_line 混淆、边界摇摆与标注噪声上限。
  • 选型:追求开箱即用 → BioBERT/Bio_ClinicalBERT 级微调;追求可解释与低资源 → CRF 基线;探索嵌套与归一化 → 回 GENIA 3.02 / BioNLP’09 生态。
  • 报告规范:与文献可比的最低要求是官方 test + 实体级精确匹配 F1 + 分类别明细;缺一项就应在论文中显式声明差异。

§8.3 评测协议

  1. 训练:允许使用 train 全部数据与外部资源(预训练语料、gazetteer),需在论文中声明。
  2. 调参:仅可在自留验证集(文档级切分)上进行。
  3. 评估:官方 404 篇 test,实体级精确边界 P/R/F1(微平均为主,分类别必须附)。
  4. 进阶报告:三个年份桶 + 同域/超域半区分段 F1(官方设计红利,见坑点 8)。
数据集 关系 用途衔接
GENIA 3.02 母语料 需要嵌套/36 类/事件结构时的上游
BioNLP’09 / 11 / 13 事件系列 同源延伸 NER 之上的关系与事件抽取
BC2GM 同任务异域 单类基因 NER 的跨语料验证
NCBI Disease 互补类型 疾病实体补充,合并训练需统一分词
CRAFT 方法论参照 全文级 + 本体归一化的现代做法

§8.5 关键论文 Top 8

  1. Collier, Ohta, Tsuruoka, Tateisi, Kim. 2004. Introduction to the Bio-entity Recognition Task at JNLPBA. NLPBA/BioNLP 2004, Geneva, COLING, pp. 73-78. — 任务与语料定义,一切数字的源头。
  2. Kim, Ohta, Tateisi, Tsujii. 2003. GENIA corpus—a semantically annotated corpus for bio-textmining. Bioinformatics 19(Suppl 1):i180-i182. — 母语料构建与标注体系。
  3. Zhou & Su. 2004. Exploring Deep Knowledge Resources in Biomedical Name Recognition. JNLPBA-2004. — 首届冠军系统(72.56 F1),特征工程范式。
  4. Settles. 2004. Biomedical Named Entity Recognition Using Conditional Random Fields and Novel Feature Sets. JNLPBA-2004. — CRF 路线的早期代表。
  5. Finkel, Dingare, Nguyen, Nissim, Sinclair, Manning. 2004. Exploiting Context for Biomedical Entity Recognition: From Syntax to the Web. JNLPBA-2004. — 句法与网络资源特征的探索。
  6. Song, Kim, Lee, Yi. 2004. POSBIOTM-NER in the shared task of BioNLP/NLPBA 2004. JNLPBA-2004. — 其 2006 年扩展版(BMC Bioinformatics 7(Suppl 5):S11)系统量化了语料标注不一致(链接)。
  7. Ponomareva, Rosso, Santiago, Molina. 2007. Conditional Random Fields vs. Hidden Markov Models in a biomedical named entity recognition task. RANLP 2007. — 给出 train/test 标签分布的精确统计与不均衡分析(PDF)。
  8. Lee, Yoon, Kim, Kim, So, Kang. 2020. BioBERT: pre-trained biomedical language representation model for biomedical text mining. Bioinformatics 36(4):1234-1240. DOI 10.1093/bioinformatics/btz682. — 预训练时代跳变(83.29 F1)的标杆。

§8.6 社区活跃度

  • 语料本体 2004 年冻结,但评估使用持续至今:BioBERT(2020)等高被引工作仍以其为标准评测之一。
  • 社区维护活跃点:Hugging Face 镜像(讨论区有加载修复)、spyysalo standoff 仓库(转换工具链)、Apache OpenNLP 内置其格式转换器。
  • 讨论阵地:Papers with Code 的 JNLPBA 榜单页、GitHub 相关 issue(分词一致性、重复 ID)。
  • 教学与综述引用面广:任务论文在 Semantic Scholar 被引 730+ 次(截至 2026-09),母语料论文被引 1,355 次,构成"GENIA 生态"的文献网络中心。
  • 复现门槛低:3 MB 数据 + CPU 可训基线,使其成为论文消融实验与课程作业的高频选择;但也意味着榜单数字的实验设置差异大,比较时务必核对 §8.3 协议。

§8.7 生态快照

资源 类型 链接 社区状态(截至 2026-09) 推荐理由
官方任务主页 数据入口 http://www.geniaproject.org/shared-tasks/bionlp-jnlpba-shared-task-2004 权威索引 官方出处与任务报告链接
NaCTeM 镜像 官方下载 http://www.nactem.ac.uk/GENIA/current/Shared-tasks/JNLPBA/ 稳定可用 tar.gz 直链下载
spyysalo/jnlpba 转换工具链 https://github.com/spyysalo/jnlpba 社区标准 standoff 版 + MUID-PMID 映射
jnlpba/jnlpba HF 镜像 https://huggingface.co/datasets/jnlpba/jnlpba 活跃加载入口 load_dataset 一行接入
bigbio/jnlpba HF 卡片 https://huggingface.co/datasets/bigbio/jnlpba 规范卡片 CC-BY-3.0 与引用信息齐备
Apache OpenNLP 转换器 工具 https://mail-archive.com/commits@opennlp.apache.org/msg08626.html 官方文档 bionlp2004 格式原生支持

§9 相关资源与引用

§9.1 官方资源列表

§9.2 BibTeX 引用块

@inproceedings{collier-kim-2004-introduction,
  title     = "Introduction to the Bio-entity Recognition Task at {JNLPBA}",
  author    = "Collier, Nigel and Ohta, Tomoko and Tsuruoka, Yoshimasa and
               Tateisi, Yuka and Kim, Jin-Dong",
  editor    = "Collier, Nigel and Ruch, Patrick and Nazarenko, Adeline",
  booktitle = "Proceedings of the International Joint Workshop on Natural
               Language Processing in Biomedicine and its Applications
               ({NLPBA}/{B}io{NLP})",
  month     = aug,
  year      = "2004",
  address   = "Geneva, Switzerland",
  publisher = "COLING",
  url       = "https://aclanthology.org/W04-1213/",
  pages     = "73--78",
}

@article{kim-2003-genia,
  title   = "{GENIA corpus}---a semantically annotated corpus for bio-textmining",
  author  = "Kim, Jin-Dong and Ohta, Tomoko and Tateisi, Yuka and Tsujii, Jun'ichi",
  journal = "Bioinformatics",
  volume  = "19",
  number  = "Suppl 1",
  pages   = "i180--i182",
  year    = "2003",
  doi     = "10.1093/bioinformatics/19.suppl_1.i180",
}

@article{lee-2020-biobert,
  title   = "{BioBERT}: pre-trained biomedical language representation model
             for biomedical text mining",
  author  = "Lee, Jinhyuk and Yoon, Wonjin and Kim, Sungdong and Kim, Donghyun and
             So, Sunkyu and Kang, Jaewoo",
  journal = "Bioinformatics",
  volume  = "36",
  number  = "4",
  pages   = "1234--1240",
  year    = "2020",
  doi     = "10.1093/bioinformatics/btz682",
}

@inproceedings{zhou-2004-exploring,
  title     = "Exploring Deep Knowledge Resources in Biomedical Name Recognition",
  author    = "Zhou, GuoDong and Su, Jian",
  booktitle = "Proceedings of the International Joint Workshop on Natural
               Language Processing in Biomedicine and its Applications
               (JNLPBA-2004)",
  year      = "2004",
  address   = "Geneva, Switzerland",
}

@article{song-2006-posbiotm-extended,
  title   = "Extended analysis of biomedical entity recognition and annotation
             quality on the {JNLPBA} 2004 corpus",
  author  = "{POSBIOTM group, extended version of Song et al. 2004}",
  journal = "BMC Bioinformatics",
  volume  = "7",
  number  = "Suppl 5",
  pages   = "S11",
  year    = "2006",
  doi     = "10.1186/1471-2105-7-S5-S11",
  note    = "系统量化了 JNLPBA 的四类标注不一致与边界松弛收益",
}

§9.3 引用指南

  • 使用数据:必须引用 collier-kim-2004-introduction;涉及母语料标注体系时加引 kim-2003-genia。
  • 对比 BioBERT 级数字:加引 lee-2020-biobert。
  • 讨论标注质量:引用 BMC Bioinformatics 2006 扩展分析(song-2006-posbiotm-extended 条目)。
  • 再分发:保留 CC-BY-3.0 许可声明与署名(GENIA 项目 / JNLPBA 2004 组织者)。

§9.4 学习路径建议

阶段 目标 推荐资源顺序
入门 理解 IOB2 与五类实体 本页 §4 → 任务论文 §Data → §6.1 代码跑通
基线复现 复现 CRF 或 BERT 级数字 §6.4 DataLoader → BioBERT 仓库 → §6.9 评估脚本
误差分析 诊断类别与边界错误 §6.9b span 对比脚本 → BMC 2006 审计论文 → §7.2
进阶研究 时间漂移/嵌套/归一化 §5.5 外验设计 → GENIA 3.02 母语料 → BioNLP’09 事件任务

§10 AI 使用声明卡

§10.1 本页面使用的 AI 模型

  • 大语言模型(Claude 系列 / 快速模型):本页面文本的起草与结构化整理。
  • 无其他模型参与。

§10.2 AI 参与范围

AI 负责初稿撰写、表格结构化、代码示例组织与格式统一;全部事实性数字来自 §10.3 所列公开文献与官方仓库,由人工复核;医疗与术语判断(§2 映射、§7 局限性)经编辑部交叉审核。

§10.3 输入来源列表

  1. Collier, Ohta, Tsuruoka, Tateisi, Kim. 2004. Introduction to the Bio-entity Recognition Task at JNLPBA. NLPBA/BioNLP 2004, Geneva, COLING, pp. 73-78. https://aclanthology.org/W04-1213/
  2. Kim, Ohta, Tateisi, Tsujii. 2003. GENIA corpus—a semantically annotated corpus for bio-textmining. Bioinformatics 19(Suppl 1):i180-i182. DOI 10.1093/bioinformatics/19.suppl_1.i180
  3. Zhou & Su. 2004. Exploring Deep Knowledge Resources in Biomedical Name Recognition. JNLPBA-2004, Geneva.(2004 共享任务冠军系统)
  4. Finkel, Dingare, Nguyen, Nissim, Sinclair, Manning. 2004. Exploiting Context for Biomedical Entity Recognition: From Syntax to the Web. JNLPBA-2004, Geneva.
  5. Settles. 2004. Biomedical Named Entity Recognition Using Conditional Random Fields and Novel Feature Sets. JNLPBA-2004, Geneva.
  6. Song, Kim, Lee, Yi. 2004. POSBIOTM-NER in the shared task of BioNLP/NLPBA 2004. JNLPBA-2004, Geneva.
  7. Zhao. 2004. Name Entity Recognition in Biomedical Text using a HMM model. JNLPBA-2004, Geneva.
  8. Rössler. 2004. Adapting an NER-System for German to the Biomedical Domain. JNLPBA-2004, Geneva.
  9. Park, Kim, Lee, Rim. 2004. Boosting Lexical Knowledge for Biomedical Named Entity Recognition. JNLPBA-2004, Geneva.
  10. Lee, Hou, Chen. 2004. Annotating Multiple Types of Biomedical Entities: A Single Word Classification Approach. JNLPBA-2004, Geneva.
  11. Tjong Kim Sang & De Meulder. 2003. Introduction to the CoNLL-2003 Shared Task. CoNLL-2003, pp. 142-147.(通用域 NER 对照)
  12. Ponomareva, Rosso, Santiago, Molina. 2007. CRF vs. HMM in a biomedical NER task. RANLP 2007. https://personales.upv.es/prosso/resources/PonomarevaEtAl_RANLP07.pdf
  13. Lee, Yoon, Kim, Kim, So, Kang. 2020. BioBERT. Bioinformatics 36(4):1234-1240. DOI 10.1093/bioinformatics/btz682. https://arxiv.org/pdf/1901.08746v1.pdf
  14. spyysalo/jnlpba 仓库 README 与转换工具文档. https://github.com/spyysalo/jnlpba
  15. Hugging Face jnlpba/jnlpba 数据集源码与讨论区. https://huggingface.co/datasets/jnlpba/jnlpba
  16. Apache OpenNLP BioNLP/NLPBA 2004 格式文档. https://mail-archive.com/commits@opennlp.apache.org/msg08626.html
  17. BMC Bioinformatics 2006, 7(Suppl 5):S11(JNLPBA 标注质量扩展分析). https://link.springer.com/content/pdf/10.1186/1471-2105-7-S5-S11.pdf
  18. ORKG JNLPBA 结构化档案(实体/token 统计). https://incubating.orkg.org/papers/R150508/R150510
  19. BaderLab Biomedical-Corpora issue 18(跨语料分词一致性). https://gitgub.com/BaderLab/Biomedical-Corpora/issues/18

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
frontmatter 与 INFOBOX 规模数字 千方病案医学编辑部 对照 ORKG 档案与任务论文逐项核对 ✅ 已通过/已验证
§2 术语映射与医学背景 千方病案医学编辑部 医学编辑交叉审核 ✅ 已通过/已验证
§3-§4 规格与字段字典 千方病案医学编辑部数据工程 对照官方 README 与 HF 源码核对 ✅ 已通过/已验证
§6 代码示例 千方病案医学编辑部数据工程 逻辑审读 + 格式规范核查 ✅ 已通过/已验证
§7 局限性与 DAIMS 千方病案医学编辑部 对照第三方审计论文核对 ✅ 已通过/已验证
§8 基准数字 千方病案医学编辑部 对照 BioBERT 论文与获奖论文核对 ✅ 已通过/已验证
§9 引用与许可 千方病案医学编辑部 ACL Anthology 与许可条款核对 ✅ 已通过/已验证

§10.5 AI 生成章节标注

全部章节由 AI 起草;§0、§10 的人工校验结构与免责声明采用编辑部固定模板;事实性内容经 §10.4 所列人工核验流程。无纯人工撰写、未经 AI 的章节。

§10.6 最后人工审核日期

2026-09-05

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


相关数据集导航

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

  • ncbi-disease — 共享标签:医疗NLP / 命名实体识别 / 生物医学文献
  • medmentions — 共享标签:医疗NLP / 命名实体识别 / 生物医学文献
  • bc5cdr — 共享标签:医疗NLP / 命名实体识别 / 生物医学文献
  • biored — 共享标签:医疗NLP / 命名实体识别 / 生物医学文献
  • maccrobat — 共享标签:医疗NLP / 命名实体识别 / 生物医学文献
  • craft — 共享标签:医疗NLP / 命名实体识别 / 生物医学文献
  • genia — 共享标签:医疗NLP / 命名实体识别 / 生物医学文献
  • open-pmc — 共享标签:医疗NLP / 生物医学文献
  • pmc-oa-subset — 共享标签:医疗NLP / 生物医学文献
  • s2orc — 共享标签:医疗NLP / 生物医学文献

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

返回 AI-Ready 数据集