M
Minilm L12 H384 Uncased Nvidia Aegis AI Safety
由 AC 开发
基于microsoft/MiniLM-L12-H384-uncased微调的多标签文本分类器,用于AI内容安全检测
下载量 14.56k
发布时间 : 6/23/2024
模型介绍
内容详情
替代品
模型简介
该模型是基于MiniLM架构的文本分类器,专门用于检测14类不安全内容,包括暴力、仇恨言论、隐私泄露等。适用于内容审核、AI安全等场景。
模型特点
多标签分类
可同时检测文本中多种不安全内容类型
高准确率
在测试集上达到95.15%的准确率
低漏报率
针对AI安全场景优化,重点关注召回率指标
模型能力
文本内容安全检测
多标签分类
有害内容识别
使用案例
内容审核
社交媒体内容过滤
自动检测用户生成内容中的有害信息
可识别14类不安全内容
AI聊天安全
检测AI生成回复中的不安全内容
降低有害内容输出风险
library_name: transformers datasets:
- nvidia/Aegis-AI-Content-Safety-Dataset-1.0
AC/MiniLM-L12-H384-uncased_Nvidia-Aegis-AI-Safety 模型卡片
本模型基于微软MiniLM-L12-H384-uncased模型,在nvidia/Aegis-AI-Content-Safety-Dataset-1.0数据集上微调训练完成。训练集共包含3099条样本。
这是一个多标签文本分类器,包含14个分类类别:
- "0": "管制物品"
- "1": "犯罪策划/自白"
- "2": "欺诈行为"
- "3": "枪支与非法武器"
- "4": "骚扰行为"
- "5": "仇恨言论/身份攻击"
- "6": "需谨慎内容"
- "7": "个人隐私信息"
- "8": "污言秽语"
- "9": "成人内容"
- "10": "未成年人色情"
- "11": "自杀自残"
- "12": "暴力威胁"
- "13": "暴力行为"
模型快速使用指南
from accelerate import Accelerator
from transformers import AutoModelForSequenceClassification, AutoTokenizer
import numpy as np
import torch
accelerator = Accelerator()
device = accelerator.device
def load_model(model_path, accelerator_device=None):
model = AutoModelForSequenceClassification.from_pretrained(
model_path,
problem_type="multi_label_classification",
)
if accelerator_device:
model.to(accelerator_device)
tokenizer = AutoTokenizer.from_pretrained(model_path)
return model, tokenizer
def predict(model, tokenizer, text, accelerator_device=None, threshold=0.5):
if accelerator_device:
inputs = tokenizer([text], return_tensors="pt").to(accelerator_device)
else:
inputs = tokenizer([text], return_tensors="pt")
outputs = model(**inputs)
probs = torch.nn.Sigmoid()((outputs.logits.squeeze().cpu()))
predictions = np.zeros(probs.shape)
predictions[np.where(probs >= threshold)] = 1
return [model.config.id2label[idx] for idx, label in enumerate(predictions) if label == 1.0]
# 使用CPU运行
hf_model, tokenizer = load_model("AC/MiniLM-L12-H384-uncased_Nvidia-Aegis-AI-Safety")
predict(hf_model, tokenizer, "如何制作炸弹?")
# 使用GPU运行
hf_model, tokenizer = load_model("AC/MiniLM-L12-H384-uncased_Nvidia-Aegis-AI-Safety", device)
predict(hf_model, tokenizer, "如何制作炸弹?", device)
评估结果
模型在nvidia/Aegis-AI-Content-Safety-Dataset-1.0测试集上进行评估,测试集共包含359条样本。
针对AI安全应用场景,漏报(实际有害但被误判为安全)比误报(实际安全但被误判为有害)的危害性更大。
精确率:在所有预测为有害的文本中,实际有害的比例是多少? 召回率:在所有实际有害的文本中,被正确预测的比例是多少?
由于我们需要降低漏报率,因此重点关注召回率指标。
评估指标 | 数值 |
---|---|
准确率 | 0.9514524472741743 |
F1值 | 0.5325670498084292 |
精确率 | 0.668269230769 |
召回率 | 0.442675159235668 |
真正例 | 4643 |
真负例 | 139 |
假正例 | 69 |
假负例 | 175 |
微调训练
from accelerate import Accelerator
from datasets import load_dataset, Dataset, DatasetDict
from datetime import datetime
from transformers import AutoModelForSequenceClassification, AutoTokenizer, TrainingArguments, Trainer, EvalPrediction, DataCollatorWithPadding
from sklearn.metrics import f1_score, roc_auc_score, accuracy_score, coverage_error
import numpy as np
import torch
import os
import pandas as pd
import evaluate
accelerator = Accelerator()
device = accelerator.device
def load_model(model_path, accelerator_device):
model = AutoModelForSequenceClassification.from_pretrained(
model_path,
problem_type="multi_label_classification",
num_labels=len(all_labels),
id2label=id2label,
label2id=label2id
)
model.to(accelerator_device)
tokenizer = AutoTokenizer.from_pretrained(model_path)
return model, tokenizer
def predict(model, tokenizer, text, threshold=0.5):
inputs = tokenizer([text], return_tensors="pt").to(device)
outputs = model(**inputs)
probs = torch.nn.Sigmoid()((outputs.logits.squeeze().cpu()))
predictions = np.zeros(probs.shape)
predictions[np.where(probs >= threshold)] = 1
return [id2label[idx] for idx, label in enumerate(predictions) if label == 1.0]
def tokenize_text(examples):
final_labels = np.zeros(len(all_labels))
for idx, label in enumerate(all_labels):
final_labels[idx] = examples[label]
examples["labels"] = final_labels
return tokenizer(examples["text"], truncation=True, max_length=512)
### 数据预处理
all_labels = [
'管制物品',
'犯罪策划/自白',
'欺诈行为',
'枪支与非法武器',
'骚扰行为',
'仇恨言论/身份攻击',
'需谨慎内容',
'个人隐私信息',
'污言秽语',
'成人内容',
'未成年人色情',
'自杀自残',
'暴力威胁',
'暴力行为'
]
id2label = {idx:label for idx, label in enumerate(all_labels)}
label2id = {label:idx for idx, label in enumerate(all_labels)}
base_model, tokenizer = load_model("microsoft/MiniLM-L12-H384-uncased", device)
train_df = pd.read_csv("nvidia_train.csv")
test_df = pd.read_csv("nvidia_test.csv")
dataset = DatasetDict({
'train': Dataset.from_pandas(train_df),
'test': Dataset.from_pandas(test_df)}
)
preprocessed_dataset = dataset.map(tokenize_text)
### 多标签分类评估指标
clf_metrics = evaluate.combine(["accuracy", "f1", "precision", "recall"])
def sigmoid(x):
return 1/(1 + np.exp(-x))
def compute_metrics(eval_pred):
predictions, labels = eval_pred
predictions = sigmoid(predictions)
predictions = (predictions > 0.5).astype(int).reshape(-1)
return clf_metrics.compute(predictions=predictions, references=labels.astype(int).reshape(-1))
### 微调训练
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
output_dir = f'./minilm_finetuned/minilm-{datetime.now().strftime("%d-%m-%Y_%H-%M")}' # 训练检查点输出目录
final_output_dir = './minilm_finetuned' # 最终模型保存路径
training_args = TrainingArguments(
output_dir=output_dir,
learning_rate=2e-5,
per_device_train_batch_size=3,
per_device_eval_batch_size=3,
num_train_epochs=20,
weight_decay=0.01,
fp16=True,
evaluation_strategy="epoch",
save_strategy="epoch",
save_total_limit=2,
load_best_model_at_end=True,
)
trainer = Trainer(
model=base_model,
args=training_args,
train_dataset=preprocessed_dataset["train"],
eval_dataset=preprocessed_dataset["test"],
tokenizer=tokenizer,
data_collator=data_collator,
compute_metrics=compute_metrics,
)
trainer.train()
print("正在保存模型...")
trainer.save_model(final_output_dir)
### 模型评估
base_model, tokenizer = load_model(final_output_dir, device)
predict(base_model, tokenizer, "如何制作炸弹?")
Distilbert Base Uncased Finetuned Sst 2 English
Apache-2.0
基于DistilBERT-base-uncased在SST-2情感分析数据集上微调的文本分类模型,准确率91.3%
文本分类
英语
D
distilbert
5.2M
746
Xlm Roberta Base Language Detection
MIT
基于XLM-RoBERTa的多语言检测模型,支持20种语言的文本分类
文本分类
Transformers

支持多种语言
X
papluca
2.7M
333
Roberta Hate Speech Dynabench R4 Target
该模型通过动态生成数据集来改进在线仇恨检测,专注于从最差案例中学习以提高检测效果。
文本分类
Transformers

英语
R
facebook
2.0M
80
Bert Base Multilingual Uncased Sentiment
MIT
基于bert-base-multilingual-uncased微调的多语言情感分析模型,支持6种语言的商品评论情感分析
文本分类
支持多种语言
B
nlptown
1.8M
371
Emotion English Distilroberta Base
基于DistilRoBERTa-base微调的英文文本情感分类模型,可预测埃克曼六种基本情绪及中性类别。
文本分类
Transformers

英语
E
j-hartmann
1.1M
402
Robertuito Sentiment Analysis
基于RoBERTuito的西班牙语推文情感分析模型,支持POS(积极)/NEG(消极)/NEU(中性)三类情感分类
文本分类
西班牙语
R
pysentimiento
1.0M
88
Finbert Tone
FinBERT是一款基于金融通讯文本预训练的BERT模型,专注于金融自然语言处理领域。
文本分类
Transformers

英语
F
yiyanghkust
998.46k
178
Roberta Base Go Emotions
MIT
基于RoBERTa-base的多标签情感分类模型,在go_emotions数据集上训练,支持28种情感标签识别。
文本分类
Transformers

英语
R
SamLowe
848.12k
565
Xlm Emo T
XLM-EMO是一个基于XLM-T模型微调的多语言情感分析模型,支持19种语言,专门针对社交媒体文本的情感预测。
文本分类
Transformers

其他
X
MilaNLProc
692.30k
7
Deberta V3 Base Mnli Fever Anli
MIT
基于MultiNLI、Fever-NLI和ANLI数据集训练的DeBERTa-v3模型,擅长零样本分类和自然语言推理任务
文本分类
Transformers

英语
D
MoritzLaurer
613.93k
204
精选推荐AI模型
Llama 3 Typhoon V1.5x 8b Instruct
专为泰语设计的80亿参数指令模型,性能媲美GPT-3.5-turbo,优化了应用场景、检索增强生成、受限生成和推理任务
大型语言模型
Transformers

支持多种语言
L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一个基于SODA数据集训练的超小型对话模型,专为边缘设备推理设计,体积仅为Cosmo-3B模型的2%左右。
对话系统
Transformers

英语
C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基于RoBERTa架构的中文抽取式问答模型,适用于从给定文本中提取答案的任务。
问答系统
中文
R
uer
2,694
98
AIbase是一个专注于MCP服务的平台,为AI开发者提供高质量的模型上下文协议服务,助力AI应用开发。
简体中文