weixin_72661020/iic_nlp_structbert_qd_spoken_chinese-base
模型介绍文件和版本Pull Requests讨论分析

iic/nlp_structbert_qd_spoken_chinese-base on Ascend NPU

1. 简介

中文口语StructBERT问句识别模型,基于 StructBERT 预训练模型在大量口语数据上使用 MLM+口语化训练目标继续预训练得到。用于判断输入文本是否为问句(text-classification / 二分类任务)。

  • 模型名称: iic/nlp_structbert_qd_spoken_chinese-base
  • 模型类型: strutbert (text-classification)
  • 参数量: ~110M
  • 支持语言: 中文 (zh)
  • 推理框架: PyTorch + transformers + torch_npu
  • 标签: 0=非问句, 1=问句

相关获取地址:

  • 权重下载地址(ModelScope):https://modelscope.cn/models/iic/nlp_structbert_qd_spoken_chinese-base
  • 框架:PyTorch 2.9.0 + torch_npu 2.9.0.post1

2. 验证环境

组件版本
NPUAscend910 (2 逻辑卡)
PyTorch2.9.0
torch_npu2.9.0.post1+gitee7ba04
transformers4.48.3
Python3.11.14
驱动版本25.5.2

模型路径: /opt/atomgit/iic_nlp_structbert_qd_spoken_chinese-base/model/iic/nlp_structbert_qd_spoken_chinese-base

3. 模型加载与推理

import torch
import torch_npu
from transformers import AutoTokenizer, AutoModelForSequenceClassification

model_path = "iic/nlp_structbert_qd_spoken_chinese-base"
device = "npu:0"

tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSequenceClassification.from_pretrained(model_path)
model = model.to(device)
model.eval()

texts = ["今天会议的第一个结论是明天先收集用户的需求吗?"]
inputs = tokenizer(texts, return_tensors="pt", padding=True, truncation=True, max_length=128)
inputs = {k: v.to(device) for k, v in inputs.items()}

with torch.no_grad():
    outputs = model(**inputs)

predictions = torch.argmax(outputs.logits, dim=-1)
probs = torch.nn.functional.softmax(outputs.logits, dim=-1)
# predictions=1 表示问句, predictions=0 表示非问句

4. Smoke 验证

cd /opt/atomgit/iic_nlp_structbert_qd_spoken_chinese-base
python3 inference.py --mode infer --device npu:0

预期输出:

Text                                               Prediction   Label                Confidence
============================================================================================
今天会议的第一个结论是明天先收集用户的需求吗?                            1            是 (question)         0.9734
请确认一下明天的会议时间                                       1            是 (question)         0.6780
这是一个陈述句                                            0            否 (not question)     0.9966

5. 性能参考

测试条件:Ascend910 NPU, float32, max_length=128, 100 batches

Batch Size吞吐量 (samples/s)延迟 (ms/batch)延迟 (ms/sample)
1153.526.516.514
4612.896.531.632
81226.156.520.816
162480.156.450.403
325065.016.320.197

6. 精度评测

NPU vs CPU 精度对比(float32):

指标数值
测试用例数15
最大logits差异0.00835848
预测完全一致是 (15/15)
精度要求NPU vs CPU 最大logits误差 < 1%
精度结论通过

7. 注意事项

  • 该模型是文本分类模型(StructBERT encoder-only),非生成式模型,不支持 vLLM serve 方式部署
  • 推荐使用 transformers 的 AutoModelForSequenceClassification 接口加载
  • 推理时请使用 torch.no_grad() 上下文中执行以减少显存占用
  • 模型使用 BERT tokenizer ( vocab.txt ),支持最大序列长度 512
  • 如需批量推理,建议 batch_size 设置为 32 以最大化吞吐量
下载使用量0