Legal BERT Base Cased PT-BR: um modelo de linguagem para o direito brasileiro
A linguagem especializada do direito brasileiro motivou uma adaptação de domínio do BERT. Continuei o pré-treinamento de um encoder externo com textos jurídicos e publiquei dominguesm/legal-bert-base-cased-ptbr para masked language modeling. A principal contribuição é oferecer representações contextuais para pesquisa em PLN jurídico; o modelo não é um chatbot, não gera pareceres e não determina a correção jurídica de frases [3].
Não disponibilizo o corpus, os scripts vinculados à sua preparação nem artefatos que possam expor ou permitir reconstruir informações individualizadas. Recebi os dados sob o Termo de Compromisso do projeto VICTOR, que exige sigilo, armazenamento protegido e acesso restrito a pessoas autorizadas [3, 11]. Por isso, apresento somente resultados agregados e os componentes do modelo que posso distribuir.
Ficha técnica
| Propriedade | Valor documentado |
|---|---|
| Idioma e domínio | Português (pt), textos jurídicos brasileiros |
| Tarefa publicada | fill-mask / MLM |
| Modelo-base declarado | neuralmind/bert-base-portuguese-cased (BERTimbau Base) |
| Arquitetura final | BertForMaskedLM, 12 camadas, 12 cabeças, dimensão oculta 768 |
| Camada intermediária | 3.072 dimensões, ativação GELU |
| Contexto máximo | 512 posições, embeddings posicionais absolutos |
| Vocabulário final | 52.000 tokens, sensível a maiúsculas e minúsculas |
| Parâmetros | cerca de 126 milhões |
| Precisão dos pesos | float32 |
| Licença declarada do modelo | Creative Commons Attribution 4.0 (cc-by-4.0) |
De BERT a BERTimbau e ao domínio jurídico
BERT aprende representações bidirecionais por meio de Transformers encoders. No trabalho original, o pré-treinamento combinou MLM e next sentence prediction; depois, uma cabeça pequena podia ser ajustada para tarefas supervisionadas [1]. Publiquei apenas BertForMaskedLM e não registrei o uso de next sentence prediction na adaptação.
BERTimbau especializou essa arquitetura no português brasileiro. As versões Base e Large foram treinadas sobre o brWaC, corpus da web brasileira, por um milhão de passos e com whole-word masking. O artigo relata ganhos sobre o BERT multilíngue em similaridade semântica, inferência textual e reconhecimento de entidades; a versão Base tem 12 camadas e é o ponto de partida declarado deste projeto [2].
No Legal BERT, preservei a geometria Base, mudei o domínio e ampliei o vocabulário de 29.794 para 52.000 entradas. Isso também explica por que o total final, cerca de 126 milhões de parâmetros, supera os aproximadamente 110 milhões do BERTimbau Base. O log TensorBoard registra, no início, _name_or_path = neuralmind/bert-base-portuguese-cased e vocabulário 29.794; o checkpoint final registra 52.000 [3]. Na publicação inicial, não detalhei a sequência de redimensionamento da matriz de embeddings nem a inicialização das novas linhas.
Renderizando diagrama...
Essa estratégia é conhecida como pré-treinamento adaptativo ao domínio (domain-adaptive pretraining, DAPT): continuar o objetivo autossupervisionado de um modelo geral em texto não rotulado do domínio-alvo. Gururangan et al. encontraram ganhos consistentes de DAPT em quatro domínios e oito tarefas, inclusive com poucos rótulos [6]. No domínio jurídico, Chalkidis et al. compararam usar BERT sem adaptação, continuar o pré-treinamento e treinar do zero; o melhor caminho depende de corpus, tarefa e busca de hiperparâmetros, portanto “jurídico” não implica superioridade universal [7].
Corpus e proveniência
Usei o seguinte inventário agregado de documentos [3]:
| Categoria reproduzida do cartão | Documentos |
|---|---|
| Documentos jurídicos diversos | 61.309 |
| Petições, Recurso Extraordinário de JEC | 751 |
| Sentenças | 682 |
| Acórdãos de segunda instância | 498 |
| Agravos em Recurso Extraordinário | 469 |
| Despachos de admissibilidade | 411 |
| Total calculado | 64.120 |
O total é uma soma, não uma estatística adicional publicada:
Recebi os dados do Supremo Tribunal Federal (STF) por intermédio do AI.Lab da Universidade de Brasília, sob o Termo de Compromisso vinculado ao VICTOR/LREC 2020 [3, 11]. Assumi a obrigação de preservar sigilo e privacidade, impedir acesso ou transferência a terceiros não autorizados, manter a mídia em ambiente protegido e não divulgar nomes ou variáveis capazes de identificar indivíduos. Também devo mencionar o STF como fonte, indicar o período de referência quando disponível e deixar claro que as elaborações e conclusões são minhas e podem não refletir a posição do STF. O artigo VICTOR descreve uma coleção de 45.532 Recursos Extraordinários, 692.966 documentos e 4.603.784 páginas digitalizadas, originárias do STF, além de versões Big, Medium e Small para classificação de tipo documental e de tema [5].
Esses números não devem ser fundidos. As seis contagens do cartão do modelo não correspondem às distribuições publicadas de BVic, MVic ou SVic. Não posso disponibilizar a extração recebida, seu versionamento, a relação individual dos processos, os critérios aplicados a cada documento nem a composição detalhada das divisões, porque isso violaria as restrições de acesso e confidencialidade do Termo de Compromisso [11]. O período de referência não ficou registrado nos materiais públicos; por isso, não atribuo ao corpus uma janela temporal que não consigo confirmar.
Extração e pré-processamento
O VICTOR informa que recebeu PDFs, alguns com texto e muitos como imagens digitalizadas com anotações manuscritas, carimbos, manchas e outros ruídos. Seu fluxo verificava se cada arquivo era apenas imagem; aplicava OCR nesse caso; nos PDFs com texto embutido, avaliava a qualidade por expressões regulares e recorria a OCR quando necessário. Depois, expressões regulares removiam artefatos de OCR e marcação de PDF. Para os experimentos do artigo, também foram aplicados stemming, remoção de stop words, conversão para minúsculas e tokenização específica de e-mails, URLs e artigos de lei, por exemplo Lei 11.419 para LEI_11419 [5].
Esse é o processo descrito pelo VICTOR, não necessariamente cada transformação que apliquei ao Legal BERT. Não posso disponibilizar scripts, manifestos ou artefatos intermediários de limpeza, OCR, normalização, segmentação, truncamento, embaralhamento e deduplicação quando eles dependem da base restrita ou podem revelar sua organização [11]. Posso distribuir a tokenização do checkpoint: BertNormalizer com clean_text=true, lowercase=false e strip_accents=null, seguida de BertPreTokenizer e WordPiece, com prefixo ## para continuação de subpalavra [3].
O tokenizer jurídico e sua relação com o modelo
Eu treinei e publiquei dominguesm/legal-bert-tokenizer com 52 mil itens, usando dados jurídicos fornecidos pelo STF e partindo do tokenizer do BERTimbau [4]. Na descrição inicial, chamei o método de “word level byte-pair encoding”, mas configurei o algoritmo como WordPiece; essa é a caracterização correta.
No exemplo publicado, uma intimação ocupa 66 tokens no BERTimbau e 58 no tokenizer jurídico: formas como Judiciária, INTIMA, despacho, autos, 270, 5º e 419 sofrem menos fragmentação [4]. Menos fragmentos podem preservar contexto útil dentro do limite de 512 posições, mas essa única comparação não constitui avaliação estatística de eficiência ou qualidade.
Distribuí o modelo com o vocabulário e a configuração do tokenizer jurídico de 52 mil itens. Reservei os IDs 0 a 4 para [PAD], [UNK], [CLS], [SEP] e [MASK] [3, 4]. Publiquei o tokenizer separado sob CC BY-SA 4.0 e os pesos sob CC BY 4.0.
from transformers import AutoTokenizer
model_id = "dominguesm/legal-bert-base-cased-ptbr"
tokenizer = AutoTokenizer.from_pretrained(model_id)
texto = "O recurso extraordinário foi remetido ao STF."
print(tokenizer.tokenize(texto))
print(tokenizer(texto, truncation=True, max_length=512)["input_ids"])Objetivo MLM e continuação do pré-treinamento
Seja M o conjunto de posições selecionadas para predição, x_i o token original e h_i sua representação contextual. A perda MLM média é a entropia cruzada apenas nessas posições:
No MLM, o modelo ajusta theta para atribuir maior probabilidade ao token original ocultado, condicionado ao contexto bidirecional. BERT selecionava 15% das posições e, entre elas, usava 80% [MASK], 10% token aleatório e 10% token inalterado [1]. O DataCollatorForLanguageModeling do Transformers 4.24 tinha os mesmos padrões [9]. No meu treino, não registrei o mlm_probability, o collator nem a política de máscara; por isso, não atribuo o padrão da biblioteca à execução.
Renderizando diagrama...
Hiperparâmetros e resultados que preservei
Treinei com a seguinte configuração, preservada nos eventos TensorBoard [3]:
| Item | Valor |
|---|---|
| Exemplos de treino / avaliação | 353.435 / 17.878 |
| Épocas / passos de otimização | 3 / 33.135 |
| Lote por dispositivo / lote global | 4 / 32 |
| Acumulação de gradiente | 1 |
| Taxa de aprendizado inicial | 5e-5 |
| Otimizador | adamw_hf; betas 0,9 e 0,999; epsilon 1e-8 |
| Decaimento de peso / label smoothing | 0 / 0 |
| Scheduler / aquecimento | linear / 0 passos |
| Norma máxima do gradiente / semente | 1,0 / 42 |
| Precisão reduzida | fp16=false, bf16=false |
| Logging / salvamento | a cada 50 / 5.000 passos |
Registrei oito núcleos de TPU nos argumentos de treinamento; é compatível com o lote global. Na publicação original, não detalhei o modelo da TPU, a memória, o host nem a topologia. A configuração inicial do log usa transformers_version=4.23.0.dev0, enquanto o config.json final registra 4.24.0.
O treino terminou com perda média 0,6107781 em 10.192,1545 s; a avaliação final, com perda 0,4725181 em 126,3026 s. As taxas do cartão podem ser verificadas:
Na primeira publicação, chamei de perplexidade a exponencial da perda de avaliação:
Essa derivação numérica está correta, mas a interpretação exige cautela. A documentação do Transformers adverte que perplexidade clássica, baseada na fatoração autoregressiva, não é bem definida para modelos mascarados como BERT [9]. Aqui, 1,6040 deve ser lido como perda MLM exponenciada sob a máscara e tokenização daquela avaliação, não como perplexidade diretamente comparável a modelos causais ou a avaliações com outro vocabulário. Não há baseline BERTimbau no mesmo conjunto, múltiplas sementes, intervalo de confiança nem teste extrínseco publicado para esse checkpoint.
Uso correto para preenchimento de máscara
Use AutoModelForMaskedLM, preserve maiúsculas e acentos e forneça exatamente um [MASK] quando quiser uma lista simples. Os escores são probabilidades locais do vocabulário, não confiança jurídica calibrada.
from transformers import pipeline
modelo = "dominguesm/legal-bert-base-cased-ptbr"
preencher = pipeline("fill-mask", model=modelo, tokenizer=modelo, top_k=5)
for candidato in preencher(
"O recurso foi interposto perante o Supremo Tribunal [MASK]."
):
print(f"{candidato['token_str']:>15} {candidato['score']:.4f}")Para tornar a execução explícita, carregue o modelo e o tokenizer do mesmo repositório:
import torch
from transformers import AutoModelForMaskedLM, AutoTokenizer
MODEL = "dominguesm/legal-bert-base-cased-ptbr"
tokenizer = AutoTokenizer.from_pretrained(MODEL)
model = AutoModelForMaskedLM.from_pretrained(
MODEL,
use_safetensors=True,
).eval()
texto = "A decisão transitou em [MASK]."
inputs = tokenizer(texto, return_tensors="pt")
mask = (inputs.input_ids == tokenizer.mask_token_id).nonzero(as_tuple=True)
with torch.inference_mode():
logits = model(**inputs).logits[mask]
probs = logits.softmax(dim=-1)
valores, ids = probs.topk(5)
for prob, token_id in zip(valores[0], ids[0]):
print(tokenizer.convert_ids_to_tokens(int(token_id)), float(prob))Textos com mais de 512 tokens precisam de política explícita de janelas; truncar silenciosamente uma petição pode remover fatos decisivos. Para produção, registre versão, texto, janela, candidatos e latência, sem conservar dados pessoais além do necessário.
Relação com o Legal BERT NER
Depois, ajustei o dominguesm/legal-bert-ner-base-cased-ptbr a partir deste checkpoint para classificar tokens em seis categorias: PESSOA, ORGANIZACAO, LOCAL, TEMPO, LEGISLACAO e JURISPRUDENCIA [8]. Usei 971.932 exemplos de treino, 53.996 de validação e 53.997 de teste. No teste, obtive precisão 0,94324, revocação 0,96143, F1 0,95225 e acurácia 0,98947 [8].
Esses resultados mostram uma relação downstream, mas não são métricas do modelo MLM. Também não me permitem concluir ganho causado pela adaptação jurídica, pois não conduzi uma comparação controlada com BERTimbau. Como os dois projetos usam documentos do STF e não posso divulgar a composição individual das divisões, não posso excluir eventual sobreposição com o pré-treinamento.
Inferência e limites de reprodução
É possível reproduzir a inferência com o artefato publicado. Para comparar resultados ao longo do tempo, registre a versão do modelo e fixe também as versões de Python, PyTorch e Transformers, além do dispositivo.
A reprodução pública do pré-treinamento é deliberadamente limitada pelo Termo de Compromisso. Não posso fornecer o corpus, a autorização individual de acesso, scripts ligados à base, regras aplicadas a documentos específicos, divisões, estados intermediários ou outros artefatos que permitam acesso não autorizado ou identificação [11]. Pesquisadores com autorização própria ainda precisariam reconstruir o ambiente, a política de máscaras, a inicialização das 22.206 novas entradas, o hardware e o treinamento; a semente 42, isoladamente, não garante determinismo distribuído.
Comportamentos conhecidos e uso responsável
Representatividade e viés. O material provém do STF e de gêneros processuais associados a Recursos Extraordinários. A linguagem de tribunais locais, legislação administrativa, contratos, doutrina, conciliação ou fala de cidadãos pode divergir. Frequências históricas de partes, instituições, regiões e teses podem ser aprendidas e reproduzidas. OCR e forte desbalanceamento entre “documentos diversos” e classes específicas criam vieses adicionais.
Privacidade. Autos podem conter nomes, endereços, saúde, finanças e outros dados pessoais, mesmo quando acessíveis publicamente. O Termo de Compromisso me obriga a preservar sigilo, restringir acesso, proteger a mídia e impedir divulgação de variáveis identificáveis [11]. Como modelos podem memorizar sequências raras, uma implantação também deve avaliar extração e memorização, aplicar minimização, controle de acesso, retenção limitada e análise jurídica compatível com LGPD, sigilo processual e finalidade do tratamento.
Validade temporal. O período do corpus é desconhecido. Leis, precedentes, nomenclaturas e competências mudam; completar uma expressão frequente não confirma vigência normativa. Resultados devem ser confrontados com fontes oficiais atuais e datadas.
Limite técnico e jurídico. O contexto máximo é 512 tokens, os escores não são calibrados e a avaliação intrínseca não mede fundamentação, fidelidade a precedentes ou justiça. O modelo não substitui profissional habilitado, revisão humana, busca jurisprudencial ou sistema de gestão processual. Não o use isoladamente para decidir direitos, priorizar partes, prever decisões ou produzir aconselhamento jurídico.
Licenças e Termo de Compromisso. Os pesos são declarados CC BY 4.0, que permite compartilhar e adaptar com atribuição, link para a licença e indicação de mudanças [3, 10]. Isso não concede acesso ao corpus nem afasta o Termo de Compromisso, que proíbe o uso comercial da base e dos conhecimentos indiretos gerados a partir dela [11]. O tokenizer separado declara CC BY-SA 4.0 [4], o BERTimbau declara MIT [2], e o PDF do VICTOR indica CC BY-NC. Essas camadas não transformam resultados em endosso do STF; qualquer redistribuição, retreinamento ou uso comercial exige análise conjunta das licenças e do termo aplicável.
Conclusão
Com essa adaptação de domínio, produzi um encoder MLM reutilizável para pesquisa em português jurídico e publiquei pesos e vocabulário especializados. O principal aprendizado foi que desempenho linguístico não substitui validação jurídica, documentação de dados nem avaliação na tarefa final.
Referências
- Devlin, J. et al. BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding. NAACL-HLT, 2019. ACL Anthology.
- Souza, F.; Nogueira, R.; Lotufo, R. BERTimbau: Pretrained BERT Models for Brazilian Portuguese. BRACIS, 2020. DOI.
- Domingues, M. legal-bert-base-cased-ptbr: cartão, configuração e eventos TensorBoard. Hugging Face, 2022. Modelo.
- Domingues, M. legal-bert-tokenizer. Hugging Face, 2022. Tokenizer.
- Luz de Araujo, P. H. et al. VICTOR: a Dataset for Brazilian Legal Documents Classification. LREC, 2020. ACL Anthology.
- Gururangan, S. et al. Don't Stop Pretraining: Adapt Language Models to Domains and Tasks. ACL, 2020. ACL Anthology.
- Chalkidis, I. et al. LEGAL-BERT: The Muppets straight out of Law School. Findings of EMNLP, 2020. ACL Anthology.
- Domingues, M. legal-bert-ner-base-cased-ptbr. Hugging Face, 2022. Modelo NER.
- Hugging Face. Transformers 4.24: DataCollatorForLanguageModeling e Perplexity of fixed-length models. Data collator; perplexidade.
- Creative Commons. Attribution 4.0 International Legal Code. Licença.
- AI.Lab, Universidade de Brasília. Termo de Compromisso diante da cessão de bases de dados do Supremo Tribunal Federal. Documento de acesso às bases do projeto VICTOR.
BibTeX
@inproceedings{devlin2019bert,
title = {BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding},
author = {Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},
booktitle = {Proceedings of NAACL-HLT},
pages = {4171--4186},
year = {2019},
doi = {10.18653/v1/N19-1423}
}
@inproceedings{souza2020bertimbau,
title = {BERTimbau: Pretrained BERT Models for Brazilian Portuguese},
author = {Souza, F{\'a}bio and Nogueira, Rodrigo and Lotufo, Roberto},
booktitle = {Intelligent Systems (BRACIS 2020)},
pages = {403--417},
year = {2020},
doi = {10.1007/978-3-030-61377-8_28}
}
@misc{domingues2022legalbert,
author = {Domingues, Maicon},
title = {legal-bert-base-cased-ptbr},
year = {2022},
howpublished = {Hugging Face},
url = {https://huggingface.co/dominguesm/legal-bert-base-cased-ptbr}
}
@misc{domingues2022legaltokenizer,
author = {Domingues, Maicon},
title = {legal-bert-tokenizer},
year = {2022},
publisher = {Hugging Face},
doi = {10.57967/hf/0110}
}
@inproceedings{luzdearaujo2020victor,
title = {VICTOR: a Dataset for Brazilian Legal Documents Classification},
author = {Luz de Araujo, Pedro Henrique and de Campos, Te{\'o}filo Em{\'i}dio and Ataides Braz, Fabricio and Correia da Silva, Nilton},
booktitle = {Proceedings of the Twelfth Language Resources and Evaluation Conference},
pages = {1449--1458},
year = {2020},
url = {https://aclanthology.org/2020.lrec-1.181/}
}
@inproceedings{gururangan2020dont,
title = {Don't Stop Pretraining: Adapt Language Models to Domains and Tasks},
author = {Gururangan, Suchin and Marasovi{\'c}, Ana and Swayamdipta, Swabha and Lo, Kyle and Beltagy, Iz and Downey, Doug and Smith, Noah A.},
booktitle = {Proceedings of the 58th Annual Meeting of the Association for Computational Linguistics},
pages = {8342--8360},
year = {2020},
doi = {10.18653/v1/2020.acl-main.740}
}
@inproceedings{chalkidis2020legalbert,
title = {LEGAL-BERT: The Muppets straight out of Law School},
author = {Chalkidis, Ilias and Fergadiotis, Manos and Malakasiotis, Prodromos and Aletras, Nikolaos and Androutsopoulos, Ion},
booktitle = {Findings of the Association for Computational Linguistics: EMNLP 2020},
pages = {2898--2904},
year = {2020},
doi = {10.18653/v1/2020.findings-emnlp.261}
}
@misc{domingues2022legalbertner,
author = {Domingues, Maicon},
title = {legal-bert-ner-base-cased-ptbr},
year = {2022},
howpublished = {Hugging Face},
url = {https://huggingface.co/dominguesm/legal-bert-ner-base-cased-ptbr}
}
@manual{huggingface2022transformers,
title = {Transformers 4.24 Documentation},
author = {{Hugging Face}},
year = {2022},
url = {https://huggingface.co/docs/transformers/v4.24.0/}
}
@misc{creativecommons2013ccby40,
author = {{Creative Commons}},
title = {Attribution 4.0 International},
year = {2013},
url = {https://creativecommons.org/licenses/by/4.0/legalcode}
}