--- language: ru pipeline_tag: text-classification base_model: cointegrated/rubert-tiny2 license: cc-by-nc-sa-4.0 tags: - multi-label - toxicity - russian - custom-code --- # RuBERT Tiny 2 Multi-Task Toxicity End-to-end multi-label encoder с общим RuBERT Tiny 2 и тремя независимыми линейными головами: `profanity`, `threat`, `illegal`. ## Данные Нативные русские Toxic Russian Comments и RUCriminal после fail-closed удаления политических высказываний, политически чувствительных тем и явных персональных идентификаторов. Для illegal используются законные hard negatives по тем же статьям УК РФ. Переводные данные отсутствуют. Legal train/test разделены по непересекающимся статьям. ## Test metrics | class | support | threshold | precision | recall | f1 | f1_ci_low | f1_ci_high | pr_auc | |:----------|----------:|------------:|------------:|---------:|-------:|------------:|-------------:|---------:| | profanity | 141 | 0.64 | 0.5708 | 0.8582 | 0.6856 | 0.6252 | 0.7398 | 0.721 | | threat | 91 | 0.82 | 0.7526 | 0.8022 | 0.7766 | 0.7074 | 0.8391 | 0.8668 | | illegal | 103 | 0.54 | 0.981 | 1 | 0.9904 | 0.9755 | 1 | 0.9991 | Macro F1: 0.8175; Micro F1: 0.7931. Пороги выбраны только на validation: {"profanity": 0.64, "threat": 0.82, "illegal": 0.54}. ## Метрики по доменам | domain | class | support | f1 | recall | |:----------------|:----------|----------:|-------:|---------:| | legal_questions | illegal | 102 | 1 | 1 | | social_comments | profanity | 141 | 0.6856 | 0.8582 | | social_comments | threat | 91 | 0.7766 | 0.8022 | | social_comments | illegal | 1 | 0.5 | 1 | ## Использование ```python import torch from transformers import AutoModelForSequenceClassification, AutoTokenizer repo = "aurelianvolturi/rubert-tiny2-multitask-toxicity" tokenizer = AutoTokenizer.from_pretrained(repo) model = AutoModelForSequenceClassification.from_pretrained( repo, trust_remote_code=True ).eval() text = "Как проверить подлинность паспорта?" batch = tokenizer(text, return_tensors="pt", truncation=True, max_length=model.config.max_length) with torch.inference_mode(): probabilities = torch.sigmoid(model(**batch).logits)[0].tolist() result = { label: probability >= model.config.thresholds[label] for label, probability in zip(model.config.labels, probabilities) } ``` ## Ограничения Модель предназначена для предварительной модерации и не выполняет юридическую квалификацию. Завуалированные формулировки, цитаты, ирония и новый сленг могут требовать ручной проверки. Custom code следует загружать только из доверенного репозитория и фиксировать `revision` на commit hash.