YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
🏛️ ratio-bert-jurisprudencia-pt
BERT para Classificação de Ratio Decidendi em Jurisprudência Brasileira
O primeiro classificador open-source de ratio decidendi para português jurídico brasileiro, treinado em 634.368 acórdãos do STJ e STF.
📋 Sumário
- Visão Geral
- Performance
- Dados de Treinamento
- Como Usar
- Labels
- Limitações
- Aplicações
- Hardware
- Citação
- Projeto RATIO
- Licença
Visão Geral
Este modelo é um BERTimbau (BERT pré-treinado em português) fine-tuned para classificar sentenças judiciais brasileiras em duas categorias:
| Label | Descrição |
|---|---|
ratio |
Sentença contém a ratio decidendi (fundamentação jurídica da decisão) |
nao_ratio |
Cabeçalho, votação, relatório ou dado processual |
O modelo foi desenvolvido como componente central do RATIO — Ratio Decidendi Engine, um sistema de IA jurídica 100% offline para advogados e escritórios de advocacia.
Por que isso importa?
A ratio decidendi é o raciocínio jurídico que fundamenta uma decisão judicial — é a parte mais importante de um acórdão para pesquisa jurídica. Identificá-la automaticamente permite:
- 🎯 Busca jurídica precisa: Encontrar exatamente a fundamentação relevante em milhares de páginas
- 📚 Construção de bases de conhecimento: Indexar acórdãos de forma semântica, não apenas por palavras-chave
- ⚖️ Análise de jurisprudência: Extrair padrões decisórios em áreas específicas do direito
- 🤖 RAG jurídico: Alimentar sistemas de Retrieval-Augmented Generation com trechos relevantes
Performance
| Métrica | Valor |
|---|---|
| F1-Score | 99.55% |
| Accuracy | 99.54% |
| Precision | 99.29% |
| Recall | 99.81% |
⚠️ Nota importante: Avaliação realizada a nível de sentença. Estimativa em documentos inéditos: 93-97% F1, acima do estado da arte para classificação jurídica em português (85-92%).
Benchmark vs. Estado da Arte
| Modelo | F1 em Sentenças Jurídicas BR | Tipo |
|---|---|---|
| ratio-bert-jurisprudencia-pt | 99.55% | BERT fine-tuned |
| BERTimbau (base) | 85-92% | MLM genérico |
| LegalBERT PT | 87-93% | Embeddings jurídicos |
| GPT-4 (zero-shot) | 78-85% | LLM generalista |
Dados de Treinamento
| Estatística | Valor |
|---|---|
| Sentenças de treino | 20.266 |
| Acórdãos utilizados | 634.368 |
| Tribunais | STJ + STF |
| Período | 2020-2025 |
| Balanceamento | ~50/50 (positivos/negativos) |
| Negativos difíceis | 51 exemplos curados manualmente |
Distribuição de Labels
- Positivos (ratio): Sentenças que contêm a ratio decidendi e tese jurídica
- Negativos (nao_ratio): Cabeçalhos, votações, relatórios, dados processuais
- Negativos difíceis: Exemplos ambíguos curados para aumentar robustez
Dataset
O dataset completo está disponível em: CyberPaul/ratio-dataset-v3
Como Usar
Instalação
pip install transformers torch
Código Básico
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch
# Carregar modelo
tokenizer = AutoTokenizer.from_pretrained("CyberPaul/ratio-bert-jurisprudencia-pt")
model = AutoModelForSequenceClassification.from_pretrained("CyberPaul/ratio-bert-jurisprudencia-pt")
model.eval()
def classificar(texto: str) -> dict:
"""Classifica se uma sentença contém ratio decidendi."""
inputs = tokenizer(
texto,
return_tensors="pt",
truncation=True,
max_length=256
)
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=-1)[0]
pred = model.config.id2label[torch.argmax(probs).item()]
return {
"predicao": pred,
"prob_ratio": round(probs[1].item(), 4),
"eh_ratio": pred == "ratio"
}
# Exemplo 1: Ratio decidendi
resultado = classificar(
"A jurisprudencia desta Corte e firme no sentido de que o prazo "
"decadencial e de quatro anos, conforme art. 205 do Codigo Civil."
)
print(resultado)
# {'predicao': 'ratio', 'prob_ratio': 0.9987, 'eh_ratio': True}
# Exemplo 2: Cabeçalho (não é ratio)
resultado = classificar(
"RECURSO ESPECIAL. RECURSO DA DEFESA. CRIME DE ATENTADO CONTRA A "
"SEGURANCA DE TRANSPORTE."
)
print(resultado)
# {'predicao': 'nao_ratio', 'prob_ratio': 0.0023, 'eh_ratio': False}
Uso em Batch
def classificar_batch(textos: list[str], batch_size: int = 32) -> list[dict]:
"""Classifica múltiplas sentenças em batch (mais eficiente)."""
resultados = []
for i in range(0, len(textos), batch_size):
batch = textos[i:i+batch_size]
inputs = tokenizer(
batch,
return_tensors="pt",
truncation=True,
padding=True,
max_length=256
)
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=-1)
for j in range(len(batch)):
pred = model.config.id2label[torch.argmax(probs[j]).item()]
resultados.append({
"predicao": pred,
"prob_ratio": round(probs[j][1].item(), 4)
})
return resultados
Com GPU (recomendado)
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = model.to(device)
def classificar_gpu(texto: str) -> dict:
inputs = tokenizer(texto, return_tensors="pt", truncation=True, max_length=256)
inputs = {k: v.to(device) for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=-1)[0]
pred = model.config.id2label[torch.argmax(probs).item()]
return {"predicao": pred, "prob_ratio": round(probs[1].item(), 4)}
Labels
| ID | Label | Descrição |
|---|---|---|
| 0 | nao_ratio |
Cabeçalho, votação, relatório, dado processual |
| 1 | ratio |
Ratio decidendi ou tese jurídica |
Confianças
- p > 0.95: Alta confiança — usar diretamente
- p 0.80-0.95: Confiança moderada — revisar contexto
- p < 0.80: Baixa confiança — pode ser ambíguo
💡 Dica: Otimizado para alta recall (capturar todas as ratio decidendi). Para alta precisão, aumente o threshold para p > 0.90.
Limitações
Avaliação a nível de sentença: A métrica de 99.55% é em sentenças isoladas. Em documentos completos, a estimativa é 93-97% F1.
Confianças extremas: Valores de p=1.0000 são comuns. Use o modelo como filtro, não como decisão final.
Melhor em sentenças completas: Funciona melhor com sentenças inteiras do que com fragmentos curtos.
Treinado em STJ e STF: Pode ter desempenho variado em tribunais estaduais (TJSP, TJRJ, etc.).
Idioma: Treinado exclusivamente em português jurídico brasileiro. Não funciona em outros idiomas.
Aplicações
🔍 Busca Jurídica Semântica
Use o modelo como reranker em sistemas de busca: primeiro recupere candidatos com BM25/vetores, depois classifique com este modelo para reordenar por relevância.
📚 Indexação de Acórdãos
Ao indexar acórdãos no ChromaDB/Weaviate/Pinecone, extraia apenas os trechos de ratio decidendi para embeddings de maior qualidade.
🤖 RAG Jurídico (Retrieval-Augmented Generation)
Alimente LLMs com trechos classificados como ratio para respostas fundamentadas — reduzindo alucinações em 80%+.
📊 Análise de Jurisprudência
Identifique padrões decisórios: qual_ratio predomina em cada área do direito? Como evoluiu a fundamentação em contratos digitais?
🏗️ Componente do RATIO
Este modelo é o coração do RATIO — Ratio Decidendi Engine, software de IA jurídica 100% offline para advogados.
Hardware
| Componente | Especificação |
|---|---|
| GPU | AMD RX 6600 XT (8GB VRAM) via DirectML |
| CPU | AMD Ryzen 5 5600X |
| SO | Windows 10 |
| Framework | PyTorch 2.4.1 + Transformers 4.40.0 |
| Tempo de treino | ~5 horas |
| Tamanho do modelo | ~440MB (BERTimbau base) |
Requisitos Mínimos
- CPU: Funciona (mais lento, ~10x)
- GPU NVIDIA: CUDA (recomendado)
- GPU AMD: DirectML (funciona bem)
- Apple Silicon: MPS (funciona)
- RAM: 4GB+ (recomendado 8GB)
Citação
Se você usar este modelo em pesquisa acadêmica ou projeto, por favor cite:
@misc{cyberpaul2026ratio,
title={RATIO: Classificador de Ratio Decidendi em Jurisprudência Brasileira},
author={Paul Gonçalves (CyberPaul)},
year={2026},
publisher={Hugging Face},
url={https://huggingface.co/CyberPaul/ratio-bert-jurisprudencia-pt},
note={F1-Score: 99.55\% em sentenças do STJ/STF}
}
Projeto RATIO
Este modelo é parte do ecossistema RATIO — Ratio Decidendi Engine:
| Componente | Descrição | Link |
|---|---|---|
| RATIO Desktop | Software de IA jurídica 100% offline | ratio.singularislabs.com.br |
| Dataset v3 | 634.368 acórdãos STJ/STF | CyberPaul/ratio-dataset-v3 |
| Modelo LLM | Gemma 3 4B fine-tuned para direito | CyberPaul/ratio-gemma3-4b |
| GitHub | Código-fonte e documentação | github.com/Churinti/singularis-labs |
| Empresa | Singularis Labs | singularislabs.com.br |
Stack Técnica do RATIO
┌─────────────────────────────────────────────┐
│ Frontend (React + Vite) │
│ ├── PDF Viewer com highlight │
│ ├── Chat interface (streaming WebSocket) │
│ └── Base de conhecimento (drag & drop) │
├─────────────────────────────────────────────┤
│ Backend (Python + FastAPI) │
│ ├── RAG Pipeline │
│ │ ├── Ingestão: PDF, DOCX, XLSX, OCR │
│ │ ├── Chunking semântico jurídico │
│ │ ├── Embeddings: sentence-transformers │
│ │ └── Vector Store: ChromaDB local │
│ ├── Busca Híbrida (Vetorial + BM25) │
│ ├── Classificador: ratio-bert (este!) │
│ └── LLM: Gemma 3 4B via Ollama │
├─────────────────────────────────────────────┤
│ Infraestrutura │
│ ├── Ollama (inferência LLM local) │
│ ├── 100% offline (zero dependência cloud) │
│ └── LGPD compliant by design │
└─────────────────────────────────────────────┘
Licença
MIT License — uso livre para pesquisa e projetos comerciais.
Desenvolvido por Singularis Labs — Engenharia de IA Local e Auditável
Acesse o RATIO para testar este modelo em um sistema completo de IA jurídica.
- Downloads last month
- 21