# 生物医学数据集检索：分词、术语扩展与评测

工程笔记 · Mdexa Engineering · 2026-11-13

数据版本：regression set of 85 queries evaluated on the 43 curated first-release cards; first benchmark run of 2026-11-13

https://mdexa.com/zh/research/N4-biomedical-dataset-retrieval/

**Mdexa Engineering** · 工程笔记，未经同行评审 · 2026-11-13 · 数据版本：85 条查询的回归集，在首发目录 43 张整理卡上评测；2026-11-13 的首次基准运行

## 摘要

智能体（Agent）和人用简短的中文、英文和中英混合查询检索生物医学数据集信息卡数据库，搜索失败的代价很高：空结果或错误结果会让智能体重复搜索，或把另一个数据集的许可当成所查数据集的许可。在智能体基准的首次运行中，95 次搜索有 13 次（13.7%）没有结果，其中 5 次是要求所有词同时命中的多词查询。为此构建了一个检索层，由四部分组成：索引与查询共用的分词器（把中文切成相邻字对）、按字段加权并优先精确名称的排序、有意收窄的 29 组同义词文件，以及明确的空结果响应。在 13 种类型共 85 条查询的回归集上，于 43 张整理卡评测，两个新引擎的前五命中率均为 1.0（平均倒数排名 0.986 与 0.994），此前的子串过滤为 0.706。该查询集由构建者编写，只能作为回归保护，不能作为对未见查询质量的估计。

**关键词：**信息检索；中文分词；查询扩展；评测；空结果；生物医学数据集

## 1. 问题

**检索对象。**几十到几千张数据集信息卡，每张有名称、别名、双语描述、标签、许可结论和证据。语料很小，所以召回问题来自词汇不匹配，而不是数据量。

**实际见到的查询形态。**没有空格的中文短语（"医患对话"）、英文短语、混合名称（"TCM 问答"、"cMedQA 问答"）、数据集名称的连字符与大小写变体、名称拼写错误、跨语言同义词（"Traditional Chinese Medicine benchmark"与"中医评测集"），以及库里没有的东西。

**问题出在哪里。**在智能体基准的首次运行和此前的真实客户端测试中（内部记录）观察到三个问题。其一，多词查询要求每个词都命中，对自然的查询就返回空：30 题的 95 次搜索里有 13 次零结果，其中 5 次是多词查询，其余大多是在查库里没有的东西。其二，智能体用简称找国家药品目录类数据集，换了三种关键词才出现，因为简称没有同标识与别名一起匹配。其三，智能体不知道何时停：第一次搜索已返回完整名单，后面还接着搜索，只为确认。最后一个问题关乎响应格式，见配套笔记（`research/notes/N1-agent-database-interface`）；前两个是检索问题。

## 2. 为什么只靠语义相近不够

一个自然的想法是按查询与信息卡描述的语义接近程度排序。对这个数据库，这样做有两方面风险。第一，对象是有名字的东西：数据集有名称、别名和标识，每一个都对应一个许可结论。查询某个具名数据集却返回一个名字相近的邻居，会让智能体引用错误的许可，那正是这个数据库要防止的最糟错误。所以精确匹配和别名匹配必须排在近似匹配之前，近似匹配必须能看出是近似的。第二，评测集与训练集、语料与知识图谱这样的近义术语，对手头的任务很要紧，而通用的相似度度量可能把它们混在一起（此处没有测试）。语义方法仍可作为后段的兜底；当前的方法不含向量检索。

## 3. 方法

**分词。**索引与查询使用同一个分词器，使两者不会不一致。中文被切成相邻的字对并按短语匹配，不需要词典，对名称和新词也稳健；代价是单字查询匹配面很宽、索引略大。拉丁文本转小写，名称的连字符、空格、大小写与全半角变体被规范化，使同一名称的不同写法指向同一张卡。某个查询短语若不能逐字找到，只要它的字对都出现在同一张卡里，仍可匹配。小幅的编辑距离容错用于处理名称拼写错误。

**排序。**名称、别名和标识中的命中排在描述或标签中的命中之前，名称、标识或别名的精确命中再加一档优势。一个较小的先验偏向近期核实且证据充分的卡片，可按请求关闭。结果可以附带得分的解释。

**多词查询。**多词查询按命中的词数排序。命中全部词的卡片在前；命中至少一半词的卡片排在后面，并标为部分命中。每次请求也可以改用严格的全部命中模式。

**同义扩展，收得很窄。**一个维护中的同义词组文件（29 组）把查询词扩展到同组的其他词，同义命中排在精确命中之后。该文件的规则：只收在本领域同义的词；不收上位词（"医学"）；不收有歧义的缩写（如 KG、GB、CT）；每组写明来源；专科与 ICD-11 章名从词表自动加入；每次请求可以关闭扩展。收窄的目的，是不让扩展制造出匹配，使智能体误以为某个数据集合适。

**空结果与完整结果。**无匹配时，响应明确说明没有，并说明每个筛选条件单独会排除多少条，使智能体能够停手。搜索返回完整名单时，响应会说明名单已穷尽。核对一份已知数据集清单时，匿名请求可以直接传入标识，并得到未知标识的报告，而不必逐项搜索。

## 4. 质量怎样衡量

回归集含 85 条查询（内部测试文件），依据数据集名称、别名和信息卡编写，而不是依据引擎输出，覆盖 13 种类型（表 1），其中 26 条取自基准调用记录中的真实搜索。每条查询列出一个合理用户想要的数据集；库里没有时标记为空，正确答案是无结果（共 8 条；其中 5 条构成"empty"类，另 3 条在其他类型里）。评测按类型与总体报告：前五个结果中含相关数据集的查询占比（空查询则为没有返回结果）、平均倒数排名（MRR）、前五精确率（P@5）。三个引擎在同一批卡片上比较：嵌入式全文检索引擎、纯代码 BM25 引擎，以及此前的子串过滤。评测使用首发目录的 43 张整理卡；之后由自动收录流水线加入的卡片按固定规则排除。仓库里保存一份已接受的基线，之后对分词器、同义词、权重或先验的任何改动使数字低于基线，测试即失败。



### 表 1　回归集中的查询类型

| 类型 | 查询数 |
|---|---|
| chinese | 12 |
| english | 8 |
| mixed | 4 |
| alias-hyphen | 9 |
| alias | 2 |
| name | 1 |
| typo | 5 |
| synonym | 4 |
| specialty | 4 |
| condition | 2 |
| combination | 3 |
| empty | 5 |
| bench | 26 |

### 表 2　在 43 张整理卡上的总体结果（85 条查询）

| 引擎 | 前五命中率 | MRR | P@5 |
|---|---|---|---|
| 全文检索 | 1 | 0.986 | 0.84 |
| 纯代码 BM25 | 1 | 0.994 | 0.845 |
| 子串过滤 | 0.706 | 0.706 | 0.662 |

### 表 3　按查询类型的前五命中率 / MRR

| 类型 | 条数 | 全文检索 | 纯代码 BM25 | 子串过滤 |
|---|---|---|---|---|
| chinese | 12 | 1 / 1 | 1 / 1 | 0.833 / 0.833 |
| english | 8 | 1 / 1 | 1 / 1 | 0.75 / 0.75 |
| mixed | 4 | 1 / 1 | 1 / 1 | 0.75 / 0.75 |
| alias-hyphen | 9 | 1 / 1 | 1 / 1 | 0.667 / 0.667 |
| alias | 2 | 1 / 1 | 1 / 1 | 1 / 1 |
| name | 1 | 1 / 1 | 1 / 1 | 1 / 1 |
| typo | 5 | 1 / 1 | 1 / 1 | 0 / 0 |
| synonym | 4 | 1 / 0.833 | 1 / 0.875 | 0.5 / 0.5 |
| specialty | 4 | 1 / 1 | 1 / 1 | 0.5 / 0.5 |
| condition | 2 | 1 / 1 | 1 / 1 | 0 / 0 |
| combination | 3 | 1 / 1 | 1 / 1 | 1 / 1 |
| empty | 5 | 1 / 1 | 1 / 1 | 1 / 1 |
| bench | 26 | 1 / 0.981 | 1 / 1 | 0.769 / 0.769 |



## 5. 结果

所有数字由 `scripts/retrieval-stats.mjs` 产生：它运行回归集，并与已接受的基线比较（两者一致）。结果见表 2、表 3。

在 43 张整理卡上，两个新引擎对每条查询都在前五个结果中给出了相关数据集（前五命中率 1.0），MRR 分别为 0.986（全文检索）与 0.994（BM25），P@5 为 0.84 与 0.845；此前的子串过滤在前五命中率和 MRR 上为 0.706，P@5 为 0.662。差距最大的是拼写错误的名称（5 条：1.0 对 0.0）、疾病分类查询（2 条：1.0 对 0.0）和名称的连字符变体（9 条：1.0 对 0.667）。MRR 低于 1.0 的只有同义类（4 条，0.833 与 0.875）以及全文引擎的基准衍生类（0.981）；同义命中按设计排在精确命中之后。8 条正确答案为"无结果"的查询（集合里标为空；其中 5 条构成"empty"类）在三个引擎上都返回无结果。在首次基准运行中，即这些改动之前，95 次搜索有 13 次无结果；在改动后的接口上重跑基准的结果，将随修订版基准报告一并给出，因为智能体的单次运行波动大，不足以下结论。

## 6. 局限

- **查询集对引擎有利。**查询由构建引擎的团队依据数据集名称和信息卡编写，偏乐观；前五命中率 1.0 说明已知情形通过，而不是未见查询也会通过。该集合的用途是回归保护。
- **饱和。**前五命中率已到 1.0，只有 MRR 和 P@5 还能区分两个新引擎；在 85 条查询上无法可靠地区分它们。
- **集合小，每类查询少。**每种类型有 1 到 26 条查询。
- **只有整理卡。**评测使用 43 张整理卡；目录中卡片增多后，部分命中会更常见，结果会不同。
- **同义词文件窄。**29 组；没有向量检索；该文件尚未经第二人复核。
- **词序。**按命中词数排序无法分辨查询中哪个词更重要。
- **取自基准的查询**来自一个低成本模型的搜索。

## 7. 可复现性

`scripts/retrieval-stats.mjs` 随本文提供。它需要检索代码和回归集，这些是内部文件，可应要求向 Mdexa 索取，不在公开的数据库仓库中。不带参数运行时，它只把输出与已提交的 figures 比对。

*工程笔记，未经同行评审。Mdexa Engineering，2026-11-13。依据内部测试文件与智能体基准记录，未公开。*
