simplificador-mt5 (Condicao C)
Modelo seq2seq (google/mt5-small, fine-tuned) para simplificacao de
situacoes-problema matematicas em portugues (5o ao 7o ano do ensino
fundamental). Parte do projeto AutoMat(e) — pipeline
de PLN para diagnostico (Fase 1, regras) + simplificacao (Fase 2,
estatistica).
Treinamento (Condicao C)
- Base:
google/mt5-small, dropout 0.2, batch 8, lr 5e-4, warmup 50, 20 epocas, early stopping patience 5 (rodou as 20, sem early-stop). - Dataset: 316 pares humanos + 1005 pares augmentados (gerados manualmente
via prompt para LLM, validados/dedupe por
processar_dataset_augmentado.py) = 1321 pares treino / 55 pares val. - Melhor checkpoint: epoca 18 (
eval_bleu=16.59na metrica de treino).
Avaliacao (val set, 55 pares, multi-referencia)
| Condicao | BLEU | ROUGE-L | Phase1-delta |
|---|---|---|---|
| A (sem marcadores) | 0.54 | 0.0451 | 0.000 |
| B (marcadores Fase 1) | 16.24 | 0.3542 | 0.400 |
| C (augmentado, este modelo) | 30.97 | 0.5109 | 0.473 |
Phase1-delta = deteccoes Fase 1 na saida / deteccoes na entrada (menor = mais
simplificado).
Formato de entrada
A entrada e prefixada com marcadores derivados do diagnostico da Fase 1
(src/pipeline.py no repo do projeto):
[COMPLEXA: palavra1, palavra2] [VAGA: verbo→sugestao] [TIPO_ESTRUTURA] texto original
Marcadores ausentes sao omitidos. Exemplo:
[COMPLEXA: agencia, taxa] Uma agencia bancaria aplica uma taxa de juros de 5% ao mes...
Uso
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
tok = AutoTokenizer.from_pretrained("Rafflezs/simplificador-mt5")
model = AutoModelForSeq2SeqLM.from_pretrained("Rafflezs/simplificador-mt5")
entrada = "[COMPLEXA: agencia, taxa] Uma agencia bancaria aplica uma taxa..."
ids = tok(entrada, return_tensors="pt", truncation=True, max_length=256).input_ids
saida = model.generate(ids, max_new_tokens=128, num_beams=4, no_repeat_ngram_size=3)
print(tok.decode(saida[0], skip_special_tokens=True))
No projeto AutoMat(e), src/simplificador.py cuida da geracao do marcador
(_formatar_entrada) e do pos-processamento.