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

Biomedical NER (d4data-biomedical-ner-all) on Ascend NPU

1. 简介

本文档记录 d4data/biomedical-ner-all 在 Ascend 910B3 NPU 环境下的适配与验证结果。该模型是一个基于 DistilBERT 的生物医学命名实体识别(NER)模型,可识别 83 种实体类型(包括疾病、药物、症状、检查、手术等)。

本仓库提供:

  • inference.py:NPU 推理脚本,支持单条/批量文本实体识别
  • eval.py:精度与性能评测脚本,对比 NPU 与 CPU 的 token 级预测一致性
  • log.txt:评测运行日志

相关获取地址:

  • 模型权重(HuggingFace):https://huggingface.co/d4data/biomedical-ner-all
  • 镜像加速:https://hf-mirror.com

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
transformers4.57.6
  • NPU:Ascend 910B3,1 逻辑卡
  • 模型架构:DistilBertForTokenClassification(6 层,768 隐藏维,12 注意力头)
  • 实体类型:83 种 BIO 标注标签
  • 最大序列长度:512

3. 推理启动

环境准备

pip install torch torch_npu transformers
export ASCEND_RT_VISIBLE_DEVICES=0

单条文本推理

python inference.py --text "The patient was diagnosed with diabetes and prescribed metformin."

批量推理

python inference.py --input-file texts.txt

输出格式

{
  "model": "d4data--biomedical-ner-all",
  "device": "npu:0",
  "num_texts": 1,
  "results": [
    {
      "text": "The patient was diagnosed with diabetes...",
      "entities": [
        {"entity": "Disease_disorder", "text": "diabetes"},
        {"entity": "Medication", "text": "metformin"}
      ]
    }
  ]
}

4. Smoke 验证

python inference.py --text "The patient has hypertension and takes lisinopril."

5. 性能参考

指标CPUNPU
平均推理时间0.1885 s0.0138 s
吞吐量53.06 texts/s722.46 texts/s
加速比-13.66x

6. 精度评测

精度评测采用 Token 级标注准确率作为指标。

指标数值
测试样本数10
总 Token 数199
匹配 Token 数198
Token 准确率99.50%
错误率0.50%
精度要求(错误率 < 1%)通过

结论:NPU 与 CPU 的 token 级实体标注一致率达 99.50%,错误率 0.50% 低于 1% 阈值,精度通过验证。

7. 注意事项

  1. 子词拆分:由于 BERT 类模型使用 WordPiece/BPE 分词,实体可能被拆分为多个子词(如 ##form、##lit),输出中会合并显示。
  2. 实体类型:该模型支持 83 种实体类型,包括疾病、药物、症状、检查、手术、剂量等生物医学相关实体。
  3. 小模型性能:DistilBERT 参数量较小,NPU 加速比(13.66x)低于大模型,但绝对吞吐量更高。