| ---
|
| 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.
|
|
|