BERTimbau Fine-tuned — Análise de Sentimentos em Português (YouTube Infantil)

Modelo BERTimbau ajustado para classificação de sentimentos em três classes (Negativo, Neutro, Positivo) sobre transcrições e títulos de vídeos do YouTube voltados ao público infantil em Português do Brasil.

Desenvolvido para o artigo "Análise de Sentimentos no YouTube para Conteúdo Infantil: IA para Reclassificar Resultados de Busca" — WICS 2026.

Resultados

Conjunto Acurácia F1 Macro
Validação cruzada 5-fold (média ± std) 77,49% ± 0,74% 0,7761 ± 0,0076
Teste holdout 20% 77,27% 0,7749

F1 por classe no holdout:

Classe Precisão Recall F1
Negativo 0,935 0,902 0,918
Neutro 0,667 0,800 0,727
Positivo 0,761 0,614 0,679

O F1 de 91,8% na classe Negativo é a métrica mais crítica para segurança infantil.

Corpus

  • 2.749 frases reais extraídas do YouTube, rotuladas manualmente
  • Distribuição balanceada: Negativo 31,6% · Neutro 36,3% · Positivo 32,1%
  • Idioma: Português do Brasil (sem tradução automática)

Treinamento

  • Modelo base: neuralmind/bert-base-portuguese-cased (BERTimbau)
  • Validação: 5-Fold Stratified Cross-Validation
  • Balanceamento: Random Oversampling aplicado apenas nos folds de treino
  • Otimizador: AdamW — lr: 5e-5, warmup: 500 steps, weight decay: 0.01
  • Épocas: 5 · Batch size: 8 · Seed: 42
  • Este checkpoint corresponde ao Fold 1 (78,64% CV), usado na avaliação oficial do holdout.

Uso

from transformers import BertTokenizer, BertForSequenceClassification
import torch

model_path = "ravarmes/bertimbau-sentiment-youtube-pt"
tokenizer = BertTokenizer.from_pretrained(model_path)
model = BertForSequenceClassification.from_pretrained(model_path)
model.eval()

label_map = {0: "Negativo", 1: "Neutro", 2: "Positivo"}

def predict(text):
    inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
    with torch.no_grad():
        logits = model(**inputs).logits
    return label_map[logits.argmax(-1).item()]

print(predict("Este vídeo é muito educativo e divertido para as crianças!"))
# → Positivo

print(predict("Conteúdo assustador e inapropriado para crianças."))
# → Negativo

Limitações

  • Treinado em domínio específico (conteúdo infantil no YouTube em PT-BR); pode ter desempenho inferior em outros domínios.
  • Maior confusão entre as classes Neutro e Positivo, que compartilham características semânticas próximas.

Citação

@inproceedings{mesquita2026sentimentos,
  title     = {Análise de Sentimentos no YouTube para Conteúdo Infantil: IA para Reclassificar Resultados de Busca},
  author    = {Mesquita Santos, Rafael Vargas and de Salles, João Victor and Izo, Flávio and Vargas, Sabrina},
  booktitle = {WICS 2026},
  year      = {2026}
}
Downloads last month
7
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for ravarmes/bertimbau-sentiment-youtube-pt

Finetuned
(217)
this model