
## Introduction


Tupi-BERT-Large is a fine-tuned BERT model designed specifically for binary classification of hate speech in Portuguese. Derived from the [BERTimbau large](https://huggingface.co/neuralmind/bert-large-portuguese-cased), TuPi-Large is refinde solution for addressing hate speech concerns.
For more details or specific inquiries, please refer to the [BERTimbau repository](https://github.com/neuralmind-ai/portuguese-bert/).

The efficacy of Language Models can exhibit notable variations when confronted with a shift in domain between training and test data. In the creation of a specialized Portuguese Language Model tailored for hate speech classification, the original BERTimbau model underwent fine-tuning processe carried out on the [TuPi Hate Speech DataSet](https://huggingface.co/datasets/FpOliveira/TuPi-Portuguese-Hate-Speech-Dataset-Binary), sourced from diverse social networks.

## Available models

| Model                                    | Arch.      | #Layers | #Params |
| ---------------------------------------- | ---------- | ------- | ------- |
| `FpOliveira/tupi-bert-base-portuguese-cased`  | BERT-Base	|12	|109M|
| `FpOliveira/tupi-bert-large-portuguese-cased` | BERT-Large | 24      | 334M    |
| `FpOliveira/tupi-bert-base-portuguese-cased-multiclass-multilabel` | BERT-Base | 12      | 109M    |
| `FpOliveira/tupi-bert-large-portuguese-cased-multiclass-multilabel` | BERT-Large | 24      | 334M    |

## Example usage usage

```python
from transformers import AutoModelForSequenceClassification, AutoTokenizer, AutoConfig
import torch
import numpy as np
from scipy.special import softmax

def classify_hate_speech(model_name, text):
    model = AutoModelForSequenceClassification.from_pretrained(model_name)
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    config = AutoConfig.from_pretrained(model_name)

    # Tokenize input text and prepare model input
    model_input = tokenizer(text, padding=True, return_tensors="pt")

    # Get model output scores
    with torch.no_grad():
        output = model(**model_input)
        scores = softmax(output.logits.numpy(), axis=1)
        ranking = np.argsort(scores[0])[::-1]

    # Print the results
    for i, rank in enumerate(ranking):
        label = config.id2label[rank]
        score = scores[0, rank]
        print(f"{i + 1}) Label: {label} Score: {score:.4f}")

# Example usage
model_name = "FpOliveira/tupi-bert-large-portuguese-cased"
text = "Bom dia, flor do dia!!"
classify_hate_speech(model_name, text)
 
```
{"language": ["pt"], "license": "mit", "datasets": ["FpOliveira/TuPi-Portuguese-Hate-Speech-Dataset-Binary"], "metrics": ["accuracy", "precision", "recall", "f1"], "pipeline_tag": "text-classification", "base_model": "neuralmind/bert-large-portuguese-cased", "widget": [{"text": "Bom dia, flor do dia!!"}]}
transformers safetensors bert text-classification pt dataset:FpOliveira/TuPi-Portuguese-Hate-Speech-Dataset-Binary base_model:neuralmind/bert-large-portuguese-cased license:mit autotrain_compatible endpoints_compatible has_space region:us