z
zkx_/Minej--bert-base-personality-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Minej/bert-base-personality on Ascend NPU

1. 简介

本文档记录 Minej/bert-base-personality 性格分类模型在昇腾 NPU(Ascend 910B3)上的迁移适配、精度评测与性能验证结果。

该模型基于 BERT-base(12 层 Transformer,768 维隐藏层)在大五人格(Big Five)相关数据上微调,支持 5 种性格特质的单标签分类(softmax):Openness(开放性)、Conscientiousness(尽责性)、Extraversion(外向性)、Agreeableness(宜人性)、Neuroticism(神经质)。输入为英文文本描述,输出 5 维 softmax 概率分布。

相关获取地址:

  • 权重下载地址(HuggingFace):https://huggingface.co/Minej/bert-base-personality

2. 验证环境

组件版本
torch2.8.0
torch_npu2.8.0.post4
transformers5.8.1
CANN8.5.1
  • NPU:8 × Ascend 910B3
  • 精度对比基准:CPU(x86, PyTorch 2.8.0)

3. 部署使用流程

3.1 环境准备

conda create -n Minej--bert-base-personality python=3.11 -y
conda activate Minej--bert-base-personality

pip install torch==2.8.0 torch_npu==2.8.0.post4 \
    -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install transformers numpy \
    -i https://pypi.tuna.tsinghua.edu.cn/simple

3.2 推理脚本使用

python inference.py --text "I love meeting new people and exploring creative ideas." --device npu

编程接口:

from inference import PersonalityClassifier
clf = PersonalityClassifier(model_path="./Minej--bert-base-personality", device="npu")
results, probs = clf.predict(["I enjoy social gatherings and meeting new people."])
# results[0] → {'Extraversion': 0.85, 'Openness': 0.10, ...}

4. Smoke 验证

python inference.py --text "I love meeting new people and exploring creative ideas." --device npu

预期输出:5 种性格特质按概率降序排列,无运行时错误。

5. 性能参考

测试条件:10 条英文性格描述文本(涵盖不同性格倾向),batch_size=16,NPU 预热 1 轮。

指标数值
CPU 吞吐量37.4 texts/s
NPU 吞吐量414.3 texts/s
CPU/NPU 加速比11.1 ×

BERT-base 12 层模型在 NPU 上获得 11.1× 加速,适合批量文本性格分析场景。

6. 精度评测

6.1 评测方法

分别在 CPU 和 NPU 上对 10 条性格描述文本推理,比较 5 维 softmax 概率向量:

  • 余弦相似度:NPU 与 CPU 输出方向一致性
  • MAE:逐元素平均绝对误差
  • Top-1 准确率:最高概率标签是否一致

6.2 评测结果

指标数值
平均余弦相似度1.000000
MAE0.000120
最大误差0.000363
精度误差率0.0000%
Top-1 准确率100.0%

结论:精度误差率 0.0000%,NPU 与 CPU 输出完全一致,评测通过。

7. 迁移适配说明

7.1 模型结构

  • Backbone:BertModel(12 层 Transformer,768 维隐藏层,BERT-base 标准架构)
  • Classifier Head:线性层(768 → 5),5 类 softmax 分类
  • Tokenizer:BERT WordPiece(vocab.txt),英文优化
  • 权重格式:pytorch_model.bin(无 safetensors 版本),from_pretrained 自动兼容
  • 参数量:109.5M(BERT-base 标准规模)

7.2 适配要点

  1. 使用 AutoModelForSequenceClassification.from_pretrained() 加载
  2. model.to("npu:0") 一步迁移到 NPU,BERT 标准算子(LayerNorm, GELU, Linear)NPU 原生支持
  3. 输入通过 AutoTokenizer 在 CPU 分词后转移至 NPU
  4. 输出 softmax 后 .cpu().numpy() 转回 CPU
  5. pytorch_model.bin 权重格式,无需 safetensors 转换即可加载

7.3 关键代码

import torch, torch_npu
from transformers import AutoModelForSequenceClassification, AutoTokenizer

model = AutoModelForSequenceClassification.from_pretrained(
    "Minej--bert-base-personality"
).to("npu:0")
tokenizer = AutoTokenizer.from_pretrained("Minej--bert-base-personality")

text = "I love meeting new people and exploring creative ideas."
inputs = tokenizer(text, return_tensors="pt", truncation=True)
inputs = {k: v.to("npu:0") for k, v in inputs.items()}

with torch.no_grad():
    logits = model(**inputs).logits
    probs = torch.softmax(logits, dim=-1)
    predicted = model.config.id2label[int(torch.argmax(probs))]

8. 注意事项

  1. 权重格式:仅含 pytorch_model.bin(无 safetensors),from_pretrained 自动兼容但加载速度略慢于 safetensors。建议后续转换为 safetensors 格式以提升加载速度。
  2. 标签含义:5 类标签为 LABEL_0~LABEL_4,需查阅原始模型文档确认与实际大五人格维度(Openness, Conscientiousness, Extraversion, Agreeableness, Neuroticism)的对应关系。
  3. NPU 预热:首次推理触发算子编译(约 3-5 秒),建议生产环境预热后使用。
  4. 输入长度:BERT 最大 512 tokens,长文本将被截断。性格分析建议输入 50-200 词的描述文本。
  5. 批量推理:batch_size=16 时达到最佳吞吐与延迟平衡,可根据 NPU 内存调整。