z
zkx_/d4data--biomedical-ner-all-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

d4data/biomedical-ner-all on Ascend NPU

1. 简介

本文档记录 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(治疗)等。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/d4data/biomedical-ner-all

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
transformers5.8.1
CANN8.5.1
  • NPU:8 × Ascend 910B3
  • 精度对比基准:CPU(x86, PyTorch 2.8.0)

3. 部署使用流程

3.1 环境准备

conda 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/simple

3.2 模型权重下载

HF_ENDPOINT=https://hf-mirror.com \
    huggingface-cli download d4data/biomedical-ner-all \
    --local-dir ./d4data--biomedical-ner-all

3.3 推理脚本使用

python 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')]

4. Smoke 验证

python inference.py --text "The patient was given aspirin 100mg for headache." --device npu

预期输出:识别到的生物医学实体列表(token, 标签),无运行时错误。

5. 性能参考

测试条件:8 条生物医学文本,batch_size=8,NPU 预热 1 轮。

指标数值
CPU 吞吐量33.8 texts/s
NPU 吞吐量508.5 texts/s
CPU/NPU 加速比15.1 ×

DistilBERT 轻量级架构(6 层)在 NPU 上加速效果显著,适合实时文本分析场景。

6. 精度评测

6.1 评测方法

分别在 CPU 和 NPU 上对 8 条生物医学文本推理,比较每个 token 的 84 维分类 logits:

  • 余弦相似度:NPU 与 CPU 输出 logits 的方向一致性
  • MAE:逐元素平均绝对误差
  • Token 标签匹配率:NPU 与 CPU 逐 token 分类结果一致性

6.2 评测结果

指标数值
平均余弦相似度0.999997
平均 MAE0.002344
精度误差率0.0003%

结论:精度误差率 0.0003%,远低于 1% 要求,评测通过。

7. 迁移适配说明

7.1 模型结构

  • Backbone:DistilBertModel(6 层,768 维,BERT 知识蒸馏版)
  • Classifier Head:线性层(768 → 84),84 类 BIO token 标签
  • Tokenizer:BERT WordPiece(vocab.txt)
  • 权重格式:pytorch_model.bin(无 safetensors 版本),from_pretrained 自动兼容

7.2 适配要点

  1. AutoModelForTokenClassification.from_pretrained() 加载,model.to("npu:0") 迁移
  2. Token 级分类:每个 token 输出 84 维 logits,通过 argmax 确定实体标签
  3. 结果需过滤 [CLS]/[SEP]/[PAD] 特殊 token 和 "O"(非实体)标签
  4. 使用 pytorch_model.bin 权重格式,load_state_dict 自动识别

8. 注意事项

  1. BIO 标注格式:标签使用 BIO scheme(B-Entity 表示实体开始,I-Entity 表示实体内部),解码时需合并连续同类型 token
  2. 84 类实体:涵盖 Activity, Administration, Age, Biological_structure, Clinical_event, Disease, Drug, Symptom, Treatment 等完整生物医学概念
  3. DistilBERT 轻量:仅 6 层 Transformer(BERT-base 的一半),推理速度更快,适合大规模文本批处理
  4. NPU tile 错误:由于 token 分类输出维度高(seq_len × 84),逐元素 MAE 略高于句子级分类模型,但不影响最终标签判断