llm-jp/AnswerCarefully
Viewer • Updated • 4.92k • 3.27k • 183
How to use j-llm/toxic_v2 with Transformers:
# Use a pipeline as a high-level helper
from transformers import pipeline
pipe = pipeline("text-classification", model="j-llm/toxic_v2") # pip install -U transformers accelerate
# Load model directly
from transformers import AutoTokenizer, AutoModelForSequenceClassification
tokenizer = AutoTokenizer.from_pretrained("j-llm/toxic_v2")
model = AutoModelForSequenceClassification.from_pretrained("j-llm/toxic_v2", device_map="auto")配信チャットのコメントを 10 ラベルで判定する日本語の分類モデルです。 ベースモデル: ku-nlp/deberta-v3-base-japanese
| 項目 | 内容 |
|---|---|
| タスク | マルチラベル分類 (1 つのコメントに複数のラベルが付く) |
| 入力 | 日本語のコメント 1 件 (NFKC 正規化して使う。学習は最大 128 トークン、NPU 版は 64 トークン固定) |
| 出力 | 10 ラベルそれぞれのスコア (0〜1) |
| パラメータ数 | 約 1.6 億 |
| 想定用途 | 配信のチャット欄で、表示・読み上げ・AI 返答の前に有害なコメントを判定する |
| ラベル | 意味 |
|---|---|
| toxicity | 下記のどれかに当てはまる、テキスト全体 |
| harassment | 罵倒・誹謗中傷・煽り |
| obscene | 性的・わいせつ |
| discrimination | 差別。政治的な発言は中立的なものも含める (配信で政治の話題を禁止する方針のため) |
| threat | 脅迫・殺害予告 |
| spoiler | ネタバレ・先の展開への言及 |
| instruction | 指示厨 (頼まれていない攻略・操作の指示) |
| pigeon | 鳩 (他の配信者・事務所の話題を持ち込む) |
| self_promotion | 宣伝・誘導 |
| spam | 連投・荒らし・意味のない文字列 |
toxicity は罵倒に限らず、どれかの理由で配信に出したくないテキスト全体のスコアです。
指示厨・ネタバレ・宣伝・連投も含むので、「罵倒だけ」を見たいときは harassment / threat / discrimination / obscene を使う (後述)。
| 場所 | 中身 |
|---|---|
out/ |
PyTorch (fp32, 613 MB)。GPU 推論・再変換の元 |
out/npu/ |
OpenVINO int8 (207 MB)。CPU / Intel NPU 用。入力は [1, 64] 固定 |
out/thresholds.json |
ラベルごとのしきい値 (検証データで F1 が最大になる値) |
server.py / run_server.bat |
HTTP 判定サーバー (POST /judge) |
post.py |
サーバーを使った判定の例 |
| 項目 | 内容 |
|---|---|
| ベース | ku-nlp/deberta-v3-base-japanese (fp16 保存のため fp32 に変換して学習) |
| 設定 | 3 エポック、バッチ 64、lr 3e-5、最大 128 トークン、混合精度 (fp16 autocast)、seed 42 |
| 学習時間 | 約 95 分 (RTX 5060 Ti 16GB) |
| データ | 重複統合後 473,110 件 → 見直しで除外 (exclude.csv 1,157 件 + review.csv 1,593 件) → 学習 446,842 件 / 検証 23,518 件 (5%、有害/無害で層化) |
| 有害率 | 学習 43.5% / 検証 43.5% |
| ソース | 件数 | 中身 |
|---|---|---|
| 独自データ | 228,435 | |
| sensai | 66,407 | YouTube で削除された VTuber チャット (Gemma で理由を付与) |
| 合成データ | 61,644 | Gemma で生成した配信チャット風の文 |
| llm-jp-AC-inst / llm-jp-AC | 32,629 / 3,389 | AnswerCarefully の質問・回答 |
| mining/kakolog | 27,409 | ニコニコ実況から掘り出した文 (政治的発言が多い) |
| labeled_public | 24,620 | Nemotron-Safety-Guard / 裁判例 / RTP-LX |
| LLM-jp-Toxicity | 20,398 | Web 文書を文に分けて再判定 |
| MTD | 8,691 | textdetox 日本語 |
| japanese-toxic-dataset | 437 | inspection-ai |
| 追加安全 | 686 | 誤検出しやすい語 (胸・切り替え・死ぬ・爆弾・撃つ・脱 など) の無害な文。手書き 196 文 + 呼びかけ・語尾の組み合わせ |
ラベルの多くは LLM (Gemma) による自動付与。推定した有害ラベルの誤りは約 7〜11% (無害ラベルの誤りはほぼなし)。
検証データは有害率 43.5% で、実際の配信チャット (有害率 1〜5%) よりずっと高いです。本番ではこの表より誤検出の割合が目立ちます。 そのため複数のラベルのスコアを合算して判定することをおすすめします。
| ラベル | AUC | F1 | しきい値 | 正例数 | チャット系 AUC / F1 |
|---|---|---|---|---|---|
| toxicity | 0.9915 | 0.9466 | 0.58 | 10,234 | 0.9929 / 0.9469 |
| harassment | 0.9696 | 0.7252 | 0.47 | 2,150 | 0.9738 / 0.7435 |
| obscene | 0.9905 | 0.8659 | 0.52 | 1,578 | 0.9923 / 0.8679 |
| discrimination | 0.9929 | 0.8969 | 0.49 | 2,541 | 0.9955 / 0.9123 |
| threat | 0.9919 | 0.8665 | 0.54 | 1,515 | 0.9956 / 0.8630 |
| spoiler | 0.9899 | 0.8626 | 0.79 | 283 | 0.9925 / 0.8642 |
| instruction | 0.9870 | 0.7684 | 0.66 | 516 | 0.9878 / 0.7774 |
| pigeon | 0.9887 | 0.7678 | 0.40 | 440 | 0.9883 / 0.7705 |
| self_promotion | 0.9944 | 0.8747 | 0.67 | 506 | 0.9951 / 0.9093 |
| spam | 0.9883 | 0.8388 | 0.47 | 1,351 | 0.9917 / 0.8661 |
| macro F1 | 0.8413 | 0.8521 |
post.py)
toxicity だけで判定すると、攻略アドバイスなども NG になるため、用途によって理由ラベルで分けるのをおすすめします。
--advice-ban)