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

Falconsai/medical_summarization on Ascend NPU

1. 简介

本文档记录 Falconsai/medical_summarization T5-small 医学文本摘要模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。

该模型基于 T5-small(60M 参数,6 Encoder + 6 Decoder),在医学文献摘要数据集上微调,专门用于将医学文本(如临床笔记、研究摘要、病例报告)压缩为简明摘要。与通用文本摘要模型不同,本模型对医学术语(如疾病名、药物名、解剖学术语)有更好的理解能力。

评测方式与 Falconsai/text_summarization 相同:比较 encoder last_hidden_state,因为 decoder 为自回归生成无法精确对比。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/Falconsai/medical_summarization

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
transformers5.8.1
CANN8.5.1
  • NPU:8 × Ascend 910B3

3. 部署使用流程

3.1 环境准备

conda create -n Falconsai_medical_summarization python=3.11 -y
conda activate Falconsai_medical_summarization

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 推理脚本使用

python inference.py --text "The patient presents with symptoms of fever and cough." --device npu

编程接口:

from inference import T5Summarizer
summarizer = T5Summarizer(
    model_path="./Falconsai_medical_summarization", device="npu"
)
summary = summarizer.summarize(["Clinical report text..."])

4. Smoke 验证

python inference.py --text "The patient presents with fever and persistent cough for 3 days." --device npu

预期输出:输入医学文本的摘要,无运行时错误。

5. 性能参考

测试条件:3 条医学文本,batch_size=4,比较 encoder 前向传播。

指标数值
NPU encoder 加速0.7-1.0×(小 batch 下加速有限)

6. 精度评测

6.1 评测方法

比较 encoder last_hidden_state 的展平余弦相似度。

6.2 评测结果

指标数值
平均余弦相似度1.000000
精度误差率0.0000%

结论:精度误差率 0.0000%,encoder 输出完全一致,评测通过。

7. 迁移适配说明

7.1 模型结构

  • Encoder:T5 Encoder(6 层,512 维)
  • Decoder:T5 Decoder(6 层,512 维,自回归 + cross-attention)
  • 参数量:60M(T5-small)
  • 领域:医学文献微调,对医学术语有专门优化

7.2 适配要点

  1. T5ForConditionalGeneration.from_pretrained() 加载
  2. model.to("npu:0") 迁移
  3. encoder 输出:model.encoder(**inputs).last_hidden_state
  4. 与 Falconsai/text_summarization 完全相同的适配代码

7.3 关键代码

import torch, torch_npu
from transformers import T5ForConditionalGeneration, AutoTokenizer

model = T5ForConditionalGeneration.from_pretrained(
    "Falconsai/medical_summarization"
).to("npu:0")
tokenizer = AutoTokenizer.from_pretrained("Falconsai/medical_summarization")

text = "The patient presents with symptoms of fever and cough."
inputs = tokenizer(text, return_tensors="pt", truncation=True)
enc_inputs = {k: v.to("npu:0") for k, v in inputs.items()
              if k in ["input_ids", "attention_mask"]}

with torch.no_grad():
    encoder_output = model.encoder(**enc_inputs).last_hidden_state

8. 注意事项

  1. 医学领域专用:模型在医学文献上微调,对疾病名称、药物名称、临床症状描述等术语有更好的理解。普通文本也可摘要但非最佳场景。
  2. 任务前缀:T5 格式输入,通常需加 "summarize: " 前缀指定任务。但与通用摘要模型不同,医学模型可能使用其他前缀(如 "summarize medical: "),具体参考原模型文档。
  3. Seq2Seq 评测限制:精度评测仅覆盖 encoder,decoder 自回归生成的随机性使逐 token 比较无意义。encoder 一致性已保证 decoder 输入质量。
  4. 首次 NPU 推理:T5-small encoder+decoder 共 12 层,预热约 4-6 秒。
  5. 与通用 T5 对比:与 Falconsai/text_summarization 同架构但领域不同。医学场景应优先使用本模型。