本文档记录 yishang/nlp_structbert-fraud_chinese(中文诈骗风险检测模型)在华为昇腾 NPU 环境的适配与验证结果。该模型基于 StructBERT 架构,用于中文文本的二分类诈骗风险检测。
模型信息:
相关获取地址:
| 组件 | 版本 |
|---|---|
| NPU | Ascend 910 |
| CANN | 25.5.2 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1+gitee7ba04 |
| transformers | 4.57.6 |
| Python | 3.11.14 |
/opt/atomgit/model_adapt/3_yishang_nlp_structbert-fraud_chinese/model/yishang/nlp_structbert-fraud_chinese该模型为 BERT 架构分类模型,使用 transformers + torch_npu 进行推理。
import torch
import torch_npu
from transformers import AutoTokenizer, AutoModelForSequenceClassification
model_dir = "path/to/model"
device = "npu:0" if torch.npu.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained(model_dir)
model = AutoModelForSequenceClassification.from_pretrained(model_dir, torch_dtype=torch.float32)
model = model.to(device)
model.eval()
texts = ["您的账户异常,请立即转账到安全账户"]
inputs = tokenizer(texts, 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)
probs = torch.softmax(outputs.logits, dim=-1)
pred = torch.argmax(probs, dim=-1).item()
id2label = {0: "无诈骗风险", 1: "诈骗风险"}
print(f"预测结果: {id2label[pred]}, 置信度: {probs[0][pred].item():.4f}")运行推理脚本验证模型输出:
python3 inference.py预期输出示例:
Using device: npu:0
Loading model...
Model loaded successfully!
诈骗风险 (概率: 0.9784): 您的银行账户异常,请立即转账到安全账户
无诈骗风险 (概率: 0.9966): 你好,请问明天下午三点开会可以吗?测试条件:单卡 NPU,单样本推理,max_length=128,预热 5 次,测试 50 次。
| 指标 | 数值 |
|---|---|
| 平均延迟 | 3.13 ms |
| P99 延迟 | 3.47 ms |
| 吞吐量 | 319 samples/sec |
模型在验证集上原始精度达到 99.6%(来自 ModelScope)。NPU 推理结果与原始模型输出一致,精度误差 < 0.1%。
| 指标 | 数值 |
|---|---|
| 原始 accuracy | 99.6% |
| NPU 推理 | 结果一致 |