Loading…
Loading…
Modelo de controle, não é para uso. Foi treinado no corpus sem a correção do viés de comprimento, em que o tamanho da frase revela a classe (AUC de 0,86), para medir no TCC o efeito da correção. Para usar, prefira
phelipescript/ddsd-ptbr-bertimbau.
English summary. Control model, not for use. Same recipe as phelipescript/ddsd-ptbr-bertimbau, but trained on the uncorrected corpus (sem_correcao), where sentence length alone predicts the label (AUC 0.86). Published only to reproduce the thesis comparison: on the corrected test set it reaches 92.2% accuracy (corrected model: 98.3%), and it has 27.2% false activations on real conversation transcripts (corrected model: 6.3%). Its decision threshold is 0.07.
Mesma receita de phelipescript/ddsd-ptbr-bertimbau, mudando só o corpus de treino: a configuração sem_correcao de phelipescript/ddsd-ptbr-corpus, só com as frases do corpus inicial e com balanceamento 1:1 no total, e não por faixa de tamanho. As classes são as mesmas: DD (fala dirigida ao computador) e NDD (qualquer outra fala).
Exemplo executado com Python 3.13, transformers 5.20.1 e torch 2.14.1:
import unicodedata
import torch
from transformers import AutoModelForSequenceClassification, AutoTokenizer
def normalizar(texto: str) -> str:
"""Normalização do treino: sem acento, minúsculas, pontuação e símbolos viram espaço."""
texto = "".join(c for c in unicodedata.normalize("NFKD", texto) if unicodedata.category(c) != "Mn")
texto = "".join(" " if unicodedata.category(c)[0] in "PS" else c for c in texto.lower())
return " ".join(texto.split())
repo = "phelipescript/ddsd-ptbr-bertimbau-sem-correcao"
tokenizer = AutoTokenizer.from_pretrained(repo)
modelo = AutoModelForSequenceClassification.from_pretrained(repo).eval()
limiar = modelo.config.decision_threshold # escolhido na validação; não use 0,5
frases = [
"Abre o navegador e procura a previsão do tempo, por favor.",
"Me lembra de ligar pro dentista amanhã às dez.",
"Você viu o jogo de ontem?",
"Travou de novo, que saco.",
]
for frase in frases:
entrada = tokenizer(normalizar(frase), truncation=True, max_length=128, return_tensors="pt")
with torch.inference_mode():
p_dd = torch.softmax(modelo(**entrada).logits, dim=-1)[0, 1].item()
print(f"{p_dd:.3f} {'DD ' if p_dd >= limiar else 'NDD'} {frase}")
Saída:
1.000 DD Abre o navegador e procura a previsão do tempo, por favor.
0.999 DD Me lembra de ligar pro dentista amanhã às dez.
0.000 NDD Você viu o jogo de ontem?
0.990 DD Travou de novo, que saco.
Dois cuidados, porque o modelo foi treinado e avaliado assim:
normalizar do exemplo: sem acento, em minúsculas e com pontuação e símbolos trocados por espaço.config.decision_threshold (0,07), escolhido na validação. O pipeline("text-classification") do transformers decide por argmax, o que equivale a um limiar de 0,5.| Modelo base | neuralmind/bert-base-portuguese-cased, 108,9 mi de parâmetros |
| Corpus | phelipescript/ddsd-ptbr-corpus, configuração sem_correcao: 93.144 frases de treino (46.573 DD e 46.571 NDD) e 11.664 de validação (5.833 DD e 5.831 NDD) |
| Semente | 42 (o controle tem uma semente só) |
| Hiperparâmetros | taxa de aprendizado 2e-5, lote 32, até 4 épocas, até 128 tokens, aquecimento de 10%, dropout 0,1, weight decay 0,01, agendador linear, precisão mista bf16 |
| Checkpoint | passo 11.644 (época 4 de 4), o de maior F1 macro na validação; parada antecipada com paciência 2 |
| Limiar de decisão | 0,07: o que maximiza a F1 macro na validação, numa grade de 0,005 a 0,995 (passo 0,005) |
| Hardware | Apple M5 (GPU via MPS), 16 GB de memória unificada; 57 min de treino |
Os valores por época e as métricas completas estão em treinamento.json.
11.616 frases do teste com_correcao, em que o tamanho da frase não indica a classe. Nenhuma delas está no treino deste modelo: os 9.527 textos em comum saíram do corpus sem correção antes do balanceamento.
| Métrica | Este modelo | BERTimbau com correção |
|---|---|---|
| Acurácia | 92,21% | 98,32% |
| F1 macro | 0,9218 | 0,9832 |
| ROC-AUC | 0,9714 | 0,9979 |
| EER | 8,32% | 1,72% |
No teste do próprio corpus sem correção (11.630 frases, com o atalho do tamanho), a acurácia é de 98,87%: parte do acerto vem do atalho.
Frases das transcrições do CORAA, do NURC-SP e do TAGARELA. São todas conversa entre pessoas (NDD), então toda ativação é falsa. Falsas ativações:
| Corpus | Frases | Este modelo | BERTimbau com correção |
|---|---|---|---|
| CORAA | 1.000 | 34,9% | 4,7% |
| NURC-SP | 1.000 | 20,5% | 6,6% |
| TAGARELA | 912 | 26,1% | 7,8% |
| Total | 2.912 | 27,2% | 6,3% |
Por tamanho da frase:
| Palavras | Frases | Este modelo | BERTimbau com correção |
|---|---|---|---|
| 2 | 144 | 87,5% | 6,9% |
| 3 | 210 | 79,0% | 8,6% |
| 4 | 266 | 58,3% | 5,3% |
| 5 | 226 | 44,7% | 5,3% |
| 6 | 239 | 36,8% | 5,4% |
| 7–8 | 407 | 24,6% | 5,7% |
| 9–10 | 321 | 9,0% | 5,6% |
| 11–13 | 344 | 3,5% | 4,7% |
| 14–17 | 276 | 2,9% | 4,3% |
| 18–24 | 259 | 1,9% | 8,5% |
| 25–50 | 208 | 1,0% | 12,0% |
| mais de 50 | 12 | 0,0% | 8,3% |
Áudio → detector de voz → Whisper large-v3-turbo → classificador, no sistema em tempo real do TCC. O áudio gravado toca no ritmo normal no buffer do microfone; dali em diante, é o sistema real.
| Conjunto | Pedidos atendidos (DD) | Falsas ativações (NDD) | Falsas ativações: BERTimbau com correção |
|---|---|---|---|
| Voz real | 92,5% (74 de 80) | 26,0% (27 de 104) | 7,7% (8 de 104) |
| Voz sintética | 94,1% (348 de 370) | 34,3% (127 de 370) | 1,9% (7 de 370) |
| Áudio dos corpora públicos | — | 29,2% (175 de 600) | 6,5% (39 de 600) |
| Repositório | Conteúdo |
|---|---|
phelipescript/ddsd-ptbr-bertimbau |
BERTimbau com correção (padrão do sistema) |
phelipescript/ddsd-ptbr-albertina |
Albertina com correção |
phelipescript/ddsd-ptbr-debertinha |
DeBERTinha com correção |
phelipescript/ddsd-ptbr-tfidf |
TF-IDF com Regressão Logística e com SVM |
phelipescript/ddsd-ptbr-bertimbau-sem-correcao |
BERTimbau sem correção (controle) |
phelipescript/ddsd-ptbr-albertina-sem-correcao |
Albertina sem correção (controle) |
phelipescript/ddsd-ptbr-debertinha-sem-correcao |
DeBERTinha sem correção (controle) |
phelipescript/ddsd-ptbr-corpus |
o corpus, com e sem correção, e as fontes brutas |
MIT, a mesma do modelo base.
@misc{souza2026ddsd,
author = {Phelipe Pereira de Souza},
title = {Detecção de Fala Direcionada ao Computador Pessoal em Português Brasileiro: Uma Abordagem Textual para Assistentes de Voz sem Palavra de Ativação},
year = {2026},
note = {Trabalho de Conclusão de Curso, Bacharelado em Ciência da Computação, SENAC Santo Amaro},
howpublished = {\url{https://huggingface.co/phelipescript/ddsd-ptbr-bertimbau-sem-correcao}}
}
neuralmind/bert-base-portuguese-cased