Dark Dwarf Blog background

ONNX 模型推理

ONNX 模型推理

在给一个 Chat Agent 做内容过滤的时候使用了 ONNX 做小模型推理,这里记录一下。

ONNX 是一个适合做静态任务推理的模型。比如内容过滤场景,模型只需要 forward 一次就出结果,对这种任务,ONNX 可以生成优化后的静态计算图。由于图是静态的, ONNX 可以在加载模型时就做好一系列的优化、加载模型和推理速度都快很多。

使用如下命令导入模型:

pip install "optimum[onnxruntime]" transformers torch

optimum-cli export onnx --model textdetox/bert-multilingual-toxicity-classifier --task text-classification ./toxic-bert-onnx

导入后就可以使用模型进行推理了,总体流程如下:

5. 最终结论
4. 后处理
3. ONNX 推理 (ONNX Runtime)
2. 预处理 (Smit-Tokenizer)
1. 输入阶段

Embedding (MiniLM)

Toxicity (BERT)

Embedding

Toxicity

原始文本 Text

模型类型?

toLowerCase()
(不区分大小写)

WordPiece 分词

addSpacesAroundCjk()
(处理中文歧义)

WordPiece 分词
(区分大小写)

添加特殊 Token:
[CLS], [SEP], [PAD]

构建 Tensor:
input_ids, attention_mask, token_type_ids

session.run()
(CPU 执行)

输出解析

平均池化 (Mean Pooling)
基于 attention_mask

L2 归一化 (L2 Norm)

计算语义密度 / 质量分
(与原型中心点对比相似度)

获取 Logits
[not_toxic, toxic]

Softmax 转换为概率

判断阈值 (0.5)
得出 isToxic 结论

文本质量得分

违规判定结果