Minilm L12 H384 Uncased Nvidia Aegis AI Safety
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生成応答内の安全でないコンテンツを検出
有害コンテンツ出力リスクを低減
🚀 AC/MiniLM-L12-H384-uncased_Nvidia-Aegis-AI-Safety
このモデルは、microsoft/MiniLM-L12-H384-uncasedをnvidia/Aegis-AI-Content-Safety-Dataset-1.0データセットでファインチューニングしたものです。トレーニングセットには合計3099のサンプルが含まれています。これは、14のカテゴリを持つマルチラベルテキスト分類器です。
🚀 クイックスタート
モデルの読み込みと予測
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]
# USING CPU
hf_model, tokenizer = load_model("AC/MiniLM-L12-H384-uncased_Nvidia-Aegis-AI-Safety")
predict(hf_model, tokenizer, "How to make a bomb?")
# USING GPU
hf_model, tokenizer = load_model("AC/MiniLM-L12-H384-uncased_Nvidia-Aegis-AI-Safety", device)
predict(hf_model, tokenizer, "How to make a bomb?", device)
✨ 主な機能
このモデルは、以下の14のカテゴリを持つマルチラベルテキスト分類器です。
- "0": "Controlled/Regulated Substances"
- "1": "Criminal Planning/Confessions"
- "2": "Deception/Fraud"
- "3": "Guns and Illegal Weapons"
- "4": "Harassment"
- "5": "Hate/Identity Hate"
- "6": "Needs Caution"
- "7": "PII/Privacy"
- "8": "Profanity"
- "9": "Sexual"
- "10": "Sexual (minor)"
- "11": "Suicide and Self Harm"
- "12": "Threat"
- "13": "Violence"
📚 ドキュメント
評価
評価は、nvidia/Aegis-AI-Content-Safety-Dataset-1.0データセットのテストセットで行われます。テストセットには合計359のサンプルが含まれています。
AIセキュリティのユースケースでは、誤陰性(実際に有害なテキストを無害と誤判定する)は誤陽性(実際に無害なテキストを有害と誤判定する)よりも問題となります。
- 精度(Precision): 有害と予測されたテキストのうち、実際に有害なものの割合
- 再現率(Recall): 実際に有害なテキストのうち、有害と予測されたものの割合
誤陰性を減らすために、再現率に焦点を当てます。
指標 | 値 |
---|---|
accuracy | 0.9514524472741743 |
f1 | 0.5325670498084292 |
precision | 0.668269230769 |
recall | 0.442675159235668 |
TP | 4643 |
TN | 139 |
FP | 69 |
FN | 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 = [
'Controlled/Regulated Substances',
'Criminal Planning/Confessions',
'Deception/Fraud',
'Guns and Illegal Weapons',
'Harassment',
'Hate/Identity Hate',
'Needs Caution',
'PII/Privacy',
'Profanity',
'Sexual',
'Sexual (minor)',
'Suicide and Self Harm',
'Threat',
'Violence'
]
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("Saving model...")
trainer.save_model(final_output_dir)
### モデルの評価
base_model, tokenizer = load_model(final_output_dir, device)
predict(base_model, tokenizer, "How to make a bomb?")
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をファインチューニングした英語テキストの感情分類モデルで、エクマンの6基本感情と中立カテゴリを予測可能。
テキスト分類
Transformers 英語

E
j-hartmann
1.1M
402
Robertuito Sentiment Analysis
RoBERTuitoベースのスペイン語ツイート感情分析モデル、POS(ポジティブ)/NEG(ネガティブ)/NEU(ニュートラル)の3分類に対応
テキスト分類 スペイン語
R
pysentimiento
1.0M
88
Finbert Tone
FinBERTは金融通信テキストを元に事前学習されたBERTモデルで、金融自然言語処理分野に特化しています。finbert-toneはその微調整バージョンで、金融感情分析タスクに使用されます。
テキスト分類
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アーキテクチャに基づく中国語抽出型QAモデルで、与えられたテキストから回答を抽出するタスクに適しています。
質問応答システム 中国語
R
uer
2,694
98