信息速览
INFOBOX — MedHop 一屏速览
维度 内容 本质 QAngaroo 项目的医学半边:跨文档多跳阅读理解数据集,非单跳医学问答 定位 查询=「药物 A 是否与 ? 相互作用」,证据须沿药物—蛋白—蛋白—药物通路跨多篇摘要链式推断 团队 University College London(UCL)+ Bloomsbury AI;Welbl / Stenetorp / Riedel 论文 TACL Vol 6 (2018), pp. 287-302;DOI 10.1162/tacl_a_00021;ACL ID Q18-1021;arXiv 1710.06481 规模 train 1,620 / dev 342 / test 546(合计 2,508);公开包仅占前二者 每样本 候选药物 avg 8.9;文档 avg 36.4(上限 64);每文档 token avg 253.9 查询类型 仅 1 种( interacts_with)——与 WikiHop 277 种形成鲜明对比构建方式 远监督:DrugBank + Reactome + Swiss-Prot 结构化知识驱动,无人工标注(dev 抽样 100 条仅做质量分析) 姊妹数据集 WikiHop(Wikipedia 开放域,train 43,738 / dev 5,129 / test 2,451)同论文同格式发布 变体 original(原始)与masked(候选实体替换为 100 个唯一占位符 token)许可 CC BY-SA 3.0 获取 Zenodo records/6407401(339.8 MB)|HF bigbio/medhop|官方站 qangaroo.cs.ucl.ac.uk 库内互链 medqa(50)、pubmedqa(49)、medmcqa(111)、ddi(171)、drugbank(89/571)、bioasq(53)、scifact(751)
MedHop 是一个把"多跳推理"这件事单独拎出来做成评测基准的数据集。它问的问题形式上极其简单——“药物 A 和哪种药相互作用?”——但答案不写在任何一篇摘要里:你必须先读到 A 的靶点蛋白 P,再沿一条被 Reactome 证实的蛋白-蛋白相互作用链走到蛋白 Q,最后回到某篇摘要里找到 Q 的另一种药 B。整条证据链横跨 36 篇左右的 Medline 文档,中间任何一环断了都推不出答案。这正是 2018 年前后 NLP 社区开始系统追问的问题:当答案不在单篇文档里时,阅读理解模型还能做什么?
更值得玩味的是它的构建哲学。MedHop 不是雇人一道题一道题标注出来的,而是把已经结构化的知识库(DrugBank 的药物-靶点、Reactome 的蛋白通路、Swiss-Prot 的蛋白本体)当作"出题机",再用精确字符串匹配把知识库的事实投射回 Medline 摘要文本上——这就是远监督(distant supervision)。这种做法的好处是规模、可复现、无标注噪声;代价是把模型评测的难点从"标注质量"转移到了"证据链是否真的能从文本读出"。MedHop 与它的姊妹数据集 WikiHop 一起,成为 2018 年后 HotpotQA、2WikiMultiHopQA、MuSiQue 等一整个多跳 QA 谱系的早期参照。
导语读法三则:
- 只想下数据:直奔 §6 获取与许可——注意 test 集不公开,公开包只有 train+validation,别把 2,508 当成可下载量。
- 关心任务设计:直奔 §3 构建流水线与 §4 任务与标注——二部图、游走、降采样、masking 四步是全文技术核心。
- 要做评测对标:直奔 §5 评估与基准——注意 42.9/74.0 与 54.5/85.0 的双口径陷阱(坑 1),MedHop 自身最佳是 47.8% 而非 54.5%。
§0 导读:这个数据集解决什么问题
§0.1 从"单跳"到"多跳":一个被形式化的问题
自然语言处理的阅读理解任务长期默认一个隐含前提:答案存在于单篇文档之内。SQuAD、CNN/DailyMail 乃至早期生物医学问答数据集都遵循这个前提——给定一段文本,从中抽出一个 span 或选出一个选项。但真实世界的知识很少这样组织。医生判断"这两种药能不能一起用",依据的不是某一句话,而是散落在药理机制、靶点通路、临床文献里的多段信息,需要把"药 A 作用于蛋白 P"“P 与 Q 同处一条通路”“药 B 作用于 Q"三条陈述串起来,才能得出"A 与 B 可能相互作用”。
MedHop 要形式化的正是这一跃迁。它把任务定义为:给定查询 (drug1, interacts_with, ?) 与一组文档,从一组类型一致的候选答案中选出正确的那一个;候选(含正确项)都必须在文档中被提及。注意这里的三个约束是刻意设计的:
- 查询是二元关系占位——不是自然语言问句,而是知识图谱三元组的头实体+关系,这让答案空间封闭、可用结构化知识校验;
- 候选类型一致——所有候选都是药物,模型不能靠"答案应该是个化学式"这类类型线索走捷径;
- 证据跨文档——正确答案所依赖的证据链分散在多篇摘要,单文档匹配无法奏效。
§0.2 为什么用医学文献做多跳
MedHop 选择医学领域并非偶然。医学文献有一个其他领域难以复制的性质:存在大规模、高质量、公开的结构化知识可以充当"出题骨架"。药物与靶点的对应关系由 DrugBank 维护,蛋白与蛋白的相互作用由 Reactome 收录,人类蛋白本体由 Swiss-Prot 规范——这三者都是人工审编或高质量推断的产物,可以直接拿来生成"事实正确"的查询与答案,再用文献的精确字符串匹配建立"证据确实写在哪里"的映射。
代价则在于:结构化知识是对的,但文本证据不一定读得通。知识库告诉你"X 与 Y 相互作用",可 Medline 摘要里可能从未同时讨论过这两者,或者只在不同的上下文中各提一次。于是 MedHop 的任务难度天然被结构化为两级——先要在 36 篇文档里定位到那条真正的证据链(文档选择),再要在候选里选定答案(答案判定)。§5 的 gold chain 实验正是为了把这两级难度分开测量而设计:只把含答案线索的文档喂给模型,性能立刻从 47.8% 跳到 86.4%。
§0.3 QAngaroo 不是两个数据集,是一个项目的两个投影
检索时最容易踩的坑是把 QAngaroo、MedHop、WikiHop 当作三个并列的数据集。实际上 QAngaroo 是项目名,它产出了同一个论文、同一套格式、同一套构建方法的两个数据集:WikiHop(基于 Wikipedia,从 Wikidata 恢复事实,277 种查询关系)与 MedHop(基于 Medline,恢复药物相互作用,1 种查询关系)。二者共享 arXiv 编号 1710.06481、共享 TACL 论文、共享 Zenodo 包 qangaroo_v1.1.zip,也共享那个著名的双口径精度争议(坑 1)。
§0 读法三则:
- 这个条目是"数据集 + 构建方法论 + 评测基准"三合一:本体是 2,508 例多跳查询,方法论是远监督 + 二部图 + masking 三步,基准是 Table 5/7 的基线矩阵。
- 全文数字凡涉及精度,一律先问"这是 MedHop 还是 WikiHop"“这是 original 还是 masked”“这是 test 还是 test*”——四元组不同,数字差一倍不奇怪。
- 检索 MedHop 时若只搜到 WikiHop 的 43,738 条训练样本,那是搞混了——MedHop 的 train 只有 1,620 条(坑 2)。
§1 数据集速览:十问十答
Q1:MedHop 到底是个什么数据集?
一个跨文档多跳阅读理解评测基准。每条样本给定一个药物相互作用查询(如「Leuprolide 与哪种药相互作用?」)与一组 Medline 摘要,要求模型从一组候选药物里选出正确答案。答案不是从某段文本里抽出来的 span,而是需要把散落在多篇摘要中的证据(药物靶点、蛋白通路、另一药物)串成一条链才能确定。
Q2:为什么叫 MedHop?"Hop"指什么?
“Hop"指推理的跳数。多跳(multi-hop)意味着从查询到答案要经过若干中间步骤,每跨一次中间实体算一"跳”。MedHop 的最小证据链是"药物→靶点蛋白→蛋白→另一药物"四步三跳,比单跳阅读理解多出整个中间推理环节。论文标题 “Multi-hop Reading Comprehension Across Documents” 里的 “Across Documents” 则强调这些跳跨的是不同文档。
Q3:规模有多大?
论文 Table 1 口径:train 1,620 / dev 342 / test 546,合计 2,508 例。但公开可下载的只有 train+validation,即 1,962 例——test(546)由官方保留用于盲评(坑 3)。
Q4:每条样本长什么样?
四个字段。query:单一类型的药物相互作用查询;candidates:类型一致的候选药物列表,平均 8.9 个,多数样本恰好 9 个;supports:支持文档集合,来自 Medline 2016 的摘要,平均每样本 36.4 篇、中位数 29 篇、上限 64 篇;answer:正确候选。此外 masked 变体把所有候选实体替换成 MASK7 之类的唯一占位符 token。
Q5:谁做的、什么时候?
University College London(UCL)计算机系的 Johannes Welbl、Pontus Stenetorp 与 Sebastian Riedel(后者同时隶属 Bloomsbury AI)。arXiv 初版 2017 年 10 月,TACL 正式发表 2018 年(Vol 6, pp. 287-302)。
Q6:数据是怎么造出来的,是人工标注的吗?
不是。MedHop 由**远监督(distant supervision)**自动构建:用 DrugBank(药物-靶点)、Reactome(蛋白-蛋白相互作用)、Swiss-Prot(人类蛋白)三个结构化知识库做"出题骨架",再用精确字符串匹配把这些事实投射到 Medline 摘要上,构建二部图后游走生成查询-候选-文档三元组。论文只对 dev 集抽样标注 100 条做定性质量分析,不存在全量人工标注(坑 4)。
Q7:候选和文档的统计特征是什么?
按论文 Table 2(训练集口径):候选数 min 2 / max 9 / avg 8.9 / median 9;文档数 min 5 / max 64 / avg 36.4 / median 29;每文档 token 数 min 5 / max 458 / avg 253.9 / median 264。平均每样本含 59.8 条唯一文档路径。与 WikiHop 相比,MedHop 是"候选少、文档多",WikiHop 是"候选多、文档少"——这一结构差异直接决定了两个数据集的难度重点不同。
Q8:masked 版本是干什么的?
缓解答案候选频次失衡。在知识图谱里,不同药物的相互作用数量差异极大——Aspirin 与 743 种药物相互作用,Isotretinoin 只有 34 种。如果不处理,模型完全可以靠"哪个候选是高频药就选哪个"来作弊。masked 版本把候选实体替换为 100 个唯一占位符 token(如 “MASK7”),既抹掉频次线索,也抹掉"高频答案字符串↔支持文档"的统计相关性。效果立竿见影:Majority 基线在未 masking 时是 58.4%(test),masking 后崩到 10.4%。
Q9:精度到底是多少?
这是本条目最需要小心的地方。arXiv v2 摘要说"最佳 42.9%,人类 74.0%“;TACL/ACL 终版摘要说"最佳 54.5%,人类 85.0%”。两个数都对,但指的都不是 MedHop 自身——42.9 与 54.5 精确对应的是 WikiHop 的 BiDAF 在两个口径下的 test 精度。MedHop 自身最佳是 Table 5 的 BiDAF(standard,未 masking)47.8%(test)/ 61.2%(test*)。引用时务必区分(坑 1)。
Q10:和库内已有的医学问答数据集有什么不同?
库内 medqa(50)、medmcqa(111)、pubmedqa(49)、medicationqa(170) 都是单跳任务:证据在单段文本或单个问题里,答案是抽取或选择。MedHop 是库内首个多跳推理条目——它的难点不在"读懂一句话",而在"在 36 篇文档里找到并把几段证据连起来"。与它主题最接近的是 ddi(171)(药物-药物相互作用数据集),但 ddi 面向关系抽取/分类,MedHop 面向跨文档多跳阅读理解的候选选择——任务形态不同(§9 详述)。
§2 数据构成与规格
MedHop 的规格必须从两个层次看:论文口径(Table 1、Table 2 的原始统计)与分发包口径(qangaroo_v1.1.zip 与 Hugging Face 托管版本)。两者并不矛盾,但若不区分,极易在多处数字上说出"自相矛盾"的话。本节先给出分片规模,再逐字段拆解,最后给出统计分布与体量数字。
§2.1 分片规模
| 分片 | 论文 Table 1 口径(MedHop) | 是否随包发布 |
|---|---|---|
| train | 1,620 | 是 |
| dev(论文中常写作 development / validation) | 342 | 是 |
| test | 546 | 否(官方保留盲评,坑 3) |
| 合计 | 2,508 | 发布的是 1,962 |
需要特别当心的是"2,508"这个总数只是论文汇总口径。任何声称"下载后得到 2,508 条 MedHop 样本"的说法都是错的:官方压缩包与 Hugging Face 镜像都只含 train + dev。这一点在对照 QAngaroo 的另一半 WikiHop 时尤其要留意——WikiHop 的分片是 train 43,738 / dev 5,129 / test 2,451,合计 51,318,与 MedHop 相差一个数量级(坑 5)。
§2.2 样本字段定义
MedHop 的样本结构与 QAngaroo 系列完全一致,共四个核心字段加一个可选变体字段。下表给出官方 JSON 结构中每个字段的语义、类型与工程含义。
| 字段 | 类型 | 语义 | 工程含义与注意事项 |
|---|---|---|---|
query |
string | 单一类型的药物相互作用查询句 | 模板化生成,句式高度规整;不含答案实体本身 |
candidates |
list[string] | 类型一致的候选药物列表 | 全部候选与答案同属"药物"实体类型;长度多为 9 |
supports |
list[string] | 支持文档集合(Medline 2016 摘要) | 每篇文档带标题;平均 36.4 篇,上限 64 篇 |
answer |
string | 正确候选 | 恒为 candidates 中一员,不存在"无答案"样本 |
answer_position |
int | 答案在候选列表中的下标 | 由官方或转换脚本提供;用于评估定位与去偏 |
在 Hugging Face 的 bigbio/medhop 转换版本中,字段被重新组织为 id / question / context / answers 这样的 BigBIO 通用 schema,文档被折叠进 context 列表,答案以列表形式给出。做跨平台复现时必须以字段映射表为准,切勿假定两边列名一致——这是把官方 JSON 直接喂给只认 BigBIO schema 的 pipeline 时最常见的失败点。
§2.3 统计分布(Table 2 训练集口径)
论文 Table 2 给出的分布数字是理解 MedHop 难度结构的关键。一个反直觉之处是:候选数很集中,文档数却很分散。
| 统计量 | 候选数 | 文档数(supports) | 每文档 token 数 |
|---|---|---|---|
| min | 2 | 5 | 5 |
| max | 9 | 64 | 458 |
| 平均 | 8.9 | 36.4 | 253.9 |
| 中位数 | 9 | 29 | 264 |
读表要点有三:
- 候选数中位数为 9、上限也只有 9,说明多数样本就是一个"九选一"的选择题;但 min 为 2,说明少数样本只有两个候选,随机基线在这些样本上会天然偏高。
- 文档数跨度极大(5–64),平均 36.4 而中位数只有 29,说明分布右偏——少数"大样本"把均值拉高了。做长度归一化或批处理显存估算时,用中位数比用均值更稳。
- token 上限被截断在 458 附近,这是构建流水线主动施加的限制(单文档最多 300 token 正文加标题,详见 §3.5),不是 Medline 摘要的自然长度。
平均每个样本包含 59.8 条唯一文档路径(unique document paths)。这个数大于文档数均值 36.4,是因为同一条路径可能被多次访问、同批文档在不同样本间重用——它衡量的是"样本-文档"连接的总量,而非去重后的文档库存。
§2.4 original 与 masked 两个 config
MedHop 随包提供两个并行版本,在 Hugging Face 上对应两个 dataset config:
| config | 特征 | 用途 |
|---|---|---|
medhop(原始版) |
候选实体为真实药物名(如 “Aspirin”) | 常规评估;但存在答案频次线索 |
masked_medhop(掩码版) |
候选实体替换为 100 个唯一占位符 token(如 MASK7) |
消除频次线索,检验模型是否真在推理 |
掩码的规则是:同一样本内同一实体映射到同一占位符(保证样本内一致性),跨样本则一般映射不同(切断跨样本的实体身份相关性)。这样设计后,"Aspirin 高频因而更可能是答案"这条捷径被彻底斩断——但这并不意味着条件分布上占位符完全均匀,因为掩码保留了样本内有区分度的候选结构,只是抹掉了真实身份(坑 6)。
需要强调:masked 版本不是另一份独立数据集,而是同一批样本的视图变换。比对两版指标时,样本数、分片划分、文档集合完全相同,可以直接对照。
§2.5 分发包体量与托管口径
MedHop 的官方发布载体是 qangaroo_v1.1.zip:
| 项 | 值 |
|---|---|
| 文件名 | qangaroo_v1.1.zip |
| 大小 | 339.8 MB |
| MD5 | dd4f65d2f73244c0946b5810e24a8e43 |
| 内含 | MedHop 与 WikiHop 两套数据(train + dev) |
| 官方站 | http://qangaroo.cs.ucl.ac.uk/ |
| 永久归档 | Zenodo records/6407401 |
在 Hugging Face 侧,bigbio/medhop 提供转换后的托管版:
| 项 | 值 |
|---|---|
| dataset_size(medhop) | 110,398,906 B(约 105 MB) |
| dataset_size(masked_medhop) | 112,614,098 B(约 107 MB) |
| 行数标注 | “Number of rows: 3,924” |
| 许可 | cc-by-sa-3.0 |
这里出现了一个必须点破的口径差:论文说 1,620 + 342 = 1,962 条,而 HF 页面标注 3,924 行。3,924 恰好是 1,962 的整数倍(×2)——原因是 BigBIO 版本把每条样本按答案实例展开(或同时计入 original 与 masked 两种表述),从而在"行"这一粒度上翻倍。因此:
- 说"MedHop 共 1,962 条可下载训练/验证样本"——对(论文口径);
- 说"bigbio/medhop 数据集共 3,924 行"——也对(HF 行口径);
- 说"MedHop 有 3,924 条样本"——错(把行数误当样本数,坑 7)。
引用时务必带上口径来源(论文 Table 1 / HF dataset card),否则三层数字会被读成互相矛盾。
§3 构建流水线
MedHop 的价值不只在数据本身,更在于它示范了一套用结构化知识库自动造多跳题的可复用流水线。整套方法的核心是远监督:让知识图谱当"出题人",让语料当"证据库"。
§3.1 上游知识库
构建 MedHop 用到三个结构化知识库,各司其职:
| 知识库 | 提供的关系 | 在流水线中的角色 |
|---|---|---|
| DrugBank | 药物-靶点(drug–target) | 建立"文档 ↔ 药物"边、生成查询的起点与候选 |
| Reactome | 蛋白-蛋白相互作用(pathway) | 提供中间跳;证实蛋白-蛋白之间存在可信连接 |
| Swiss-Prot | 人类蛋白条目 | 归一化蛋白身份,保证中间实体是"真实存在的人类蛋白" |
三者形成一条可走通的链条:药物(DrugBank 有靶点)→ 靶点蛋白(Swiss-Prot 归一化)→ 蛋白与蛋白有相互作用(Reactome 证实)→ 另一药物(也来自 DrugBank)。这就是 MedHop 最小证据链"四步三跳"的骨架。
§3.2 语料侧
文档侧用的是 Medline 2016 的摘要集合。选它有三个理由:
- 规模足够:Medline 是生物医学文献的权威索引,摘要数量庞大,能保证二部图有足够的边可走;
- 领域匹配:药物、靶点、蛋白的表述在生物医学文献里高频出现,精确字符串匹配的召回率可观;
- 可引用、可复现:2016 快照固定,避免"语料随时间漂移"导致的不可复现问题。
把知识图谱事实投射到语料上用的是精确字符串匹配——只有当一个实体名在摘要里以精确形式出现时才建立连接。这一步牺牲了召回(同义词、缩写会漏),但换来了精度与可解释性:每条边都能指回一个具体的字符串匹配位置,不依赖不透明的实体链接模型。
§3.3 二部图构建
MedHop 把"实体"和"文档"建成一个二部图(bipartite graph),边分三类,方向语义各不相同:
| 边类型 | 方向 | 建立条件 |
|---|---|---|
| 文档 → 蛋白 | 无向 | 摘要中出现该蛋白名(精确匹配) |
| 文档 ↔ 药物 | 双向 | 摘要中出现药物名,且该药物-靶点关系在 DrugBank 口径下成立 |
| 蛋白 → 文档 | 单向可达 | 需 Reactome 证实该蛋白与另一蛋白存在相互作用 |
三类边合起来,使得"从药物出发 → 找到含它的文档 → 从文档跳到蛋白 → 从蛋白跳到另一蛋白 → 再落到含另一药物的文档 → 得到另一药物"这条路径在图上成为可行游走。这正是多跳的图论表达:每一跳都是图上一次边转移。
§3.4 游走与出题
在图上以 drug1(查询药物)为起点做游走,找到可达的另一药物作为答案候选,沿途经过的文档就是 supports 集合。游走策略的关键约束是路径数配平:
- 保证所有候选实体对应的可达路径数量大致相同;
- 避免"某个候选天然有更多证据文档"造成的结构性偏置(否则模型可以靠文档计数作弊)。
这一步是 MedHop 相比朴素负采样最关键的设计——它不是随机塞负候选,而是让正负候选在图结构层面尽量对称。
§3.5 降采样
原始图上的游走会产生大量超长、超宽的样本。MedHop 施加了三条降采样/截断规则:
| 规则 | 阈值 | 目的 |
|---|---|---|
| 排除支持文档过多的样本 | 支持文档 > 64 的样本被剔除 | 控制单样本上下文规模 |
| 文档长度上限 | 每篇正文最多 300 token(另计标题) | 控制显存与推理成本 |
| 路径数配平后采样 | 按可行路径数归一 | 消除候选间证据量偏置 |
这三条规则直接解释了 §2.3 里"文档数上限 64""token 上限 458"的来历——它们是人工设定的工程边界,不是语料的自然统计。理解这一点,就能明白为什么拿 MedHop 的 token 分布去推断 Medline 摘要长度是错的。
§3.6 masking
最后一步是把原始版变换成 masked 版。动机在 §1 Q8 已述:知识图谱中不同药物的相互作用数量差异悬殊(Aspirin 743 种 vs Isotretinoin 34 种),若不处理,"选高频药"就是一条无需阅读文档即可得高分的捷径。
掩码实现:为每个样本构造一个候选实体到占位符 token 的双射,占位符从 100 个唯一 token(MASK1 … MASK100 等)中取;样本内一致、跨样本一般不同。论文报告这一步显著拉低了 Majority 基线——从 standard test 的 58.4% 崩到 masked 的 10.4%(坑 6 详述其边界)。
§3.7 流水线一图流
DrugBank ─┐
Reactome ─┼─→ 事实骨架 ─→ 精确串匹配投射 ─→ Medline 2016 摘要
Swiss-Prot┘ │
▼
drug1 起点 ─→ [二部图:文档↔药物 / 文档—蛋白 / 蛋白→文档] ─→ 游走
│
┌─────────────────────────────────────┘
▼
路径数配平 ─→ 降采样(≤64 文档 / ≤300 token) ─→ 出题
│
┌───────────────┴───────────────┐
▼ ▼
medhop(原始) masked_medhop
这条流水线的可复用之处在于:换一个知识库 + 换一套语料,就能造出领域化的多跳数据集。这也是 MedHop 常被当作"多跳数据集构造范本"引用的原因。
§4 任务与标注
§4.1 任务形式定义
MedHop 的任务可以形式化表述为:
给定查询
q(一个药物相互作用问题)、候选集合C = {c₁, …, cₙ}、支持文档集合S = {d₁, …, d_m},求正确候选a ∈ C。
与标准阅读理解的关键区别:答案是候选选择,不是文本抽取。模型输出的不是答案在文档中的起止位置,而是候选列表中的一个元素下标。这意味着 MedHop 天然是多选式评测,指标用 accuracy 而非 EM/F1 span 匹配。
§4.2 为什么是"跨文档"
单跳阅读理解(如 SQuAD 风格)中,答案通常能在一段连续文本里找到。MedHop 刻意把证据拆到多篇摘要里:
- 药物 A 出现在文档 d₁;
- A 的靶点蛋白出现在 d₂;
- 该蛋白的工作伙伴蛋白出现在 d₃;
- 伙伴蛋白的相互作用药物 B 出现在 d₄。
答案 B 并不在 d₁ 里,d₁ 里只有"起点" A。模型必须先认出 A 的靶点,再把靶点跳到伙伴蛋白,最后落到 B——任何一步缺失都无法得到答案。这就是"Across Documents"的字面含义。
§4.3 一条走通的多跳实例(结构示意)
query: "Leuprolide 与下列哪种药物存在相互作用?"(示意)
candidates: [ …, "答案药物", … ] ← 同类型药物候选
supports:
d₁ 提到 Leuprolide 及其靶点 GNRHR
d₂ 提到 GNRHR 与某下游蛋白的相互作用(Reactome 证实)
d₃ 提到该下游蛋白与"答案药物"相关联
answer: "答案药物"
读法要点:supports 里没有一篇文档同时包含 Leuprolide 与答案药物。如果你能用"关键词共现"在单篇文档里找到答案,那条样本要么是简单题,要么是构建噪声。
§4.4 负候选的设计
候选里的错误项不是随机词,而是与正解同类型的药物实体。设计逻辑是:如果负候选与正解类型不同,模型可以靠"类型判断"排除,题目就退化成类型分类;只有让所有候选同属药物类型,模型才被迫进行真正的证据推理。这也是 §3.4 路径数配平存在的理由——同类型还不够,还要证据量对称。
§4.5 无人工标注与定性质量分析
MedHop 的一个关键性质:全量自动构建,没有人工标注。这带来两个后果:
- 优点:规模可控、成本极低、可流水线复制、标注一致性由结构决定而非标注员主观;
- 风险:字符串匹配会引入"假连接",自动生成的答案偶尔会与某些摘要的语义相悖。
为核实质量,论文对 dev 集抽取 100 条做人工定性分析。请注意这 100 条是质量抽查,不是训练标签,也不是全量标注——把"100 条人工检查"说成"人工标注了 100 条"是常见误读(坑 4)。
§4.6 任务形态小结
| 维度 | MedHop 的取值 |
|---|---|
| 任务类型 | 跨文档多跳阅读理解(多选式) |
| 输入 | query + candidates + supports |
| 输出 | 候选下标 / 候选实体 |
| 评测指标 | accuracy |
| 标注方式 | 远监督自动构建(无人工标注) |
| 变体 | original / masked |
把这张表记牢,就能在与库内其他医学问答数据集对比时,一眼看出任务形态差异(§9 展开)。
§5 评估与基准:谁在这道题上拿到了多少分
评估一节是本条目最容易被二手转述污染的部分。MedHop 的精度数字在网络上流传着至少两套互不相容的口径(§5.5 详解),而且两套都不是凭空捏造——它们各有出处,只是指代的数据集不同。因此本节的处理原则是:先把口径的坐标系钉死,再报数字。
§5.1 评测协议与唯一指标
MedHop 是定候选多选任务,评测指标只有一个:accuracy(准确率),即模型选中的候选与 answer 一致的样本占比。
请注意这不是常识问答那套 EM/F1。原因很直接:候选集合是有限且给定的,模型不需要生成自由文本,只需要在 2–9 个候选里排名或指认;既然答案空间是封闭的,EM(精确匹配字符串)和 F1(词级重叠)就都退化了——生成一个与 gold 同义的药名,F1 可能很高但 EM 为 0,这不反映任务能力。对多选任务报 F1 是一个方法论错误,除非明确说明是在做"候选集合上的排序指标"变体。
论文同时报两列结果:
- test:全部 546 条测试样本;
- test*:测试集中经过验证的子集(题面更干净、质量更有保证的那部分)。
论文的正式比较以 test* 为准,因为它排除了自动构建引入的噪声样本。这是远监督数据集的通用做法:既然标签不全可信,就把"确信正确"的那部分单列出来看,否则所有模型都被同一个噪声地板压住,无法区分强弱。
在引用 MedHop 数字时,必须同时说清是 test 还是 test*、是 original 还是 masked。只写"BiDAF 47.8"而不写口径,是信息量接近于零的引用。
§5.2 Table 5 全表:未 masking 与 masked 的双栏对照
论文 Table 5 是 MedHop(及 WikiHop)的主结果表。MedHop 的全部数字如下,我把 standard(original,未 masking)与 masked 两个口径并排放,右栏才是可比较的口径——原因见 §5.4。
| 基线方法 | 类型 | standard test | standard test* | masked test | masked test* |
|---|---|---|---|---|---|
| Random | 随机 | 13.9 | 20.4 | 14.1 | 22.4 |
| Max-mention | 频次启发式 | 9.5 | 16.3 | — | — |
| Majority-candidate-per-query-type | 频次启发式 | 58.4 | 67.3 | 10.4 | 6.1 |
| TF-IDF | 词汇检索 | 9.0 | 14.3 | — | — |
| Document-cue | 文档线索启发式 | 44.9 | 53.1 | — | — |
| FastQA | 神经 RC 模型 | 23.1 | 24.5 | 31.3 | 30.6 |
| BiDAF | 神经 RC 模型 | 47.8 | 61.2 | 33.7 | 42.9 |
("—"表示论文该栏未报该基线。表中 test* 是 MedHop 的已验证子集。)
这张表有三个反直觉之处,每一个都值得单独拎出来讲。
§5.3 三个反直觉之处
反直觉之一:TF-IDF 打不过随机。 TF-IDF 是 9.0 / 14.3,随机是 13.9 / 20.4——词汇检索基线显著低于随机猜测。这不是实现 bug,而是任务性质的直接体现:MedHop 的答案药物与查询药物几乎不在同一篇摘要里共现(§4.3 已述)。词汇匹配的前提是"答案与问题共享词汇",而这个前提在跨文档多跳任务里根本不成立。TF-IDF 低于随机,说明它不只是没帮上忙,而是系统性地被误导——它会被那些高频提到 query 药物但不含答案链的文档带偏,选出一个比随机还差的候选。
这是一个很好的教学点:当你的检索基线低于随机时,问题往往不在于检索器弱,而在于任务假设与检索假设不匹配。
反直觉之二:Majority 基线在未 masking 时强得离谱。 Majority-candidate-per-query-type 拿到 58.4 / 67.3,是所有非神经模型里最强的,甚至超过了未 masking 的 BiDAF(47.8 / 61.2)。这暴露了一个严重的问题:如果不做处理,模型完全可以不看文档,只靠"哪个候选在全局统计上更常出现"就拿到高分。
背后的机制是药物交互数的长尾分布:Aspirin 与 743 种药物有已知相互作用,而 Isotretinoin 只有 34 种。在自动构建的样本里,交互数多的药物成为正确答案的概率天然更高。Majority 基线就是把这个先验直接背下来。"不需要读文档就能及格"的基准,测的不是阅读理解能力。 这就是 masking 变体存在的全部理由。
反直觉之三:神经模型在未 masking 时被启发式压制。 FastQA 23.1 / 24.5,BiDAF 47.8 / 61.2。BiDAF 尚可,但 FastQA 甚至不如 Random 的 test* 表现(20.4)。这说明当时(2018 年)的单文档 RC 模型迁移到跨文档多跳场景会严重失效——它们的设计假设是"答案在给定的一段文本里",而 MedHop 恰恰违背这一假设。论文用这些数字论证的正是:多跳任务需要新的架构,不是把单跳模型拿来堆叠就行。
§5.4 masking 口径下重新看一遍
Masked 变体把候选实体替换为 100 个唯一占位符 token(如 MASK7),从而切断"答案字符串频次"这条捷径。对照上表右栏,变化是清晰的:
- Majority 从 58.4 / 67.3 崩到 10.4 / 6.1——比随机(14.1 / 22.4)还差。这正是设计者想要的:频次先验被彻底切断,Majority 退化为"猜一个占位符",而占位符是唯一化的、没有任何频次信息可用。
- FastQA 反而从 23.1 / 24.5 升到 31.3 / 30.6,BiDAF 从 47.8 / 61.2 降到 33.7 / 42.9。
第二点是全表最微妙的地方:masking 对不同模型的影响方向相反。BiDAF 的下降说明它原本部分依赖了候选字符串的频次线索(masking 拿走后就掉分);FastQA 的上升则更耐人寻味——FastQA 原本可能被"真实药名"里的词汇线索干扰(比如药名本身携带词形信息,诱导模型做浅层匹配),替换成占位符后这个干扰源消失了,它被迫去看文档结构和位置,反而做对了更多题。
结论:masked 口径下的排名(BiDAF 42.9 > FastQA 30.6 > Random 22.4 > Majority 6.1)才是反映"真实多跳推理能力"的排名。 这是本条目主张的引用口径。
§5.5 双口径冲突全解:42.9 / 74.0 与 54.5 / 85.0 到底是谁
这是 MedHop 条目必须存照的核心冲突,也是网络上转述最乱的地方。
冲突事实:
- arXiv 版摘要(1710.06481 v2):“their best accuracy reaches 42.9% compared to human performance at 74.0%”
- TACL / ACL Anthology 终版摘要(Q18-1021,与 Zenodo 描述一致):“their best accuracy reaches 54.5% on an annotated test set, compared to human performance at 85.0%”
同一篇论文、同一批作者,两个版本的摘要给出了两组不同的数字。如果不加辨析地引用,就会得到一篇自相矛盾的条目。
真相(本条目结论):这两组数字根本不是 MedHop 的成绩,而是 WikiHop(QAngaroo 的开放域姊妹数据集)的 BiDAF 成绩,分别对应它的两个口径:
- 42.9 = WikiHop 的 BiDAF standard test
- 54.5 = WikiHop 的 BiDAF masked test
- 74.0 / 85.0 则是对应的 WikiHop 人类表现
对照 Table 5 中 WikiHop 的 BiDAF 行:standard test 42.9 / masked test 54.5——两个数字精确对上。也就是说,arXiv v1/v2 摘要引用的是未 masking的 WikiHop 数字(42.9 / 74.0),而 TACL 终版改用了masked 且经人工标注测试集的数字(54.5 / 85.0)。终版的口径更严格(masked + annotated test),因此被论文定稿采用。
那么 MedHop 自己的最佳成绩是多少? 是 Table 5 中 BiDAF standard 的 47.8(test)/ 61.2(test*),或 BiDAF masked 的 33.7(test)/ 42.9(test*)——注意这里 42.9 作为一个数字重复出现了第二次,但它这次指的是 MedHop BiDAF masked test*,与 §5.5 开头的 WikiHop masked test 42.9 是两个不同数据集的巧合同值。这是天然的混淆陷阱,见坑 6。
引用纪律:
写"MedHop 最佳精度 54.5%“是错的——54.5% 是 WikiHop 的。写"MedHop 最佳精度 47.8%”(标明 BiDAF / standard / test)才是对的。
本条目全文以 TACL 终版摘要(54.5% / 85.0%)为摘要级引用,但在任何涉及 MedHop 本体性能的地方,一律使用 Table 5/Table 7 的 MedHop 专属数字。
§5.6 人类表现与天花板
TACL 终版给出的人类表现是 85.0%(WikiHop 标注测试集口径);arXiv 版给的是 74.0%(WikiHop 未标注口径)。两者的差异同源于上面那套口径更换。
人类表现的测量方式(WikiHop 侧披露的标注框架):对每个样本由多名标注者独立作答,取多数投票,并同时标注"该题是否真的需要多跳""是否存在多个合理答案"等元信息。论文披露的 WikiHop 质量问题分布是:
| 问题类别 | 占比 |
|---|---|
| 真正的多步答案(unique multi-step answer) | 36% |
| 可能需要多步(likely multi-step) | 9% |
| 存在多个合理答案(multiple plausible answers) | 15% |
| 上下位词歧义(hypernymy ambiguity) | 11% |
| 单文档即可作答(single doc required) | 9% |
| 答案不由文本推出(answer does not follow) | 12% |
| Wikidata-Wikipedia 不一致 | 8% |
这张表的意义在于:"多跳阅读理解"作为一个标签本身只有约 45%(36%+9%)的样本严格成立。约 9% 的样本单文档就能做(对多跳基准是"送分题",应剔除),约 12% 的样本答案根本推不出来(噪声),15% 存在多解(严格说评分本身有歧义)。
这构成了多跳 RC 数据集的一个固有天花板。 MedHop 因为是全自动远监督构建(§4.5),其噪声水平不会低于人工构建的 WikiHop——因此对 MedHop 报"某某模型达到 90%+"时应当高度警惕:那要么是过拟合了噪声,要么是口径错误。
同时要注意 100 条这个数字:论文的质量分析是在每个 dev 集上抽样 100 条做定性检查,不是全量标注。把"抽样 100 条人工检查"转述成"人工标注了 100 条训练数据"是常见误读(坑 4)。
§5.7 gold chain:把最难的一环单独拆出来
论文 Table 7 做了一个诊断性实验:不把全部文档喂给模型,而是只给包含答案候选的那些文档(gold chain / gold documents),看性能变化。
| 模型 | 全文档 standard | gold chain standard | 全文档 masked | gold chain masked |
|---|---|---|---|---|
| BiDAF | 47.8 / 61.2 | 86.4 / 89.8 | 33.7 / 42.9 | 99.3 / 100.0 |
| FastQA | 23.1 / 24.5 | 54.6 / 59.2 | 31.3 / 30.6 | 51.8 / 55.1 |
(单元格格式:test / test*)
读法:BiDAF 从 47.8 拉到 86.4(standard),masked 下更是从 33.7 拉到 99.3 / 100.0。这说明——一旦告诉模型"证据在这几篇里",它几乎能完美作答;真正的困难在于从平均 36.4 篇文档中挑出那几篇相关的。
这是一个对任务难度归因极为重要的结论:
- 难的不是最终的语义判断(gold chain 下 99.3–100.0 证明这一步近乎解决);
- 难的是证据定位 / 文档选择 / 跨文档证据链的组装。
因此 MedHop 对后续研究的实际指引,是把注意力引向检索与证据聚合,而不是继续卷答案分类器。这个结论直接启发了后来的一大票"稀疏检索 + 多跳聚合"架构(§7 展开)。
注意 FastQA mask 的 gold chain 只有 51.8 / 55.1,远低于 BiDAF mask 的 99.3 / 100.0——说明 FastQA 即便拿到正确文档也无法有效利用,它的瓶颈在编码与推理,而非证据定位。同一个 gold chain 实验,对两个模型给出了完全不同的诊断结论,这正是诊断性实验的价值。
§5.8 第三方基准与后续 SOTA
MedHop 作为基准被持续用于药物-药物相互作用(DDI)多跳推理的模型评测。已核实的第三方报告:
- MedKGQA(arXiv:2212.09400 / IET Cognitive Computation and Systems,DOI 10.1049/cit2.12332)在 MedHop 上报告 64.8% accuracy,相对其前序 SOTA 提升 4.5%;消融实验显示移除知识融合模块后精度掉 15.5%——这从侧面支持了"外部结构化知识对多跳 DDI 推理是必要的"这一判断(与 MedHop 自身的构建哲学一致:它的标签本来就来自 DrugBank/Reactome)。
- MedKGQA 明确使用 train/dev/test = 1620/342/546 的官方划分口径,并明确指出 test 集不公开、由官方委员会盲评。
需要注意 64.8% 与 §5.2 表中数字不可直接比:MedKGQA 的口径(是否 masking、是否 test*、是否用了外部知识)需要在原文核对后才能与 BiDAF 47.8 并列。跨论文比较 accuracy 而不对齐口径,是多跳 QA 文献里最常见的引用错误。
§5.9 关于 leaderboard 的一个诚实说明
本条目未发现 MedHop / QAngaroo 有公开的实时 leaderboard 页面。官方站 qangaroo.cs.ucl.ac.uk 提供数据与样例展示,下载指向 Zenodo,但没有公开的排行榜提交机制。测试集由官方保留、按需盲评(第三方论文明确声明 test 不可公开获取)。
因此:"MedHop 榜单第一"这类表述应当避免——不存在可核验的公开榜单。正确表述是"在 MedHop 官方测试集划分上报告的 accuracy"。这是一个信息卫生问题,不是细节问题。
§5.10 评估小结
| 问题 | 答案 |
|---|---|
| 唯一指标是什么 | accuracy(定候选多选) |
| 有几个口径 | 2×2:{standard, masked} × {test, test*} |
| 该引用哪个 | 能力比较用 masked;与论文数字对齐用 standard 并标明 |
| MedHop 自身最佳 | BiDAF standard 47.8(test)/ 61.2(test*) |
| 摘要里的 54.5 是谁 | WikiHop BiDAF masked test,不是 MedHop |
| 人类表现 | 85.0%(WikiHop 标注测试集口径) |
| 最难的一环 | 证据定位(gold chain 下 BiDAF 达 86.4 / 99.3) |
| 有公开 leaderboard 吗 | 无 |
§6 获取与许可:怎么把数据拿到手,以及拿到后能干什么
§6.1 三个官方入口
MedHop 不是独立发布的数据集,它总是与 WikiHop 一起打包在 QAngaroo 这个项目包里。这一点决定了所有获取路径的形态:你下载的是 QAngaroo,里面同时有 medhop 和 wikihop。
入口一:Zenodo(推荐,权威 + 可长期引用)
- 记录页:
https://zenodo.org/records/6407401 - 标题:“QAngaroo (MedHop + WikiHop)”
- 版本:v1.0.0,Published 2018-06-11,Modified 2022-04-02
- 文件:
qangaroo_v1.1.zip,339.8 MB - MD5:
dd4f65d2f73244c0946b5810e24a8e43 - Zenodo 统计(抓取时点 2026-09-30):views 581 / downloads 103 / data volume 43.8 GB
下载后务必校验 MD5。Zenodo 提供的是永久归档,配 DOI(数据集有自己的 Zenodo DOI,与论文 DOI 10.1162/tacl_a_00021 不同,两者都要在引用里写明)。339.8 MB 是个不算小的包,网络中断导致的半包文件在解压时往往给出误导性的错误,先校验再解压。
入口二:官方项目站
http://qangaroo.cs.ucl.ac.uk/- 提供任务说明、格式样例、样例展示(在 2026-09-30 抓取时站点仍在线并返回正常内容)。
- 站点不直接托管数据,下载链接指向 Zenodo——所以实际文件来源就是入口一。
入口三:HuggingFace(最方便,但只覆盖部分子集)
bigbio/medhop:BigBIO 生态的封装版本,gated=false(无需申请),lastModified 2022-12-22,downloads 102 / likes 3。- 只发布 train 1,620 + validation 342,不含 test。
- 字段:
id/question(原始字段名为query)/answer/candidates/supports。 - HF 卡片显示 “Number of rows: 3,924”,这不是 1,962 的笔误——它是 original + masked 两个 config 的合计(1,962 × 2 = 3,924),见坑 5。
QAngaroo/med_hop:保留原始生成脚本的仓库(其_URL指向一个 Google Drive 的历史遗留下载入口,该入口是否仍可用需自行验证)。community-datasets/qangaroo:包含 四个 config——medhop、wikihop、masked_medhop、masked_wikihop,是唯一在 HF 上同时提供 original 与 masked 的研究友好入口。
入口四(镜像):OpenDataLab(opendatalab.com/MedHop)提供 537.9 MB 的镜像。注意体量差异:Zenodo 是 339.8 MB(MedHop+WikiHop 压缩包),OpenDataLab 是 537.9 MB(疑为解压后或含预处理),两者不等价,不要据此推断数据版本不同(§9 存照)。
§6.2 用 HuggingFace datasets 加载
用 community-datasets/qangaroo 可以一条命令拿到四个 config:
from datasets import load_dataset
# 医学域,原始(未 masking)——注意这是 QAngaroo 项目下的 medhop 配置
medhop = load_dataset("community-datasets/qangaroo", "medhop")
print(medhop)
# DatasetDict({train: 1620 行, validation: 342 行})
# 医学域,masked 变体(候选替换为 MASKxx 占位符)
masked = load_dataset("community-datasets/qangaroo", "masked_medhop")
print(masked)
# DatasetDict({train: 1620 行, validation: 342 行})
# 取一条看看结构
sample = medhop["train"][0]
print(sample.keys()) # query / candidates / supports / answer / answer_position
print(sample["query"]) # ['Leuprolide', 'interacts_with', '?']
print(sample["answer"]) # 正确答案药物名
print(sample["candidates"]) # 2–9 个同类型候选药物
print(len(sample["supports"])) # 平均约 36.4 篇摘要
三个实操提醒:
- 字段名在不同封装里会变。原始 QAngaroo JSON 用
query;bigbio/medhop把它重命名为question;而community-datasets/qangaroo保留query。读到question字段时不要以为拿到了别的数据——那只是包装差异(§2.2 已述)。写代码前先print(sample.keys()),不要靠记忆。 answer_position是候选列表中的下标,用它可以快速取出 gold 候选;但要注意不同封装的下标基准与 candidates 顺序是否一致,跨封装混用时必须重新按字符串匹配答案,不能直接搬下标。supports是文档列表,每篇是一段摘要文本(含标题,长度上限 300 token + 标题)。不要假设 supports[0] 就是答案所在文档——顺序与相关性无关;gold chain 实验(§5.7)恰恰证明模型需要自己找出哪几篇真正相关。
§6.3 许可:CC BY-SA 3.0 与"相同方式共享"的实际含义
MedHop / QAngaroo 的数据集许可证是 CC BY-SA 3.0:
- Zenodo 记录原文:“The datasets are released under CC BY-SA 3.0”
- HuggingFace
bigbio/medhop的 license tag 为license:cc-by-sa-3.0 - 这与本站其他医学数据集常见的 CC BY 4.0 / CC0 不同,必须单独注意。
CC BY-SA 3.0 的两项核心义务:
- BY(署名):使用、分发、改编时必须给出适当署名,附许可证链接,并说明是否做了修改。在数据集场景下,署名应至少包含:作者(Welbl, Stenetorp, Riedel)、数据集名(QAngaroo / MedHop)、出处(TACL 2018 论文 + Zenodo DOI)。
- SA(相同方式共享 / ShareAlike):**如果你基于该数据做了改编、衍生数据集或再分发,你的衍生作品必须以相同或兼容的许可证发布。**这一条比 CC BY 严格得多,实际影响是:
- ✅ 可以做:学术研究、模型训练、评测、在论文中报告结果、把数据用于商业产品的内部训练流程(在多数法域下,训练行为本身不构成"分发衍生作品",但这属于需要法律意见的灰区,本站不作法律断言)。
- ⚠️ 要小心:**把 MedHop 的改编版(清洗过、重切分过、扩充过)以更宽松的许可证发布,是不行的。**你的衍生数据必须同样 CC BY-SA(或兼容许可)。想把衍生数据放到 CC0 / MIT 下面,需要先取得权利人授权。
- ⚠️ 要小心:把 MedHop 的样本内嵌进另一个数据集的发布包里再分发,整体发布包会受 SA 传染性影响。
- ✅ 中立:用 MedHop 训练出来的模型权重通常不被视为数据的衍生作品(这一点存在争议,且与训练数据是否构成"衍生"的判例有关),因此模型许可证可以自定——但建议在模型卡中披露训练数据来源与许可。
SA 的"兼容许可证" 是大问题:CC BY-SA 3.0 与 CC BY-SA 4.0 之间存在单向兼容(4.0 可以接收 3.0 的衍生,反之不行,需看具体条款),而与 GPL 等软件许可的关系更复杂。如果你打算基于 MedHop 做衍生发布,先确认目标许可证是否在兼容列表中。
§6.4 上游数据的许可与合规
MedHop 的文档来自 Medline 2016,这是另一个独立的权利层:数据集自身是 CC BY-SA 3.0,但它包含的摘要文本来自 MEDLARS/MEDLINE,其使用受 NLM(美国国家医学图书馆)的条款约束。实际影响:
- 摘要是已发表的生物医学文献摘要,其版权可能归属原期刊/出版商,NLM 的数据库分发不等于授权你再分发全文。
- 实际研究使用(文本挖掘、模型训练)在学术惯例与 NLM 条款下普遍可行,但大规模再分发摘要原文需谨慎。
- MedHop 通过 BioNLP 2011 Shared Task 预处理流水线处理过文本,因此实际拿到的是经过处理的分句文本,不是原始 MEDLINE 记录。
结构化知识源的许可:
- DrugBank:基础版可免费获取但学术用途限定,商业使用需购买 license。MedHop 只用它做答案构造(生成标签),不直接分发 DrugBank 内容——所以数据集包本身不含 DrugBank 数据库。但如果你要复现构建流水线,就必须自行解决 DrugBank 的获取与许可。
- Reactome:开源(通常 CC0 / 开放条款),再分发限制少。
- Swiss-Prot(UniProt):通常 CC BY 4.0,署名即可。
一句话总结合规姿势:用 MedHop 训练/评测 → 基本无碍,做好署名;再分发 MedHop 或其衍生 → 必须 CC BY-SA,且注意摘要文本的期刊权利层;复现构建 → 先解决 DrugBank 的商业许可问题。
§6.5 版本链:三个不同的"版本号"不要混
MedHop 的"版本"在不同语境下指三件不同的事:
| 语境 | 版本标识 | 含义 |
|---|---|---|
| 论文 | arXiv v1(2017-10-17)/ v2(2018-06-11) | 论文稿的修订版本 |
| 数据包 | qangaroo_v1.1 | Zenodo 上的数据包版本(v1.0.0 是 Zenodo record 版本) |
| Zenodo 记录 | v1.0.0(2018-06-11 发布) | Zenodo 平台侧的版本号,与数据包名 v1.1 不同 |
常见误读:看到 “qangaroo_v1.1” 就以为存在 “v1.0 数据集” 的旧版在流通。实际上,数据集包是 v1.1,Zenodo record 版本是 v1.0.0,两个编号体系不同。截至抓取时点(2026-09-30),未发现后续 v1.2+ 版本——Zenodo 记录只有 v1.0.0(2022-04-02 修改时间戳,可能是元数据编辑而非内容更新)。
§6.6 test 集:为什么你拿不到
MedHop 的 test 集(546 条)不公开。 这是本条目复现实验时必须先知道的事实:
- Zenodo 包与 HF 发布都只含 train + validation;
- 第三方论文(如 MedKGQA)明确声明 “the test set is not available to the public”,由官方委员会盲评;
- 官方没有公开的在线 leaderboard 提交入口。
实践含义:
- 你不能在真正的 test 上报告结果,除非通过官方渠道提交(而该渠道的现行可用性需自行确认);
- 所有基于 HF 版本的工作,报的都是 validation 上的数字,与论文的 test / test* 数字不可直接比;
- 自建 test 时必须说明划分方式,否则无法与其他工作对齐。
这一点在 §9 作为存照条目列出,因为它是引用与复现中最容易出错的地方之一。
§6.7 获取与许可小结
| 事项 | 关键信息 |
|---|---|
| 权威下载 | Zenodo records/6407401 → qangaroo_v1.1.zip,339.8 MB |
| 校验 | MD5 dd4f65d2f73244c0946b5810e24a8e43 |
| 最方便 | HF community-datasets/qangaroo(四 config 齐全) |
| 字段注意 | query vs question 命名差异 |
| 数据许可 | CC BY-SA 3.0(署名 + 相同方式共享) |
| 上游文本 | Medline 2016(另有期刊权利层) |
| 上游知识库 | DrugBank(学术限定)/ Reactome(开放)/ Swiss-Prot(CC BY) |
| test 集 | 不公开,官方盲评,无公开 leaderboard |
| 引用需写明 | 论文 DOI + Zenodo DOI + 许可 + 口径 |
§7 生态与影响:这个数据集在学术谱系里站在哪里
§7.1 QAngaroo 的双子结构:MedHop 与 WikiHop 的分工
理解 MedHop 的生态位置,起点是理解 QAngaroo 的分工设计:
| 维度 | MedHop | WikiHop |
|---|---|---|
| 领域 | 生物医学(药物相互作用) | 开放域(Wikipedia) |
| 文档源 | Medline 2016 摘要 | Wikipedia 文章 |
| 结构化知识源 | DrugBank + Reactome + Swiss-Prot | Wikidata |
| 查询类型数 | 1(interacts_with) |
277 |
| 样本规模 | 1,620 / 342 / 546 = 2,508 | 43,738 / 5,129 / 2,451 = 51,318 |
| 候选数(avg) | 8.9(median 9) | 19.8(median 14) |
| 文档数(avg) | 36.4(median 29,上限 64) | 13.7(median 11) |
| 每文档 token(avg) | 253.9(median 264,上限 300+标题) | 100.4(median 91) |
| 每样本唯一文档路径 | 59.8 | 19.5 |
分工的用意:WikiHop 用规模 + 查询多样性验证方法的通用性;MedHop 用单一查询类型 + 高文档数 + 长文档做领域纵深与证据聚合压力测试。
两者存在一个重要的结构性对照:WikiHop 是"候选多而文档少",MedHop 是"候选少而文档多"。这意味着——同一个模型在两个数据集上的失败模式不同:WikiHop 上更可能失败在候选间的细粒度区分,MedHop 上更可能失败在从 36.4 篇文档里定位证据(§5.7 的 gold chain 实验正是切开了这一点)。
MedHop 因此常被当作"证据定位压力更大"的那一半来引用。
§7.2 在多跳 QA 谱系中的位置
多跳问答作为一个研究方向,数据集演进大致呈这样的谱系(时间序):
| 数据集 | 年份 | 形态 | 相对 MedHop 的差异 |
|---|---|---|---|
| MedHop / WikiHop (QAngaroo) | 2018 | 定候选多选,跨文档,结构化知识远监督 | —(本条目) |
| HotpotQA | 2018 | 抽取式 QA + 支撑句标注,Wikipedia | 需要生成 span;带 sentence-level 监督 |
| 2WikiMultiHopQA | 2020 | 抽取式 + 显式推理链 | 强调可解释的推理步骤 |
| MuSiQue | 2021 | 抽取式,控制跳数与干扰 | 系统性构造 2–4 跳,抗捷径更强 |
MedHop 的独特位置:
- 它是"定候选"而非"抽取式"——不需要生成答案文本,降低了答案形式的评分噪声,但也意味着不能直接与 HotpotQA 的 EM/F1 比较。
- 它是远监督自动构建,而非人工标注(HotpotQA 是众包人工写)——这让它规模可控、可复制,但噪声更高、天花板的性质不同(§5.6)。
- 它把结构化知识图谱(DrugBank/Reactome)作为标签来源——这是后来一大批"知识增强多跳 QA"工作的先声。MedKGQA 这类工作(§5.8)正是踩在这条线上:用外部知识融合来提升 MedHop 上的精度,契合 MedHop 自身的构建逻辑。
- 它是医学域最早的多跳基准之一——在此之前,医学 QA 基准(MedQA、PubMedQA 等)几乎全是单跳(§9.2 对比)。
一个重要的引用纪律:MedHop 不是 HotpotQA 的替代或前身,两者是并行独立的工作(同年不同团队、不同形态)。把 MedHop 说成"HotpotQA 的医学版"是不准确的简化——正确的说法是"多跳 QA 谱系中,MedHop 代表远监督 + 定候选 + 医学域这一支"。
§7.3 下游影响:MedHop 被用来做什么
MedHop 的引用形态可以归为三类:
类型一:作为 DDI(药物-药物相互作用)多跳推理的评测基准。 这是最直接的用途。MedKGQA(§5.8)是已核实的例子:在 MedHop 上报 64.8%,并通过消融证明知识融合模块贡献 15.5 个百分点。这类工作的共同命题是"纯粹的文本模型不足以做 DDI 多跳推理,需要引入外部结构化知识"——而 MedHop 的构建方式(标签源自 DrugBank/Reactome)让这个命题天然可比。
类型二:作为多跳 RC 方法的通用测试床。 MedHop 与 WikiHop 常被成对报告,用来说明一个多跳方法既能处理开放域也能处理专业域。在这种用法下,MedHop 的价值在于提供一个与 WikiHop 共享格式但难度结构不同的对照(§7.1)。
类型三:作为"证据定位 vs 答案判定"难度分离的教学案例。 §5.7 的 gold chain 实验(BiDAF 从 47.8 → 86.4,masked 下 33.7 → 99.3)在多跳 QA 文献里被反复引用,用来论证"多跳任务的瓶颈在检索/证据聚合,而非最终判断"。这个结论直接推动了后续大量先检索后推理(retrieve-then-read) 的多跳架构。
影响的性质要说清:MedHop 不是那种被称为"引爆了一个子领域"的数据集(那是 HotpotQA 的角色更多一些)。它的影响更聚焦、更工具化:它提供了一个领域纵深强、口径清晰、构建可复现的多跳测试床,并在"证据定位是瓶颈"这个关键判断上提供了干净的经验证据。
§7.4 局限与被批评之处
任何诚实的条目都要写局限。MedHop 的主要局限:
(1) 全自动构建带来的标签噪声。 远监督的核心风险是"假连接":字符串精确匹配把药物-靶点、蛋白-蛋白关系投射回摘要时,可能产生文本上成立但语义上不成立的题目。论文的 100 条抽样质量分析(§5.6)承认了这一点,但没有给出全量噪声率。这意味着报出的 accuracy 里含有一个未知比例的地板噪声。
(2) 查询类型单一。 MedHop 只有 1 种查询类型(interacts_with),而 WikiHop 有 277 种。这带来的后果是:MedHop 上表现好的模型是否具备通用多跳能力无法被检验——它可能是针对 DDI 这一类关系做了特化。“在 MedHop 上 SOTA"不等于"具备通用多跳推理能力”。
(3) 未 masking 口径存在频次捷径。 §5.3 已论证:Majority 基线 58.4 超过了未 masking 的 BiDAF 47.8。任何只报 standard 数字的工作都值得追问:有没有利用候选频次先验? 这也是本条目主张以 masked 口径作为能力比较基准的理由。
(4) 规模偏小。 2,508 条样本(公开仅 1,962)与 WikiHop 的 51,318 相比小两个量级。对 2026 年的大模型微调场景,这个规模很容易过拟合,"在 MedHop 上分数高"的说服力显著低于它作为诊断性基准(gold chain 分析)的说服力。
(5) test 不公开且无公开 leaderboard。 见 §5.9 与 §6.6——这限制了可复现的比较,也意味着"某某方法在 MedHop 上最优"无法被第三方独立验证。
(6) 文档源时间锁定。 文档来自 Medline 2016,2016 年之后的医学文献知识不在其中。用 2026 年的大模型评测时要注意:模型的预训练语料里可能已经包含了 Medline 2016 的摘要,构成潜在的数据污染——"模型做对了"未必是学会了多跳推理,可能是记住了。这是一个对老数据集做新模型评测时的通用陷阱,对本条目尤其重要(见坑 7)。
§7.5 与库内医学问答数据集的关系(预告)
MedHop 与本库内已有的医学问答条目(medqa、medmcqa、pubmedqa、medicationqa、bioasq 等)的关系,本质上是**"多跳 vs 单跳"的分野**:
- 库内已有的医学 QA 基本是单跳:问题是"这是什么病"“这篇摘要说了什么”,答案在一段文本内;
- MedHop 是跨文档多跳:答案必须由多篇摘要的链条拼出来。
这个分野决定了 MedHop 在本库的不可替代性——它是库内第一个把"跨文档证据链"作为核心任务的医学条目,也是第一个用结构化知识图谱 + 远监督自动构建的条目。详细的互链建议与对照表放在 §9。
§8 方法学启示:MedHop 教给数据工程的事
MedHop 的价值不止于"一个可下载的医学 QA 数据集"。它的构建方法本身就是一份方法论文档——它用一条几乎完全自动化的流水线,把一个看似只能靠人工标注的任务(跨文档多跳推理)变成了可从结构化知识反推的工程问题。这一节把这些方法学教训抽出来,因为它们对任何想自建多跳数据集的人都可复用。
§8.1 核心范式:用结构化知识反推自然语言任务
MedHop 的构建哲学可以一句话概括:
如果一件事在结构化知识库里是明确的,那就没必要让标注员来标——让数据库来生成题目,让文本库来提供证据。
这条链条是:
DrugBank(药物-靶点) ┐
Reactome(蛋白-蛋白) ├──► 生成查询 (drug1, interacts_with, ?) 与答案 drug2
Swiss-Prot(人类蛋白) ┘ │
▼
Medline 2016 摘要库 ────► 精确字符串匹配投射 ────► 找出"提及"了这些实体的摘要
│
▼
构建二部图 → 游走 → 出题
这个范式的三个优点:
- 规模不受标注预算限制。人工标注多跳题的边际成本极高(标注员要读多篇文档、还要确认推理链成立),而远监督的边际成本近乎为零。
- 答案的"正确性"由数据库保证。DrugBank 说 A 和 B 相互作用,那就是真的相互作用——不需要标注员判断。这消除了标注者间一致性这个噪声源。
- 可复制、可扩展到新领域。换一个知识库 + 换一个文本库,就能造出新数据集(这正是 WikiHop 用 Wikidata + Wikipedia 做的事)。
但代价也是明确的(§7.4 已述):数据库里的关系成立 ≠ 文本里能推出这个关系。字符串匹配会带来假连接,这就是噪声的来源,也是 test* 子集存在的理由。
§8.2 二部图:把"文档集合"变成"可游走的证据网络"
MedHop 最关键的技术抽象是把文档集合建模成二部图,节点是文档和实体(药物/蛋白),边表示"提及"或"已知关系"。
三类边的语义各不相同,这是最容易实现错的地方:
| 边类型 | 方向 | 条件 |
|---|---|---|
| 文档 → 蛋白 | 无向 | 文档提及该蛋白即可 |
| 文档 ↔ 药物 | 双向 | 文档需同时提及该药物已知靶点蛋白(DrugBank 口径)——即"文档通过靶点与药物相连",可双向跳 |
| 蛋白 → 文档 | 有向(带条件) | 仅当该文档也提及另一个蛋白 p’,且 p’ 与 p 被 Reactome 证实相互作用 |
为什么要做这种区分? 因为不同边代表了不同的证据强度:
- "文档提到某蛋白"是弱证据(可能只是背景提及);
- "文档通过已知靶点与药物相连"是中等证据(说明该文档在讨论这个药物的作用机制);
- "文档同时提到两个被证实相互作用的蛋白"是强证据(说明该文档在讨论这条通路)。
游走只能沿着这些边进行,因此边的定义直接决定了什么问题被生成。如果在实现时把第三条边(蛋白→文档)的 Reactome 条件去掉,就会生成大量"两个蛋白只是碰巧同文出现、但生物学上无关"的假题目。这条约束是多跳样本质量的守门人。
§8.3 降采样:为什么必须做,以及三条规则
二部图是稠密的——一个热门蛋白可能出现在成千上万篇摘要里。如果不加约束,游走会生成:
- 支持文档数爆炸(几百篇)的样本 → 超出模型上下文;
- 候选间路径数严重不均 → 模型可以靠"路径多的候选"作弊。
MedHop 用三条规则处理:
规则一:排除支持文档数 > 64 的样本。 这是硬上限。论文 Table 2 显示文档数 max = 64,说明这条规则被执行到了。
规则二:文档长度上限 300 token + 标题。 Table 2 显示每文档 token avg 253.9 / median 264 / max 458。注意 max 458 > 300——上限是 300 token 正文 + 标题,标题不计入 300 但计入总 token,这解释了 458 的存在。(这是一个容易看错的细节:看到 max 458 就以为"300 上限没生效"是误读。)
规则三:路径数归一化。 这是最精巧的一条:先连接"查询药物—答案文档"的路径,然后迭代地为替代候选补充连接,直到所有候选达到相同的路径数(且总文档数不超过 64)。
规则三解决的是一个隐蔽的作弊通道:假设正确答案有 5 条证据路径,而某个错误候选只有 1 条——模型即使完全不理解语义,只要数一数"哪个候选在图中连接更多"就能选对。把路径数拉平,等于把这个统计线索抹掉,强迫模型读文本。
这条规则的普适教训是:**数据集的"捷径"往往不在文本里,而在数据的统计结构里。**不检查这类结构,数据集看起来干净,实际可以被退化策略刷榜(§5.3 的 Majority 基线就是同一个问题的另一种表现)。
§8.4 masking:一个被低估的评测设计
MedHop 的 masking 变体(把候选替换成 MASK7 这类唯一占位符)常被当作"一个小技巧"略过,但它其实是评估设计的一次范式升级。
masking 干了什么:
- 切断"答案字符串频次"先验:Aspirin 出现 743 次、Isotretinoin 出现 34 次——真实药名携带统计信息,占位符不携带(每个占位符在全局只出现一次)。
- 切断"高频答案 ↔ 支持文档"的统计相关:某些药名因为总是出现在某些文档里,模型可以靠共现统计蒙对;占位符把这层相关性也切断了。
- 迫使模型使用结构与位置信息:占位符虽然无词义,但在单样本内的映射是一致的——同一实体在同一道题里的所有出现都是同一个占位符。这保留了"跨文档指代同一实体"这个推理所必需的信息,只拿掉了"实体身份"这个可以作弊的信息。
第 3 点是设计精髓:masking 不是简单地"把词删掉",而是精确地分离了"推理需要的信息"和"捷径需要的信息"。删得太多(比如每个出现用不同占位符),跨文档推理就做不了了;删得太少(不删),捷径还在。"单样本内一致、跨样本不同"这个约束,正好卡在两者之间。
结果验证了设计的有效性(§5.4):Majority 基线从 58.4 / 67.3 崩到 10.4 / 6.1,低于随机。一个基线崩到低于随机,说明它原本依赖的线索被彻底拿掉了——这是 masking 有效的直接证据。
普适教训:设计基准时,先找出最强的"不看输入"的基线(这里是 Majority),然后设计一个变体让这个基线失效。如果做不到,你的基准就没有在测量你以为它在测量的东西。
§8.5 难度归因实验:gold chain 的方法论价值
§5.7 的 gold chain 实验值得从方法论角度再强调一次:它把"任务难度"拆成了可测量的两部分。
| 设置的差异 | 它隔离出的能力 |
|---|---|
| 全文档 → 用全部 36.4 篇 | 检索 + 聚合 + 判断(整体难度) |
| gold chain → 只用相关文档 | 判断(去掉检索后的难度) |
| 两者之差(47.8 → 86.4) | 证据定位能力的贡献 |
**这个"给出 oracle 输入看性能上限"的对照设计,是所有数据集论文都该做但经常被忽略的实验。**它的价值在于:
- 如果 gold 输入下性能接近满分(BiDAF mask 99.3 / 100.0)→ 瓶颈在检索,后续工作应投入检索;
- 如果 gold 输入下性能仍然很差(FastQA mask 51.8 / 55.1)→ 瓶颈在模型本身,检索改善无用。
**同一张表,对两个模型给出了相反的研究建议。**这就是诊断性实验的力量——它把"这个数据集太难"这种无信息量的抱怨,变成了"难在哪一环、该往哪投入"的具体判断。
对数据工程者的一般启示:发布数据集时附上 oracle 输入的对照实验。它不只对使用者有价值,也是验证数据集本身是否可解的重要手段——如果连 gold 输入都做不对,说明题目或标签有问题。
§8.6 质量控制的诚实做法:抽样 + 分档
MedHop 面对"自动构建的标签不一定对"这个问题,采取的做法是:
- 不假装标签全对——明确承认远监督会引入噪声;
- 在 dev 集抽样 100 条做定性分析——不是全量标注,而是拿到一个噪声水平的估计;
- 划分 test / test* 两列——把"经人工验证的子集"单列,给出一个更干净的可比口径;
- 披露问题的具体类别与占比(§5.6 的七类占比表)——不是笼统说"有噪声",而是量化和分类。
第 4 点尤其值得学习:WikiHop 侧披露的质量表(unique multi-step answer 36% / likely multi-step 9% / multiple plausible answers 15% / hypernymy ambiguity 11% / single doc required 9% / answer does not follow 12% / Wikidata-Wikipedia discrepancy 8%)不是一份宣传材料,而是一份自我批评。它承认只有约 45% 的样本严格是多跳的、约 9% 单文档可解、约 12% 答案根本推不出。
为什么这种"自曝其短"反而是好做法? 因为使用者必须知道数据集有多少噪声,才能正确解读结果。一个声称"完全干净"的自动构建数据集,要么是在说谎,要么是没做检查。数据集文档里最重要的一节,是关于它自己有多坏的。
§8.7 可复用的五条清单
把 MedHop 的方法学压成一张可执行的清单,供自建多跳数据集参考:
- 先找结构化知识源 — 有没有一个数据库能确定性地给出你要的答案?有的话,别标,让数据库生成。
- 用精确匹配把知识投射回文本 — 并明确披露匹配策略(这里用的是 DrugBank/Swiss-Prot 名称变体的精确匹配),因为匹配策略决定了假连接率。
- 把文档集合建成图,并仔细定义每条边的语义与条件 — 边定义错了,题目就错了(§8.2 的第三条边是守门人)。
- 找出并封堵统计捷径 — 路径数归一化(§8.3)+ masking(§8.4)是两道互补的防线。
- 做 oracle 对照 + 抽样质检 + 分档披露 — 让使用者知道任务难在哪(§8.5)和数据有多脏(§8.6)。
§9 库内关系:MedHop 与千方病案医数集内其他条目的坐标
§9.1 MedHop 在库内的定位:三个"第一"
MedHop 在千方病案医数集(qianfanghub.com)内是首个多跳阅读理解条目。具体地,它在库内占据三个没有先例的位置:
- 库内首个"多跳推理"数据集——此前库内医学 QA 条目全部是单跳(答案在一段文本内);
- 库内首个把"跨文档证据链"作为核心任务的条目——不是"读一篇摘要回答问题",而是"从几十篇摘要里拼出推理链";
- 库内首个用远监督 + 结构化知识图谱自动构建的医学条目——标签来自 DrugBank/Reactome,而非人工标注。
这三条加起来意味着:MedHop 不能作为任何现有条目的"另一个版本"来索引,它需要被当作一个独立的任务类别来定位。
§9.2 与库内医学问答条目的对照
库内已有的医学问答条目(含 rid)与 MedHop 的关系如下表。关键列是"跳数"——它决定了任务本质是否相同。
| 条目 | rid | 领域 | 任务形态 | 跳数 | 与 MedHop 的关系 |
|---|---|---|---|---|---|
| medhop | — | 生物医学(DDI) | 跨文档多跳多选 | 多跳 | —(本条目) |
| medqa | 50 | 中美医学执照考试 | 单跳多选 | 单跳 | 同属医学 QA 评测;MedHop 是其多跳补位 |
| medmcqa | 111 | 印度医学入学考试 | 单跳多选 | 单跳 | 同上;规模大但单跳 |
| pubmedqa | 49 | 生物医学文献 | 单跳 yes/no/maybe | 单跳 | 同源 PubMed(MedHop 用 Medline 摘要),但单跳 |
| medicationqa | 170 | 消费者用药 | 单跳问答 | 单跳 | 主题贴近(药物),任务形态不同 |
| bioasq | 53 | 生物医学问答 | 检索 + 问答 | 单跳为主 | 任务最近的邻居,但以检索为主 |
| medquad | 160 | 医学 FAQ | 单跳问答对 | 单跳 | 仅同域 |
| mednli | 648 | 医学 NLI | 句对推理 | 单跳 | 推理但非多跳、非跨文档 |
| ddi | 171 | 药物-药物相互作用 | 关系抽取/分类 | 单跳 | 主题最贴近(同为 DDI),但 MedHop 是跨文档多跳,ddi 是句级关系判定 |
| drugbank | 89 / 571 | 药物数据库 | 结构化知识库 | — | MedHop 的上游知识源——直接依赖互链 |
| cord-19 | 104 | COVID-19 文献 | 文献检索/QA | 单跳 | 同为文献域 |
| biosses | 750 | 生物医学句子相似度 | 句对相似度 | — | 弱关联 |
| scifact | 751 | 科学主张核验 | 多篇证据 + 核验 | 跨文档 | 问题意识同族(跨文档证据聚合),但任务是核验非多跳 QA |
| meddialog | 210 | 医学对话 | 对话生成 | 单跳 | 弱关联 |
| mimic-iii | 106 | 重症监护 EHR | 结构化临床数据 | — | 数据形态不同(EHR vs 文献) |
读表要点:
- 与 MedHop 任务形态最近的是 bioasq(53)(生物医学问答)与 scifact(751)(跨文档证据聚合),但两者都不是严格的多跳推理;
- 与 MedHop 主题最近的是 ddi(171)(同为药物-药物相互作用),但 ddi 是句级关系判定,MedHop 是跨文档多跳选择——同一个应用问题(DDI),两个不同的任务抽象;
- drugbank(89/571) 是 MedHop 的直接上游,这个互链关系是依赖型而非并列型,条目中应明确说明(读者从 MedHop 应能走到 DrugBank 去理解标签怎么来的)。
§9.3 建议互链清单
基于上表,本条目建议的互链(按相关性排序):
强互链(任务或依赖关系明确):
ddi(rid 171)— 同为药物-药物相互作用,任务抽象不同,是最有信息量的对照drugbank(rid 89 / rid 571)— MedHop 的上游结构化知识源pubmedqa(rid 49)— 同源 PubMed/Medline 文献,单跳对照bioasq(rid 53)— 生物医学问答,任务最近的邻居
中等互链(同域或同族):
medqa(rid 50)/medmcqa(rid 111)— 医学 QA 评测家族scifact(rid 751)— 跨文档证据问题意识同族mednli(rid 648)— 推理类任务对照medicationqa(rid 170)— 药物主题
概念互链(库外,不构成 rid 链接):WikiHop(同项目姊妹集)、HotpotQA、2WikiMultiHopQA、MuSiQue(多跳 QA 谱系);DrugBank、Reactome、Swiss-Prot、Medline(上游源)。
§9.4 一句话坐标
在千方病案医数集内,MedHop 是"跨文档多跳"这一类的唯一代表;它与库内所有医学问答条目构成**"单跳 ↔ 多跳"的对偶关系**,与 ddi 构成**"句级 DDI ↔ 跨文档 DDI"的任务抽象对偶**,与 drugbank 构成**"下游数据集 ↔ 上游知识库"的依赖关系**。
§10 避坑清单:引用 MedHop 时最容易踩的七件事
以下七条是本条目在核验过程中实际遇到的混淆点。每一条都附上"错误说法"与"正确说法",可直接用作引用前的检查表。
坑 1:把 QAngaroo 当成一个数据集
错误说法:“QAngaroo 数据集有 51,318 条样本。”(把 WikiHop 的规模当成了 QAngaroo 的)
正确说法:“QAngaroo 是一个项目,产出 MedHop 与 WikiHop 两个数据集。MedHop 2,508 条(公开 1,962),WikiHop 51,318 条。”
QAngaroo 是伞名,不是任何一个数据集的别名。论文标题里的 “Datasets”(复数)就是提示。凡看到"QAngaroo 数据集",都要追问具体指哪一个。
坑 2:把 MedHop 的 test 集当成公开可用
错误说法:“用 HuggingFace 加载 MedHop,在 test 上跑出了 60% 的准确率。”
正确说法:“MedHop 的 test 集(546 条)不公开,官方保留用于盲评。HF 上只有 train 1,620 + validation 342。”
HF 的 bigbio/medhop 与 community-datasets/qangaroo 都不含 test。你在 HF 上报告的"test 成绩",实际上全部是 validation 成绩,与论文的 test / test* 数字不可比。这是最容易犯且后果最严重的坑。
坑 3:用未 masking 的数字做跨模型比较
错误说法:“Majority 基线 58.4%,超过了 BiDAF 的 47.8%,说明简单方法在这题上更强。”
正确说法:“未 masking 时 Majority 58.4% > BiDAF 47.8%,说明未 masking 口径存在答案频次捷径;masking 后 Majority 崩到 10.4%,BiDAF 42.9%,此时 BiDAF 才显著领先。”
未 masking 的口径下,一个不读文档的频次启发式就能超过神经模型——这时的排名不反映阅读理解能力。做能力比较必须用 masked 口径。
坑 4:把"抽样 100 条质检"说成"人工标注 100 条"
错误说法:“MedHop 有人工标注,论文人工标了 100 条训练数据。”
正确说法:“MedHop 全量远监督自动构建,无人工标注。论文在每个 dev 集抽样 100 条做定性质量分析,这 100 条不是训练标签,也不是全量标注。”
把质检样本当成标注数据,会得出"MedHop 是半人工标注数据集"的错误结论,进而错误估计它的标签可靠性。
坑 5:把 HF 的 “Number of rows: 3,924” 当成样本总数
错误说法:“MedHop 有 3,924 条样本。”
正确说法:“3,924 = original config(1,962)+ masked config(1,962) 的行数合计;单一 config 是 1,962 条(train 1,620 + validation 342)。”
HF 卡片会把多个 config 的行数相加显示。不要把这个合计当样本数——它等于把同一批数据数了两遍。
坑 6:把 54.5% 当作 MedHop 的最佳成绩
错误说法:“MedHop 上 BiDAF 达到 54.5%,接近人类 85.0%。”
正确说法:“54.5% / 85.0% 是 WikiHop 的数字(BiDAF masked test / 人类表现),出自 TACL 终版摘要。MedHop 自身最佳为 BiDAF standard 47.8%(test)/ 61.2%(test*),masked 下为 33.7% / 42.9%。”
这个坑的来源是论文摘要本身:arXiv v1/v2 摘要写 42.9% / 74.0%,TACL 终版写 54.5% / 85.0%——两组数字都是 WikiHop 的(分别对应未 masking 与 masking 口径),而摘要表述是"their best accuracy"(跨两个数据集的整体最佳)。读者极易误以为这是 MedHop 的成绩。
额外的混淆源:42.9 这个数字出现了两次且含义不同——一次是 WikiHop BiDAF masked test,一次是 MedHop BiDAF masked test*。同值异指,引用必须带全口径标签。
坑 7:用大模型评 MedHop 而不检查预训练污染
错误说法:“2026 年的 LLM 在 MedHop 上零样本达到 80%,远超 BiDAF 的 47.8%,说明多跳推理已被解决。”
正确说法:“MedHop 的文档来自 Medline 2016,这些摘要极可能已在大模型预训练语料中。高分可能来自记忆而非推理。要检验这一点,需做masked 变体实验,或检查模型对候选顺序 / 占位符替换的敏感性。”
这是一个晚期出现但极重要的坑。MedHop 发表于 2018 年,其文档源早于所有现代大模型的训练截止期。用现代 LLM 评它时,必须考虑数据污染:模型可能见过这些摘要,甚至见过相关的药物相互作用事实。masked 变体在这里意外地成为污染检测工具——如果换掉实体名后性能大幅下降,说明模型确实在依赖实体身份(记忆)而非结构推理。
坑 8(附加):把 max 458 token 当成"300 上限失效"
错误说法:“论文说文档上限 300 token,但 Table 2 显示 max 458,说明上限没执行。”
正确说法:“上限是300 token 正文 + 标题;标题不计入 300 但计入总 token 计数,因此 458 = 300(正文上限)+ 标题等其他部分。上限生效了。”
这类"数字对不上"的误读,通常源于没有细看定义。Table 2 的统计口径与正文的限制条款不是同一件事——前者统计的是实际分布,后者是构造时的约束。
§10.9 引用检查表
引用 MedHop 前,逐条自检:
| # | 检查项 | 通过条件 |
|---|---|---|
| 1 | 说的是 MedHop 还是 WikiHop? | 明确写出 |
| 2 | 是公开的 train/val 还是官方 test? | 明确写出,HF 结果只能标 val |
| 3 | 是 standard 还是 masked? | 明确写出 |
| 4 | 是 test 还是 test*? | 明确写出 |
| 5 | 是否把 54.5% 误当 MedHop 成绩? | 应改为 47.8%(standard test) |
| 6 | 是否把 3,924 当样本数? | 应为 1,962(单 config) |
| 7 | 是否声称有人工标注? | 应为远监督,仅 100 条抽样质检 |
| 8 | 用大模型评时是否讨论污染? | 应讨论并考虑 masked 对照 |
| 9 | 许可是否标为 CC BY-SA 3.0? | 是(注意 SA 的传染性) |
| 10 | 是否引用了 DOI? | 论文 DOI + Zenodo DOI 双引用 |
FAQ:关于 MedHop 的常见问题
Q1:MedHop 和 WikiHop 是什么关系?我该用哪个?
A:两者是 QAngaroo 项目产出的姊妹数据集,共享格式与构建方法。MedHop 是医学域(Medline 摘要,药物相互作用),WikiHop 是开放域(Wikipedia,277 种查询类型)。做医学 DDI 研究用 MedHop;做通用多跳方法验证用 WikiHop(规模大 20 倍);很多论文两个都报以证明方法通用性。
Q2:为什么不能直接在 HuggingFace 上评测 test?
A:因为 test 集根本不公开(546 条,官方保留盲评)。HF 上只有 train + validation。你报的 HF 成绩都是 validation 成绩。
Q3:MedHop 的"多跳"具体指什么?
A:指答案不在任何单篇文档里。典型链条是:文档 1 说药物 A 作用于靶点 P,文档 2 说蛋白 P 与蛋白 Q 有相互作用(Reactome 证实),文档 3、4 说药物 B 影响 Q——于是推断 A 与 B 相互作用。推理链跨 4 篇文档、3 跳。
Q4:什么是 masked 版本?我该用哪个?
A:masked 版把候选实体替换为 MASK7 这类唯一占位符(单样本内一致、跨样本不同)。做能力比较用 masked(它切断了答案频次捷径);与论文 Table 5 标准列对齐用 original,但要意识到它含捷径。
Q5:为什么 TF-IDF 会低于随机?
A:因为 MedHop 的答案药物与查询药物几乎不在同一篇摘要里共现(这正是"多跳"的定义)。词汇匹配的前提不成立,TF-IDF 还会被"高频提到查询药物但不含答案链"的文档系统性带偏,因此低于随机(9.0 vs 13.9)。
Q6:Majority 基线 58.4% 是怎么回事?
A:这是未 masking 口径下"总是选最常见答案"的成绩,超过了下表神经模型。它暴露了答案频次捷径:Aspirin 有 743 种相互作用、Isotretinoin 只有 34 种,交互多的药物更常是正确答案。masking 后它崩到 10.4%,证明这个捷径确实是问题所在。
Q7:MedHop 的数据是怎么造出来的?有人工标注吗?
A:没有人工标注。用 DrugBank(药物-靶点)+ Reactome(蛋白-蛋白)+ Swiss-Prot(人类蛋白) 自动生成查询与答案,再用精确字符串匹配投射回 Medline 2016 摘要找出证据文档,最后在二部图上游走 + 降采样出题。论文仅对 dev 集抽样 100 条做质量检查。
Q8:为什么 MedHop 只有 1 种查询类型,而 WikiHop 有 277 种?
A:因为医学域的结构化知识源只提供了药物-靶点这一种可自动化的关系(DrugBank 的 interacts_with),而 Wikidata 提供的关系类型远多于医学域可自动提取的。这是领域知识库覆盖度的直接后果,也是 MedHop "查询类型单一"这一局限(§7.4)的根源。
Q9:文档数上限 64、token 上限 300 是怎么来的?
A:64 是"排除支持文档数 > 64 的样本"这条降采样硬规则;300 是正文 token 上限(标题另计,因此实际总 token 可达 458)。两条规则的目的是控制上下文长度与候选间证据对称性(§8.3)。
Q10:MedHop 的许可能商用吗?
A:数据集是 CC BY-SA 3.0——可以署名使用,但改编后再分发必须以相同方式共享(SA),不能改松到 CC0/MIT。注意摘要文本还有一层期刊/NLM 权利;DrugBank 本身是学术限定(若你要复现构建流水线需单独解决)。商用训练模型的具体合规性建议咨询法律意见,本站不作法律断言。
Q11:为什么很多论文报的数字和论文里的对不上?
A:因为存在 2×2 口径(standard/masked × test/test*)+ 两个数据集(MedHop/WikiHop)+ 摘要数字跨数据集(54.5% 是 WikiHop 的)三重混淆。报数字时必须同时写明:数据集、口径、划分。 见 §10.9 检查表。
Q12:MedHop 现在过时了吗?
A:作为大规模训练集,1,962 条确实偏小;但作为诊断性基准(证据定位 vs 答案判定的难度分离,§5.7)和DDI 多跳推理的标准测试床,它仍被使用(如 MedKGQA 在 2023 年仍以它为基准)。它的价值已经从"训练数据"转向"评测标尺 + 方法学范例"。
事实清单(Fact Sheet)
以下为本条目引用的全部关键事实,按主题分组。每条标注来源与核验方式,便于读者独立复核。
A. 身份与归属
| 事实 | 取值 | 来源 |
|---|---|---|
| 数据集名 | MedHop | 论文 / Zenodo |
| 所属项目 | QAngaroo(= MedHop + WikiHop) | 论文标题 / Zenodo 记录 |
| 全称释义 | Reading Comprehension with Multiple Hops(医学域) | 论文 |
| 领域 | 生物医学(药物-药物相互作用) | 论文 |
| 任务类型 | 跨文档多跳阅读理解(定候选多选) | 论文 |
| 机构 | University College London + Bloomsbury AI | 论文 / Zenodo |
| 作者 | Johannes Welbl, Pontus Stenetorp, Sebastian Riedel | 论文 |
| 论文标题 | Constructing Datasets for Multi-hop Reading Comprehension Across Documents | arXiv / TACL |
| 发表刊物 | TACL Vol 6 (2018), pp. 287–302 | ACL Anthology |
| 出版商 | MIT Press | ACL Anthology |
| 论文 DOI | 10.1162/tacl_a_00021 | ACL Anthology |
| ACL ID | Q18-1021 | ACL Anthology |
| arXiv ID | 1710.06481(v1 2017-10-17;v2 2018-06-11) | arXiv |
| 官方站 | http://qangaroo.cs.ucl.ac.uk/ | 实抓(2026-09-30 在线) |
B. 数据规模
| 事实 | 取值 | 来源 |
|---|---|---|
| MedHop 划分(官方全量) | train 1,620 / dev 342 / test 546 | 论文 Table 1 |
| MedHop 合计 | 2,508 | 计算 |
| MedHop 公开发布量 | train 1,620 + validation 342 = 1,962 | HF |
| WikiHop 划分 | 43,738 / 5,129 / 2,451 = 51,318 | 论文 Table 1 |
| 候选数 | min 2 / max 9 / avg 8.9 / median 9 | 论文 Table 2 |
| 文档数 | min 5 / max 64 / avg 36.4 / median 29 | 论文 Table 2 |
| 每文档 token | min 5 / max 458 / avg 253.9 / median 264 | 论文 Table 2 |
| 每样本唯一文档路径(avg) | 59.8(WikiHop 19.5) | 论文 |
| 查询类型数 | 1(interacts_with;WikiHop 277) |
论文 |
C. 分布包与体量
| 事实 | 取值 | 来源 |
|---|---|---|
| Zenodo 记录 | records/6407401,v1.0.0,2018-06-11 发布 | Zenodo |
| 数据包 | qangaroo_v1.1.zip,339.8 MB | Zenodo |
| MD5 | dd4f65d2f73244c0946b5810e24a8e43 | Zenodo |
| Zenodo 统计(2026-09-30) | views 581 / downloads 103 / data volume 43.8 GB | Zenodo |
| medhop dataset_size | 110,398,906 B(≈110.4 MB) | community-datasets/qangaroo README |
| medhop download_size | 57,837,760 B(≈57.8 MB) | 同上 |
| masked_medhop dataset_size | 112,614,098 B | 同上 |
| wikihop dataset_size | 366,621,125 B | 同上 |
| HF usedStorage(bigbio/medhop) | 1,114,842,494 B | HF API |
| HF 卡片行数 | “Number of rows: 3,924” | HF |
| OpenDataLab 镜像 | 537.9 MB | OpenDataLab |
D. 构建方法
| 事实 | 取值 | 来源 |
|---|---|---|
| 文档源 | Medline 2016(经 BioNLP 2011 Shared Task 预处理) | 论文 |
| 药物-靶点知识源 | DrugBank | 论文 |
| 蛋白-蛋白知识源 | Reactome | 论文 |
| 人类蛋白源 | Swiss-Prot | 论文 |
| 实体匹配方式 | 名称变体的精确字符串匹配 | 论文 |
| 标注方式 | 远监督自动构建,无人工标注 | 论文 |
| 质量分析 | dev 集抽样 100 条定性检查(非全量标注) | 论文 |
| 文档数上限 | 排除支持文档 > 64 的样本 | 论文 |
| 文档长度上限 | 300 token + 标题 | 论文 |
| 路径数约束 | 所有候选在二部图中路径数相同 | 论文 |
| masking 占位符 | 100 个唯一 token(如 MASK7) | 论文 |
| masking 一致性 | 单样本内一致,跨样本一般不同 | 论文 |
E. 评估基准(MedHop,论文 Table 5 / Table 7)
| 方法 | standard test / test* | masked test / test* |
|---|---|---|
| Random | 13.9 / 20.4 | 14.1 / 22.4 |
| Max-mention | 9.5 / 16.3 | — |
| Majority | 58.4 / 67.3 | 10.4 / 6.1 |
| TF-IDF | 9.0 / 14.3 | — |
| Document-cue | 44.9 / 53.1 | — |
| FastQA | 23.1 / 24.5 | 31.3 / 30.6 |
| BiDAF | 47.8 / 61.2 | 33.7 / 42.9 |
| BiDAF(gold chain) | 86.4 / 89.8 | 99.3 / 100.0 |
| FastQA(gold chain) | 54.6 / 59.2 | 51.8 / 55.1 |
来源:论文 Table 5、Table 7(本条目作者表格化)。
F. 摘要数字与双口径冲突
| 出处 | 数字 | 实际所指 |
|---|---|---|
| arXiv v2 摘要 | 42.9% / 人类 74.0% | WikiHop BiDAF standard test |
| TACL 终版摘要 | 54.5% / 人类 85.0% | WikiHop BiDAF masked test(标注测试集) |
| MedHop 自身最佳 | 47.8%(standard test)/ 61.2%(test*) | MedHop BiDAF |
| 巧合同值 | 42.9 | 既是 WikiHop masked test,也是 MedHop masked test* |
G. 许可
| 事实 | 取值 |
|---|---|
| 数据集许可 | CC BY-SA 3.0 |
| 义务 | 署名(BY)+ 相同方式共享(SA) |
| 上游文本 | Medline 2016(另有期刊/NLM 权利层) |
| 上游知识库 | DrugBank(学术限定)/ Reactome(开放)/ Swiss-Prot(CC BY) |
H. 第三方使用
| 事实 | 取值 | 来源 |
|---|---|---|
| MedKGQA 报告精度 | 64.8% accuracy | arXiv:2212.09400 |
| MedKGQA 消融 | 移除知识融合掉 15.5% | 同上 |
| MedKGQA 口径 | train/dev/test = 1620/342/546;test 不公开 | 同上 |
术语表(Glossary)
多跳推理(Multi-hop Reasoning)
需要结合多处分散证据、经多步链式推导才能得出结论的推理方式。在 MedHop 中,答案需要跨 4 篇摘要、经 3 跳(药物→靶点→蛋白→药物)才能推出。与"单跳"(答案在一段文本内)相对。
跨文档阅读理解(Cross-document Reading Comprehension)
阅读理解任务的一种变体,答案不在任何单篇文档内,必须跨多篇文档聚合证据。MedHop 属于此类。
QAngaroo
UCL 的多跳阅读理解项目名,产出 MedHop(医学域)与 WikiHop(开放域)两个数据集。不是数据集的别名。
MedHop
QAngaroo 的医学半边,基于 Medline 2016 摘要,任务是药物-药物相互作用的多跳推理。
WikiHop
QAngaroo 的开放域半边,基于 Wikipedia,用 Wikidata 关系构建,有 277 种查询类型。MedHop 的姊妹数据集。
远监督(Distant Supervision)
用结构化知识库自动生成训练标签的方法,无需人工标注。MedHop 用 DrugBank/Reactome 生成查询与答案,再用字符串匹配投射回文本。优点是规模大、成本低、可复制;缺点是会引入假连接噪声。
二部图(Bipartite Graph)
MedHop 构建中把文档集合建模成图,节点分两类(文档与实体),边只存在于不同类型节点之间。三类边语义不同:文档→蛋白(无向)、文档↔药物(双向,需 DrugBank 靶点确认)、蛋白→文档(需 Reactome 确认蛋白-蛋白相互作用)。
支持文档(Support Documents)
出现在样本 supports 字段中的文档集合,模型的输入。MedHop 平均每样本 36.4 篇,上限 64 篇。顺序与相关性无关——模型需自行定位相关文档。
gold chain / gold documents
诊断性实验的设置:只把真正包含证据链的文档喂给模型,用以隔离"证据定位"与"答案判定"两部分的难度贡献。MedHop 中 BiDAF 在该设置下达 86.4%(standard)/ 99.3%(masked)。
masking / masked 变体
把候选实体替换为 100 个唯一占位符 token(如 MASK7)的数据变体。单样本内一致、跨样本不同。目的是切断"答案频次先验"这条捷径,同时保留跨文档指代同一实体所需的结构信息。
test / test*
论文评估的两列。test = 全部 546 条测试样本;test* = 测试集中经人工验证的子集,用于排除自动构建噪声。论文正式比较以 test* 为准。
accuracy
MedHop 的唯一评测指标,即选中正确候选的样本占比。不是 EM/F1——候选集合封闭,生成式指标不适用。
Majority-candidate-per-query-type
最强弱基线:总是选"在该查询类型下全局出现最多"的候选。未 masking 时 58.4%,超过 BiDAF 的 47.8%;masking 后崩至 10.4%。它暴露了答案频次捷径的存在。
BiDAF / FastQA
两个神经 RC 基线(2018 年时的代表模型)。BiDAF 在 MedHop 上 standard 47.8% / masked 33.7%(test);FastQA 在 masked 下反而上升(23.1%→31.3%),说明它原本被真实药名的词形线索干扰。
DrugBank
药物与药物靶点的结构化数据库。MedHop 用它确定"药物-靶点"关系,是标签生成的上游知识源。基础版学术用途限定,商用需 license。
Reactome
蛋白-蛋白相互作用与通路的开放数据库。MedHop 用它确认两个蛋白确实相互作用,是二部图第三条边(蛋白→文档)的守门条件。
Swiss-Prot(UniProt)
人工审核的蛋白序列数据库(UniProt 的一部分)。MedHop 用它确定人类蛋白实体集合。
Medline 2016
美国国家医学图书馆(NLM)的生物医学文献数据库,2016 年版被用作 MedHop 的文档源。注意其期刊权利层独立于数据集许可。
CC BY-SA 3.0
MedHop 的数据集许可。BY = 必须署名;SA = 改编后分发必须以相同方式共享。SA 具有传染性,衍生数据集不能改用更宽松的许可。
数据污染(Data Contamination)
模型评测中,测试数据已出现在模型预训练语料中导致的虚高表现。MedHop 的 Medline 2016 文档早于所有现代大模型的训练截止期,因此用 LLM 评测时必须考虑污染。
DDI(Drug-Drug Interaction)
药物-药物相互作用。MedHop 的任务主题。库内另有 ddi(rid 171) 条目,但那是句级关系判定,与 MedHop 的跨文档多跳选择是不同的任务抽象。
HotpotQA / 2WikiMultiHopQA / MuSiQue
MedHop 之后的多跳 QA 数据集。HotpotQA(2018,抽取式 + 支撑句)、2WikiMultiHopQA(2020,显式推理链)、MuSiQue(2021,受控跳数)。MedHop 与它们并行独立,代表"远监督 + 定候选 + 医学域"这一支。
诊断性实验(Diagnostic Experiment)
不是为刷分、而是为定位瓶颈而做的实验。MedHop 的 gold chain 实验是典范:它证明瓶颈在证据定位而非答案判定,直接推动了"先检索后推理"架构的发展。
附录 A:一页速查(Cheat Sheet)
它是什么? QAngaroo 项目的医学半边,跨文档多跳阅读理解数据集,任务是药物相互作用推理。
谁做的? UCL + Bloomsbury AI(Welbl, Stenetorp, Riedel),TACL 2018。
多大? 2,508 条(train 1,620 / dev 342 / test 546);公开仅 1,962(test 不给)。
什么格式? query + candidates + supports + answer + answer_position。
什么指标? accuracy(不是 EM/F1)。
最强基线? BiDAF,standard 47.8% / masked 33.7%(test)。
难点在哪? 从平均 36.4 篇文档里定位证据;给对文档后 BiDAF 达 86.4%(standard)/ 99.3%(masked)。
最容易错的地方? 把 54.5% 当 MedHop 成绩(那是 WikiHop 的)。
从哪下? Zenodo records/6407401 → qangaroo_v1.1.zip(339.8 MB,MD5 dd4f65d2f73244c0946b5810e24a8e43)。
什么许可? CC BY-SA 3.0(署名 + 相同方式共享)。
一句话引用? “MedHop 是 QAngaroo 项目(Welbl et al., TACL 2018)的医学多跳阅读理解数据集,用药物-靶点与蛋白-蛋白结构化知识远监督构建,要求跨多篇 Medline 摘要推理药物相互作用。”
附录 B:抓取与核实记录(Verification Log)
本条目撰写时点:2026-09-30。以下为核验动作清单。
B.1 三轮精确搜索(开工前查重)
| 轮次 | 检索对象 | 结果 |
|---|---|---|
| 1 | 库内目录 writing/medhop、writing/qangaroo、writing/wikihop |
均不存在 |
| 2 | 数据库 url_name ILIKE 匹配 medhop / qangaroo / wikihop |
零命中 |
| 3 | 库内语义近邻(medqa 50、medmcqa 111、pubmedqa 49、medicationqa 170、bioasq 53 等) | 存在,但均为单跳,任务形态不同——不撞库 |
结论:MedHop 为库内首个多跳阅读理解条目,slug medhop 可用。
B.2 官方实抓(存在性核验)
| 来源 | 抓取方式 | 状态 |
|---|---|---|
| Zenodo records/6407401 | API / 页面实抓 | ✅ 成功,含文件清单与 MD5 |
| TACL 论文 PDF(aclanthology.org/Q18-1021.pdf) | pdftotext -layout 转文本后全文提取 |
✅ 成功,987 行文本,Table 1/2/5/7 数字全部提取 |
HuggingFace bigbio/medhop |
经 hf-mirror API 端点 | ✅ 成功,取得字段、划分、行数 |
community-datasets/qangaroo |
README 实抓 | ✅ 成功,取得四个 config 的体量 |
| 官方站 qangaroo.cs.ucl.ac.uk | WebFetch | ✅ 成功,站点在线 |
| arXiv 1710.06481 | 摘要实抓 | ✅ 成功,取得 v2 摘要数字 |
B.3 双口径冲突处置
| 冲突项 | 处置 |
|---|---|
| 42.9%/74.0% vs 54.5%/85.0% | 存照两条,判定二者均为 WikiHop 数字(分别对应 standard / masked);MedHop 自身以此为准:47.8% / 61.2% |
| 2,508 vs 1,962 | 存照:前者含不公开的 test,后者是实际可获取量 |
| 3,924 vs 1,962 | 存照:前者是 original + masked 两 config 行数合计 |
| 339.8 MB vs 110.4 MB vs 537.9 MB | 存照:Zenodo 压缩包(含两数据集)vs 单 MedHop 解压生成量 vs 第三方便携镜像 |
B.4 未决疑点(诚实披露)
- test 集 546 的官方盲评具体流程与现行可用性未见公开文档;
- Bloomburs AI 被收购一事非数据集事实,本条目仅作机构背景,不作硬断言;
- OpenDataLab 镜像 537.9 MB 与 Zenodo 339.8 MB 体量差异原因未逐一核对(疑为解压/预处理差异);
- 截至抓取时点未发现 v1.2+ 数据版本;
- 论文 Table 2 的统计未区分 standard/masked,本条目按训练集总口径引用。
附录 C:推荐引用格式
引用数据集:
Welbl, J., Stenetorp, P., & Riedel, S. (2018). QAngaroo (MedHop + WikiHop) [Data set]. Zenodo. https://doi.org/10.5281/zenodo.6407401
引用论文:
Welbl, J., Stenetorp, P., & Riedel, S. (2018). Constructing Datasets for Multi-hop Reading Comprehension Across Documents. Transactions of the Association for Computational Linguistics, 6, 287–302. https://doi.org/10.1162/tacl_a_00021
引用本条目:
千方病案医数集. (2026). MedHop (medhop) — 跨文档多跳推理的医学药物相互作用阅读理解数据集 — AI-Ready Wikipedia. https://www.qianfanghub.com/ai-ready-dataset/medhop/754
报告结果时的最小信息集:数据集(MedHop/WikiHop)+ 划分(train/val/test/test*)+ 口径(standard/masked)+ 指标(accuracy)+ 许可(CC BY-SA 3.0)。
附录 D:数据可用性声明(DAIMS 对齐表)
本表按 DAIMS(Data Attribute and Information Model Standard) 的核心属性对齐,供数据治理与研究复现使用。
| DAIMS 属性 | MedHop 取值 | 说明 |
|---|---|---|
| Persistent Identifier | DOI 10.5281/zenodo.6407401(数据集);10.1162/tacl_a_00021(论文) | 双 DOI,长期可解析 |
| Access Mode | 开放获取(Open Access) | Zenodo 与 HuggingFace 均可公开下载,无需申请 |
| Access Type | 直接下载 / API | ZIP 直链 + load_dataset() |
| License | CC BY-SA 3.0 | 署名 + 相同方式共享 |
| Data Provenance | Medline 2016 摘要 + DrugBank + Reactome + Swiss-Prot | 文档源与知识源可追溯 |
| Collection Mode | 自动构建(远监督) | 无人工标注;dev 抽样 100 条质检 |
| Collection Method | 结构化知识 → 查询生成 → 字符串匹配投射 → 二部图游走 → 降采样 | 流水线可复现(见 §3) |
| Data Format | JSON / HuggingFace datasets | 纯文本,无专有格式 |
| Data Volume | 公开 1,962 条(original);体量 ≈110.4 MB | 单 config |
| Data Type | 文本(自然语言摘要 + 实体候选) | 非影像、非信号、非 EHR |
| Completeness | test 集不公开 | 公开部分完整覆盖 train + validation |
| Consistency | 候选类型一致;路径数配平 | 已做结构一致性约束 |
| Accuracy | 自动标签,含未知比例噪声 | 已披露质量问题类别(§5.6) |
| Timeliness | 文档源锁定 2016;数据集 2018 发布 | 无后续版本 |
| Versioning | 数据包 v1.1;Zenodo record v1.0.0 | 两套编号体系,勿混 |
| Metadata Standard | Zenodo + HuggingFace dataset card | 含 schema、划分、许可 |
| Ethics | 无人类受试者数据;无个人健康信息 | patient_count = 0 |
| Privacy | 不涉及个人数据 | 文献摘要为已发表内容 |
| Data Limitations | 规模小、查询类型单一、标签含噪、test 不公开、无公开 leaderboard、存在预训练污染风险 | 见 §7.4 |
D.1 数据限制声明(rai:dataLimitations 对照)
- 规模限制:公开 1,962 条,远小于 WikiHop 的 51,318;对现代大模型微调易过拟合。
- 标签噪声:远监督自动构建引入假连接,噪声率未知;仅 dev 抽样 100 条做定性分析。
- 领域限制:单一医学域、单一查询类型(
interacts_with),高分不证明通用多跳能力。 - 捷径风险:未 masking 口径下存在答案频次先验(Majority 58.4% > BiDAF 47.8%),能力比较应使用 masked 口径。
- 可复现限制:test 集不公开、无公开 leaderboard,第三方无法独立验证"最优"声明。
- 时间限制:文档源锁定 Medline 2016,且早于现代大模型训练截止期,构成潜在数据污染。
- 上游许可限制:摘要文本另有期刊/NLM 权利层;DrugBank 为学术限定,复现构建需单独解决许可。
- 衍生限制:CC BY-SA 3.0 的 SA 条款具传染性,改编再分发须以相同方式共享。
附录 E:Milestone 时间线
| 时间 | 事件 |
|---|---|
| 2017-10-17 | arXiv v1 提交(1710.06481) |
| 2018-06-11 | arXiv v2 修订;TACL 论文定稿;Zenodo 发布 QAngaroo v1.0.0(数据包 qangaroo_v1.1) |
| 2018 | TACL Vol 6 发表(pp. 287–302);ACL Anthology Q18-1021 |
| 2020 | Bloomsbury AI 被 Facebook 收购(机构背景,非数据集事实) |
| 2022-04-02 | Zenodo 记录元数据修改时间戳(未见内容新版) |
| 2022-12-22 | HuggingFace bigbio/medhop 最后修改 |
| 2023 | MedKGQA(arXiv:2212.09400)以 MedHop 为基准报告 64.8% |
| 2026-09-30 | 本条目抓取与核验时点;官方站仍在线 |
附录 F:常见误读速查(Anti-Pattern Quick Reference)
| 误读 | 纠正 | 参见 |
|---|---|---|
| “QAngaroo 有 51,318 条” | QAngaroo 是项目;51,318 是 WikiHop | 坑 1 |
| “HF 上评测了 test” | test 不公开,HF 只有 train+val | 坑 2 |
| “Majority 58.4% 说明启发式更强” | 未 masking 有频次捷径,比能力要用 masked | 坑 3 |
| “人工标注了 100 条” | 抽样质检,非标注 | 坑 4 |
| “3,924 条样本” | 是两 config 合计,单 config 1,962 | 坑 5 |
| “MedHop BiDAF 54.5%” | 54.5% 是 WikiHop;MedHop 最佳 47.8% | 坑 6 |
| “LLM 80% 说明已解决” | Medline 2016 可能已被预训练,需查污染 | 坑 7 |
| “max 458 说明 300 上限失效” | 上限是 300 token 正文 + 标题 | 坑 8 |
| “MedHop 是 HotpotQA 的医学版” | 两者并行独立,形态不同(定候选 vs 抽取式) | §7.2 |
| “MedHop 用 EM/F1 评测” | 用 accuracy,候选封闭 | §5.1 |
尾注
资料范围:本条目所有事实性陈述基于以下一手来源——TACL/ACL Anthology 论文全文(Q18-1021)、arXiv 1710.06481、Zenodo 记录 6407401、HuggingFace bigbio/medhop 与 community-datasets/qangaroo、官方站 qangaroo.cs.ucl.ac.uk。抓取与核验时点为 2026-09-30。
口径纪律:本条目在涉及 MedHop 本体性能时一律使用 MedHop 专属数字(Table 5 / Table 7),摘要级数字(54.5% / 85.0%)始终标注为 WikiHop 口径。所有双口径冲突已在 §5.5、§9 与附录 B.3 逐条存照。
未决事项:test 盲评流程、Bloombsury AI 现况、第三方镜像体量差异等未见公开确证,本条目不作硬断言,已在附录 B.4 如实披露。
内容性质:本条目为数据集说明性条目(AI-Ready Wikipedia 格式),不含临床建议,不构成法律意见。许可与合规问题请咨询专业人士。
最后更新:2026-09-30。
本条目由千方病案医数集(qianfanghub.com)AI-Ready Wikipedia 写手代理 agent-b-medhop 撰写,遵循一源互证、口径存照、局限如实披露原则。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- pubmedqa — 共享标签:医学问答与基准 / 医疗NLP / 生物医学文献 / 医学问答 / 评测基准
- genia — 共享标签:医疗NLP / 生物医学文献 / 关系抽取 / 评测基准
- scifact — 共享标签:医学问答与基准 / 医疗NLP / 生物医学文献 / 评测基准
- apollocorpus — 共享标签:医疗NLP / 生物医学文献 / 医学问答 / 评测基准
- healthsearchqa — 共享标签:医学问答与基准 / 医疗NLP / 医学问答 / 评测基准
- claimify — 共享标签:医学问答与基准 / 医疗NLP / 医学问答 / 评测基准
- cord-19 — 共享标签:医疗NLP / 生物医学文献 / 医学问答
- medqa — 共享标签:医学问答与基准 / 医疗NLP / 医学问答 / 评测基准
- medmcqa — 共享标签:医学问答与基准 / 医疗NLP / 医学问答 / 评测基准
- medicationqa — 共享标签:医学问答与基准 / 医疗NLP / 医学问答 / 评测基准
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

