命名实体识别(Named Entity Recognition, NER)是构建医药知识图谱与辅助诊疗系统的核心下游任务。在中医药(TCM)领域,由于其文本具有高度的专业性、语义模糊性以及实体嵌套等特征,传统的基于统计学习或轻量级深度学习(如 BERT-CRF)的方法在处理长距离依赖和跨类语义理解时存在局限。
本项目提出一种基于大语言模型指令微调的方案,利用 Qwen2.5-7B 作为基座模型,通过 QLoRA (Quantized LoRA) 技术在垂直领域语料上进行有监督微调(SFT),实现了针对中药、方剂、证候等 10 类实体的精准抽取。
1. 任务定义与数据工程
1.1 实体体系定义
本项目涵盖了中医药核心本体论中的 10 类关键实体,旨在实现多维度的信息提取。
| 实体类别 | 描述 |
|---|---|
| 中药 / 方剂 | 核心药物构成与复方组成 |
| 中医诊断 / 证候 / 治则 | 中医辨证论治的核心逻辑 |
| 临床表现 | 症状、体征的非结构化描述 |
| 西医治疗 / 诊断 | 中西医结合背景下的交叉实体 |
1.2 数据转换逻辑:从 BIO 到指令集
原始数据采用 BIO (Begin, Inside, Outside) 标注格式。为了适配生成式大模型的推理模式,本项目通过预处理脚本将序列标注转换为指令对齐格式。
转换公式描述:
给定输入序列 $X = {x_1, x_2, …, x_n}$ 及标签序列 $Y = {y_1, y_2, …, y_n}$,构造映射函数 $f(X, Y) \to (Prompt, Response)$。
- Prompt: “请识别下面文本中的[实体类别]:$X$”
- Response: 以结构化 JSON 或特定分隔符输出识别结果。
2. 算法架构与训练策略
2.1 基于 QLoRA 的参数高效微调
针对 7B 规模的模型,本项目采用 QLoRA 技术以平衡训练显存与收敛精度。
核心机理:
- NF4 量化 (NormalFloat 4):通过 4-bit 量化压缩基座模型权重,利用正态分布特性降低信息丢失。
- 双量化 (Double Quantization):对量化常数进行再次量化,进一步节省显存开销。
- 分页优化器 (Paged Optimizers):利用 CPU 内存处理显存尖峰,防止训练崩溃。
权重更新公式:
对于预训练权重 $W_0 \in \mathbb{R}^{d \times k}$,其更新量通过低秩矩阵 $A$ 与 $B$ 的乘积表示:
$$W = W_0 + \Delta W = W_0 + \alpha \frac{BA}{r}$$
其中 $r$ 为秩(Rank),$\alpha$ 为缩放因子。本项目设定 $r=16, \alpha=32$ 以捕获医药领域的特定语义特征。
2.2 训练超参数设置
- Base Model: Qwen2.5-7B
- Quantization: 4-bit NF4
- Max Sequence Length: 512 tokens
- Learning Rate: 2e-4 (Linear Decay)
- Batch Size: 16 (Global)
- Optimization: AdamW with Paged Support
3. 实验结果与性能分析
通过对测试集进行词级(Word-level)评估,模型在多项指标上表现出显著的差异性。
3.1 评测指标分布
| 实体类别 | Precision | Recall | F1 Score |
|---|---|---|---|
| 中药 | 0.7812 | 0.7936 | 0.7874 |
| 西医诊断 | 0.6825 | 0.6231 | 0.6515 |
| 中医证候 | 0.6103 | 0.6811 | 0.6438 |
| 临床表现 | 0.4999 | 0.7634 | 0.6042 |
| 方剂 | 0.4520 | 0.4074 | 0.4285 |
| 中医诊断 | 0.5714 | 0.1666 | 0.2580 |
3.2 误差分析与讨论
通过对各类别 F1 值的回归分析,可以发现模型表现呈现明显的阶梯分布:
- 高表现区间 (F1 > 0.75):中药实体的识别效果最佳。其原因在于中药名称(如:茯苓、猪苓)具有相对固定的构词模式与较高的样本频次,模型捕捉到了强特征。
- 中表现区间 (F1: 0.55 - 0.70):临床表现与西医诊断表现尚可。此类实体存在“召回率(Recall)明显高于精确率(Precision)”的现象,说明模型在开放域文本中存在过度识别倾向,将部分通用描述误认为医学实体。
- 低表现区间 (F1 < 0.35):中医治则与中医诊断表现乏力。经分析发现,中医诊断在文本中往往以极短或极其抽象的形式出现,且标注样本存在严重的长尾分布(Long-tail Distribution),导致模型在少样本(Few-shot)场景下的泛化能力受限。
4. 推理逻辑与流水线
在推理阶段,模型通过 Causal LM 的生成机制输出预测序列。为了确保结果的结构化,采用了如下的后处理逻辑:
Python
# 核心推理解码流程
input_ids = tokenizer(input_text, return_tensors="pt").input_ids
outputs = model.generate(
input_ids,
max_new_tokens=256,
temperature=0.1 # 采用低采样温度保证输出确定性
)
5. 结论与未来改进方向
本项目证明了通过 QLoRA 微调大语言模型能够有效迁移至中医药细分领域任务。相比于传统的 CRF 模型,LLM 方案在处理隐含上下文逻辑(如:根据临床表现反向推理证候)时表现出更强的语义理解力。
未来优化策略:
引入 RAG 机制:结合《中国药典》等外部权威知识库,通过检索增强生成来纠正模型在低频实体(如:中医治则)上的幻觉。
混合损失函数设计:探索在生成式损失(Cross-Entropy)中引入序列标注约束,以平衡精确率与召回率。
多任务学习:将 NER 任务与实体关系抽取(RE)同步微调,利用任务间的相关性辅助实体边界界定。
GitHub Repo: 点击跳转到项目仓库