命名实体识别(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 技术以平衡训练显存与收敛精度。

核心机理:

  1. NF4 量化 (NormalFloat 4):通过 4-bit 量化压缩基座模型权重,利用正态分布特性降低信息丢失。
  2. 双量化 (Double Quantization):对量化常数进行再次量化,进一步节省显存开销。
  3. 分页优化器 (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 评测指标分布

实体类别PrecisionRecallF1 Score
中药0.78120.79360.7874
西医诊断0.68250.62310.6515
中医证候0.61030.68110.6438
临床表现0.49990.76340.6042
方剂0.45200.40740.4285
中医诊断0.57140.16660.2580

3.2 误差分析与讨论

通过对各类别 F1 值的回归分析,可以发现模型表现呈现明显的阶梯分布:

  1. 高表现区间 (F1 > 0.75):中药实体的识别效果最佳。其原因在于中药名称(如:茯苓、猪苓)具有相对固定的构词模式与较高的样本频次,模型捕捉到了强特征。
  2. 中表现区间 (F1: 0.55 - 0.70):临床表现与西医诊断表现尚可。此类实体存在“召回率(Recall)明显高于精确率(Precision)”的现象,说明模型在开放域文本中存在过度识别倾向,将部分通用描述误认为医学实体。
  3. 低表现区间 (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: 点击跳转到项目仓库