语言: 中文
标签:
- 文本分类
- ONNX
- INT8
- RoBERTa
- 情感分析
- 多类别分类
- 多标签分类
- Optimum
数据集:
- go_emotions
许可证: MIT
推理: 不支持
小部件示例:
- 文本: "谢天谢地ONNX可用,速度快多了!"
此模型是https://huggingface.co/SamLowe/roberta-base-go_emotions的ONNX版本。
全精度ONNX版本
onnx/model.onnx
为全精度ONNX版本:
- 精度指标与原始Transformers模型完全一致
- 模型体积相同(499MB)
- 推理速度更快,尤其对小批量数据
- 实测在8核11代i7 CPU上使用ONNXRuntime时,批量大小为1的情况下速度提升2至3倍
指标(固定阈值0.5二值化预测)
- 准确率: 0.474
- 精确率: 0.575
- 召回率: 0.396
- F1分数: 0.450
更多优化细节(如通过标签特定阈值最大化F1分数)请参考原模型卡片。
量化(INT8)ONNX版本
onnx/model_quantized.onnx
为INT8量化版本:
- 体积仅为全精度模型的1/4(125MB)
- 保持近乎相同的精度
- 推理速度最快
- 在相同测试环境下比全精度ONNX快2倍
- 比原始Transformers模型快约5倍(批量大小为1时)
量化模型指标(固定阈值0.5)
- 准确率: 0.475
- 精确率: 0.582
- 召回率: 0.398
- F1分数: 0.447
指标与全精度版本几乎一致,优化方法同前。
使用方法
使用Optimum库ONNX类
sentences = ["ONNX对小批量数据处理极快,令人印象深刻"]
from transformers import AutoTokenizer, pipeline
from optimum.onnxruntime import ORTModelForSequenceClassification
model_id = "SamLowe/roberta-base-go_emotions-onnx"
file_name = "onnx/model_quantized.onnx"
model = ORTModelForSequenceClassification.from_pretrained(model_id, file_name=file_name)
tokenizer = AutoTokenizer.from_pretrained(model_id)
onnx_classifier = pipeline(
task="文本分类",
model=model,
tokenizer=tokenizer,
top_k=None,
function_to_apply="sigmoid"
)
print(onnx_classifier(sentences))
使用ONNXRuntime直接推理
from tokenizers import Tokenizer
import onnxruntime as ort
import numpy as np
tokenizer = Tokenizer.from_pretrained("SamLowe/roberta-base-go_emotions")
tokenizer.enable_padding(length=None)
model = ort.InferenceSession("模型路径.onnx", providers=["CPUExecutionProvider"])
tokens = tokenizer.encode_batch(["示例文本"])
logits = model.run(
output_names=["logits"],
input_feed={
"input_ids": [t.ids for t in tokens],
"attention_mask": [t.attention_mask for t in tokens]
}
)[0]
scores = 1.0 / (1.0 + np.exp(-logits))
top_label = np.argmax(scores[0])
print(f"预测标签: {labels[top_label]}, 置信度: {scores[0][top_label]:.2f}")
示例笔记本(即将更新)
包含更多使用细节、精度测试与性能对比的笔记本将后续发布。