本模型是基于 StructBERT 的中文地址相似度匹配模型,输入两条中文地址,输出它们之间的相似度类别:
exact_match: 完全匹配(同一地址)partial_match: 部分匹配(同一地址的不同粒度描述)not_match: 不匹配(不同地址)该模型为 BERT-based 文本分类模型(BertForSequenceClassification),不是生成式模型,适用于地址标准化、地址去重等场景。
| 属性 | 值 |
|---|---|
| 模型名称 | iic/nlp_structbert_address-matching_chinese_base |
| 模型架构 | BertForSequenceClassification |
| 参数量 | ~110M |
| 框架 | PyTorch / transformers |
| 语言 | 中文 |
| 权重获取 | ModelScope |
| 数据集 | ccks2021-addrsim |
| 参考精度 (Acc) | 83.86 |
| 组件 | 版本 |
|---|---|
| NPU | Ascend910 |
| PyTorch | 2.9.0 |
| torch_npu | 2.9.0.post1 |
| transformers | 4.24.0+ |
| Python | 3.11.14 |
由于该模型为 BERT-based 分类模型,直接使用 transformers 库加载推理,无需 vLLM 服务化部署。
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
device = "npu:0" if torch.npu.is_available() else "cpu"
tokenizer = AutoTokenizer.from_pretrained("iic/nlp_structbert_address-matching_chinese_base")
model = AutoModelForSequenceClassification.from_pretrained("iic/nlp_structbert_address-matching_chinese_base").to(device)
model.eval()
# 推理示例
inputs = tokenizer("地址A", "地址B", return_tensors="pt", truncation=True, max_length=512)
inputs = {k: v.to(device) for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)python3 inference.py验证结果示例:
地址1: 北京航空航天大学逸夫楼
地址2: 北京航空航天大学图书馆
结果: {'exact_match': 0.0050, 'not_match': 0.1498, 'partial_match': 0.8452}
预测: partial_match (置信度: 0.8452)| 指标 | 数值 |
|---|---|
| 测试设备 | Ascend910 |
| 单次推理平均耗时 | 7.5ms |
| 测试样本数 | 10 |
| 总测试时间 | 0.075s |
在 12 个中文地址对测试集上验证:
| 指标 | 数值 |
|---|---|
| 总测试数 | 12 |
| 正确数 | 12 |
| 准确率 | 100.00% |
torch.npu.is_available() 检测 NPU 可用性NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):
| 指标 | 数值 |
|---|---|
| 测试用例数 | 6 |
| 最大 logits 差异 | 0.00150269 |
| 预测一致性 | 6/6 (100%) |
| 精度要求 | NPU vs CPU 最大 logits 误差 < 1% |
| 精度结论 | 通过 (差异 小于 1%) |
精度评测源代码和日志详见 eval/ 目录。