File size: 2,453 Bytes
b8492d0
 
 
 
 
 
c1c8a7d
 
 
 
 
 
 
 
 
 
 
 
 
4298055
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
---
datasets:
- pogram1st/ru-toxic-multitask-dataset
base_model:
- cointegrated/rubert-tiny2
---
# Multi-Task Toxicity RU

Модель для классификации токсичных комментариев на русском языке. 
Модель использует архитектуру **RuBERT-tiny2** с тремя независимыми «головами» классификации для одновременного выявления разных типов нарушений.

## Метрики производительности

Модель была обучена и оптимизирована по порогам для каждого класса:

| Класс | Оптимальный порог | Precision | Recall | F1-score |
| :--- | :---: | :---: | :---: | :---: |
| **Ненормативная лексика** | 0.75 | 0.9402 | 0.9495 | 0.9448 |
| **Угрозы** | 0.80 | 0.8031 | 0.8421 | 0.8221 |
| **Запросы на нарушение закона** | 0.90 | 0.9242 | 0.9531 | 0.9385 |

## Быстрый старт
```
import torch
from transformers import AutoTokenizer, AutoModel

REPO_ID = "pogram1st/multitask-toxicity-comments"  
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")

tokenizer = AutoTokenizer.from_pretrained(REPO_ID)
model = AutoModel.from_pretrained(REPO_ID, trust_remote_code=True)

model.to(DEVICE)
model.eval()

def predict_toxicity(text):
    encoding = tokenizer(
        text,
        max_length=64,
        padding='max_length',
        truncation=True,
        return_tensors='pt'
    ).to(DEVICE)
    
    with torch.no_grad():
        out_prof, out_threat, out_ill = model(encoding['input_ids'], encoding['attention_mask'])
        
    prob_prof = torch.sigmoid(out_prof).item()
    prob_threat = torch.sigmoid(out_threat).item()
    prob_ill = torch.sigmoid(out_ill).item()
    
    print(f"Текст: '{text}'")
    print(f"Ненормативная лексика: {prob_prof:.0%} -> {'Запрещенный контент' if prob_prof >= 0.75 else 'Ок'}")
    print(f"Угроза: {prob_threat:.0%} -> {'Запрещенный контент' if prob_threat >= 0.80 else 'Ок'}")
    print(f"Запрос на нарушение закона: {prob_ill:.0%} -> {'Запрещенный контент' if prob_ill >= 0.90 else 'Ок'}\n")

predict_toxicity("Это приятно знать, но тем не менее.")

```