File size: 4,581 Bytes
c6759d3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
---
license: apache-2.0
library_name: transformers
pipeline_tag: text-classification
language:
  - it
tags:
  - transformers
  - xlm-roberta
  - multilingual
  - social-media
  - text-classification
---
# it-no-bio-20251014-t18

**Slur reclamation binary classifier**  
Task: LGBTQ+ reclamation vs non-reclamation use of harmful words on social media text.

> Trial timestamp (UTC): 2025-10-14 10:59:01
>
> **Data case:** `it`

## Configuration (trial hyperparameters)

Model: Alibaba-NLP/gte-multilingual-base

| Hyperparameter | Value |
|---|---|
| LANGUAGES | it |
| LR | 2e-05 |
| EPOCHS | 3 |
| MAX_LENGTH | 256 |
| USE_BIO | False |
| USE_LANG_TOKEN | False |
| GATED_BIO | False |
| FOCAL_LOSS | True |
| FOCAL_GAMMA | 2.5 |
| USE_SAMPLER | True |
| R_DROP | True |
| R_KL_ALPHA | 1.0 |
| TEXT_NORMALIZE | True |

## Dev set results (summary)

| Metric | Value |
|---|---|
| f1_macro_dev_0.5 | 0.8966749265256728 |
| f1_weighted_dev_0.5 | 0.9343820254908982 |
| accuracy_dev_0.5 | 0.9325153374233128 |
| f1_macro_dev_best_global | 0.9161091096242924 |
| f1_weighted_dev_best_global | 0.9495941068930785 |
| accuracy_dev_best_global | 0.950920245398773 |
| f1_macro_dev_best_by_lang | 0.9161091096242924 |
| f1_weighted_dev_best_by_lang | 0.9495941068930785 |
| accuracy_dev_best_by_lang | 0.950920245398773 |
| default_threshold | 0.5 |
| best_threshold_global | 0.65 |
| thresholds_by_lang | {"it": 0.65} |

### Thresholds
- Default: `0.5`
- Best global: `0.65`
- Best by language: `{
  "it": 0.65
}`

## Detailed evaluation

### Classification report @ 0.5
```text
              precision    recall  f1-score   support

 no-recl (0)     0.9764    0.9394    0.9575       132
    recl (1)     0.7778    0.9032    0.8358        31

    accuracy                         0.9325       163
   macro avg     0.8771    0.9213    0.8967       163
weighted avg     0.9386    0.9325    0.9344       163
```

### Classification report @ best global threshold (t=0.65)
```text
              precision    recall  f1-score   support

 no-recl (0)     0.9559    0.9848    0.9701       132
    recl (1)     0.9259    0.8065    0.8621        31

    accuracy                         0.9509       163
   macro avg     0.9409    0.8957    0.9161       163
weighted avg     0.9502    0.9509    0.9496       163
```

### Classification report @ best per-language thresholds
```text
              precision    recall  f1-score   support

 no-recl (0)     0.9559    0.9848    0.9701       132
    recl (1)     0.9259    0.8065    0.8621        31

    accuracy                         0.9509       163
   macro avg     0.9409    0.8957    0.9161       163
weighted avg     0.9502    0.9509    0.9496       163
```


## Per-language metrics (at best-by-lang)

| lang | n | acc | f1_macro | f1_weighted | prec_macro | rec_macro | prec_weighted | rec_weighted |
|---|---:|---:|---:|---:|---:|---:|---:|---:|
| it | 163 | 0.9509 | 0.9161 | 0.9496 | 0.9409 | 0.8957 | 0.9502 | 0.9509 |


## Data
- Train/Dev: private multilingual splits with ~15% stratified Dev (by (lang,label)).
- Source: merged EN/IT/ES data with bios retained (ignored if unused by model).

## Usage
```python
from transformers import AutoTokenizer, AutoModelForSequenceClassification, AutoConfig
import torch, numpy as np

repo = "SimoneAstarita/it-no-bio-20251014-t18"
tok = AutoTokenizer.from_pretrained(repo)
cfg = AutoConfig.from_pretrained(repo)
model = AutoModelForSequenceClassification.from_pretrained(repo)

texts = ["example text ..."]
langs = ["en"]

mode = "best_global"  # or "0.5", "by_lang"

enc = tok(texts, truncation=True, padding=True, max_length=256, return_tensors="pt")
with torch.no_grad():
    logits = model(**enc).logits
probs = torch.softmax(logits, dim=-1)[:, 1].cpu().numpy()

if mode == "0.5":
    th = 0.5
    preds = (probs >= th).astype(int)
elif mode == "best_global":
    th = getattr(cfg, "best_threshold_global", 0.5)
    preds = (probs >= th).astype(int)
elif mode == "by_lang":
    th_by_lang = getattr(cfg, "thresholds_by_lang", {})
    preds = np.zeros_like(probs, dtype=int)
    for lg in np.unique(langs):
        t = th_by_lang.get(lg, getattr(cfg, "best_threshold_global", 0.5))
        preds[np.array(langs) == lg] = (probs[np.array(langs) == lg] >= t).astype(int)
print(list(zip(texts, preds, probs)))
```

### Additional files
reports.json: all metrics (macro/weighted/accuracy) for @0.5, @best_global, and @best_by_lang.
config.json: stores thresholds: default_threshold, best_threshold_global, thresholds_by_lang.
postprocessing.json: duplicate threshold info for external tools.