File size: 3,493 Bytes
34b7f15 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | ---
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.
|