license: cc-by-nc-nd-4.0
language:
- ru
library_name: transformers
pipeline_tag: text-classification
tags:
- toxicity-classification
- russian
- telegram
- moderation
- deberta
base_model: deepvk/deberta-v1-base
model-index:
- name: ToxicLord v1
results:
- task:
type: text-classification
name: Классификация текста
dataset:
name: Внутренний тестовый набор токсичности
type: private
metrics:
- type: accuracy
value: 0.968937125748503
name: Точность
- type: precision
value: 0.9309514251304697
name: Precision токсичного класса
- type: recall
value: 0.905152224824356
name: Recall токсичного класса
- type: f1
value: 0.9178705719374629
name: F1 токсичного класса
- type: f1
value: 0.9493585102268198
name: Macro F1
ToxicLord v1
ToxicLord v1 - русскоязычная модель классификации токсичности для чат-модерации. Модель классифицирует короткие сообщения как clean или toxic и настроена под стиль Telegram-чатов.
Модель является fine-tune версии deepvk/deberta-v1-base для задачи бинарной классификации токсичности на русском языке.
Модель предназначена для помощи в модерации. Она может ошибаться, поэтому для реального использования рекомендуется логирование, ручная проверка спорных случаев и подбор порога под конкретное сообщество.
Метки
0: clean
1: toxic
Рекомендуемый порог
Для осторожной Telegram-модерации лучше использовать вероятность токсичного класса, а не только argmax:
toxic, если P(toxic) >= 0.90
Метрики
Внутренний тестовый набор:
accuracy: 0.9689
precision_toxic: 0.9310
recall_toxic: 0.9052
f1_toxic: 0.9179
macro_f1: 0.9494
Внешние фиксированные тестовые выборки при пороге 0.90:
Обычный Telegram-чат: 2/500 срабатываний, 0.4%
Токсичная выборка: 364/500 срабатываний, 72.8%
Использование
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model_id = "Egor-3926/ToxicLord"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForSequenceClassification.from_pretrained(model_id)
model.eval()
text = "ты грубый и неприятный человек"
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=192)
with torch.inference_mode():
probs = torch.softmax(model(**inputs).logits, dim=-1)[0]
clean_score = float(probs[0])
toxic_score = float(probs[1])
label = "toxic" if toxic_score >= 0.90 else "clean"
print(label, toxic_score)
Примеры
Ниже приведены примеры, близкие к реальным коротким сообщениям из чатов. Явная нецензурная лексика в карточке модели не приводится, поэтому часть грубых слов заменена на нейтральные формулировки или скрыта. Итоговый результат зависит от выбранного порога и контекста сообщения.
Сообщение: Блин, я вообще ничего не понял
Ожидаемый класс: clean
Сообщение: Да мне всё равно, делайте как хотите
Ожидаемый класс: clean
Сообщение: Ну и зачем это было делать?
Ожидаемый класс: clean
Сообщение: Сам ты лох
Ожидаемый класс: toxic
Сообщение: Ты полный идиот
Ожидаемый класс: toxic
Сообщение: Иди отсюда, никто тебя тут не ждёт
Ожидаемый класс: toxic
Сообщение: У тебя синдром дауна
Ожидаемый класс: toxic
Сообщение: Даун
Ожидаемый класс: toxic
Обучающие данные
Модель дообучалась на смеси публичных русскоязычных датасетов токсичности и приватных модерационных разметок/исправлений.
Сырые обучающие данные, Telegram-логи, идентификаторы пользователей и приватные разметки вместе с моделью не распространяются.
Ограничения
- Модель оптимизирована для русскоязычных Telegram-чатов и может хуже работать на формальных текстах, длинных документах и других языках.
- Короткие оскорбления и токсичные ярлыки могут классифицироваться как токсичные даже без широкого контекста.
- Сарказм, цитаты, шутки, обсуждение правил и мета-комментарии могут распознаваться неверно.
- Модель не стоит использовать как единственный источник решения для необратимых наказаний.
Лицензия
Модель опубликована под лицензией cc-by-nc-nd-4.0.
Разрешено некоммерческое использование с указанием авторства. Коммерческое использование и распространение производных версий запрещены условиями лицензии.