4. 药物文本预处理工程

药物文本来源极其分散:药品说明书、临床试验方案、PubMed 摘要、电子病历、不良反应报告、监管公告、专利与化学数据库记录。它们既有规范化的结构化字段,也有大量自由文本、缩写、商品名、化学命名和错别字。若不做预处理,后续的分子联合建模会把“阿司匹林”“乙酰水杨酸”“Aspirin”“ASA”当成四个无关对象,导致实体对齐失败、关系抽取噪声放大。本节围绕一条可落地的文本清洗流水线展开,重点讲清每一步的输入、处理逻辑与可观察结果。

一、分词:从字符流到可建模的语义单元

中文药物文本没有天然空格,分词是第一道关口。通用分词器(如 jieba、HanLP)在通用语料上表现良好,但药物领域存在大量未登录词:化学名“伊马替尼甲磺酸盐”、靶点“HER2”、剂型“肠溶缓释胶囊”、基因位点“EGFR T790M”。直接分词会把“伊马替尼”切成“伊马/替尼”,把“T790M”切碎。工程上通常采用“领域词典 + 通用分词器”的组合策略:先构建药物词典(通用名、商品名、INN、CAS 号、靶点、基因、剂型、给药途径),再以自定义词典方式注入分词器。

import jieba
jieba.load_userdict("drug_dict.txt")   # 每行: 词 词频 词性
text = "患者服用伊马替尼甲磺酸盐后出现EGFR T790M突变"
print(list(jieba.cut(text)))
# ['患者','服用','伊马替尼甲磺酸盐','后','出现','EGFR','T790M','突变']

判断分词质量不能只看“读起来顺不顺”,而要看下游任务指标:实体识别 F1、关系抽取准确率、以及同一药物在不同文档中的归一化命中率。若“伊马替尼甲磺酸盐”被切碎,实体识别召回会明显下降,这是最直接的观察信号。

二、标准化:把同义表达收敛到唯一标识

标准化解决“一名多形”问题,核心是建立“表面形式 → 标准标识”的映射。药物层面通常对齐到 RxNorm、DrugBank ID 或国家药品编码;靶点对齐到 HGNC;疾病对齐到 ICD-10/MeSH。标准化不是简单替换字符串,而要处理大小写、全半角、希腊字母、盐型与母体、剂量单位等差异。

表面形式问题类型标准化结果
Aspirin / aspirin / ASPIRIN大小写aspirin
乙酰水杨酸同义名aspirin
伊马替尼甲磺酸盐盐型imatinib(母体)
5-氟尿嘧啶全角/连字符5-fluorouracil
HER-2 / HER2 / erbB2别名ERBB2

实现上常用“规则归一 + 词典查表 + 模糊匹配”三级策略:先做 Unicode 归一化(NFKC)、大小写折叠、去多余空白;再查同义词词典;未命中时用编辑距离或向量相似度做候选召回,并设置阈值(如相似度 ≥ 0.92)人工复核。阈值过低会误合并不同药物,过高则漏合并,需在验证集上权衡。

三、实体识别与关系抽取:从词到结构化事实

实体识别(NER)负责标出药物、靶点、疾病、不良反应、剂量、给药途径等类型。规则方法依赖词典与正则(如剂量“\d+\s*(mg|g|μg)”),统计方法用 BiLSTM-CRF 或 BERT 微调。药物领域推荐“词典 + 模型”混合:词典保证已知药物高召回,模型捕捉新词与上下文。关系抽取则在实体对之间判断语义关系,如“药物—治疗—疾病”“药物—抑制—靶点”“药物—导致—不良反应”。常用做法是把关系建模为分类任务,输入为两个实体及其上下文句子。

示例:句子“伊马替尼通过抑制BCR-ABL治疗慢性髓性白血病”可抽取出三元组:(伊马替尼, 抑制, BCR-ABL)、(伊马替尼, 治疗, 慢性髓性白血病)。标准化后变为 (imatinib, inhibits, BCR-ABL)、(imatinib, treats, CML)。

四、清洗流水线与质量校验

把上述步骤串成流水线时,顺序很关键:先做编码与格式清洗,再分词,再实体识别,最后标准化与关系抽取。若先标准化再分词,会把未登录词提前替换,反而破坏上下文。流水线每一步都应输出可审计的中间结果,便于定位错误来源。

药物文本预处理流水线与质量校验 原始文本 说明书/病历/摘要 格式清洗 NFKC/去噪/分句 领域分词 词典+通用分词器 实体识别 药物/靶点/疾病 标准化 RxNorm/DrugBank 关系抽取 (药物, 抑制/治疗, 靶点/疾病) 结构化三元组 供联合建模使用 质量校验与反馈 分词F1 · 实体召回/精确率 · 标准化命中率 · 关系准确率 · 人工抽检 未达标 → 补充词典 / 调整阈值 / 重训模型

质量校验要落到具体指标:分词用人工标注集算 F1;实体识别看每类实体的召回与精确率,尤其关注药物与不良反应;标准化看“表面形式命中标准 ID 的比例”;关系抽取看三元组准确率。若药物实体召回低于 0.85,优先补词典;若标准化误合并多,优先提高相似度阈值或增加盐型规则。

工程建议:把词典、同义词表、正则规则、模型版本都纳入版本管理。预处理结果一旦变化,下游分子联合建模的特征分布也会变化,必须能追溯到具体规则或模型版本。
常见陷阱:直接用通用分词器处理化学名,会把长化学名切碎;标准化时把盐型与母体混为一谈,导致剂量与疗效关系错乱;关系抽取忽略否定与假设语境,把“未见不良反应”误抽为“导致不良反应”。

完成上述流水线后,文本侧输出的是带类型、带标准 ID、带关系标签的结构化记录,可与分子指纹、分子图、靶点序列等模态对齐。下一阶段即可在此基础上做多模态特征拼接与联合训练。预处理的质量上限,往往就是整个联合建模系统的效果上限。