weixin_72661020/nlp_structbert_sentiment-classification_chinese-large
模型介绍文件和版本Pull Requests讨论分析

StructBERT 中文情感分类模型 (iic/nlp_structbert_sentiment-classification_chinese-large) 昇腾 NPU 适配

1. 简介

本文档记录 iic/nlp_structbert_sentiment-classification_chinese-large 在华为昇腾 Ascend NPU (Ascend910) 环境下的适配与验证结果。

  • 模型类型: text-classification / sentiment-classification
  • 架构: StructBERT (SbertModel) — 24层, hidden_size=1024, 16 attention heads
  • 框架: PyTorch + ModelScope
  • 参数规模: ~326M
  • 标签: 负面(0), 正面(1)
  • 支持语言: 中文

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/iic/nlp_structbert_sentiment-classification_chinese-large
  • 原始论文:https://arxiv.org/abs/1908.04577

2. 验证环境

组件版本
NPUAscend910
CANN25.5.2
PyTorch2.9.0+cpu
torch_npu2.9.0.post1
Python3.11.14
ModelScopelatest
transformerslatest

3. 推理适配

由于 ModelScope Pipeline 不支持直接指定 "npu" 作为 device,采用以下适配方式:

from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import torch_npu

# 在 CPU 上创建 pipeline
semantic_cls = pipeline(
    Tasks.text_classification,
    model=model_dir,
    device="cpu"
)
# 将模型手动转移到 NPU
semantic_cls.model = semantic_cls.model.to("npu:0")
# 执行推理
result = semantic_cls(input="测试文本")

关键点:Pipeline 的内置 collate 函数能正确处理 batch 维度,无需手动处理。

4. Smoke 验证

python3 inference.py

验证结果:

  • 模型成功加载到 NPU (torch.npu.is_available() = True)
  • 推理结果正确返回
  • 负面/正面情感分类准确

5. 性能参考

测试条件:单卡 Ascend910,20 次推理取平均值。

指标数值
平均延迟6431.86 ms
P50 延迟6438.62 ms
P90 延迟6495.47 ms
P99 延迟6519.74 ms
最小延迟6218.15 ms
最大延迟6522.57 ms
标准差64.17 ms
吞吐量0.16 推理/秒

6. 精度评测

使用 10 个中文情感分类测试用例进行精度验证,覆盖正面和负面两种情感。

指标数值
测试用例数10
正确数10
准确率100.00%

测试结果明细:

输入期望预测置信度
这件衣服质量很好,我很喜欢正面正面0.9317
这个产品质量太差了,用了一天就坏了负面负面0.9375
今天天气不错,适合出去游玩正面正面0.8723
启动的时候很大声音,齿轮摩擦的声音负面负面0.8987
服务态度非常好,下次还会再来正面正面0.9397
发货太慢了,等了整整一周负面负面0.9009
这个电影真的很感人,推荐大家去看正面正面0.9461
价格太贵了,不值这个价负面负面0.9055
味道很不错,已经回购好几次了正面正面0.9445
客服完全不理人,体验很差负面负面0.9427

7. 注意事项

  • 该模型为 BERT 架构的情感分类模型,不是生成式模型,不适用 vLLM 部署
  • ModelScope Pipeline 不支持 "npu" 设备名称,需要通过创建后手动移模型的方式适配
  • 本适配方案在 Ascend910 上验证通过
  • 性能数据为首次推理含模型加载和 warm-up 的端到端数据,实际生产部署可通过 warm-up 优化首次延迟

交付物清单

  • inference.py — 推理脚本(NPU 适配版)
  • accuracy_run.py — 精度验证脚本
  • accuracy_run_perf.py — 性能验证脚本
  • eval/accuracy.json — 精度验证结果
  • eval/performance.json — 性能验证结果

Ascend NPU 精度评测

NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):

指标数值
测试用例数6
最大 logits 差异0.00066081
预测一致性6/6 (100%)
精度要求NPU vs CPU 最大 logits 误差 < 1%
精度结论通过 (差异 远小于 1%)

精度评测源代码和日志详见 eval/ 目录。

下载使用量0