工程笔记检索
生物医学数据集检索:分词、术语扩展与评测
Mdexa EngineeringMarkdown
摘要
智能体(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。依据内部测试文件与智能体基准记录,未公开。
引用格式
Mdexa Engineering. Retrieval over a Biomedical Dataset Database: Tokenization, Terminology Expansion, and Evaluation. Engineering note, not peer reviewed. 2026-11-13. Data version: regression set of 85 queries evaluated on the 43 curated first-release cards; first benchmark run of 2026-11-13.