BERTunino
Um modelo pequeno, brasileiro, que percebe quando alguém promete fazer algo numa mensagem de chat e grifa o que foi prometido.
"blz amanhã cedo te mando o orçamento revisado" → promessa · Mandar o orçamento revisado (amanhã cedo)
Feito para o Saturnino, um companheiro de mesa para quem tem TDAH, que lembra das promessas que a pessoa faz no meio da conversa. O BERTunino roda no computador da pessoa, só no processador, em cerca de 10 ms por mensagem. As mensagens não precisam sair dali.
Calibrado a partir do BERTimbau (NeuralMind/Unicamp).
O que ele faz
Lê a mensagem que a pessoa enviou (e, se houver, as últimas linhas da conversa) e responde duas coisas:
- É uma promessa de quem escreveu? Algo que a pessoa se comprometeu a fazer e ainda não fez.
- Quais palavras são a ação, o objeto, a pessoa e o prazo. O modelo não escreve: ele grifa, e a tarefa é montada com esses pedaços.
Ele entende o português escrito às pressas: abreviação ("vc", "hj", "amnh"), sem acento, erro de digitação, mensagem longa com a promessa no meio, promessa vaga ("vou ver", "já respondo") e as armadilhas ("vou almoçar", "a Ana vai mandar", "já mandei", "me manda o relatório").
Como usar
pip install onnxruntime tokenizers numpy
python usar.py "blz amanhã cedo te mando o orçamento revisado"
python usar.py "mando já" --contexto "Ana: cadê a nota fiscal de setembro?"
from usar import BERTunino
b = BERTunino()
b.ler("vou revisar o contrato hoje à tarde e te aviso")
# {"promessa": True, "confianca": 1.0, "tarefa": "Revisar o contrato (hoje à tarde)", "partes": {...}}
| arquivo | o que é |
|---|---|
bertunino-int8.onnx |
o modelo, comprimido (104 MB) |
tokenizer.json |
o vocabulário do BERTimbau |
verbos.json |
"mando" → "mandar", para a tarefa sair no infinitivo |
usar.py |
leitura pronta: promessa, confiança, tarefa e partes |
regua-pt.jsonl |
a régua de avaliação (abaixo) |
Como foi medido
A régua (regua-pt.jsonl): 138 mensagens de WhatsApp escritas à mão (a régua completa tem 145; sete vieram de conversas reais e não são publicadas), separadas por jeito de prometer ("vou + verbo", "mando amanhã", "deixa comigo", abreviado, hesitante, frase cortada…) e jeito de não prometer (conversa, pergunta, pedido, "já fiz", "vou almoçar"…). Nenhuma mensagem da régua, nem nada parecido, entrou no treino.
| filtro de frases (antes) | BERTunino | |
|---|---|---|
| promessas detectadas | 66 de 85 (78%) | 84 de 85 (99%) |
| conversas tomadas por promessa | 0 de 54 | 4 de 54 |
Numa segunda prova, com 98 mensagens reais de uso do Saturnino, julgadas à mão por quem as escreveu e não publicadas, ele reconheceu entre 74% e 86% das promessas, conforme o treino. A diferença entre as duas provas é o aviso mais importante: mensagem real é mais difícil que mensagem de teste.
Limites
- Esta é a versão pública. A versão dentro do Saturnino é mais nova e também se ajusta ao jeito de escrever de cada pessoa.
- Buscar o objeto nas linhas anteriores da conversa ("mando já" depois de "cadê a nota fiscal?") ainda falha com frequência.
- Às vezes toma uma frase de ação imediata por promessa ("vou almoçar, volto já"). Nesses casos costuma não grifar nenhuma ação, o que serve de sinal para descartar.
- Treinado com mensagens inventadas no jeito do WhatsApp brasileiro, em ambiente de trabalho, casa e estudo. Em outros domínios, meça antes de confiar.
- Só português brasileiro.
Treino
BERTimbau Base com duas saídas (promessa sim/não no [CLS], e marcação BIO de ação/objeto/pessoa/prazo em cada token), entrada em par (conversa, mensagem), 4 épocas. Cerca de 3.500 mensagens de treino inventadas, escritas uma a uma (não por modelo de frase), com três estilos de escrita (certinho, emendado, torto). Depois, quantizado para int8 com ONNX Runtime.
Licença e créditos
- BERTunino: CC BY-NC 4.0. Pode estudar, testar e adaptar, citando a fonte. Uso comercial não é permitido.
- BERTimbau (base deste modelo): MIT, © 2020 NeuralMind (Fabio Capuano de Souza, Rodrigo Nogueira, Roberto de Alencar Lotufo). O aviso completo está em
NOTICE-BERTimbau.txt. A NeuralMind não tem relação com o Saturnino nem endossa este modelo.
Se usar em pesquisa, cite o BERTimbau:
Souza, F., Nogueira, R., Lotufo, R. (2020). BERTimbau: pretrained BERT models for Brazilian Portuguese. BRACIS 2020.
Model tree for saturnino-app/BERTunino
Base model
neuralmind/bert-base-portuguese-cased