本文档记录 iic/nlp_structbert_outbound-intention_chinese-tiny 在华为昇腾 Ascend910 NPU 环境的适配与验证结果。
该模型是一个基于 StructBERT 的中文外呼意图识别模型(tiny 版本),用于多标签文本分类任务,可识别以下意图类别:
相关获取地址:
| 组件 | 版本 |
|---|---|
| NPU | Ascend910 |
| CANN | 25.5.2 |
| PyTorch | 2.x |
| torch_npu | 可用 |
| transformers | 4.x |
/opt/atomgit/models/iic/nlp_structbert_outbound-intention_chinese-tiny/model已验证通过的推理示例:
import torch
from transformers import AutoTokenizer, AutoConfig, AutoModelForSequenceClassification
import json
model_path = "/path/to/model"
device = "npu:0" if torch.npu.is_available() else "cpu"
# 加载标签映射
with open(f"{model_path}/label_mapping.json") as f:
label_mapping = json.load(f)
idx_to_label = {v: k for k, v in label_mapping.items()}
# 加载模型
config = AutoConfig.from_pretrained(model_path)
config.num_labels = len(label_mapping)
config.problem_type = "multi_label_classification"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSequenceClassification.from_pretrained(
model_path, config=config, torch_dtype=torch.float32
).to(device)
model.eval()
# 推理
text = "您的验证码是123456,请勿泄露给他人。"
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=128)
inputs = {k: v.to(device) for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
probabilities = torch.sigmoid(outputs.logits).cpu().numpy()[0]
for idx, prob in enumerate(probabilities):
if prob > 0.5:
print(f"{idx_to_label[idx]}: {prob:.4f}")直接运行推理脚本:
python3 inference.py预期输出示例:
文本: 您的验证码是123456,请勿泄露给他人。
预测结果:
- 验证码: 0.8597测试条件:20次推理取平均,Ascend910 单卡。
| 文本长度 | 平均延迟 (ms) | 吞吐量 (样本/秒) |
|---|---|---|
| 短文本 (6字) | 2.73 | 366 |
| 中文本 (23字) | 2.66 | 376 |
| 长文本 (142字) | 2.66 | 376 |
| 指标 | 数值 |
|---|---|
| 测试用例数 | 10 |
| 正确数 | 8 |
| 准确率 | 80.00% |
| 评测工具 | eval/accuracy_test.py |
snapshot_download 下载problem_type 为 multi_label_classification,需显式设置 num_labels=5torch.sigmoid 获取多标签概率,阈值 0.5npu:0 设备NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):
| 指标 | 数值 |
|---|---|
| 测试用例数 | 6 |
| 最大 logits 差异 | 0.00043380 |
| 预测一致性 | 6/6 (100%) |
| 精度要求 | NPU vs CPU 最大 logits 误差 < 1% |
| 精度结论 | 通过 (差异 远小于 1%) |
精度评测源代码和日志详见 eval/ 目录。