本文档记录 d4data/biomedical-ner-all 生物医学命名实体识别(NER)模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。
该模型基于 DistilBERT(6 层,768 维),在生物医学语料上微调,支持 84 种生物医学实体类型的 token 级分类(BIO scheme)。覆盖的实体类别包括:Activity(活动)、Administration(给药)、Age(年龄)、Biological_structure(生物结构)、Clinical_event(临床事件)、Disease(疾病)、Drug(药物)、Symptom(症状)、Treatment(治疗)等。
相关获取地址:
| 组件 | 版本 |
|---|---|
torch | 2.8.0 |
torch_npu | 2.8.0.post4 |
transformers | 5.8.1 |
CANN | 8.5.1 |
8 × Ascend 910B3conda create -n d4data--biomedical-ner-all python=3.11 -y
conda activate d4data--biomedical-ner-all
pip install torch==2.8.0 torch_npu==2.8.0.post4 \
-i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers numpy \
-i https://pypi.tuna.tsinghua.edu.cn/simpleHF_ENDPOINT=https://hf-mirror.com \
huggingface-cli download d4data/biomedical-ner-all \
--local-dir ./d4data--biomedical-ner-allpython inference.py --text "The patient was given aspirin 100mg for headache." --device npu编程接口:
from inference import BiomedicalNER
ner = BiomedicalNER(model_path="./d4data--biomedical-ner-all", device="npu")
entities = ner.predict(["MRI showed tumor in frontal lobe."])
# → [('tumor', 'B-Disease'), ('frontal', 'B-Biological_structure'), ('lobe', 'I-Biological_structure')]python inference.py --text "The patient was given aspirin 100mg for headache." --device npu预期输出:识别到的生物医学实体列表(token, 标签),无运行时错误。
测试条件:8 条生物医学文本,batch_size=8,NPU 预热 1 轮。
| 指标 | 数值 |
|---|---|
| CPU 吞吐量 | 33.8 texts/s |
| NPU 吞吐量 | 508.5 texts/s |
| CPU/NPU 加速比 | 15.1 × |
DistilBERT 轻量级架构(6 层)在 NPU 上加速效果显著,适合实时文本分析场景。
分别在 CPU 和 NPU 上对 8 条生物医学文本推理,比较每个 token 的 84 维分类 logits:
| 指标 | 数值 |
|---|---|
| 平均余弦相似度 | 0.999997 |
| 平均 MAE | 0.002344 |
| 精度误差率 | 0.0003% |
结论:精度误差率 0.0003%,远低于 1% 要求,评测通过。
from_pretrained 自动兼容AutoModelForTokenClassification.from_pretrained() 加载,model.to("npu:0") 迁移load_state_dict 自动识别