--- library_name: transformers language: - pt license: mit base_model: neuralmind/bert-base-portuguese-cased tags: - text-classification - portuguese - misogyny-detection - hate-speech - bertimbau - generated_from_trainer datasets: - fabiopassos/miso-br metrics: - accuracy - f1 - precision - recall - roc_auc pipeline_tag: text-classification model-index: - name: misobr-bertimbau-base results: - task: type: text-classification name: Misogyny Detection dataset: name: MISO-BR type: fabiopassos/miso-br metrics: - type: accuracy value: 0.8333 name: Accuracy - type: f1 value: 0.8333 name: F1-macro - type: precision value: 0.8335 name: Precision-macro - type: recall value: 0.8333 name: Recall-macro - type: roc_auc value: 0.8993 name: ROC-AUC --- # 🇧🇷 MISO-BR BERTimbau Base - Detector de Misoginia Este modelo é uma versão fine-tuned do [BERTimbau Base](https://huggingface.co/neuralmind/bert-base-portuguese-cased) especificamente treinada para detectar misoginia em textos em português brasileiro. ## 📊 Performance | Métrica | Valor | |---------|-------| | **Accuracy** | 83.33% | | **F1-macro** | 83.33% | | **Precision-macro** | 83.35% | | **Recall-macro** | 83.33% | | **ROC-AUC** | 89.93% | | **AUC-PR** | 91.07% | | **F1-positivo (misógino)** | 83.15% | | **Precision-positivo** | 84.09% | | **Recall-positivo** | 82.22% | ## 🎯 Uso ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch # Carregar modelo e tokenizer model_name = "fabiopassos/misobr-bertimbau-base" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name) def predict_misogyny(text): inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True, max_length=128) with torch.no_grad(): outputs = model(**inputs) predictions = torch.nn.functional.softmax(outputs.logits, dim=-1) labels = ["Não-misógino", "Misógino"] confidence = predictions[0][1].item() # Confiança para classe misógina prediction = labels[predictions.argmax().item()] return { "prediction": prediction, "confidence": confidence, "probabilities": { "Não-misógino": predictions[0][0].item(), "Misógino": predictions[0][1].item() } } # Exemplo de uso texto = "Essa mulher é uma vagabunda" resultado = predict_misogyny(texto) print(f"Predição: {resultado['prediction']}") print(f"Confiança: {resultado['confidence']:.4f}") ``` ## ⚙️ Configurações de Treinamento ### Hiperparâmetros utilizados: - **Modelo base**: `neuralmind/bert-base-portuguese-cased` (109M parâmetros) - **Learning rate**: 5e-05 - **Train batch size**: 16 - **Eval batch size**: 16 - **Seed**: 42 - **Optimizer**: AdamW Torch Fused (betas=(0.9,0.999), epsilon=1e-08) - **LR scheduler type**: linear - **Warmup steps**: 500 - **Épocas**: 20 - **Max length**: 128 tokens - **Early stopping**: 3 épocas de paciência - **Métrica de seleção**: F1-macro ### Resultados durante o treinamento: | Época | Step | Validation Loss | Accuracy | F1 Macro | Precision Macro | Recall Macro | F1 Positive | Precision Positive | Recall Positive | |:-----:|:----:|:---------------:|:--------:|:--------:|:---------------:|:------------:|:-----------:|:------------------:|:---------------:| | 1.0 | 45 | 0.6900 | 0.5111 | 0.4117 | 0.5343 | 0.5111 | 0.6535 | 0.5061 | 0.9222 | | 2.0 | 90 | 0.6337 | 0.6722 | 0.6710 | 0.6748 | 0.6722 | 0.6509 | 0.6962 | 0.6111 | | 3.0 | 135 | 0.5049 | 0.7667 | 0.7648 | 0.7754 | 0.7667 | 0.7439 | 0.8243 | 0.6778 | | 4.0 | 180 | 0.4051 | 0.8056 | 0.8055 | 0.8056 | 0.8056 | 0.8045 | 0.8090 | 0.8000 | | 5.0 | 225 | 0.4363 | 0.7833 | 0.7833 | 0.7836 | 0.7833 | 0.7869 | 0.7742 | 0.8000 | | 7.0 | 315 | 0.7491 | 0.8333 | 0.8330 | 0.8360 | 0.8333 | 0.8404 | 0.8061 | 0.8778 | | 13.0 | 585 | 1.2368 | 0.8333 | 0.8333 | 0.8335 | 0.8333 | 0.8315 | 0.8409 | 0.8222 | *Tabela mostra épocas selecionadas do treinamento. Melhor resultado obtido na época 13.* ### Versões das bibliotecas: - **Transformers**: 4.57.0 - **PyTorch**: 2.8.0+cu126 - **Datasets**: 4.0.0 - **Tokenizers**: 0.22.1 ## 🔍 Classes - **0**: Não-misógino (texto que não contém misoginia) - **1**: Misógino (texto que contém misoginia) *Melhor época (13): Precisão de 84.09% para classe misógina e Recall de 82.22%* ## ⚠️ Limitações 1. **Contexto específico**: Treinado principalmente em comentários de redes sociais brasileiras 2. **Definição de misoginia**: Baseada em critérios específicos do dataset MISO-BR 3. **Variações linguísticas**: Pode ter performance reduzida em outros registros do português 4. **Viés temporal**: Dados coletados em período específico (2019-2025) ## 🏷️ Labels e Definições **Misógino**: Textos que apresentam: - Ataques baseados no gênero feminino - Linguagem objetificante ou degradante - Estereótipos negativos específicos de mulheres - Discriminação explícita ou implícita **Não-misógino**: Textos que: - Não contêm elementos discriminatórios de gênero - Podem ser neutros ou até mesmo críticos, mas sem base misógina - Incluem linguagem ofensiva geral (não específica de gênero) ## 📄 Citação Se você usar este modelo ou dataset, por favor cite: ```bibtex @misc{misobr2025, author = {Fábio Passos}, title = {MISO-BR: Corpus Anotado de Misoginia em Português Brasileiro}, year = {2025}, publisher = {Hugging Face}, howpublished = {\url{https://huggingface.co/fabiopassos/misobr-bertimbau-base}}, note = {Dataset disponível em: \url{https://huggingface.co/datasets/fabiopassos/miso-br}} } ``` ## 📜 Licença Este modelo está licenciado sob a Licença MIT. O dataset MISO-BR está disponível sob Creative Commons CC BY 4.0. --- **Desenvolvido para pesquisa acadêmica em detecção de discurso de ódio e misoginia em português brasileiro.**