信息速览

Ensembl — 基因组注释与比较基因组学平台 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | Ensembl |
| 英文全称 | Ensembl genome annotation and comparative genomics platform |
| 别名/简称 | Ensembl;Ensembl Genomes(细菌/真菌/植物/原生生物/后生动物分库);Ensembl Rapid Release |
| 疾病分类(ICD-11) | 第 20 章 发育异常(LD40–LD5F);第 2 章 肿瘤(2A00–2F3Z)——为注释资源所支撑的典型应用场景,本平台本身非疾病数据集 |
| SNOMED CT | 66091009(Genetic disease,遗传病);404684003(Clinical finding,临床发现)——变异注释关联概念 |
| 数据模态 | 基因组序列与注释(基因/转录本/外显子坐标 + 生物型)、比较基因组学(同源基因/基因树/全基因组比对)、变异(VCF + 功能效应)、调控(染色质与表达特征) |
| AI 任务类型 | 变异功能注释、同源基因预测、跨物种序列对齐、转录本重建、表达定量参考、序列模型标签源、调控区域识别、基因组语言模型预训练语料 |
| 样本总数 | 超过 4,800 个真核基因组 + 超过 31,300 个原核基因组(Ensembl 2025 论文口径);beta.ensembl.org 新站提供超过 4,700 个基因组 |
| 数据大小 | 按物种与子域分布;单个物种注释 GTF 约数十 MB(压缩),含序列与全库镜像可达数 TB;MySQL 转储另计 |
| 数据格式 | GTF / GFF3 / FASTA / VCF / BED / bigWig / TSV / JSON(REST)/ XML(BioMart) |
| 许可证 | 数据:无任何使用限制;代码:Apache License 2.0(自 release 74 起,2013-12 生效) |
| 访问级别 | 开放(无需注册、无需申请、无需 DUA) |
| DUO 标签 | NRES(无限制使用) |
| 语言 | 英文 |
| 首发日期 | 2000-01-27(Milestone 1 公开;项目 1999 年立项) |
| 最后更新 | 截至 2026-09:Ensembl 116(2026-06,旧平台最终版)/ Ensembl Genomes 63 |
| 发布机构 | EMBL-EBI(欧洲生物信息研究所,宿主)与 Wellcome Sanger Institute(桑格研究所)联合运行 |
| 官方主页 | https://www.ensembl.org |
| 下载地址 | https://www.ensembl.org/info/data/ftp/index.html |
| DOI | 10.1093/nar/gkae1071(Dyer et al. 2025) |
| 引用次数 | 4,500+(Google Scholar,截至 2026-09,Dyer et al. 2025 当前版论文;Ensembl 2024 前版论文引用量更高) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 数据开放无限制、版本化与字段字典完备、REST/BioMart/Perl 三套官方接口成熟;扣分项:无官方一键预处理脚本,跨库 ID 与坐标体系需自行固定,新旧站点接口不通用 |
| 页面状态 | published |
§0 E-E-A-T 权威性与审核声明
- 医学审核者:[千方病案医学编辑部] 交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、临床基因组学场景)、§7 偏倚分析。
- 数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
- 主要事实来源:ensembl.org 官方关于页/版本归档页/许可与免责声明页(2026-09-16 抓取)、Ensembl REST 限速文档、Ensembl 系列 NAR 数据库专刊论文(Harrison 2024、Dyer 2025)、VEP 论文(McLaren 2016)、REST API 论文(Yates 2015)、Genebuild 方法论文(Aken 2016)、Variation 论文(Hunt 2018)。
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。Ensembl 数据按官方口径无任何使用限制,代码以 Apache License 2.0 发布,无需注册或签署协议,但引用时须注明对应 release 编号与论文;经 Ensembl 转发的第三方数据(如 UniProt、PDB、gnomAD)可能附带各自许可约束。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? Ensembl 是一份"面向全生命之树的基因组说明书"。人类基因组测序完成后,真正困难的问题不是拿到那 30 亿个字母,而是搞清每个字母属于哪个基因、编码什么、与别的物种里哪个基因同源。Ensembl 就是做这件事的基础设施:它把原始序列逐段标注出基因起止、外显子如何拼接成不同转录本、每个转录本属于哪类生物型(蛋白编码、长非编码 RNA、假基因、小 RNA 等),并把全部基因组放在同一套坐标系与 ID 体系下提供。截至 2026-09,它覆盖超过 4,800 个真核基因组与超过 31,300 个原核基因组,另有 Ensembl Genomes 五个分库分别承载细菌、真菌、植物、原生生物和后生动物(Ensembl 2025 论文)。
为什么重要? 它是基因组学领域使用最广泛的"公共坐标系"。论文说"BRCA1 的第 10 号外显子"、报告写"该变异位于 ENST00000357654.9"、模型要在上万物种间迁移功能预测时,都需要一个稳定参考。Ensembl 提供的不只是注释文件,还包括比较基因组学(哪些基因跨物种同源)、变异效应预测(突变是否破坏蛋白)、调控注释(这段 DNA 在哪种细胞被打开)三个子域,且全部用同一套 ID 体系串联。对人类与小鼠,它整合了 GENCODE/Havana 的人工注释,可直接作为临床与研究的事实标准。
我能用它做什么? 四类典型用法:(1)作为 RNA-seq 定量的参考注释,把读段归到基因与转录本;(2)用 BioMart 或 REST API 批量拉取基因列表、同源基因、变异注释以构建训练集;(3)用 VEP 给 VCF 打上功能后果标签,作为致病性预测模型的特征;(4)用 Compara 的同源基因与全基因组比对做跨物种迁移学习或保守性打分。它不含患者个体数据,因此不存在伦理审查与去标识化负担。
§1.1 摘要
Ensembl 的技术核心是一条"证据驱动 + 人工复核"的注释流水线,官方称其为 Genebuild。输入为该物种可获得的转录组组装(RNA-seq 拼接结果)、蛋白同源序列以及近缘物种注释;流程依次为:转录本证据比对到基因组 → 聚类出转录位点 → 按证据拼接外显子结构 → 构建转录本模型 → 选择每基因代表转录本(canonical)→ 附加 UTR、CDS 与生物型标签 → 与已有注释合并去冗余。完整方法学发表于 Aken et al., Database 2016(DOI: 10.1093/database/baw093)。对人类与小鼠,Ensembl 并非独立注释,而是把 GENCODE/Havana 的人工注释与自动注释合并输出,这也是二者 GTF 内容高度一致的原因。
在注释之上,Ensembl 构建了三个相互支撑的子域。Compara(比较基因组学)对全部已注释物种做两两比对、聚类同源基因、推断基因树与物种树,并用 EPO-Extended 与 Cactus 构建多物种全基因组比对——截至 2024 论文,Cactus 比对已覆盖 123 种辐鳍鱼、218 种鳞翅目昆虫、37 个小麦基因组与 27 个水稻基因组。Variation(变异)整合 dbSNP、gnomAD、ClinVar 等来源,统一为每个物种的变异集合,并通过 VEP 把变异映射到转录本上、计算序列本体(Sequence Ontology)后果术语与 IMPACT 分级(VEP 论文见 Genome Biology 2016,DOI: 10.1186/s13059-016-0974-4)。Regulation(调控)整合 ENCODE、BLUEPRINT 与 GTEx 的染色质与表达数据,为人类、小鼠及若干农业物种提供调控特征注释。
接口层面,Ensembl 提供四套访问方式,覆盖从交互式浏览到大规模批量抓取:Web 界面(含基因组浏览器)、REST API(JSON 返回,适合脚本与生产管线)、Perl API(直连底层 MySQL 数据库,最灵活但需本地安装)、BioMart(图形化与脚本化批量导出,适合"一次拉一个表")。R 生态通过 Bioconductor 的 biomaRt 包对接 BioMart(Durinck et al., Nature Protocols 2009,DOI: 10.1038/nprot.2009.97),Python 生态主要用 requests 直连 REST。与之互补的还有 UCSC Genome Browser、RefSeq 与 GENCODE:Ensembl 与 UCSC 在同一组装上提供不同注释视图,与 RefSeq 则是一组独立的转录本集合。
§1.2 战略价值
维度一:跨物种 AI 模型的标签源与评测基准。 基因组 AI 的主线是"大规模无标注序列预训练 + 少量标注任务微调",这类模型最缺的不是序列而是可靠标签——哪些碱基是外显子、哪个变异有害、哪个基因与哪个基因同源。Ensembl 同时提供这三类标签且跨物种一致。更关键的是标签"活的":每个 release 都会修订,可用旧 release 训练、新 release 评测,构造真正的时间外推测试,而非在同一份静态文件上反复过拟合。
维度二:临床与产业管线的默认坐标系,决定工具链互操作性。 一个变异从测序仪到报告要经过比对、变异检出、注释、过滤、分级五道工序,每道工序的工具都需要知道"转录本长什么样"。绝大多数变异注释工具(VEP、SnpEff、ANNOVAR)默认读取 Ensembl 或 GENCODE 注释,绝大多数 RNA-seq 定量流程的 GTF 也来自同一来源。选择 Ensembl 就是选择整个生态的默认值;反过来,某个 release 一旦修订某基因的外显子结构,下游所有依赖该结构的临床解读都会同步变化——这正是临床实验室必须固定并记录 release 号的原因。
维度三:"长尾物种"进入计算生物学的低成本入口。 对果蝇、斑马鱼之外的物种(地方性作物、濒危哺乳动物、环境分离细菌),研究者通常没有资源自建注释。Ensembl Genomes 五个分库与 Rapid Release 机制以滚动方式发布新组装与新注释,使这些物种在两三个月内即可获得与模式物种同构的注释文件与 API 访问。截至 2024 论文,Rapid Release 注释基因组已从 2020 年起步增至超过 1,700 个,论文还报告了首个由 Ensembl 流水线完成注释的植物物种。
§1.3 同类数据集横向对比
| 数据集/平台 | 发布机构 | 规模 | 标注性质与差异化定位 |
|---|---|---|---|
| Ensembl | EMBL-EBI + Wellcome Sanger Institute | 4,800+ 真核 + 31,300+ 原核基因组 | 自动流水线 + 人类/小鼠人工注释;唯一同时提供跨物种同源基因、基因树与多物种全基因组比对,且 REST/BioMart/Perl 三套接口齐备 |
| Ensembl Genomes | EMBL-EBI | 细菌/真菌/植物/原生生物/后生动物五门户(真菌库 1,504 个基因组) | Ensembl 的非脊椎动物与微生物延伸,独立 release 号与门户 |
| GENCODE | EMBL-EBI(Havana + Ensembl 团队) | 人类 v50:78,733 基因 / 644,292 转录本 | 深度人工注释;人类与小鼠注释的权威来源,与 Ensembl 人类注释是同一内容的不同发布形态,提供 basic/comprehensive 层级 |
| RefSeq | NCBI | 多物种(含大量原核) | 人工审编 + 自动(预测模型分开标注);与 Ensembl 并行的独立转录本集合,两者 ID 不互通 |
| UCSC Genome Browser | UCSC | 多物种(以脊椎动物为主) | 汇聚第三方注释;提供多物种比对轨道与"镜像视角",在同一组装上呈现不同的注释整合方式 |
| UniProt | EMBL-EBI + SIB + PIR | 数亿条蛋白序列 | 人工审编(Swiss-Prot)+ 自动(TrEMBL);蛋白层级权威参考,与 Ensembl 翻译产物交叉引用 |
| INSDC(ENA/GenBank/DDBJ) | EMBL-EBI + NCBI + DDBJ | 数十亿条序列记录 | 提交者提供;序列的最终归档与 Ensembl 组装输入来源,不与注释版本绑定 |
| VEuPathDB | 多机构联盟 | 寄生虫与真核病原体 | 策展 + 自动;病原体专题策展资源,其数据自 Ensembl Genomes 61 起并入 Ensembl |
对比要点:选择 Ensembl 的主要理由不是"注释最准确"(人类注释与 GENCODE 同源,准确性相同),而是覆盖广度与跨物种一致性——只有它能在同一 ID 体系内回答"这个人类基因在小鼠、斑马鱼、鸡、牛里的同源物是什么"。若任务只需人类或小鼠的高精度注释,直接用 GENCODE 的 GTF 更轻量;若是变异致病性判读,Ensembl 通过 VEP 提供的多来源注释(gnomAD v4.1、ClinVar、CADD、REVEL、SpliceAI 等)往往比单独使用任一数据库更完整。
§1.4 版本时间轴
| 时间 | 版本/事件 | 关键内容 |
|---|---|---|
| 1999 / 2000-01-27 | 项目立项与 Milestone 1 | EMBL-EBI 与 Wellcome Sanger Institute 启动 Ensembl(目标是为人类基因组计划提供自动化注释);首个公开注释里程碑与人类基因组计划草图同期公布 |
| 2003-12 → 2009 起 | release 体系建立、Ensembl Genomes 上线 | 配合人类基因组完成图,注释与组装版本成体系化发布;随后逐步拆分出 Bacteria、Fungi、Plants、Protists、Metazoa 五个门户,采用独立 release 号 |
| 2013-12 / 2016 | release 74、方法学论文 | 代码许可切换为 Apache License 2.0,治理进一步开放;Genebuild 流水线方法学(Aken et al., Database 2016)与 VEP 论文(McLaren et al., Genome Biology 2016)发表 |
| 2020-06 | Rapid Release 启动 | 新组装与新注释以滚动方式快速发布,注释基因组数随后增至 1,700+ |
| 2022-12 | release 110 / Ensembl Genomes 58 | 人类注释配合 GENCODE v43;PAR 区 ID 规则调整,chrY 假常染色体区拥有独立 ID |
| 2024-05 至 2024-06 | Ensembl Genomes 59 / release 112 | 植物与真菌分库例行更新;人类变异注释整合 gnomAD v4.1;Ensembl 2024 论文报告养殖动物调控构建首发(猪、鸡、大西洋鲑、大菱鲆、欧洲舌齿鲈) |
| 2024-10 | release 113 / Ensembl Genomes 60 | GENCODE 长读长捕获测序整合,新增超过 130,000 条 lncRNA 转录本;默认基因轨道由 GENCODE Comprehensive 改为 GENCODE Basic,引入 gencode_primary 标签;CADD 升级至 v1.7、dbNSFP 升级至 v4.7c;ENSG→ENSR ID 格式更新影响 8 个物种 |
| 2025-05 | release 114 配套 | 长读长流水线 TAGENE 逐步应用于人类注释;植物分库新增燕麦、豌豆、扁豆等物种 |
| 2025-09 | release 115 / Ensembl Genomes 62 | 约 121,000 个新蛋白编码转录本加入 GRCh38;新增牛品种 UOA_Tuli_1(GCA_040285425.1)与 UOA_Wagyu_1(GCA_040286185.1);绵羊参考更新为 ARS-UI_Ramb_v3.0(GCA_016772045.2);新增 7 个植物物种;Newick 树新增两种导出模式;退役部分 Plants 功能基因组数据库 |
| 2026-06 | release 116 / Ensembl Genomes 63 | 旧平台(ensembl.org)最终功能版本;引入 “Ensembl Canonical Extended” 标志(人类转录本延伸 5’/3’ 端);新增猪、牛、驴品种基因组;EPO-Extended 比对纳入 30 头猪;鸭、单峰驼、大西洋鲱新增变异支持;全部外部参考与 InterProScan 重跑 |
| 2026 起 | 新平台迁移 | beta.ensembl.org 承载超过 4,700 个基因组(4,100+ 动物、470 植物、100 真菌),目标将约 36,000 个原核基因组迁移至新站 |
§1.5 典型应用场景
| 场景 | 典型做法 | Ensembl 提供的关键输入 | 价值点 |
|---|---|---|---|
| 一、RNA-seq 定量与差异表达 | 下载对应物种与组装的 GTF,配合 HISAT2/STAR 建索引,用 featureCounts 或 Salmon 定量 | 注释 GTF + 同 release 的基因组 FASTA(区名严格一致) | 避免"GTF 染色体名与 FASTA 不一致"这类常见崩溃 |
| 二、变异致病性判读 | 对 VCF 跑 VEP,把后果术语与打分喂给 ACMG 规则或机器学习模型 | 后果术语(missense_variant、splice_donor_variant 等)、IMPACT 四级分类、gnomAD 频率、CADD/REVEL 打分、ClinVar 意义 | 一站式获得大部分判读证据项,且可追溯到转录本层级 |
| 三、跨物种迁移学习 | 把小鼠模型的结论外推到人类,或反向验证候选靶点 | Compara 同源基因表(含 ortholog_one2one、one2many、paralog 与置信度) | 避免自行做 BLAST 带来的假阳性与命名混乱 |
| 四、基因组语言模型标签生成 | 为剪接位点、调控元件、染色质状态预测任务构造正负样本坐标 | 基因结构、外显子边界、UTR 坐标、调控特征峰、跨物种保守性打分 | 标签与负样本可从同一坐标系构造,减少对齐成本 |
| 五、教学与基因组浏览器探索 | 在 Web 界面直接观察基因结构、异构体、跨物种比对带与变异位点 | 交互式基因组浏览器与注释轨道 | 无需编程即可建立"一个基因是什么"的直觉 |
§2 医学背景与术语映射
§2.1 关联疾病分类(ICD-11)
Ensembl 不是疾病数据集,而是支撑疾病研究的参考资源。下表列出其注释内容被最频繁用于分析的人类疾病类别,以及对应的 ICD-11 编码。需要强调:这些编码描述的是使用该资源分析的对象,而非数据集自身的标签。
| 疾病/表型类别 | ICD-11 编码 | 中文名称 | 与 Ensembl 的关联方式 |
|---|---|---|---|
| 单基因遗传病与遗传性肿瘤易感综合征 | LD40–LD5F(部分);2C60–2C6Z(部分) | 发育异常;乳腺、卵巢等恶性肿瘤 | 通过 VEP 的 ClinVar 注释定位致病错义与无义变异;BRCA1/BRCA2 等基因的转录本结构与剪接位点变异注释 |
| 神经发育障碍 / 遗传性代谢病 | 6A00–6A0Z;5C50–5C5Z | 神经发育障碍;先天性代谢缺陷 | de novo 变异注释与进化保守性打分(GERP/PhyloP);酶编码基因的错义变异功能预测与人群频率过滤 |
| 心血管遗传病 / 免疫缺陷病 | BC40–BC4Z(部分);4A00–4A0Z | 心肌病与心律失常;原发性免疫缺陷 | 长 QT、肥厚型心肌病相关基因的剪接与结构变异注释;免疫相关基因的同源基因与调控注释分析 |
| 药物基因组学表型与罕见病总体 | 药物基因组学相关条目;多章节分布 | 药物代谢差异;罕见病 | Ensembl Variation 的变异-基因-药物交叉注释;罕见变异的群体频率过滤(gnomAD)与致病性预测 |
§2.1b SNOMED CT 术语映射
| 标签 | ICD-11 | SNOMED CT 码 | 术语 |
|---|---|---|---|
| 遗传病 | LD40–LD5F | 66091009 | Genetic disease(遗传病) |
| 临床发现 | 多章节 | 404684003 | Clinical finding(临床发现) |
| 基因 / 蛋白质 / 单核苷酸变异 / 遗传变异 | 不适用 | 246091004 / 246100006 / 1001708001 / 363779003 | Gene(基因);Protein(蛋白质);Single nucleotide variant(单核苷酸变异);Genotype determination(基因型判定) |
| 遗传检测 / 基因表达 / 染色体 | 多章节;不适用 | 405825005 / 38242009 / 10837001 | Genetic test(遗传检测);Gene expression(基因表达);Chromosome structure(染色体结构) |
映射说明:Ensembl 的原生标签是序列本体(Sequence Ontology,SO)术语与自有生物型名称(如 protein_coding、lncRNA),并非 ICD-11 或 SNOMED CT。上表是为临床与流行病学语境使用者提供的桥接,说明"这份资源能被用来分析什么问题";跨术语体系的等价性并不严格,不应把 SO 术语当作临床诊断编码。
§2.2 基因组学背景简介
要理解 Ensembl 提供什么,需先理解基因组注释的层次。测序得到的是一长串碱基(A/T/G/C),人类基因组约 30 亿个碱基对,分布在 22 条常染色体、两条性染色体(X 与 Y)及线粒体 DNA 上。这串字母本身不含语义,注释的任务是在其上标注结构性单元:基因(gene,有功能产物的基因组区段)、转录本(transcript,基因被转录出的 RNA 模板,一个基因可有多个)、外显子(exon,转录本保留的部分)与内含子(intron,被剪接掉的部分)、编码序列(CDS,真正翻译成蛋白的部分)以及非翻译区(UTR,5’ 与 3’ 端不被翻译但影响稳定性与翻译效率的部分)。
注释分两条技术路线。一是自动注释:把该物种或近缘物种的 RNA-seq 读段、EST、蛋白序列比对回基因组并据此拼接基因模型,Ensembl 的 Genebuild 流水线走这条路,优势是快、可扩展到数千物种,劣势是质量参差。二是人工注释:由注释员逐条阅读文献与实验证据,手工确定外显子边界、UTR 范围、是否保留内含子,GENCODE/Havana 团队走这条路,质量高但只覆盖人类与小鼠。Ensembl 的策略是两者结合:全部物种跑自动流水线,人类与小鼠额外合并人工注释。
在注释之外,Ensembl 还提供三类增值数据。比较基因组学回答"不同物种的基因如何对应":通过全序列比对找出同源区段,区分直系同源(ortholog,物种分化产生的对应基因)与旁系同源(paralog,基因复制产生的同源基因),并推断基因树与物种树。变异注释回答"这个碱基变化有什么后果":把变异叠加到转录本上,判断它落在内含子还是外显子、是否改变氨基酸、是否破坏剪接位点。调控注释回答"这段 DNA 何时被使用":整合 ChIP-seq、ATAC-seq、CAGE 等实验数据,标注启动子、增强子与开放染色质区域。
对 AI 研究者而言,这三层的信息泄漏模式完全不同:基因结构注释在同一染色体内部高度自相关(相邻外显子边界往往同时被预测对或同时错),同源基因在物种间高度相关(随机划分会把同源基因分到两侧),调控注释与细胞类型强绑定(用淋巴细胞数据训练、肝细胞数据评测会严重高估性能)。
§2.3 临床与研究任务定义
| 任务层级 | 任务定义 | Ensembl 提供的关键输入 | 典型输出 |
|---|---|---|---|
| 变异筛检(Screening) | 在人群或队列中识别候选致病变异 | 变异集合(VCF)、gnomAD 人群频率、转录本坐标 | 候选变异列表 + 频率过滤结果 |
| 变异功能诊断与致病分级(Diagnosis / Classification) | 判定变异是否影响基因功能;按 ACMG/AMP 指南做五级分类 | VEP 后果术语、IMPACT 分级、CADD/REVEL/SpliceAI 打分、ClinVar 证据;同源基因保守性与剪接预测 | 功能影响判读(HIGH/MODERATE/LOW/MODIFIER);致病/可能致病/意义未明/可能良性/良性 |
| 基因-疾病关联(Gene discovery) / 转录本选择(Isoform selection) | 从关联信号定位候选基因;为报告或检测设计选择代表转录本 | 基因注释、共线性、同源基因、调控注释;MANE Select 映射、gencode_primary 标签、canonical 标记 | 候选基因优先级排序;单一代表转录本 ID |
| 跨物种功能预测(Cross-species) / 调控元件识别(Regulation) | 将模式生物结论外推到人类;定位组织/细胞特异的调控区域 | Compara 同源基因表、基因树、多物种比对;Ensembl Regulation 特征、ENCODE/BLUEPRINT 峰 | 同源基因映射表 + 置信度;调控区域坐标集 |
§2.4 数据来源与人群属性
| 维度 | 说明 |
|---|---|
| 数据类型 | 参考基因组组装与注释,非人群体样本;不包含任何个体受试者 |
| 物种覆盖 | 4,800+ 真核基因组(含脊椎动物、无脊椎动物、植物、真菌、原生生物)+ 31,300+ 原核基因组 |
| 序列来源 | 主要来自 INSDC 三库(ENA、GenBank、DDBJ)公开的基因组组装 |
| 变异数据来源 | 人体变异主要来自 gnomAD(当前整合 v4.1)、dbSNP、ClinVar、1000 Genomes 等已脱敏的汇总来源 |
| 调控数据来源 | ENCODE、BLUEPRINT、GTEx、FANTOM5 及农业物种专项项目(GENE-SWitCH、AQUA-FAANG) |
| 人群代表性 | 变异频率数据以欧洲ancestry队列为主,非欧洲人群覆盖不足(见 §7.1) |
| 时间跨度 | 注释随 release 滚动更新(2026 年约为每季度一次),谱系数据可追溯至 2000 年 |
| 地理覆盖 | 全球开放,无地理限制;镜像与 FTP 全球可达 |
注:表中"欧洲ancestry"指 gnomAD 等来源的人群构成特征,是做频率过滤时必须考虑的限制,并非 Ensembl 自身的采集设计。
§2.5 临床与研究价值
Ensembl 的价值可以用一句话拆解:它把"序列"变成"可计算的对象"。 在此之前,跨物种比较基因功能需要研究者自行做 BLAST、确定同源关系、处理 ID 命名不一致;此后这些步骤被压缩为一次 API 调用或一次 BioMart 查询。这种压缩带来的效率提升是数量级的:原本需要数周构建的多物种同源基因表,现在数小时内即可得到,且格式统一、ID 可追溯。
在临床侧,其价值主要体现在一致性上。临床遗传报告经常需要引用转录本编号(NM_ 或 ENST_ 开头),若实验室与外部数据库使用了不同注释版本,同一变异可能被标注到不同外显子编号上,导致沟通歧义甚至误判。Ensembl 与 GENCODE 的联合发布机制、以及 MANE(Matched Annotation from NCBI and EMBL-EBI)项目对代表转录本的收敛,正在系统性减少这类歧义。反过来说,临床使用 Ensembl 必须固定 release 号,任何版本升级都需要重新验证受影响基因的注释变化。
在研究侧,其价值在于可复现性。每个 release 都被完整归档、永久可访问(旧版本不因新版发布而失效),一篇 2018 年论文使用的注释在 2026 年仍能被精确复现。对纵向比较、meta 分析与基准复现而言,这一点比注释质量更重要——不稳定的参考系会让所有比较失去意义。
§2.6 质量基准与标准对照
| 对照维度 | Ensembl 的做法 | 对应外部标准 | 性质 |
|---|---|---|---|
| 基因注释方法学 | Genebuild 自动流水线,方法学公开发表 | 序列本体(Sequence Ontology)术语体系 | 方法透明、可引用 |
| 人类/小鼠注释 | 与 GENCODE/Havana 人工注释合并发布 | GENCODE 标准(level 1/2/3 分级、tag 体系) | 人工 + 自动混合 |
| 代表转录本选择 | Ensembl Canonical / gencode_primary 标签 | MANE Select(NCBI 与 EMBL-EBI 联合项目) | 跨库收敛工程 |
| 变异功能注释 | VEP 输出序列本体后果术语 + IMPACT 四级 | ACMG/AMP 变异分类指南(作为输入之一) | 注释而非判读 |
| 变异命名规范 | 遵循 HGVS 命名法 | HGVS(人类基因组变异学会)命名标准 | 遵循外部标准 |
| 同源基因判定 | Compara 基因树 + 同源类型 + 置信度 | OrthoDB、OMA 等独立同源数据库 | 可交叉验证 |
| 版本管理、代码与数据许可 | release 编号 + 归档页 + FTP 永久路径;代码 Apache License 2.0(release 74 起);数据无任何使用限制 | NAR 数据库专刊年度论文要求;OSI 认可的开源许可;无对应 DUO 限制项(NRES) | 完整版本记录 + 开放治理 + 完全开放 |
| 质量评估体系 | 无官方"排行榜";质量由外部基准与社区评测验证 | DAIMS 数据管理标准、Croissant 元数据规范 | 本词条按 DAIMS 逐项评估(§7.7) |
§3 数据集规格
§3.0 版本抉择矩阵
Ensembl 的版本体系有一个容易踩坑的设计:Ensembl 与 Ensembl Genomes 各自独立编号,两者不是同一串数字。截至 2026-09,Ensembl 主站为 release 116(2026-06 发布,为旧平台最终功能版本),Ensembl Genomes 为 release 63;上一轮 Ensembl 115 与 Ensembl Genomes 62 于 2025-09 发布。写作与引用时必须成对注明,不能只写一个数字。
| 你的需求 | 推荐版本/资源 | 规模 | 理由 |
|---|---|---|---|
| 人类基因注释用于 RNA-seq 定量 | Ensembl 116 或配套 GENCODE v49+ 的 GTF/GFF3 | 单个 GTF 约 50–60 MB(压缩) | 人类注释与 GENCODE 同源,二者选一即可;定量任务推荐 basic 层级 |
| 人类变异功能注释 | Ensembl 116 + VEP 在线版或离线 cache | 离线 cache 按物种约 10–20 GB | VEP cache 与 release 严格绑定,注释结果必须记录 release 号 |
| 小鼠或大鼠模型注释 | Ensembl 116 对应物种目录(小鼠与人类同为人工注释) | 单个 GTF 约 40–50 MB | 小鼠是少数拥有人工注释的物种,不要用 Rapid Release 版本替代 |
| 跨物种同源基因批量拉取 | Ensembl Compara(随主 release)或 REST homology 端点 | 按查询返回 TSV/JSON | 同源基因表不单独打包,须通过 BioMart/REST 或 Compara 端点获取 |
| 农业与经济动物(猪、牛、鸡、鲑) | Ensembl 116(含品种级基因组) | 每物种数十 MB 至数 GB | 2024 起农业物种获得调控构建与品种级注释,主站覆盖优于分库 |
| 植物、真菌、原生生物、细菌 | Ensembl Genomes 63(Plants/Fungi/Protists/Bacteria 分库) | 真菌单库 1,504 个基因组,全库巨大 | 这些类群不在主站,必须走 Ensembl Genomes 门户与独立 FTP 路径 |
| 无脊椎动物(昆虫等) | Ensembl Genomes 63 Metazoa,或 beta.ensembl.org | beta 站 4,100+ 动物基因组 | Metazoa 覆盖有限,新站已纳入大批昆虫与无脊椎动物组装 |
| 全新生组装(近两月内发布) | Ensembl Rapid Release(beta.ensembl.org) | beta 站 4,700+ 基因组 | 新组装先进入 Rapid Release,注释较浅但可及时获得 |
| 历史复现(2018 年论文所用注释) | 官方归档页对应历史 release(如 92、96、104) | 与原版本一致 | 归档版本永久可访问;不可用当前 release 替代 |
| 临床报告代表转录本选择 | MANE Select 映射 + gencode_primary 标签 | 随 release 附带的 metadata | 避免自行用"最长 CDS"规则选代表转录本 |
§3.1 数据模态详情
| 子域 | 内容 | 文件/接口形态 | 覆盖范围 |
|---|---|---|---|
| 基因注释(Core) | 基因、转录本、外显子、CDS、UTR 结构坐标 + 生物型 + 质量标签 | GTF / GFF3 / MySQL 表 / REST JSON | 全部 4,800+ 真核物种(质量与深度不一) |
| 序列 | 基因组组装 FASTA、转录本序列 FASTA、蛋白翻译 FASTA | FASTA(含 .gz 与索引) | 与注释同一组装的对应序列 |
| 比较基因组学(Compara) | 同源基因对、基因树、物种树、全基因组比对(EPO-Extended / Cactus)、保守性打分 | TSV / JSON / REST / BioMart / XML(Newick) | 按类群分组,鱼类、昆虫、禾本科覆盖密度最高 |
| 变异(Variation)与效应(VEP) | 变异位点、等位基因频率、表型关联、结构变异、体细胞变异;序列本体后果术语、IMPACT 分级、蛋白位置、附加预测打分 | VCF(按物种/染色体分文件)/ 在线与离线 VEP(TSV/VCF/JSON)/ REST | 人类最完整;小鼠、果蝇、斑马鱼、猪、鸡等有专门支持;2026 年新版本中鸭、单峰驼、大西洋鲱新增变异支持 |
| 调控(Regulation) | 启动子、增强子、开放染色质、转录因子结合位点、组蛋白修饰峰、eQTL | BED / bigWig / GFF / REST | 人类、小鼠为主,农业物种(猪、鸡、鲑、大菱鲆、海鲈)已建构建 |
| 表型与交叉引用 | 基因-表型关联、外部数据库 ID 映射(HGNC、MGI、UniProt、RefSeq、PDB) | TSV / xref 表 / REST | 人类与模式物种最全 |
§3.2 按子域/类群的规模
| 子域或类群 | 规模 | 指标口径 | 备注 |
|---|---|---|---|
| 真核基因组总数 | 超过 4,800 个 | Ensembl 2025 论文摘要 | 含主站与 Rapid Release 注释的全部真核组装 |
| 原核基因组总数 | 超过 31,300 个 | Ensembl 2025 论文摘要 | 由 Ensembl Bacteria 承载,迁移至新站的工作仍在进行 |
| beta.ensembl.org 新站 | 超过 4,700 个基因组 | 官方新站页 | 其中动物 4,100+、植物 470、真菌 100 |
| Ensembl Fungi / Bacteria | 真菌 1,504 个基因组;细菌约 36,000 个(迁移目标口径) | 真菌分库门户;官方新站迁移说明 | 真菌为单库规模最大的分库之一;细菌数量随公共数据库提交持续增长 |
| 人类主注释 | 78,733 基因 / 644,292 转录本(GENCODE v50 口径) | GENCODE 官方统计 | 与 Ensembl 人类注释同源,随 release 同步 |
| 人类变异 | gnomAD v4.1 等大规模人群变异集合 | VEP 输入源文档 | 单条变异的功能注释输出含数十个字段 |
| 昆虫(鳞翅目 / 双翅目) | 594 个 / 180 个物种获得注释 | Ensembl 2024 论文 | 非脊椎动物扩张的代表类群 |
| Cactus 全基因组比对 | 123 种辐鳍鱼 / 218 种鳞翅目 / 37 个小麦基因组 / 27 个水稻基因组 | Ensembl 2024 论文 | 按类群分别构建,不比同一张比对 |
| 猪品种比较 / Rapid Release | 27 个猪基因组;超过 1,700 个注释基因组 | Ensembl 2024 论文 | 前者为品种级比较基因组学示例;后者自 2020-06 机制启动后累积 |
§3.3 数据格式与文件组织
| 格式 | 用途 | 关键特征 | 常见陷阱 |
|---|---|---|---|
| GTF / GFF3 | 基因结构注释(GTF 为主流,GFF3 为标准格式) | 均为制表符分隔 9 列;GTF 属性段为 key "value";,GFF3 为 key=value 并支持父子层级 |
GTF 属性引号与分号格式不严格统一,解析器需容错;GFF3 坐标与其他工具约定可能差 1(见坑点 3) |
| FASTA | 基因组 / 转录本 / 蛋白序列 | .fa.gz 配 .fai 与 .gzi 索引 |
区名必须与 GTF 完全一致(如 1 而非 chr1) |
| VCF | 变异位点与基因型 | 头部含 INFO 字段定义 | 不同来源 VCF 的 INFO 字段不兼容,需分别解析 |
| BED / bigWig | 调控特征与覆盖度信号 | BED 为 0-based 半开区间 | 与 GTF 的 1-based 闭区间混用会整体偏移一位 |
| JSON / XML | REST API 返回;BioMart 查询结果与配置 | 按端点定 schema;XML 可含序列与属性列 | 端点有版本前缀(/rest 与 /rest/archive)差异;XML 数据类型混合时列顺序不固定 |
| Newick / TSV | 基因树与物种树;同源基因表、交叉引用表、元数据 | 括号嵌套 + 分支长度;表头随文件类型变化 | release 116 新增两种 Newick 导出模式,旧解析脚本需适配;TSV 列名含空格,须按制表符而非空格切分 |
§3.4 存储规模
| 层级 | 典型体积 | 对 AI 工程的含义 |
|---|---|---|
| 单物种注释 GTF(压缩) / 单脊椎动物"注释 + FASTA"集合 | 10–60 MB(人类最大);整套约数 GB | 前者可直接载入内存;后者建议只落地所需染色体或子集 |
| VEP 离线 cache(按物种) / 变异注释输出(全基因组 VEP) | 人类 cache 约 10–20 GB;全基因组输出可达上亿行 | 大规模注释必须走本地离线路径;输出必须流式处理,不可一次性载入 |
| Ensembl Genomes 全部分库 | 数 TB;MySQL 转储另计且通常更大 | 只按需拉取目标类群 |
AI 训练通常只需注释层子集:GTF 转 Parquet 后,人类全量基因结构约数百万行、压缩后数百 MB,单机内存即可处理。
§3.5 标注方式与质量分层
| 分层 | 生产方式 | 质量特征 | 适用场景 |
|---|---|---|---|
| 人工注释(Manual) | Havana/GENCODE 团队逐条审编(仅人类与小鼠) | 最高;外显子边界经实验验证,附 level 1/2 与证据 tag | 临床判读、变异注释基准、代表转录本选择 |
| 自动注释(Genebuild 流水线) | 强证据:输入为该物种转录组与蛋白同源证据;弱证据:仅有近缘物种蛋白投射 | 强证据下结构可靠(部分 UTR 边界不确定);弱证据下结构大致正确、异构体可能不全 | 前者适用于常规 RNA-seq 定量、教学与跨物种分析;后者适用于长尾物种探索性分析 |
| Rapid Release 注释 | 快速流水线,优先时效性 | 较低;覆盖新组装但不追求深度 | 新组装首轮分析、比较基因组学线索发现 |
Ensembl 的质量标签体系包括 level(1/2/3 层级,仅出现在 GENCODE 合并注释中)、transcript_support_level(TSL 1–5,反映 mRNA/EST 支持强度)、tag(basic、gencode_primary、MANE_Select、APPRIS 系列、selenocysteine 等)以及生物型命名。判读一份注释可用性的最快方式,就是看它带不带 gencode_primary / MANE_Select 标签——带的即为被优先推荐的代表转录本。
§3.6 注释者资质与一致性
人工注释由 EMBL-EBI 的 Havana 团队与 Ensembl 团队共同承担,核心团队约 75 位科学家,负责人包括 Rob Finn、Alexey Sokolov、Fergal Martin、Mallory Freeberg 与 Emily Clark(官方致谢页)。流程含双人复核与证据溯源,每条注释都可追溯到支撑它的转录本、蛋白或文献。自动注释由流水线保证一致性——同一套代码与参数应用于所有物种,因此跨物种偏差主要来自证据可得性差异而非流程差异。
一致性方面有一个反直觉事实:Ensembl 不提供注释员间一致性统计,因为人工注释不是"多人独立标注同一段序列"的众包模式,而是单团队顺序作业加复核。跨库一致性通过 MANE 项目与 NCBI 对齐(Ensembl/GENCODE 与 RefSeq 的代表转录本收敛为同一份),这是目前最接近"注释金标准"的跨库验证机制。
§3.7 更新周期与采集时间
| 时间维度 | 内容 |
|---|---|
| 主 release 与分库周期 | 主 release 历史上为每年 3–5 次;2026 年 release 115(2025-09)至 116(2026-06)间隔约 9 个月;Ensembl Genomes 与主 release 配对但有独立编号(116 对应 63) |
| Rapid Release 周期 | 滚动式,新组装与注释随到随发 |
| VEP cache 更新 | 随 release 重建,旧 cache 不兼容新版本注释 |
| 归档保留 | 所有历史 release 在归档页永久可访问,FTP 路径保留 |
| 本词条数据时点 | 截至 2026-09,主站 Ensembl 116,Ensembl Genomes 63,新站 beta.ensembl.org |
需要特别提示:release 116 是旧平台(ensembl.org)的最终功能版本,平台正向 beta.ensembl.org 迁移。2026 年之后的版本号体系、API 路径与页面结构都可能变化;依赖 rest.ensembl.org 的生产管线应关注官方迁移公告,不要在未验证的情况下假设接口长期不变。
§3.8 地理与物种覆盖
| 覆盖维度 | 覆盖情况 | 缺口 |
|---|---|---|
| 脊椎动物 | 覆盖充分,含全部主要模式物种、家养动物与大量野生近缘种 | 部分深海与极地物种仅有组装无注释 |
| 无脊椎动物 | 昆虫(鳞翅目 594、双翅目 180)与部分水产无脊椎动物覆盖较好,新站动物基因组 4,100+ | 线虫以外的多数无脊椎类群注释稀疏 |
| 植物 | 主要作物与模式植物覆盖充分,含 37 个小麦基因组、27 个水稻基因组的比对 | 非作物野生植物覆盖有限 |
| 真菌 | 1,504 个基因组(真菌分库) | 环境真菌样本的注释深度不足 |
| 原生生物 | Protists 分库覆盖主要病原与模式原生生物 | 海洋微型浮游生物覆盖薄弱 |
| 细菌与古菌 / 地理限制 | 31,300+ 原核基因组(Ensembl Bacteria);地理上无限制 | 组装碎片化(draft genome)导致基因预测不完整 |
| 人群相关性 | 人类变异注释依赖 gnomAD 等来源,欧洲ancestry占比高 | 非欧洲人群频率数据不足 |
§3.9 数据生成平台与深度溯源链
| 层级 | 类型/数据 | 上游技术平台或来源 | 可验证途径 |
|---|---|---|---|
| L1 原始序列 / L2 基因组组装 | 测序读段;组装序列 | 短读长(Illumina)为主,辅以 PacBio HiFi 与 Oxford Nanopore 长读长;组装来自 INSDC(ENA/GenBank/DDBJ) | 组装记录的 BioProject / BioSample 编号;组装版本号(如 GRCh38.p14、GCA_040285425.1)与官方组装报告 |
| L3 转录证据 / L4 蛋白证据 | 转录本与异构体结构 | Illumina RNA-seq、PacBio Iso-Seq、ONT cDNA;release 113 起整合 GENCODE 长读长捕获测序;跨物种投射与 CDS 边界核对依赖 UniProt/Swiss-Prot 与 TrEMBL | Aken et al., Database 2016(DOI: 10.1093/database/baw093) |
| L5 调控数据 | 启动子、增强子、开放染色质 | ChIP-seq、ATAC-seq、CAGE、DNase-seq、组蛋白修饰 ChIP(ENCODE、BLUEPRINT、GTEx) | 官方调控特征文件与实验来源标注 |
| L6 人群变异 / L7 临床变异 | 等位基因频率;临床意义注释 | 大规模全基因组与外显子组测序(gnomAD v4.1 等);临床实验室提交至 ClinVar 的变异与评级 | 变异文件的来源与版本说明;ClinVar 提交记录与评级依据 |
| L8 版本与代码 | 注释版本与流程实现 | release 编号 + 冻结日期;GitHub 上的 ensembl 组织仓库(Apache 2.0) | 官方归档页与仓库 tag;VEP 输出头部含所用 release 与 cache 版本 |
溯源链的实用价值在于:当一批注释结果异常时,可从"release 号 + 组装版本 + 工具版本"三元组逐层回溯,定位是序列问题、注释问题还是解析问题。Ensembl 在这三层都提供可查证锚点,单条注释可通过 Web 界面的证据面板追溯到支撑它的转录本、蛋白或文献。
§4 数据结构
§4.0 目录树
Ensembl FTP 的目录组织遵循"物种 → 子域 → 格式"三层层级。以人类(Homo sapiens)在 release 116 下的结构为例:
ensembl.org/pub/
├── release-116/
│ ├── gtf/homo_sapiens/ # .gtf.gz 全量(含 scaffold)/ .chr.gtf.gz 仅参考染色体(最常用)
│ │ # .chr_patch_hapl_scaff.gtf.gz / .abinitio.gtf.gz 仅自动预测 / CHECKSUMS
│ ├── gff3/homo_sapiens/ # 同内容 GFF3 格式
│ ├── fasta/homo_sapiens/ # dna/ 含 primary_assembly、toplevel、dna_sm(soft-masked)
│ │ # cdna/ cds/ pep/ ncrna/ 序列;index/ 比对索引
│ ├── vep/ # VEP 离线 cache 与插件数据
│ ├── variation/vcf/homo_sapiens/ # 00-All.vcf.gz 与按染色体切片
│ ├── regulation/homo_sapiens/ # 调控特征(*.gff.gz)与覆盖度信号(*.bigwig)
│ ├── compara/ # homology / gene_trees / emf / pairwise_alignment
│ ├── mysql/ # MySQL 数据库转储(核心库与 Compara 等)
│ └── json/ xml/ # 元数据与 xref、跨库映射
├── release-115/ # 历史版本,永久保留(每一历史 release 均完整归档)
└── ...
Ensembl Genomes 走独立路径,五个门户(release 63)对应五棵子树:
ensemblgenomes.org/pub/
├── bacteria/ # 原核基因组(31,300+),按物种名分子目录
├── fungi/ # 1,504 个真菌基因组
├── plants/ # 植物分库,含小麦、水稻、燕麦、豌豆、扁豆等
├── protists/ # 原生生物分库
└── metazoa/ # 后生动物分库(无脊椎动物为主)
# 各门户下均为 release-63/<portal>/gtf/<species>/
GTF 每行示例(人类 GRCh38 注释,注意区名不带 chr 前缀):
1 havana gene 11869 14409 . + . gene_id "ENSG00000223972"; gene_version "5"; gene_name "DDX11L1"; gene_source "havana"; gene_biotype "lncRNA";
1 havana transcript 11869 14409 . + . gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000456328"; transcript_version "2"; transcript_name "DDX11L1-202"; transcript_source "havana"; transcript_biotype "lncRNA"; tag "basic";
1 havana exon 11869 12227 . + . gene_id "ENSG00000223972"; gene_version "5"; transcript_id "ENST00000456328"; transcript_version "2"; exon_number "1"; exon_id "ENSE00002234944"; exon_version "1";
REST API 返回的 JSON 结构示例(GET /lookup/id/ENSG00000139618?expand=1 的字段骨架):
{"id": "ENSG00000139618", "object_type": "Gene", "biotype": "protein_coding",
"assembly_name": "GRCh38", "seq_region_name": "13", "start": 32315474, "end": 32400266,
"strand": 1, "description": "BRCA2 DNA repair associated", "version": 15,
"canonical_transcript": "ENST00000380152.8",
"Transcript": [{"id": "ENST00000380152", "biotype": "protein_coding", "is_canonical": 1, "length": 11986}]}
§4.1 DAIMS 字段字典:GTF/GFF3 注释字段
下表覆盖 Ensembl 注释文件的核心字段,是构建 AI 训练集时实际会读到的列。
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| seqname | text | 染色体或 scaffold 名称,与同 release 的 FASTA 一致,不带 chr 前缀 |
1 / 13 / X / MT | 按染色体切分训练集、区间定位 | scaffold 命名随组装 patch 变化 | 无缺失 | 1–22, X, Y, MT(chr 子集);另有 scaffold/patch 名 |
| source | text | 注释来源程序 | havana / ensembl / ensembl_havana | 人工/自动模型区分、质量加权 | 团队迁移后名称历史沿用 | 无缺失 | havana, ensembl, ensembl_havana, mirbase, tRNAscan 等 |
| feature | text | 特征类型 | transcript / exon / CDS | 结构层级过滤 | 无 | 无缺失 | gene, transcript, exon, CDS, five_prime_utr, three_prime_utr, start_codon, stop_codon, Selenocysteine |
| start / end | int | 起止坐标(1-based,闭区间) | 11869 / 14409 | 区间运算、序列提取 | 模型修订在 release 间移动边界 | 无缺失 | 正整数;start ≤ end |
| score / frame | text | 打分字段(恒为 .,未使用)与 CDS 密码子相位 |
. / 0, 1, 2 | 蛋白翻译重建;score 忽略 | 非编码特征 frame 无意义 | . = 占位或不适用 |
score 恒为 “.”;frame 取 0, 1, 2, “.” |
| strand | text | 链方向 | + / - | 剪接方向、启动子侧判断 | 无 | 无缺失 | +, - |
| gene_id / gene_version | text | 稳定基因 ID + 版本号(分列存储) | ENSG00000223972 / 5 | 主键、跨 release 追踪 | 版本号随 release 递增 | 无缺失 | ENSG 前缀 + 数字;版本为正整数 |
| transcript_id / transcript_version | text | 稳定转录本 ID + 版本号 | ENST00000456328 / 2 | 主键、异构体索引 | 版本号随 release 递增 | 无缺失 | ENST 前缀 + 数字 |
| exon_id / exon_version | text | 稳定外显子 ID + 版本号 | ENSE00002234944 / 1 | 共享外显子聚合 | 外显子可被多个转录本共享 | 无缺失 | ENSE 前缀 + 数字 |
| gene_name / transcript_name | text | 官方基因符号(多为 HGNC/MGI 命名)与转录本显示名 | DDX11L1 / DDX11L1-202 | 报告输出、人读校对、跨库 join | 无符号时用自动命名(如 AC000003.1);命名随版本重排 | 无缺失(可能是自动名) | 符号字符串(基因名 + 序号) |
| gene_biotype / transcript_biotype | text | 生物型分类 | protein_coding / lncRNA | 分类标签、分层采样 | 定义随版本细化 | 无缺失 | 约 30–40 种,见 §4.2 |
| exon_number | text | 转录本内外显子序号(按转录方向) | 1 | 外显子顺序建模 | 同一外显子在正负链转录本中编号不同 | 无缺失 | 正整数 |
| tag | text | 质量与属性标签(可多值) | basic / gencode_primary / MANE_Select | 代表转录本选择、质量过滤 | 标签集合随 release 扩充 | 属性缺省 = 无标签 | 多值并列 |
| transcript_support_level | text | mRNA/EST 证据支持强度分级 | 1 | 弱证据模型过滤 | 非编码转录本常缺失 | 属性值可为 NA | 1–5, NA |
| level | int | 注释质量层级(GENCODE 合并体系) | 2 | 质量过滤(剔除 level 3) | 仅在人类/小鼠注释出现 | 属性缺省 = 未分级 | 1, 2, 3 |
| ccdsid / protein_id | text | CCDS 一致性编号与翻译产物 ID | CCDS1.1 / ENSP00000369497 | 与 NCBI CCDS 对齐;蛋白层级映射、与 UniProt 对接 | CCDS 覆盖不全;无 CDS 则无 protein_id | 属性缺省 = 无该属性 | CCDS + 版本号;ENSP 前缀 + 数字 |
§4.2 生物型(biotype)标签分布
以人类注释的典型分布为例(数量级随 release 变化,取 GENCODE v50 口径):
| biotype | 级别 | 说明 | 在 AI 任务中的处理建议 |
|---|---|---|---|
| protein_coding | 基因/转录本 | 编码蛋白,含 readthrough 基因 | 主力训练正样本;注意 readthrough 需单独标记 |
| lncRNA | 基因/转录本 | 长非编码 RNA,数量最多的类别 | 负样本或独立任务;release 113 后因长读长整合显著增加 |
| pseudogene 系列(processed / unprocessed / transcribed_unprocessed) | 基因 | 加工型、未加工型与有转录证据的未加工假基因 | 需与真基因区分,避免误当功能基因;后两类为边界类别,需显式策略 |
| miRNA | 基因/转录本 | 微小 RNA | 短小、单转录本为主,单独处理 |
| snRNA / snoRNA | 基因/转录本 | 剪接体与核仁小 RNA | 多为单转录本 |
| rRNA / mt_rRNA / mt_tRNA | 基因/转录本 | 核糖体 RNA 与线粒体 RNA | 前者常被重复序列遮蔽;线粒体基因组坐标系独立 |
| misc_RNA | 基因 | 杂类 RNA | 兜底类别,语义弱 |
| sense_intronic / sense_overlapping / antisense | 基因 | 与编码基因重叠或位于反义链的 lncRNA 亚类 | 重叠导致标签冲突,需专门处理 |
| TR_* / IG_* 系列 | 基因 | T 细胞受体与免疫球蛋白基因片段(V/D/J/C) | 需重排建模,不能用标准坐标注释 |
| pseudogene(通用兜底) | 基因 | 未归入上述子类的假基因 | 建议归并为"其他假基因" |
§4.3 关键统计与坐标约定
| 统计项 | 值/约定 | 说明 |
|---|---|---|
| 人类基因数 | 约 6 万个注释基因条目 | 其中蛋白编码约 2 万个;其余为各类非编码与假基因 |
| 人类转录本数 | 数十万条 | 单个蛋白编码基因常有 5–20 条异构体 |
| 基因平均长度 | 约 30–70 kb | 随生物型差异极大,lncRNA 与蛋白编码基因量级相近 |
| 外显子平均长度 | 约 100–200 bp | 编码外显子偏短,UTR 外显子偏长 |
| 坐标体系(GTF/GFF3 与 REST) | 1-based 闭区间 | 与 GTF 一致;转换为 BED 需减 1;区间查询端点亦接受 1-based 输入 |
| 区名与线粒体命名 | 不带 chr 前缀(如 1、MT) |
与 UCSC 的 chr1、chrM 不同,混用会导致空结果 |
| 版本号位置 | ID 独立成列(GFF3)或与 ID 合并(部分 GTF),另有 GTF 中 gene_version 属性 |
解析时需分别处理两种写法 |
| VEP 后果术语 | 序列本体(SO)标准术语 | 如 missense_variant、splice_donor_variant、frameshift_variant |
| VEP IMPACT 分级 | HIGH / MODERATE / LOW / MODIFIER | 四级,非连续评分 |
| 同源类型 | ortholog_one2one / one2many / many2many / paralog 等 | 一对一同源最适合迁移学习 |
§4.4 数据层级
Ensembl 的数据组织是一个严格的层级树,理解它对于正确切分训练集至关重要:
| 层级 | 实体 | 主键 | 数量级(人类) | 与上一层的关系 |
|---|---|---|---|---|
| L1 / L2 | 物种/组装;染色体/scaffold | 物种名 + 组装版本;区名 | 1;数十至数千 | L1 决定全部坐标的名字空间;同一区名内的坐标唯一 |
| L3 | 基因 | ENSG + 版本 | 约 6 万 | 一个基因属于一个区段,可有链方向 |
| L4 | 转录本 | ENST + 版本 | 数十万 | 一个基因可有多个转录本,共享或部分共享外显子 |
| L5 | 外显子 | ENSE + 版本 | 百万级 | 一个转录本由多个外显子按序组成;外显子可在转录本间共享 |
| L5’ | CDS / UTR | 无独立 ID | 与转录本等量级 | 均为外显子的子区间 |
| L6 | 变异 | rsID 或染色体-位置-等位 | 亿级(全人群) | 归属于某个坐标,可映射到多个转录本 |
| L6’ | 调控特征 | 实验来源 + 坐标 | 百万级 | 归属于坐标,与基因的关联需通过坐标重叠判断 |
这个层级结构直接决定了三种常见的数据泄漏:同一基因的不同转录本若被分到训练与测试两侧,模型会学到"基因身份"而非"结构规律";同一外显子共享于两个转录本并跨集划分,同样造成泄漏;调控特征若与基因重叠而基因在另一侧,也会造成坐标层面的泄漏。§5.3 详述应对方法。
§4.5 缺失与占位约定
| 场景 | 约定 | 语义 | 处理建议 |
|---|---|---|---|
GTF 的 score / frame 字段不适用时 |
. |
该字段不适用(Ensembl 不使用打分;非编码特征无相位) | 保留为缺失,不要填 0 |
| 无基因符号 | 使用自动命名(如 AC000003.1、CTD-xxxx.1) |
该基因尚未被命名,而非缺失 | 不要丢弃;命名模式本身可作为特征(提示注释自动化程度) |
无 tag / ccdsid / level 属性 |
属性整体缺省 | 分别为无标签、不在 CCDS 共识集中、该物种不走 GENCODE 分级(仅人类/小鼠有) | 按属性存在性判断,不要按字符串匹配 tag "",也不要据此判断非编码或假设默认 level |
transcript_support_level 为 NA |
字面量 NA |
无法评估支持度(常见于非编码) | 作为独立类别编码,不要转为数值 |
| 调控特征无信号 | 对应区间无记录 | 该区域无实验数据,而非"无调控活性" | 负样本需从有数据的区间中取(见坑点 6) |
| 变异无 gnomAD 频率 | VEP 输出字段为空 | 该变异不在 gnomAD 中,不等于频率为零 | 区分"未观测"与"观测到零频率" |
| 同源基因缺失 | 查询结果不含该基因 | Compara 未找到满足阈值的同源关系 | 不要填补为"无同源",应标记为缺失并说明 |
| 序列 scaffold 未注释 | GTF 无该区名的记录 | 该 scaffold 未纳入注释(常因过短或为重复序列) | 建索引时须确认 GTF 与 FASTA 的区名集合差异 |
§5 划分与使用建议
§5.1 官方划分
Ensembl 不提供训练/验证/测试划分。这不是疏漏,而是资源性质决定的:它是参考注释与基础设施,而非为评测设计的基准数据集。官方提供的是以下三类"可作划分依据"的结构化信息:
| 官方提供的划分线索 | 内容 | 用法 |
|---|---|---|
| 质量标签分层 | level 1/2/3、transcript_support_level 1–5、tag 集合 | 按质量分层构造训练集与测试集 |
| MANE Select / gencode_primary 标记 | 每基因的代表转录本 | 作为独立评测子集("主转录本一致性"任务) |
| 版本归档 | 历史 release 永久可访问 | 用旧 release 训练、新 release 评测,构造时间外推测试 |
对变异相关任务,Ensembl 的变异集合同样不含"训练/测试"概念,但其人群频率字段(gnomAD)可用于构造"常见多态 vs 罕见变异"的分层,实务中常被当作天然的难度分层。
§5.2 社区惯例划分
| 惯例 | 做法 | 出处/依据 | 注意点 |
|---|---|---|---|
| 按染色体留出 | 常用 chr1–chr20 训练、chr21+chr22 验证测试,或留出 chrX | 基因组深度学习的通行做法 | 染色体间存在同源区段(如旁系同源簇),仍有残余泄漏 |
| 按基因留出 | 全部转录本归属于基因,按基因切分 | 防止同基因异构体跨集 | 需先在基因层聚合再切分 |
| 按物种留出 | 用模式物种训练、长尾物种测试 | 跨物种泛化评估 | 需用 Compara 排除测试物种的近缘物种,否则同源基因泄漏 |
| 按时间留出 | 用 release N 训练、release N+1 测试 | 版本外推评估 | 需处理 ID 版本号变化与模型删除 |
| 按保守性 / 按生物型分层 | 高保守区与低保守区分层采样;蛋白编码/lncRNA/假基因分别评测 | 避免测试集被高保守区主导;避免不均衡掩盖长尾表现 | 保守性打分本身来自多物种比对,需注意循环依赖;长尾类别样本少,置信区间宽 |
§5.3 泄漏风险(重点)
Ensembl 用于 AI 任务时的泄漏风险高于普通表格数据,原因是基因组数据在多个维度上高度自相关。以下是五类必须处理的泄漏:
(1)同基因异构体泄漏。 一个蛋白编码基因平均有 5–20 条转录本,它们共享大部分外显子。若按转录本随机划分,训练集中的转录本与测试集中的转录本会共享外显子边界,模型只需记住"这是哪个基因"就能答对结构题。缓解:始终在基因层(ENSG)切分,同一基因的全部转录本整体进入同一侧。
(2)同源基因泄漏(跨物种任务)。 若做跨物种泛化评测,而测试物种的近缘物种出现在训练集中,则测试集的基因在训练集中存在高度相似的同源序列。Ensembl Compara 的同源基因表正是检测这一问题的现成工具:切分后应检查训练集与测试集之间是否存在 one2one 同源对,若有则需把整个同源簇划到同一侧。
(3)保守区/重复区泄漏。 基因组中大量区段是通过复制产生的(旁系同源簇、转座子、片段重复)。随机按区间切分会让这些近似重复的区段分散两侧。缓解:按区段聚类(如用 RepeatMasker 注释与片段重复表)后整簇划分。
(4)版本泄漏(时间外推场景)。 若希望评测"模型能否预测新版本的注释修订",则训练集必须严格早于测试集的 release,且需处理模型删除与 ID 变化。若两版混用,实际上是在同一份近乎相同的注释上做随机划分。
(5)注释来源泄漏。 人类与小鼠的注释含人工审编内容,其他物种是纯自动流水线产物。若把人类数据与其他物种数据混合并按随机划分,模型会学到"人工注释特有的规律",而这些规律在长尾物种中不存在。缓解:跨物种任务中显式区分"人工注释物种"与"自动注释物种",或全部统一使用自动注释部分(GTF 中 source 为 ensembl 的行)。
§5.4 划分策略建议
| 任务类型 | 推荐主划分 | 辅划分 | 必查项 |
|---|---|---|---|
| 基因结构预测(单物种) | 按染色体留出(chr21/22 或 chrX) | 按基因分层确保两侧生物型分布一致 | 检查染色体间片段重复 |
| 转录本功能分类 | 按基因留出 | 按生物型分层 | 检查共享外显子 |
| 变异效应预测 | 按基因留出(变异归属于基因) | 按人群频率分层(罕见/常见) | 检查同一位点多等位情形 |
| 跨物种同源预测 | 按物种留出(训练物种与测试物种不同类群) | 按基因家族留出 | 用 Compara 检查同源对跨集 |
| 调控元件识别 | 按染色体留出 + 按细胞类型留出 | 负样本从有实验数据的区域取 | 检查细胞类型特异的批次效应 |
| 基因组语言模型预训练 | 无监督,不需要标签划分 | 下游评测严格按基因/物种留出 | 检查预训练语料是否包含下游测试区域 |
§5.5 交叉验证建议
对基因组区间任务,推荐**分组交叉验证(GroupKFold)**而非普通 KFold,分组键取决于任务:结构预测用染色体或基因,跨物种任务用物种或同源簇,调控任务用细胞类型。5 折是常用折数:过少会因染色体规模差异导致方差大,过多在染色体数有限时无法保证每折都含各类区域。对样本量小的长尾物种(如仅注释数千个基因的昆虫),建议改用留一染色体法(leave-one-chromosome-out),并报告每折的样本数与类别分布。
评估时应同时报告两个层级:整体指标(如全基因组 F1)与分层指标(按生物型、保守性、基因长度分层)。实践中常出现整体指标良好但 lncRNA 或短基因子集表现极差的情况,只看整体指标会误判模型可用性。
§5.6 外部验证建议
| 外部验证锚点 | 来源 | 验证任务 | 价值 |
|---|---|---|---|
| MANE Select 集合 | NCBI + EMBL-EBI 联合项目 | 代表转录本预测准确性 | 跨库共识,可作外部金标准 |
| 独立蛋白证据(质谱肽段) | PeptideAtlas 等蛋白组资源 | 编码基因的翻译证据 | 独立于注释流水线的实验证据 |
| CAGE / 长读长转录组 | FANTOM5、Iso-Seq 数据 | 转录起始位点与异构体结构 | 5’ 边界与剪接结构的外部佐证 |
| 另一注释提供方与同源数据库(RefSeq、OrthoDB、OMA) | NCBI / 独立团队 | 结构一致性对比;同源基因一致性 | 识别注释分歧区域、定位不可靠区间;交叉验证 Compara 的判定 |
| 临床变异数据库(ClinVar) | NCBI | 变异效应预测的临床一致性 | 检验 VEP 输出与临床判读的吻合度 |
| 时间外部验证(下一个 release) | Ensembl 归档 | 注释修订的可预测性 | 唯一能检验"预测新知识"能力的验证方式 |
§6 AI 就绪指南
§6.0 云端快速启动
Ensembl 无需申请与认证,云端启动成本极低。推荐的最小工作流是在一台 32 GB 内存、500 GB 磁盘的云主机上完成"取注释 → 取序列 → 建索引 → 定量"全流程;若只做变异注释,可直接调用 REST 接口而不落地任何大数据。以下命令适用于 Ubuntu 22.04 及以上通用镜像。
# 0) 环境准备
conda create -n ensembl-ai -y python=3.11 && conda activate ensembl-ai
pip install requests pandas pyarrow pyranges gtfparse
conda install -y -c bioconda samtools tabix hisat2 subread
# 1) 全局变量:release 与物种必须固定并写入所有产物的元数据
export ENS_REL=116 SPECIES=homo_sapiens ASM=GRCh38 ENS_ROOT=$HOME/ensembl_data
mkdir -p $ENS_ROOT/{gtf,fasta,index,out}
# 2) 拉取注释与序列(人类约 1 GB 量级;用染色体子集可大幅降低)
wget -c -P $ENS_ROOT/gtf https://ftp.ensembl.org/pub/release-${ENS_REL}/gtf/${SPECIES}/${SPECIES^}.${ASM}.${ENS_REL}.chr.gtf.gz
wget -c -P $ENS_ROOT/fasta https://ftp.ensembl.org/pub/release-${ENS_REL}/fasta/${SPECIES}/dna/ -A "${SPECIES^}.${ASM}.dna.primary_assembly.fa.gz*"
# 3) 校验完整性:核对官方 CHECKSUMS,避免半途中断造成的静默损坏
wget -q -P $ENS_ROOT/gtf https://ftp.ensembl.org/pub/release-${ENS_REL}/gtf/${SPECIES}/CHECKSUMS
cd $ENS_ROOT/gtf && grep -E "chr.gtf.gz$" CHECKSUMS | md5sum -c -
# 4) 建立比对索引(HISAT2 为例,约 1 小时量级)
hisat2-build -p 16 $ENS_ROOT/fasta/*.dna.primary_assembly.fa $ENS_ROOT/index/${SPECIES}_${ASM}
云端启动的四个纪律:固定 release(写进环境变量与元数据)、校验 CHECKSUMS(避免残缺文件)、区名一致(GTF 与 FASTA 必须同源同 release)、染色体子集优先(先在 chr21/22 上跑通全流程再上全基因组)。
§6.1 快速上手
以下脚本假设目录结构如下(与 §6.0 创建的一致):$ENS_ROOT/gtf/(GTF)、$ENS_ROOT/fasta/(FASTA 与 .fai/.gzi 索引)、$ENS_ROOT/index/(HISAT2 索引)、$ENS_ROOT/out/(全部产物)。
最小可用子集建议使用 chr21 与 chr22:两条染色体合计约占基因组的 2%,但包含约 1,000 个蛋白编码基因与完整的各类生物型,足以验证整条流水线是否正确,同时把调试周期从数小时压缩到数分钟。
# 读取 GTF 并做快速体检:这一步应当在任何建模之前执行
import gzip, pandas as pd
ENS_ROOT = "/home/user/ensembl_data"
GTF = f"{ENS_ROOT}/gtf/Homo_sapiens.GRCh38.116.chr.gtf.gz"
ENS_REL = 116 # 必须随数据一起记录,写入所有下游产物的元数据
def read_gtf(path, features=("gene", "transcript", "exon")):
"""流式读取 GTF 的九列,仅解析核心属性,避免一次性载入整个属性字典。"""
rows = []
opener = gzip.open if path.endswith(".gz") else open
with opener(path, "rt") as fh:
for line in fh:
if line.startswith("#"):
continue
f = line.rstrip("\n").split("\t")
if len(f) != 9 or f[2] not in features:
continue
attrs = dict((kv.split(" ", 1)[0], kv.split(" ", 1)[1].strip().strip(";").strip('"'))
for kv in f[8].split("; ") if " " in kv)
rows.append({"seqname": f[0], "feature": f[2], "start": int(f[3]), "end": int(f[4]),
"strand": f[6], "gene_id": attrs.get("gene_id"),
"transcript_id": attrs.get("transcript_id"), "source": f[1],
"biotype": attrs.get("gene_biotype") or attrs.get("transcript_biotype"),
"gene_name": attrs.get("gene_name"), "level": attrs.get("level"),
"tag": attrs.get("tag")})
df = pd.DataFrame(rows)
df["ensembl_release"] = ENS_REL # 血缘信息随数据一起流动
return df
gtf = read_gtf(GTF)
print(gtf.groupby("feature").size())
print(gtf[gtf.feature == "gene"].biotype.value_counts().head(10))
§6.2 数据获取
| 获取方式 | 适用场景 | 入口 | 规模与限制 |
|---|---|---|---|
| FTP / HTTP 批量下载(含镜像站点) | 需要全量注释或序列、需离线复现,或已在 AWS/GCP 上希望降低出网流量 | ensembl.org 的 FTP 发布目录;官方镜像说明页 | 无限制;单文件数十 MB 至数十 GB;镜像内容与主站一致但路径不同 |
| REST API | 少量查询、生产管线中的按需检索、跨库映射 | rest.ensembl.org | 限速 15 请求/秒(54,000 请求/小时),超限返回 429 或 503 |
| BioMart / Perl API | 批量导出某物种属性表(一次拉一个"表");需直连底层数据库或复杂关联查询 | BioMart 页面或 biomaRt;API 文档与 CPAN 模块 | 前者单次查询结果有上限,超大查询需分块;后者需本地安装 Perl 模块与数据库客户端 |
| VEP 离线版 | 大规模变异注释(百万级及以上) | VEP 工具与 cache 下载页 | cache 按物种约 10–20 GB;可多线程并行 |
# REST API 的正确用法:会话复用 + 指数退避 + 遵守限速
import time, requests
SERVER = "https://rest.ensembl.org"
S = requests.Session()
S.headers.update({"Content-Type": "application/json"})
def rest_get(path, params=None, max_retries=5):
"""带指数退避的 REST 调用。公共服务器限速 15 请求/秒,超限返回 429/503。"""
url = f"{SERVER}{path}"
for attempt in range(max_retries):
resp = S.get(url, params=params, timeout=30)
if resp.status_code == 200:
return resp.json()
if resp.status_code == 400:
return None # 参数不合法,重试无意义
# 429/503 优先遵循服务端给出的 Retry-After,否则指数退避
wait = float(resp.headers.get("Retry-After", 2 ** attempt)) if resp.status_code in (429, 503) else 2 ** attempt
time.sleep(wait)
raise RuntimeError(f"REST 调用连续失败: {path}")
# 示例:取 BRCA2 的基因结构信息
gene = rest_get("/lookup/id/ENSG00000139618", {"expand": 1})
print(gene["display_name"], gene["seq_region_name"], gene["start"], gene["end"])
# 示例:取人类基因在小鼠中的一对一同源基因
hom = rest_get("/homology/id/human/ENSG00000139618",
{"type": "orthologues", "target_species": "mus_musculus",
"sequence": "none", "format": "condensed"})
for h in hom["data"][0]["homologies"]:
print(h["target"]["id"], h["type"], h["target"]["species"])
# 示例:批量取基因符号(每次几十个 ID,控制请求频率)
S.post(f"{SERVER}/lookup/id",
json={"ids": ["ENSG00000139618", "ENSG00000012048", "ENSG00000141510"]})
# R 生态:通过 biomaRt 访问 BioMart(Durinck et al., Nature Protocols 2009)
# install.packages("BiocManager"); BiocManager::install("biomaRt")
library(biomaRt)
# 连接时必须指定与目标 release 对应的归档地址,否则会拿到最新版而非论文所用版本
mart <- useEnsembl(biomart = "genes", dataset = "hsapiens_gene_ensembl", version = 116)
res <- getBM(
attributes = c("ensembl_gene_id", "hgnc_symbol", "gene_biotype",
"chromosome_name", "start_position", "end_position"),
filters = "biotype", values = "protein_coding", mart = mart)
cat(nrow(res), "protein-coding genes retrieved\n")
§6.3 预处理全流程
第一步是格式转换与规范化:把 GTF 转成列式存储(Parquet),把坐标统一到单一约定,把版本号从 ID 中剥离出来单独成列(既保留版本信息,又能做稳定的 ID 匹配)。
import pandas as pd
def normalize_annotation(df: pd.DataFrame) -> pd.DataFrame:
"""规范化 GTF 解析结果:剥离版本号、ID 与版本分列、统一链方向编码。"""
out = df.copy()
for col in ("gene_id", "transcript_id"):
if col in out.columns:
out[f"{col}_base"] = out[col].astype(str).str.split(".").str[0]
out[f"{col}_ver"] = pd.to_numeric(
out[col].astype(str).str.extract(r"\.(\d+)$")[0], errors="coerce")
out["strand_num"] = out["strand"].map({"+": 1, "-": -1}).astype("Int8")
out["length"] = out["end"] - out["start"] + 1 # 1-based 闭区间
for col in ("feature", "biotype", "seqname", "source", "strand"):
if col in out.columns:
out[col] = out[col].astype("category")
return out
def to_bed(df: pd.DataFrame, path: str) -> str:
"""转 BED(0-based 半开区间)。这是坐标体系转换的唯一正确位置。"""
bed = df[df.feature == "exon"][["seqname", "start", "end", "transcript_id", "strand"]].copy()
bed["start"] = bed["start"] - 1 # 1-based 闭 → 0-based 半开
bed.to_csv(path, sep="\t", header=False, index=False)
return path
第二步是清洗与质量过滤。关键在于按任务选择层级,而不是一律使用全量注释:定量任务应使用 basic/primary 层级,质量分析任务应保留全部层级以便分层报告,结构预测任务的负样本必须从"有注释覆盖的区域"中取,否则模型会通过"这段序列有没有注释"这种平凡线索作弊。
def select_transcripts(df: pd.DataFrame, task: str) -> pd.DataFrame:
"""按任务选择转录本层级。显式区分,避免默认全量带来的量化失真。"""
tx = df[df.feature == "transcript"].copy()
if task == "quantification": # 每基因一个代表转录本
return tx[tx["tag"].fillna("").str.contains("basic")]
if task == "isoform_analysis": # 保留全部,排除纯自动预测的低质量模型
return tx[~tx["tag"].fillna("").str.contains("abinitio")]
if task == "benchmark": # 仅 MANE Select 作为金标准子集
return tx[tx["tag"].fillna("").str.contains("MANE_Select")]
return tx
def build_negative_regions(gtf_df, chrom_sizes, n: int, seed: int = 0):
"""构造负样本区间:必须取自被注释覆盖的染色体区域,而非随机全基因组。"""
import numpy as np
rng = np.random.default_rng(seed)
covered = gtf_df[gtf_df.feature == "gene"]
negs = []
for chrom, grp in covered.groupby("seqname", observed=True):
if chrom not in chrom_sizes:
continue
lo, hi = int(grp.start.min()), int(grp.end.max())
for p in rng.integers(lo, hi, size=max(1, n // covered.seqname.nunique())):
negs.append({"seqname": chrom, "start": int(p), "end": int(p) + 500})
return pd.DataFrame(negs[:n])
第三步是标准化与增强。对序列任务,"标准化"指把序列切成固定长度窗口并统一大小写处理(soft-masked 序列中的小写代表重复序列,是否保留取决于任务);"增强"指反向互补(reverse complement)——这是基因组数据唯一严格成立的增强方式,因为 DNA 双链对称意味着反向互补后的序列在生物学上等价。
import numpy as np
def reverse_complement(seq: str, complement=str.maketrans("ACGTNacgtn", "TGCANtgcan")) -> str:
"""DNA 反向互补。基因组任务中唯一严格保持标签语义的数据增强。"""
return seq.translate(complement)[::-1]
def one_hot(seq: str, mapping={"A": 0, "C": 1, "G": 2, "T": 3}) -> np.ndarray:
"""序列独热编码,N 与非法字符编码为全零(表示未知,而非某一碱基)。"""
arr = np.zeros((len(seq), 4), dtype=np.float32)
for i, ch in enumerate(seq.upper()):
if ch in mapping:
arr[i, mapping[ch]] = 1.0
return arr
§6.4 PyTorch DataLoader
"""Ensembl 注释驱动的 PyTorch 数据管线。
目录预期:$ENS_ROOT/gtf/Homo_sapiens.GRCh38.116.chr.gtf.gz(注释)
$ENS_ROOT/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz (+.fai)
运行前提:pyfaidx 已安装(pip install pyfaidx),用于按坐标随机读取序列。
"""
import gzip
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader, Sampler
from pyfaidx import Fasta
ENS_ROOT = "/home/user/ensembl_data"
GTF_PATH = f"{ENS_ROOT}/gtf/Homo_sapiens.GRCh38.116.chr.gtf.gz"
FASTA_PATH = f"{ENS_ROOT}/fasta/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz"
ENSEMBL_RELEASE = 116 # 与数据一同记录,保证可复现
BASE2IDX = {"A": 0, "C": 1, "G": 2, "T": 3}
def load_transcripts(gtf_path: str, biotypes=("protein_coding",)) -> pd.DataFrame:
"""读取转录本层级记录,返回 DataFrame(每条记录一个转录本)。"""
rows = []
opener = gzip.open if gtf_path.endswith(".gz") else open
with opener(gtf_path, "rt") as fh:
for line in fh:
if line.startswith("#"):
continue
f = line.rstrip("\n").split("\t")
if len(f) != 9 or f[2] != "transcript":
continue
attrs = dict((kv.split(" ", 1)[0], kv.split(" ", 1)[1].strip().strip(";").strip('"'))
for kv in f[8].split("; ") if " " in kv)
bt = attrs.get("transcript_biotype")
if biotypes and bt not in biotypes:
continue
rows.append({"chrom": f[0], "start": int(f[3]), "end": int(f[4]), "strand": f[6],
"gene_id": attrs.get("gene_id", "").split(".")[0],
"transcript_id": attrs.get("transcript_id", "").split(".")[0],
"biotype": bt, "tag": attrs.get("tag", "")})
df = pd.DataFrame(rows)
df["label"] = (df["biotype"] == "protein_coding").astype(np.float32)
df["ensembl_release"] = ENSEMBL_RELEASE
return df
class EnsemblWindowDataset(Dataset):
"""按转录起始位点(TSS)取固定长度窗口,标签为生物型。
1. 窗口以 TSS 为中心——该位置在正负链上语义不同,故按链方向反向互补,使正负链同构。
2. 边界不足时用 N 补齐(不循环、不复制),避免制造不存在的序列。
3. 索引层面记录 gene_id,便于采样器按基因分组防泄漏。
"""
def __init__(self, records: pd.DataFrame, fasta_path: str,
window: int = 1000, reverse_complement_aug: bool = False):
self.records = records.reset_index(drop=True)
self.fasta = Fasta(fasta_path, as_raw=True, sequence_always_upper=True)
self.window, self.rc_aug = window, reverse_complement_aug
self._comp = str.maketrans("ACGTN", "TGCAN")
__len__ = lambda self: len(self.records)
def _fetch(self, chrom: str, start: int, end: int) -> str:
"""按 1-based 闭区间取序列;越界或缺失时返回等长 N 串。"""
try:
seq = self.fasta[chrom][max(start - 1, 0):end].upper()
except (KeyError, IndexError):
seq = ""
return seq.ljust(self.window, "N")[: self.window]
def _encode(self, seq: str) -> torch.Tensor:
idx = np.fromiter((BASE2IDX.get(ch, -1) for ch in seq), dtype=np.int8, count=len(seq))
arr = np.zeros((len(seq), 4), dtype=np.float32)
valid = idx >= 0
arr[np.arange(len(seq))[valid], idx[valid]] = 1.0
return torch.from_numpy(arr)
def __getitem__(self, idx: int):
r = self.records.iloc[idx]
# TSS:正链取 start,负链取 end——混用会让模型看到"截断的基因末端"
tss = int(r["start"]) if r["strand"] == "+" else int(r["end"])
half = self.window // 2
seq = self._fetch(r["chrom"], tss - half, tss + half - 1)
if self.rc_aug and r["strand"] == "-":
seq = seq.translate(self._comp)[::-1]
return {"x": self._encode(seq), # (W, 4)
"y": torch.tensor(r["label"], dtype=torch.float32),
"gene_id": r["gene_id"], "transcript_id": r["transcript_id"],
"chrom": r["chrom"], "release": ENSEMBL_RELEASE}
def collate(batch):
"""按 gene_id 分组采样的批次组装;同基因异构体共享外显子,切在同一批次。"""
return {"x": torch.stack([b["x"] for b in batch]), # (B, W, 4)
"y": torch.stack([b["y"] for b in batch]), # (B,)
"gene_id": [b["gene_id"] for b in batch],
"transcript_id": [b["transcript_id"] for b in batch],
"chrom": [b["chrom"] for b in batch],
"release": batch[0]["release"]}
class GroupedGeneSampler(Sampler):
"""按 gene_id 分组采样:同一基因的全部转录本只出现在同一批次。
同基因异构体共享外显子,混在同一批次会让梯度被少数基因主导,
也会让"按基因留出"的划分意图在批次层面被破坏。
"""
def __init__(self, gene_ids, batch_size: int, seed: int = 0):
self.batch_size, self.seed, self.epoch = batch_size, seed, 0
groups = {}
for i, g in enumerate(gene_ids):
groups.setdefault(g, []).append(i)
self.groups = list(groups.values())
def __iter__(self):
rng = np.random.default_rng(self.seed + self.epoch)
self.epoch += 1
batch, n = [], 0
for gi in rng.permutation(len(self.groups)):
idxs = self.groups[gi]
if n + len(idxs) > self.batch_size and batch:
yield batch
batch, n = [], 0
batch.extend(idxs)
n += len(idxs)
if batch:
yield batch
def build_loaders(gtf_path, fasta_path, holdout_chroms=("21", "22"), batch_size: int = 64,
window: int = 1000, num_workers: int = 4):
"""按染色体切分训练/验证集。注意:染色体级切分仍有片段重复残余泄漏。"""
df = load_transcripts(gtf_path)
is_holdout = df["chrom"].isin(holdout_chroms)
train_ds = EnsemblWindowDataset(df[~is_holdout], fasta_path, window=window,
reverse_complement_aug=True)
val_ds = EnsemblWindowDataset(df[is_holdout], fasta_path, window=window)
# 训练用 GroupedGeneSampler 打散且防同基因跨批次;验证按染色体留出,无需 shuffle
train_loader = DataLoader(train_ds, batch_size=batch_size,
sampler=GroupedGeneSampler(df.loc[~is_holdout, "gene_id"],
batch_size, seed=0),
num_workers=num_workers, collate_fn=collate,
pin_memory=True, drop_last=True)
val_loader = DataLoader(val_ds, batch_size=batch_size, shuffle=False,
num_workers=num_workers, collate_fn=collate, pin_memory=True)
return train_loader, val_loader, df
§6.5 坑点清单(8 个,Ensembl 真实特有失败模式)
⚠️ 坑点 1:转录本 ID 的版本号漂移(分类:工程陷阱)
问题:ID 带版本后缀(ENST00000357654.9),版本随 release 递增,且修订可能同时改变外显子结构。带版本 join 会大面积失配;剥离版本又把"结构已变更"当作同一转录本。
症状:升级 release 后 ID 命中率降至 60–80%;与 NM_ 映射 join 后数千行丢失。
解决:1) 简单——join 前统一tid.split(".")[0],接受少量合并误差;2) 进阶——版本号独立成列,对结构跳变转录本建旧→新映射并标记structure_changed=True;3) SOTA——把 release/组装/日志版本三元组写入每批产物元数据(Parquet schema metadata、MLflow run tag),CI 校验"注释版本未被隐式升级",跨版本研究以官方归档页与变更说明对齐。
参考:https://www.ensembl.org/info/website/archives/index.html(Ensembl 2025 论文 DOI: 10.1093/nar/gkae1071)
⚠️ 坑点 2:GTF 与 FASTA 的区名不一致(分类:预处理陷阱)
问题:Ensembl 区名不带
chr前缀(1、13、MT);primary_assembly与toplevel的区名集合不同(后者含 scaffold)。来源不一致时取序列静默返回空。
症状:pyfaidx报 KeyError 或返回空序列;HISAT2 比对率接近 0;定量近乎全零,验证集准确率异常低(窗口全 N)。
解决:1) 简单——读入即剥离chr前缀、chrM→MT,断言 GTF 区名集合是 FASTA 的子集;2) 进阶——把一致性做成第一道门禁,用.fai取区名与长度,检查 GTF 每个区名最大 end 是否越界(越界报错而非静默截断);3) SOTA——为每个物种-组装-release 生成 immutable 的"坐标空间清单"(区名、长度、校验和)随数据版本化分发,下游只引用清单,从架构上消除漂移。
参考:https://www.ensembl.org/info/data/ftp/index.html;https://www.ensembl.org/info/website/archives/index.html
⚠️ 坑点 3:0-based 与 1-based 坐标混用(分类:预处理陷阱)
问题:GTF/GFF3 用 1-based 闭区间,BED/bigWig 与多数深度学习框架用 0-based 半开区间,相差恰 1 bp 且只在边界暴露;部分解析库读取时自动转换,同一文件经不同工具后坐标不同。
症状:外显子边界系统性偏移 1 bp;取序列首碱基错误;与 BED 求交集出现大量"差 1 重叠"。
解决:1) 简单——内部只约定一种坐标系(推荐 1-based 闭区间),仅导出 BED 时减 1,函数命名体现start_1based/start_0based;2) 进阶——写"坐标不动点测试"(已知基因往返转换后断言不变)并纳入 CI;3) SOTA——使用显式携带坐标系的区间库(如 pyranges),禁止裸整数传坐标,数据契约声明坐标系并做运行时断言。
参考:https://www.ensembl.org/info/docs/api/core/core_tutorial.html
⚠️ 坑点 4:basic 与 comprehensive 误用导致定量失真(分类:标签理解)
问题:人类默认提供全量转录本(GENCODE comprehensive),而定量应使用每基因一个代表转录本的层级(
basic标签或gencode_primary)。全量喂给 featureCounts/HTSeq 会导致读段因落在重叠异构体上被判 ambiguous。
症状:Unassigned_Ambiguity占比可达 20–40%;差异表达结果对 GTF 来源极敏感。
解决:1) 简单——定量一律用带basic标签的子集,异构体级分析才用全量;2) 进阶——异构体定量改用 Salmon/kallisto 准映射,或-g gene_id -O后按比例分配多重归属读段;3) SOTA——两阶段策略:先用gencode_primary/MANE Select 建基因级矩阵,仅对关注基因再用全量做异构体重构,两级产物分别命名并标注所用层级。
参考:https://www.ensembl.org/info/genome/genebuild/transcript_quality_tags.html
⚠️ 坑点 5:REST API 限速导致的静默降级与批次失败(分类:工程陷阱)
问题:公共 REST 限速 15 请求/秒(54,000/小时),超限返回 429 并附
Retry-After,维护或过载返回 503。只处理 200/404 的脚本会把 429 当"无结果"写入,造成数据静默缺失。
症状:批量任务跑完后部分基因"查不到",单独重试又能查到;夜间管线因 503 中断;退出码为 0 但结果完整性差。
解决:1) 简单——加指数退避并遵循Retry-After,严格区分 429/503(重试)与 404(记为缺失);2) 进阶——客户端令牌桶限速(稳定在 12–13 请求/秒),会话复用,优先用批量端点(/lookup/idPOST、/vep/hgvsPOST 单次最多 1,000 变异);3) SOTA——大规模任务改走离线路径(下载 VEP cache 本地跑,约 1,000 变异/秒)或自建 MySQL 镜像直连 Perl API,并把"请求成功率"与"结果完整性"作为独立监控指标。
参考:https://github.com/Ensembl/ensembl-rest/wiki/Rate-Limits;Yates et al., 2015, Bioinformatics, 31(1):143–144, DOI: 10.1093/bioinformatics/btu613
⚠️ 坑点 6:负样本从"无注释区域"取造成平凡解(分类:评估误用)
问题:把全基因组随机切窗作负样本时,因 Ensembl 只注释部分区域(scaffold、着丝粒、异染色质无注释),模型会学到"该区域在注释文件里有记录吗"这一平凡线索,而非真正的序列规律。
症状:验证集 AUC 极高(0.98+)但外部数据崩塌;对打乱序列仍自信;特征重要性显示依赖坐标而非序列内容。
解决:1) 简单——负样本只从被注释覆盖的染色体区间内取(见 §6.3build_negative_regions),等长且 GC 分布可比;2) 进阶——按 GC 与重复序列比例分层匹配采样,并报告 shuffled control 指标作为下界;3) SOTA——用 dinucleotide-shuffle 作硬负样本(保留局部组成、破坏长程结构),并按染色体留出验证以避免坐标邻近泄漏。
参考:https://www.ensembl.org/info/genome/genebuild/index.html
⚠️ 坑点 7:跨注释提供方(Ensembl 与 RefSeq)直接合并(分类:偏倚陷阱)
问题:两套转录本集合独立生成,即使在同组装上基因边界、异构体数量与命名也不完全相同。取并集会重复计数,跨库 ID 无对应时被丢弃或误配。
症状:基因总数比任一单独注释多出数千且大量为重复;同一变异在两库得到不同后果术语;ENST 与 NM_ 混用导致外显子编号歧义。
解决:1) 简单——选定一套主注释(临床推荐 MANE Select 以获得跨库一致的代表转录本),另一套仅作交叉验证;2) 进阶——用官方 xref 映射表做 ID 映射,失败显式记为"无对应"而非丢弃,并建立一对多处理规则;3) SOTA——以 MANE Select 为锚点构建"临床代表转录本层",该层中两库 ID 一一对应且序列一致,报告/变异命名/外显子编号只在该层运行,全量注释仅用于研究。
参考:https://www.ensembl.org/info/genome/genebuild/index.html;MANE 见 Morales et al., 2022, Nature, 604:310–315, DOI: 10.1038/s41586-022-04558-8
⚠️ 坑点 8:新旧平台(ensembl.org 与 beta.ensembl.org)混用(分类:工程陷阱)
问题:平台正从 ensembl.org(release 116 为最终功能版本)迁移至 beta.ensembl.org(承载超过 4,700 个基因组,目标纳入约 36,000 个原核基因组)。两平台的基因组集合、页面结构、API 路径与 ID 命名并非一一对应。
症状:旧平台查不到的基因组在新平台可查但 API 端点不同报 404;同一物种两平台组装版本不同、坐标不可互换;文档截图与当前站点不一致。
解决:1) 简单——文档显式声明所用平台与 release,平台基址作为配置项而非硬编码,逐物种记录组装版本;2) 进阶——抽象"物种查询适配层"封装差异,维护"平台→组装→端点"映射表并定期校验;3) SOTA——把物种清单与组装版本纳入数据契约,CI 定期执行契约测试(对每个物种发最小查询并断言组装版本),在迁移中提前发现破坏性变更。
参考:https://beta.ensembl.org/;https://www.ensembl.org/info/website/archives/index.html
§6.6 数据增强策略
| 增强方式 | 安全性 | 说明 | 适用任务 |
|---|---|---|---|
| 反向互补与链方向归一化 | ✅ 安全 | DNA 双链对称,反向互补后生物学等价(须同步翻转链方向标签);对负链特征取反向互补可使正负链样本同构 | 序列分类、剪接位点预测、变异效应;启动子/TSS 预测 |
| 坐标抖动(jitter) | ⚠️ 谨慎 | 在 ±50 bp 内平移窗口,可增加位置鲁棒性,但会破坏边界标签的精确性 | 仅用于粗粒度区域分类,不可用于边界回归 |
| 序列打乱与 GC 分层重采样 | ✅ 安全(前者仅作对照) | 保持二核苷酸频率的打乱,作为负对照而非训练增强;按 GC 含量分层采样以消除组成偏差 | 检验模型是否学到长程结构;全基因组二分类任务 |
| 小写/soft-mask 去除 | ⚠️ 谨慎 | 把重复序列的小写转大写会让模型无法识别重复区 | 视任务决定,重建模任务应保留 |
| 随机截断 | ⚠️ 谨慎 | 对长转录本随机取片段,会丢失结构信息 | 仅用于长度不变模型 |
| 混入其他物种序列 / 用测试集做增强 / 基于注释合成序列 | ❌ 危险 | 跨物种混增强引入同源基因泄漏;测试集信息回流属泄漏;按注释规律生成序列会让模型学到生成规则而非生物学 | 均禁用 |
| 引入 gnomAD 频率做样本加权 | ❌ 危险(除非设计如此) | 频率来自人群数据,若测试集也含人群变异会造成信息回流 | 仅在明确做频率分层时使用 |
§6.7 模型推荐
| 任务 | 推荐模型 | 输入表示 | 推荐理由 |
|---|---|---|---|
| 变异效应预测(错义) | AlphaMissense、ESM 系列蛋白语言模型 | 蛋白序列 + 结构上下文 | 直接处理氨基酸替换,与 VEP 的蛋白位置字段天然对接 |
| 剪接位点/剪接影响 | SpliceAI、Pangolin | 长窗口 DNA 序列(10 kb 量级) | 需要足够长的内含子上下文,短窗口会漏掉深内含子变异 |
| 基因结构预测 | 基于 Transformer 的序列标注模型 | DNA 序列 + 多物种比对轨道 | 比对轨道提供跨物种保守性信号,显著提升边界精度 |
| 调控元件识别 | Enformer、Borzoi 类长程模型 | 长窗口序列 + 染色质轨道 | 长程相互作用对增强子-启动子关系至关重要 |
| 基因组语言模型预训练 | DNABERT 系列、Nucleotide Transformer | 无标注 DNA 序列 | 可用 Ensembl 的多物种序列做跨物种预训练 |
| 变异致病性分类 | 梯度提升树(XGBoost/LightGBM) | VEP 输出字段 + CADD/REVEL/gnomAD 频率 | 表格型任务上树模型仍是最强基线,可解释性好 |
| 同源基因/基因功能迁移 | 蛋白语言模型 + 图神经网络 | 蛋白序列 + Compara 基因树 | 基因树结构天然适合图模型 |
| 跨物种特征迁移 | 域自适应/微调 | 多物种序列 + 同源映射 | 需显式处理物种间分布偏移 |
§6.8 硬件需求
| 任务规模 | 内存 | 存储 | GPU | 说明 |
|---|---|---|---|---|
| 单物种注释解析与特征构建;单物种序列窗口建模(chr21/22 调试) | 16 GB | 50–100 GB | 前者不需要;后者单卡 8–12 GB | 人类 GTF 全量解析峰值约数 GB;窗口长度 1 kb、批量 64 时显存占用很小 |
| 全基因组序列模型训练 | 64–128 GB | 1–2 TB | 4×A100 或同等 | 需预取序列并做异步 IO,磁盘随机读可能成为瓶颈 |
| VEP 离线注释(百万级)与全人群变异注释(亿级) | 32 GB / 128 GB+ | 100 GB(含 cache)/ 数 TB | 不需要(可多进程) | 前者吞吐受磁盘与 CPU 核数限制(约 1,000 变异/秒量级);后者必须流式处理并按染色体分片并行 |
| 跨物种比较基因组学分析 | 64 GB | 1 TB+ | 可选 | 比对数据体量大,需按类群分片处理 |
§6.9 评估指标
import numpy as np
from sklearn.metrics import (roc_auc_score, average_precision_score,
matthews_corrcoef, f1_score)
def eval_binary(y_true, y_prob, threshold: float = 0.5) -> dict:
"""二分类评测:至少同时报告 AUC、AP 与阈值相关指标,避免单指标误判。"""
y_true = np.asarray(y_true).astype(int)
y_pred = (np.asarray(y_prob, dtype=float) >= threshold).astype(int)
return {"auroc": roc_auc_score(y_true, y_prob), # 类别不平衡时会高估
"auprc": average_precision_score(y_true, y_prob), # 类别不平衡时更可靠
"f1": f1_score(y_true, y_pred),
"mcc": matthews_corrcoef(y_true, y_pred), # 对不平衡稳健
"prevalence": float(y_true.mean())}
def boundary_prf(true_intervals, pred_intervals, tol: int = 0) -> dict:
"""边界评测:转录本/外显子边界预测的核心指标。
容差 tol 必须显式声明 —— "差 1 bp 是否算对"直接决定数字能否跨论文比较。
"""
t = {(c, s, e) for c, s, e in true_intervals}
match = (lambda iv: iv in t) if tol == 0 else (
lambda iv: any(iv[0] == c and abs(iv[1] - s) <= tol and abs(iv[2] - e) <= tol for c, s, e in t))
tp = sum(1 for iv in pred_intervals if match(iv))
prec = tp / len(pred_intervals) if pred_intervals else 0.0
rec = tp / len(t) if t else 0.0
f1 = 2 * prec * rec / (prec + rec) if (prec + rec) else 0.0
return {"precision": prec, "recall": rec, "f1": f1, "tolerance_bp": tol}
def stratified_report(df, y_true, y_prob, strata_col="biotype"):
"""分层报告:整体指标良好但长尾类别崩塌是基因组模型的常见失败形态。"""
import pandas as pd
y_true, y_prob, out = np.asarray(y_true), np.asarray(y_prob), []
for key, idx in df.groupby(strata_col, observed=True).groups.items():
i = list(idx)
if len(np.unique(y_true[i])) < 2: # 单一类别时指标无定义
row = {strata_col: key, "n": len(i), "auroc": np.nan, "auprc": np.nan}
else:
row = {strata_col: key, "n": len(i),
"auroc": roc_auc_score(y_true[i], y_prob[i]),
"auprc": average_precision_score(y_true[i], y_prob[i])}
out.append(row)
return pd.DataFrame(out).sort_values("n", ascending=False)
§6.10 MLOps 与可复现性笔记
| 事项 | 建议做法 | 理由 |
|---|---|---|
| 版本记录 | 每个产物记录 {ensembl_release, assembly, species} 三元组 |
注释修订会静默改变标签,没有三元组就无法复现 |
| 数据指纹 | 对下载的 GTF/FASTA 记录 MD5/SHA256,并保留官方 CHECKSUMS 校验结果 | 检测镜像同步不完整或传输损坏 |
| 缓存策略 | 把 GTF 转 Parquet 一次、复用多次;VEP 结果按 (release, cache_version) 缓存 |
解析 GTF 是常见瓶颈;VEP 重复计算成本高 |
| 评测快照 | 把评测所用的染色体/基因列表固定并版本化 | 否则"测试集"会随注释版本漂移而悄悄改变 |
| 接口抽象 | REST/Perl/BioMart 三套接口封装在适配层内 | 平台迁移(旧站→新站)时不改业务代码 |
| 变更监控 | 每次升级 release 后跑一次"金标准基因"断言(如 BRCA2 的坐标与转录本数) | 提前发现破坏性变更,而非上线后才发现 |
| 实验追踪与数据契约 | 把 release 号作为实验标签而非写在描述文本里;在 CI 中断言 GTF 区名 ⊆ FASTA 区名、坐标不越界、必需列存在 | 便于按注释版本横向比较;上游数据变化时尽早失败 |
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解方法 |
|---|---|---|---|
| 研究热度偏倚 | 注释深度与物种被研究程度强相关:人类、小鼠、主要作物与家畜的注释远优于长尾物种 | 高 | 跨物种任务显式报告各物种的注释质量层级;不要把模式物种的性能外推到全生命之树 |
| 人群构成偏倚 | 变异频率数据(gnomAD v4.1 等)以欧洲ancestry队列为主 | 高 | 频率过滤时报告参考人群构成;对非欧洲人群研究使用人群特异频率库并做敏感性分析 |
| 组织与细胞类型偏倚 | 调控注释依赖可获得的实验数据,集中于少数细胞类型与组织 | 中 | 使用调控特征时声明来源细胞类型;跨细胞类型外推需独立验证 |
| 转录证据可得性偏倚 | 自动注释质量取决于该物种是否有本地 RNA-seq 数据;无数据的物种依赖近缘投射 | 中 | 检查转录本的 transcript_support_level;低支持度模型在训练时降权或排除 |
| 注释版本漂移偏倚 | 同一基因的结构在不同 release 间变化,长期项目中的标签不一致 | 中 | 固定 release 并版本化;跨版本研究显式对齐 ID 与结构变更 |
| 保守性偏倚 / 重复序列遮蔽偏倚 | 高保守区被注释得更完整,模型在高保守区表现虚高;着丝粒、端粒、片段重复区域注释稀薄,模型几乎无训练信号 | 中 | 按保守性分层报告指标;明确报告模型适用区域并对重复区单独评估 |
| 物种采样与平台偏倚 | 基因树拓扑受物种树采样影响,采样密集的类群推断更可靠;组装质量(长读长 vs 短读长)影响注释完整性 | 中 | 报告所用物种集合与采样密度差异;记录组装水平(complete/draft),draft 组装的原核基因组基因预测常不完整 |
§7.2 注释质量与技术验证
| 验证层面 | 机制 | 覆盖范围 | 局限 |
|---|---|---|---|
| 流程内验证 | Genebuild 检查 CDS 长度是否为 3 的倍数、是否含内部终止密码子、剪接位点是否符合 GT-AG 规则,不合格模型被标记或丢弃 | 全部自动注释物种 | 只能发现结构性错误,无法判断模型是否真实存在 |
| 标签体系 | transcript_support_level 与 tag 集合把证据强度显式暴露,使用者可按需过滤 |
全部注释物种 | 标签反映证据多少,不等于证据可靠 |
| 跨库收敛 | MANE 项目使 Ensembl 与 RefSeq 在代表转录本上结构与序列 100% 一致 | 仅蛋白编码基因 | 非编码注释(尤其 lncRNA)缺乏同等级别外部验证 |
需要清醒认识的是:release 113 通过长读长捕获测序一次性新增超过 130,000 条 lncRNA 转录本,这类大规模扩张的注释在获得独立实验验证之前假阳性率未知;对 lncRNA 相关任务,建议把"是否带实验证据 tag"作为重要的质量分组变量。
§7.3 泛化性与失效风险
| 使用场景 | 失效风险 | 证据/机制 |
|---|---|---|
| 用欧洲人群频率模型过滤非欧洲人群变异 | 高 | gnomAD 队列以欧洲ancestry为主,稀有变异频率估计在该人群中更精确,非欧洲人群的"稀有"变异可能实为常见 |
| 把人类注释训练的结构模型用于长尾物种 | 高 | 自动注释与人工注释的转录本特征分布不同(异构体数量、UTR 长度、外显子密度) |
| 用模式细胞类型的调控模型预测其他组织 | 高 | 调控元件高度细胞类型特异;ENCODE/BLUEPRINT 的细胞类型覆盖不均衡 |
| 把剪接影响预测模型用于深内含子变异;用 draft 组装的原核注释做比较基因组学 | 中高 | 前者需要长上下文窗口,短窗口模型系统性漏检;后者因组装碎片化导致基因截断或漏检,基因数不可直接比较 |
| 用旧 release 训练的模型评测新 release 的注释;把 ENST 编号当作跨实验室唯一标识 | 中 | 前者是有意设计的时间外推,但若依赖已废弃 ID 体系则失败;后者风险在于不同实验室可能使用不同 release,同一 ENST 的外显子数可能不同 |
§7.4 伦理与合规
Ensembl 本身不含个体级人类数据,不涉及传统的伦理审查、知情同意与去标识化问题。但使用时仍有三类需要自觉遵守的边界:
| 边界 | 内容 | 实务要求 |
|---|---|---|
| 临床判读边界 | VEP 输出的是功能注释而非致病性判读;missense_variant 或 IMPACT=MODERATE 只描述分子后果,不表示致病 |
ACMG/AMP 分类须结合表型、家系、人群频率与功能实验;不得把 VEP 输出直接当作诊断结论 |
| 第三方数据许可边界 | Ensembl 转发的内容可能带原始许可(UniProt、PDB、gnomAD、ClinVar、ENCODE 各有条款) | 再分发衍生数据前逐项核查原始来源许可,不套用 Ensembl 声明 |
| 再识别理论边界 | 聚合频率数据本身不可识别,但极罕见变异 + 特定地理人群 + 表型信息的组合可能产生再识别风险 | 发布频率衍生结果时避免与可识别信息关联 |
§7.5 公平性考量
Ensembl 的公平性问题不体现在"是否覆盖某个人群",而体现在注释质量在物种与人群之间的不均衡分布。
| 不均衡维度 | 表现 | 后果 | 缓解做法 |
|---|---|---|---|
| 物种维度 | 人类与小鼠享有人工注释,数千个长尾物种仅有自动注释 | 功能预测模型在模式物种上表现天然更好,对生物多样性研究的贡献系统性倾斜 | 显式报告所用注释的物种与质量层级;按物种分层评测 |
| 人群维度 | 变异频率与临床注释的证据积累偏向欧洲ancestry队列 | 基于频率过滤的变异分类在其他人群中产生系统性假阴性或假阳性 | 声明频率参考人群构成;条件允许时改用人群特异参考面板 |
Ensembl 提供了必要的基础设施(质量标签、版本归档、可查询的注释来源),但公平性的实现仍取决于使用者的自觉。
§7.6 数据漂移与版本演进
Ensembl 的数据漂移是设计特性而非缺陷:注释被不断修订,旧错误被修正、新证据被纳入。问题在于这种变化对下游模型的影响往往是静默的。
| 漂移模式 | 具体表现 | 对模型的影响 |
|---|---|---|
| 模型删除与合并 | 自动注释转录本因证据不足被删除,或两条转录本被合并 | 旧版训练的样本在新版中无对应标签,未做映射即被误判为预测错误 |
| 结构修订 | 外显子边界推移、UTR 延长;release 116 引入 “Ensembl Canonical Extended” 标志使人类转录本延伸 5’/3’ 端 | 边界预测任务的标签直接变化 |
| ID 体系与标签变更 | release 113 更新 ENSG→ENSR 格式(影响 8 个物种),默认轨道由 GENCODE Comprehensive 改为 Basic 并引入 gencode_primary 标签 |
硬编码旧标签或假设默认轨道的脚本静默失效 |
应对漂移的工程实践是"把版本当作一等公民":数据契约层面固定 release,实验追踪层面把 release 作为标签,CI 层面加入金标准基因断言,文档层面记录每次升级的预期变化。
§7.7 DAIMS 24 项检查
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ⚠️ | 本体为长格式区间记录(一行一个特征/变异);基因×样本宽矩阵需下游自行构建 |
| 2 | 唯一标识 | ✅ | ENSG/ENST/ENSE 加版本号构成稳定主键;变异有 rsID 或坐标-等位标识;同源基因有独立 homology ID |
| 3 | 特殊字符 | ✅ | GTF 制表符分隔、属性段引号规范;GFF3 属性以 = 连接,无内嵌制表符 |
| 4 | 重复行 | ✅ | 注释特征行不重复;同一外显子被多转录本共享是层级关系而非重复记录 |
| 5 | 缺失编码 | ✅ | GTF 用 . 表示不适用字段,NA 表示无法评估;属性缺省表示"无该属性"且语义明确 |
| 6 | 标签标识 | ✅ | level / transcript_support_level / tag / biotype 四层标签体系,官方文档化 |
| 7 | 罕见类分组 | ⚠️ | TR_/IG_ 基因片段、各类假基因、misc_RNA 等长尾类别需按任务显式归组 |
| 8 | 偏倚评估 | ✅ | §7.1 给出九类偏倚及缓解;论文 limitations 亦有讨论 |
| 9 | 数据字典 | ✅ | 官方 API 文档、BioMart 属性文档、GTF/GFF3 格式说明、质量标签说明齐备 |
| 10 | 信息性缺失解释 | ✅ | §4.5 逐项说明缺省与 ./NA 的语义差异 |
| 11 | 设备记录 | ❌ | 不适用:注释资源本身不含测序设备元数据(上游 INSDC 组装记录中有,但不在 Ensembl 注释文件内) |
| 12 | 共线性 | ✅ | start ≤ end 恒成立;坐标随组装版本内部一致;跨组装需 liftover |
| 13 | 编码映射 | ✅ | 序列本体(SO)术语用于后果标注;HGNC/MGI 符号经 xref 管线;生物型命名官方维护 |
| 14 | 时间戳处理 | ✅ | 以 release 编号 + 冻结日期管理,而非行级时间戳;版本归档页完整 |
| 15 | 划分建议 | ✅ | §3.0/§5 给出按任务选版本与切分的建议 |
| 16 | 泄漏讨论 | ✅ | §5.3 专章讨论同基因异构体、同源基因、重复区、版本、注释来源五类泄漏 |
| 17 | 标签分布 | ✅ | 各生物型与质量的分布可通过官方统计与本地统计获得;变异集合含频率分布 |
| 18 | 测量偏倚 | ⚠️ | 注释所依据的转录证据的批次与平台结构未随注释文件发布,需回查上游组装/实验记录 |
| 19 | 外部验证建议 | ✅ | §5.6/§7.8 给出 MANE、PeptideAtlas、CAGE、RefSeq、OrthoDB、ClinVar 等锚点 |
| 20 | 版本记录 | ✅ | release 编号体系 + 归档页 + FTP 永久路径;历史版本可访问 |
| 21 | 预处理脚本 | ⚠️ | 官方无端到端预处理脚本;REST/Perl/BioMart 与 VEP 工具完备但需自行组装流水线(§6.3) |
| 22 | 合规要求 | ✅ | 数据无使用限制,无需注册或 DUA;代码 Apache 2.0 |
| 23 | 多模态对齐 | ⚠️ | 注释/序列/变异/调控四类数据需显式固定组装与 release 才能对齐(§6.3、坑点 2、坑点 8) |
| 24 | 去标识化 | ✅ | 不含个体级人类数据;转发的人群变异数据由来源机构完成去标识化与聚合 |
DAIMS 评分:20.5 / 24
评分解读:Ensembl 在"标识稳定性、字典完备性、版本记录、合规性"四个维度接近满分,这是成熟公共基础设施的典型特征——它把该做的事(唯一键、版本归档、文档、开放许可)都做扎实了。23 项中有 19 项为 ✅,失分集中在三类:它不是为机器学习表格化准备的数据(宽格式、预处理脚本需自建)、它不携带实验元数据(设备记录不适用、测量偏倚需回查上游)、跨模态与跨平台对齐有隐性成本(多模态对齐、平台迁移风险)。这不是质量问题,而是"基础设施"与"基准数据集"两种定位的差别:Ensembl 提供的是原材料与标准件,组装成训练集的工作由使用方承担。
对你意味着什么:(1)可以直接把注释层当作稳定的标签源接入管线——主键、字典、版本记录都不需要你自建,这部分工作可以省掉;(2)必须自建"版本固定 + 契约测试"的工程护栏——把 release 号写进数据契约、在 CI 中做区名与坐标断言,否则版本漂移会在数月后制造查不出原因的静默失配;(3)若做表格化或跨模态训练,先补一个 GTF→Parquet 的构建层——把所有坐标转换、版本剥离、区名规范化集中在这一层完成,下游只消费规范后的 Parquet,避免同一套转换逻辑散落在多个脚本中。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| MANE Select(联合发布) | NCBI + EMBL-EBI | 蛋白编码基因代表转录本的跨库一致性 | 结构与序列 100% 一致 | — | 跨库转录本歧义在蛋白编码基因上基本消除(Ensembl 与 RefSeq 收敛为同一份) |
| RefSeq 独立注释 | NCBI | 注释结构交叉对比 | 基因数与异构体数存在系统性差异 | — | 两库为独立流程产物,不可直接合并使用(见坑点 7) |
| PeptideAtlas 质谱肽段 / CAGE / PolyA 位点数据 | ISB 等多机构;RIKEN 等;公共数据聚合 | 编码基因翻译证据;转录起始位点支持;3’ 端加工位点支持 | 超过三分之一蛋白编码基因有肽段证据;约三分之一 TSS 有 CAGE 簇支持;约六成蛋白编码基因有注释 polyA 位点(均为历史时点) | — | 独立实验证据对 5’/3’ 边界与编码区提供外部佐证;非编码注释无同级别验证,且覆盖不全 |
| OrthoDB / OMA | 独立团队 | 同源基因判定一致性 | 一对一同源关系高度一致,复杂同源类型差异较大 | — | Compara 的简单同源关系可信度高,many-to-many 需谨慎 |
| ClinVar 临床变异 | NCBI | VEP 输出与临床判读的吻合度 | 已判读变异的功能后果与临床意义方向一致 | — | VEP 注释可作为 ACMG 证据之一,但不能替代判读 |
| 长读长转录组(Iso-Seq) | 多机构 | 异构体结构验证 | 长读长数据支持下新增大量 lncRNA 转录本(release 113 报告超过 130,000 条) | 注释总量显著增加 | 长读长为异构体注释提供关键证据,但新注释假阳性率待评估;时间外推验证无官方基准,需自行用后一 release 构造 |
§8 基准性能与生态
§8.1 变异效应预测的代表性结果
Ensembl 本身不是被评测对象,但通过 VEP 输出的注释是变异效应预测模型的标准输入。下表汇总公开文献中的代表性结果,用于说明"注释质量如何转化为下游性能";各行所用数据集、划分方式与指标不同,数值不可直接比较。
| 排名/类别 | 方法 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 错义变异致病性 | AlphaMissense | 在 ClinVar 基准上达到当时最优的 AUROC 区间 | 2023 | 蛋白语言模型 + 结构上下文,无监督预训练后校准 | Cheng et al., 2023, Science, 381(6664):eadg749. DOI: 10.1126/science.adg7492 | 公开模型权重 |
| 错义变异致病性 | CADD v1.7 | 在多种基准上为强基线,注释阶段即可获得 | 2023(v1.7) | 多注释特征 + SVM 集成 | Schubach et al., 2024, Nucleic Acids Res, 52(12):e59. DOI: 10.1093/nar/gkae253 | https://cadd.gs.washington.edu |
| 错义变异致病性 | REVEL | 在罕见错义变异上优于多数单注释工具 | 2016 | 13 个注释特征集成 | Ioannidis et al., 2016, Am J Hum Genet, 99(4):877-885. DOI: 10.1016/j.ajhg.2016.08.016 | 公开评分 |
| 剪接影响 | SpliceAI / Pangolin / MMSplice | 分别在内含子变异、哺乳动物数据集平均性能、定量剪接预测(ΔPSI)上表现突出 | 2019 / 2022 / 2018 | 深度残差网络 + 长上下文;残差卷积网络;模块化 CNN | Jaganathan et al., 2019, Cell, 176(3):535-548. DOI: 10.1016/j.cell.2018.12.015;Zeng & Li, 2022, Genome Biol, 23:268. DOI: 10.1186/s13059-022-02825-5;Cheng et al., 2019, Genome Biol, 20:224. DOI: 10.1186/s13059-019-1835-8 | https://github.com/Illumina/SpliceAI;https://github.com/tkzeng/Pangolin;https://github.com/gagneurlab/MMSplice |
| 调控变异 | Enformer | 在 Gene Expression Omnibus 与变异效应基准上提升显著 | 2021 | Transformer + 长程注意力 | Avsec et al., 2021, Nat Methods, 18:1196-1203. DOI: 10.1038/s41592-021-01252-0 | https://github.com/google-deepmind/enformer |
| 调控变异 | Borzoi | 在 RNA-seq 覆盖预测上优于 Enformer | 2024 | 更大感受野 + 多模态输出 | Linder et al., 2025, Nat Genet, 57:248-259. DOI: 10.1038/s41588-024-02053-y | https://github.com/calico/borzoi |
| 基因注释一致性 | CCDS 共识集 | 人类蛋白编码基因的高置信区段共识 | 持续更新 | NCBI/Ensembl/Sanger 三方人工共识 | Pujar et al., 2018, Nucleic Acids Res, 46(D1):D221-D228. DOI: 10.1093/nar/gkx1032 | https://www.ncbi.nlm.nih.gov/CCDS/ |
| 代表转录本选择 | MANE Select | 蛋白编码基因跨库代表转录本收敛 | 持续更新 | NCBI + EMBL-EBI 联合流程 | Morales et al., 2022, Nature, 604:310-315. DOI: 10.1038/s41586-022-04558-8 | https://www.ncbi.nlm.nih.gov/refseq/MANE/ |
⚠️ 数值不可直接比较的原因:(1)评测集不同(ClinVar 已判读变异 vs 饱和突变扫描 vs 实验验证集),类别不平衡程度差异极大;(2)划分方式不同(按变异随机划分 vs 按基因/坐标留出),随机划分会因邻近变异共享序列上下文而高估性能;(3)指标不同(AUROC、AUPRC、Spearman、ΔPSI 相关);(4)部分方法训练时已接触过测试集的蛋白或结构信息。
学术诚信提示:上表仅列有同行评审期刊支撑的结果;若某方法的最新性能来自预印本或排行榜提交而未经评审,本词条不收录其数字,避免传播未经核实的对比。
§8.2 选型建议与实务总结
| 你的目标 | 推荐组合 | 理由 |
|---|---|---|
| 临床级变异解读的证据整理 | VEP(含 gnomAD v4.1、ClinVar、REVEL、SpliceAI 插件)+ MANE Select 转录本层 | 一站式获得大部分 ACMG 证据项,且转录本层跨库一致 |
| 剪接变异专项 | SpliceAI 与 Pangolin 并联 + 实验验证(minigene 或 RT-PCR) | 两模型互补,共识预测可靠性显著提升 |
| 错义变异致病性打分 | AlphaMissense 或 ESM 系列 + CADD/REVEL 作为交叉参照 | 蛋白语言模型在罕见变异上泛化更好,但仍需多工具共识 |
| 非编码变异解释 | 组合使用保守性打分 + Enformer/Borzoi 类调控模型 + 大规模人群频率 | 非编码缺少单一金标准,多证据叠加是当前唯一可行路径 |
| 注释版本固定与复现 | 固定 release + 归档页 + 数据契约 + CI 断言 | 这是所有下游工作的前提条件 |
§8.3 评测协议建议
| 协议要素 | 建议 | 说明 |
|---|---|---|
| 划分单元 | 基因(结构任务)、物种(跨物种任务)、细胞类型(调控任务) | 按转录本或按区间随机划分会造成系统性高估 |
| 坐标容差 | 显式声明(通常 ±0 或 ±10 bp) | 不同容差下的边界指标差异很大,必须写明 |
| 指标与分层报告 | 同时报告 AUROC、AUPRC 与 MCC;按生物型、按保守性、按注释来源分层 | 类别极不平衡时 AUROC 会高估,AUPRC 更敏感;分层可避免长尾子集崩塌被整体指标掩盖 |
| 外部验证 | 至少在两个外部资源上验证(如 RefSeq 与 OrthoDB) | 单库验证会继承该库的偏倚 |
| 版本记录 / 时间外推 | 报告 release 号、组装版本、工具版本;若声称"预测新知识",必须用后一个 release 评测 | 三者齐全才算可复现;同版本内划分无法检验外推能力 |
| 打乱对照 | 报告二核苷酸打乱序列的指标作为下界 | 防止模型学到与序列内容无关的单纯位置线索 |
§8.4 相关数据集
| 数据集/资源 | 关系 | 规模 | 互补价值 |
|---|---|---|---|
| GENCODE / RefSeq | 人类与小鼠注释的权威来源(与 Ensembl 人类注释同源)/ 并行的独立转录本集合 | 人类约 6 万个基因条目 / 多物种 | 提供 basic/comprehensive 层级与 level 分级;交叉验证注释分歧区域,MANE 项目使其与 Ensembl 在代表转录本上收敛 |
| UCSC Genome Browser | 同一组装上的多物种比对与第三方轨道 | 以脊椎动物为主 | 提供镜像视角与额外的比对轨道,便于人工核对 |
| UniProt / INSDC(ENA/GenBank/DDBJ) | 蛋白层级权威注释 / 序列最终归档 | 数亿条蛋白序列 / 数十亿条记录 | 前者为 Ensembl 翻译产物提供蛋白功能证据与交叉引用;后者是组装的原始来源与溯源终点 |
| Ensembl Genomes | Ensembl 的非脊椎动物与微生物分库 | 五个分库,真菌单库 1,504 个基因组 | 承载主站不覆盖的类群 |
| gnomAD / ClinVar | 人群变异频率 / 临床变异与解读 | 数十万个体(聚合)/ 数百万条提交 | 分别为变异过滤提供频率依据、为变异分类提供临床意义注释,均为 VEP 核心注释源 |
| dbSNP / dbNSFP | 变异登记与功能预测汇总 | 数亿条 / 覆盖全外显子变异 | 提供变异标识与数十种预测工具打分,VEP 插件直接调用 |
| Gene Ontology / VEuPathDB | 基因功能本体 / 真核病原体专题资源 | 数万术语 / 主要病原物种 | 为注释结果提供功能语义层;后者的数据自 Ensembl Genomes 61 起并入 Ensembl 体系 |
§8.5 关键文献 Top 8
| # | 文献 | 一句话贡献 |
|---|---|---|
| 1 | Dyer SC et al. (2025). Ensembl 2025. Nucleic Acids Research, 53(D1):D948–D957. DOI: 10.1093/nar/gkae1071 | 当前主引用:给出 4,800+ 真核与 31,300+ 原核基因组口径、新平台进展与调控注释扩展 |
| 2 | Harrison PW et al. (2024). Ensembl 2024. Nucleic Acids Research, 52(D1):D891–D899. DOI: 10.1093/nar/gkad1049 | 报告 Rapid Release 规模化、养殖动物调控构建首发与 Cactus 多类群比对 |
| 3 | McLaren W et al. (2016). The Ensembl Variant Effect Predictor. Genome Biology, 17:122. DOI: 10.1186/s13059-016-0974-4 | VEP 的原始方法学论文,定义变异功能注释的标准输出格式 |
| 4 | Yates A et al. (2015). The Ensembl REST API: Ensembl Data for Any Language. Bioinformatics, 31(1):143–144. DOI: 10.1093/bioinformatics/btu613 | REST 接口的设计与限速策略,含跨云区域吞吐基准 |
| 5 | Aken BL et al. (2016). The Ensembl gene annotation system. Database, 2016:baw093. DOI: 10.1093/database/baw093 | Genebuild 自动注释流水线的方法学完整描述 |
| 6 | Hunt SE et al. (2018). Ensembl variation resources. Database, 2018:bay119. DOI: 10.1093/database/bay119 | Ensembl Variation 子域的数据模型与来源整合方式 |
| 7 | Durinck S et al. (2009). Mapping identifiers for the integration of genomic datasets with the R/Bioconductor package biomaRt. Nature Protocols, 4:1184–1191. DOI: 10.1038/nprot.2009.97 | BioMart 的 R 接口方法学,跨库 ID 映射的标准工具 |
| 8 | Morales J et al. (2022). A joint NCBI and EMBL-EBI transcript set for clinical genomics and research. Nature, 604:310–315. DOI: 10.1038/s41586-022-04558-8 | MANE 项目:使 Ensembl 与 RefSeq 在临床代表转录本上收敛 |
§8.6 社区与生态活跃度
| 维度 | 现状 | 说明 |
|---|---|---|
| 版本节奏 | 每年 3–5 次主版本(2026 年为过渡年,节奏受平台迁移影响) | 稳定且可预期的发布机制 |
| 邮件列表与帮助 / 代码开放 | 官方提供邮件支持与开发者邮件列表;GitHub 上的 ensembl 组织维护大量仓库(Apache 2.0) | 响应由核心团队承担,非社区自助;可自行部署镜像与二次开发 |
| 培训资源 / 镜像与云 | 官方提供在线教程、网络研讨会与 API 工作坊;提供公共镜像,REST 有跨区域云基准 | 覆盖 REST、Perl、BioMart 与 VEP;镜像可降低大规模使用的出网成本 |
| 第三方工具集成 | 变异注释工具(VEP/SnpEff/ANNOVAR)、定量工具(Salmon/kallisto/featureCounts)与可视化工具默认支持 | 生态互操作性是核心竞争壁垒 |
| R/Python 生态 | biomaRt(R)、pyensembl(Python)、requests 直连 REST | 语言覆盖完整 |
| 主要用户群 | 临床遗传实验室、群体遗传学研究组、基因组 AI 团队、农业基因组学 | 跨学术界与产业界 |
§8.7 生态快照
| 资源 | 类型 | 链接 | 规模/Star(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| Ensembl 主站 / 新站 | 官方门户(新站为迁移目标) | https://www.ensembl.org;https://beta.ensembl.org | 核心资源 / 4,700+ 基因组 | 全部入口的起点;新站是获取新组装与新物种的唯一途径 |
| Ensembl FTP / 归档页 | 官方数据发布与版本归档 | https://www.ensembl.org/info/data/ftp/index.html;https://www.ensembl.org/info/website/archives/index.html | 全量数据 / 全部历史 release | 批量下载的唯一权威来源;复现历史研究、追踪版本变更 |
| Ensembl REST / 限速 Wiki | 官方 API 与错误处理说明 | https://rest.ensembl.org;https://github.com/Ensembl/ensembl-rest/wiki/Rate-Limits | 限速 15 请求/秒 | 生产管线按需检索的标准接口与一手限速说明 |
| VEP 工具与 cache | 官方工具 | https://www.ensembl.org/info/docs/tools/vep/index.html | 约 1,000 变异/秒(本地) | 大规模变异注释的推荐路径 |
| BioMart / biomaRt | 官方批量导出与 R/Bioconductor 包 | https://www.ensembl.org/info/data/biomart/index.html;https://bioconductor.org/packages/biomaRt | 非编程用户首选 / 广泛使用 | 批量属性导出;R 生态访问 BioMart 的标准方式 |
| pyensembl | Python 包(社区维护) | https://github.com/openvax/pyensembl | 社区维护 | Python 侧访问 Ensembl 注释的便捷封装 |
| Ensembl 代码仓库 | 官方源码 | https://github.com/Ensembl | Apache 2.0 | 自建镜像与二次开发的基础 |
| Ensembl Genomes | 官方分库门户 | https://ensemblgenomes.org | 五个分库 | 植物、真菌、原生生物、细菌、后生动物的唯一入口 |
§9 相关资源与引用
§9.1 官方文档与教程
| 资源 | 用途 | 链接 |
|---|---|---|
| Ensembl 使用文档总览 | 平台功能说明与入门指引 | https://www.ensembl.org/info/website/index.html |
| REST API / Perl API 文档 | 全部端点、参数与返回示例;直连数据库的高级用法与坐标系说明 | https://rest.ensembl.org;https://www.ensembl.org/info/docs/api/index.html |
| BioMart 用户指南 / VEP 文档 | 批量导出与属性文档;在线与离线 VEP 的安装、运行与插件 | https://www.ensembl.org/info/data/biomart/index.html;https://www.ensembl.org/info/docs/tools/vep/index.html |
| 基因注释质量标签说明 / Genebuild 方法说明 / Compara 文档 | level/TSL/tag 的定义与解读;自动注释流水线流程;同源基因、基因树与全基因组比对 | https://www.ensembl.org/info/genome/genebuild/transcript_quality_tags.html;https://www.ensembl.org/info/genome/genebuild/index.html;https://www.ensembl.org/info/genome/compara/index.html |
| 版本归档与发布说明 / 许可与免责声明 / 代码许可说明 / 官方致谢与团队 | 各 release 变更内容;数据与代码使用条款、Apache License 2.0 适用范围;机构、团队与资助来源 | https://www.ensembl.org/info/website/archives/index.html;https://www.ensembl.org/info/about/legal/disclaimer.html;https://www.ensembl.org/info/about/legal/code_licence.html;https://www.ensembl.org/info/about/credits.html |
§9.2 BibTeX 引用块
@article{dyer2025ensembl, title={Ensembl 2025}, author={Dyer, Sarah C. and Austine-Orimoloye, Olanrewaju and Azov, Andrey G. and others}, journal={Nucleic Acids Research}, volume={53}, number={D1}, pages={D948--D957}, year={2025}, doi={10.1093/nar/gkae1071}}
@article{harrison2024ensembl, title={Ensembl 2024}, author={Harrison, Peter W. and Amode, M. Ridwan and others}, journal={Nucleic Acids Research}, volume={52}, number={D1}, pages={D891--D899}, year={2024}, doi={10.1093/nar/gkad1049}}
@article{mclaren2016vep, title={The Ensembl Variant Effect Predictor}, author={McLaren, William and Gil, Laurent and Hunt, Sarah E. and others}, journal={Genome Biology}, volume={17}, pages={122}, year={2016}, doi={10.1186/s13059-016-0974-4}}
@article{yates2015rest, title={The Ensembl {REST} {API}: {Ensembl} Data for Any Language}, author={Yates, Andrew and Beal, Kathryn and Keenan, Stephen and others}, journal={Bioinformatics}, volume={31}, number={1}, pages={143--144}, year={2015}, doi={10.1093/bioinformatics/btu613}}
@article{aken2016genebuild, title={The {Ensembl} gene annotation system}, author={Aken, Bronwen L. and Ayling, Sarah and Barrell, Daniel and others}, journal={Database}, volume={2016}, pages={baw093}, year={2016}, doi={10.1093/database/baw093}}
@article{hunt2018variation, title={Ensembl variation resources}, author={Hunt, Sarah E. and McLaren, William and Gil, Laurent and others}, journal={Database}, volume={2018}, pages={bay119}, year={2018}, doi={10.1093/database/bay119}}
@article{durinck2009biomart, title={Mapping identifiers for the integration of genomic datasets with the {R}/{Bioconductor} package {biomaRt}}, author={Durinck, Steffen and Spellman, Paul T. and Birney, Ewan and Huber, Wolfgang}, journal={Nature Protocols}, volume={4}, pages={1184--1191}, year={2009}, doi={10.1038/nprot.2009.97}}
@article{morales2022mane, title={A joint {NCBI} and {EMBL-EBI} transcript set for clinical genomics and research}, author={Morales, Joannella and Pujar, Shashikant and Loveland, Jane E. and others}, journal={Nature}, volume={604}, pages={310--315}, year={2022}, doi={10.1038/s41586-022-04558-8}}
§9.3 引用指南
引用 Ensembl 时,官方与社区的通行做法是三要素齐备:(1)论文引用——使用当前论文(Dyer et al. 2025,DOI: 10.1093/nar/gkae1071);若使用较早 release,应同时引用该 release 对应的论文(如 release 110–112 对应 Harrison et al. 2024)。(2)版本标注——在方法部分明确写出 Ensembl release 号及对应的 Ensembl Genomes 版本号(若使用分库),如"Ensembl release 116 / Ensembl Genomes 63"。(3)组装标注——写出基因组组装版本(如 GRCh38.p14、GRCm39、GCA_040285425.1),因为同一物种可能有多个组装。
| 使用内容 | 建议追加引用 |
|---|---|
| 比较基因组学(Compara) / 变异注释(VEP) / 变异数据(Variation) / BioMart 批量导出 | Aken et al. 2016、Yates et al. 2015;McLaren et al. 2016;Hunt et al. 2018;Durinck et al. 2009 |
| Rapid Release 中的新注释基因组 | 无专文;须在方法中说明其注释质量层级低于主 release,避免读者误以为使用了深度人工注释 |
§10 AI 使用声明卡
§10.1 AI 模型列表
| 用途 | 模型/工具 | 版本说明 |
|---|---|---|
| 文献检索与事实核查、正文撰写与结构编排、代码示例生成 | 通用大语言模型辅助检索 | 用于定位官方页面与论文(全部事实以官方来源复核);在人工给定的结构规范与事实清单下生成初稿;代码逻辑经人工审阅,关键 API 行为对齐官方文档 |
| 结构与纯净度校验 | 脚本化校验工具(check_md.py) | 检查行数、必需章节、字段、锚点、代码围栏配对与占位符 |
§10.2 AI 参与范围
AI 在本文中的参与范围限于:文献线索检索、公开资料的归纳整理、按既定结构生成初稿文本、生成代码示例初稿。以下环节由人工完成或人工复核:全部事实性数字的官方来源核对(包括基因组数量、release 号、限速阈值、许可条款)、文献引用的完整性与准确性核对、代码示例的 API 行为核对、偏倚与局限性的判断、DAIMS 24 项的逐项评估与评分。
§10.3 输入来源
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| 事实性数字(基因组数量、release 号、限速阈值) | 千方病案医学编辑部 | 逐项对照官方页面与论文原文 | ✅ 已验证 |
| §2 医学背景与 ICD-11/SNOMED 映射 | 千方病案医学编辑部 | 术语体系对照与临床场景合理性审阅 | ✅ 已通过 |
| §4 DAIMS 数据字典与字段语义、§5 划分建议与泄漏讨论、§6 代码示例与坑点 | 千方病案医学编辑部交叉审核 | 对照官方格式文档与质量标签说明核验;按基因组数据特性审阅五类泄漏;核对 API 行为、坐标约定与错误处理逻辑 | ✅ 已验证 / 已通过 |
| §7 DAIMS 24 项评分与偏倚分析 / §8 文献引用与性能数据、§9 BibTeX 引用块 | 千方病案医学编辑部 | 逐项评估并复核评分一致性;核对 DOI、期刊、卷期页码与年份并与论文元数据逐字核对 | ✅ 已通过 / 已验证 |
| 全文格式与纯净度 | 千方病案医学编辑部 | 脚本化校验加人工复核 | ✅ 已通过 |
§10.5 AI 生成内容标注
| 章节 | 生成方式 | 人工介入程度 |
|---|---|---|
| §0 E-E-A-T 声明、§10 声明卡 | 按固定模板生成 | 审核者与日期、校验记录由人工确认填写 |
| §1 概览、§2 医学背景、§3 数据集规格、§4 数据结构、§5 划分与使用、§6 AI 就绪指南 | AI 起草 | 全部数字与文献经人工核对;ICD-11/SNOMED 映射经人工审阅;版本矩阵与规模数字经人工核对;字段语义与缺失约定经人工核验;泄漏讨论经人工审阅补充;代码逻辑与 API 行为经人工核验 |
| §7 质量评估、§8 基准与生态、§9 资源与引用 | AI 起草 | DAIMS 逐项评估与评分经人工复核;文献引用经人工逐条核对;链接可用性与引用格式经人工核验 |
§10.6 最后人工审核日期
最后人工审核日期:2026-09-05。本次审核覆盖全文事实性数字、文献引用、代码示例的 API 行为、DAIMS 24 项评估结果与许可条款表述。后续如官方发布新 release 或修订许可条款,本页面需相应更新并重新审核;引用本页面时应同时核对官方最新信息,尤其在平台迁移期间(旧平台向 beta.ensembl.org 过渡)的接口与版本号变化。
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- dbsnp — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释
- clingen — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释
- decipher — 共享标签:基因组学与多组学 / 测序数据 / 变异与注释
- clinvar — 共享标签:基因组学与多组学 / 变异与注释
- gnomad — 共享标签:基因组学与多组学 / 测序数据
- uniprot — 共享标签:基因组学与多组学 / 测序数据
- 1000-genomes — 共享标签:基因组学与多组学 / 测序数据
- encode — 共享标签:基因组学与多组学 / 测序数据
- geo — 共享标签:基因组学与多组学 / 测序数据
- hmp — 共享标签:基因组学与多组学 / 测序数据
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

