File size: 2,641 Bytes
c50c06e
 
1161779
 
a9218a7
 
 
 
 
 
 
 
1161779
 
 
 
 
 
 
 
a9218a7
1161779
c50c06e
a9218a7
 
 
 
 
 
 
1161779
a9218a7
 
 
 
 
 
 
 
1161779
a9218a7
1161779
 
a9218a7
1161779
 
a9218a7
 
 
 
1161779
a9218a7
 
 
 
 
1161779
a9218a7
 
 
1161779
a9218a7
 
 
 
 
 
 
 
 
 
 
1161779
 
a9218a7
 
 
 
 
 
 
 
 
 
 
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
75
76
77
78
79
80
81
82
83
84
85
---
license: mit
language:
- ru
tags:
- russian
- classification
- emotion
- emotion-detection
- emotion-recognition
- multiclass
widget:
- text: Как дела?
- text: Дурак твой дед
- text: Только попробуй!!!
- text: Не хочу в школу(
- text: Сейчас ровно час дня
- text: >-
    А ты уверен, что эти полоски снизу не врут? Точно уверен? Вот прям 100
    процентов?
datasets:
- Djacon/ru_go_emotions
---

# First - you should prepare few functions to talk to model

```python
import torch
from transformers import BertForSequenceClassification, AutoTokenizer

LABELS_RU = ['нейтрально', 'радость', 'грусть', 'гнев', 'интерес', 'удивление', 'отвращение', 'страх', 'вина', 'стыд']
tokenizer = AutoTokenizer.from_pretrained('Djacon/rubert-tiny2-russian-emotion-detection')
model = BertForSequenceClassification.from_pretrained('Djacon/rubert-tiny2-russian-emotion-detection')

# Predicting emotion in text
@torch.no_grad()
def predict_emotion(text: str) -> str:
    inputs = tokenizer(text, truncation=True, return_tensors='pt')
    inputs = inputs.to(model.device)
    
    outputs = model(**inputs)
    
    pred = torch.nn.functional.sigmoid(outputs.logits)
    pred = pred.argmax(dim=1)
    
    return LABELS_RU[pred[0]]


# Probabilistic prediction of emotion in a text
@torch.no_grad()
def predict_emotions(text: str) -> dict:
    inputs = tokenizer(text, truncation=True, return_tensors='pt')
    inputs = inputs.to(model.device)

    outputs = model(**inputs)

    pred = torch.nn.functional.sigmoid(outputs.logits)

    emotions_list = {}
    for i in range(len(pred[0].tolist())):
        emotions_list[LABELS_RU[i]] = round(pred[0].tolist()[i], 4)
    return emotions_list
```

# And then - just gently ask a model to predict your emotion

```python
simple_prediction = predict_emotion("Какой же сегодня прекрасный день, братья")
not_simple_prediction = predict_emotions("Какой же сегодня прекрасный день, братья")

print(simple_prediction)
print(not_simple_prediction)
# радость
# {'нейтрально': 0.1985, 'радость': 0.7419, 'грусть': 0.0261, 'гнев': 0.0295, 'интерес': 0.1983, 'удивление': 0.4305, 'отвращение': 0.0082, 'страх': 0.008, 'вина': 0.0046, 'стыд': 0.0097}
```

# Citations
```
@misc{Djacon,
  author = {Djacon},
  year = {2023},
  publisher = {Hugging Face},
  journal = {Hugging Face Hub},
}
```