モデルカード: JTF (Japanese Toxic Filter) v3

配信チャットのコメントを 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% (無害ラベルの誤りはほぼなし)。

評価 (検証データ 23,518 件、しきい値は検証データで調整)

検証データは有害率 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 になるため、用途によって理由ラベルで分けるのをおすすめします。

  • 常に消す: harassment / threat / discrimination / obscene (0.6 以上)、spoiler / self_promotion / spam (0.7 以上)
  • instruction (0.7 以上): 指示禁止の配信だけ消す (--advice-ban)
  • toxicity が 0.9 以上なのに理由ラベルが立たないもの: 「要確認」

制限・注意

  • 単語への過敏反応が残っています。 「胸はっていけ!」は NG のまま (検証データにあり学習には使っていない)。表記違いの「胸張って進もう」「胸熱の展開だった」は OK。追加の無害文で改善したが、完全ではない
  • 遠回しな煽りに弱い。 「ゲーム向いてないよ」「本当に頭悪いな」は harassment のスコアが低く (toxicity は高い)、理由ラベルでは拾えない
  • 攻略アドバイスは instruction に引っかかる。 学習データでは頼まれていない攻略指示を指示厨 (有害) として扱っているため。丁寧なアドバイスと命令口調の指示は分けていない
  • 同じ文字の連打 (「wwwwwww」) は toxicity が 0.8 前後になる (spam 寄り)
  • 弱いラベル: harassment (F1 0.73)、instruction・pigeon (0.77)。件数が少ない spoiler / pigeon / instruction はデータの追加余地がある
  • 脅迫データが少ない。 チャットらしい脅しは約 2,000 件
  • 政治的な発言は中立的でも discrimination になる。 配信での政治の話題の禁止という運用方針に合わせた意図的な設計です。政治を許可する用途には向かない
  • ドメイン: 配信チャット向けのデータが多いため、それ以外の文章 (ニュース・長文・敬語の問い合わせなど) では精度が落ちる可能性がある
  • 言語: 日本語のみで、他言語は想定していません。

ライセンス・データの扱い

  • ベースモデル (ku-nlp/deberta-v3-base-japanese) のライセンスに従う
  • 学習データのライセンスは混在している (裁判例 worker_1 は CC BY-NC、LLM-jp-Toxicity は CC BY 4.0 など)。公開・商用利用する場合は各データセットのライセンスを確認すること
  • 学習データには有害な発言・わいせつな文章・危険な依頼文が含まれる (データ自体は配布物に含めない想定)
Downloads last month
3
Safetensors
Model size
0.2B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for j-llm/toxic_v2

Finetuned
(5)
this model
Finetunes
1 model

Datasets used to train j-llm/toxic_v2