LLM Legislativo Brasileiro — versão integral v1
Modelo de linguagem experimental, treinado do zero em PyTorch com textos legislativos oficiais brasileiros da Câmara dos Deputados e do Senado Federal. A arquitetura é um Transformer Decoder causal próprio do projeto; este repositório não é compatível diretamente com transformers.AutoModel.
Estado e uso previsto
Este é um artefato educacional e de pesquisa para modelagem de linguagem e geração exploratória de texto legislativo em português. Ele não foi validado para interpretar leis, resumir processos, apoiar decisões jurídicas ou produzir documentos oficiais. Não use as gerações como orientação jurídica nem como fonte factual. As amostras em evaluation/generation_samples.json são exemplos não verificados; o modelo pode inventar normas, atribuir conteúdo incorreto a leis ou produzir texto incoerente.
Arquitetura e treinamento
- Transformer Decoder causal explícito implementado em PyTorch.
- 6 camadas, 6 cabeças, dimensão oculta 384, contexto de 512 tokens.
- Vocabulário byte-level BPE de 8.192 tokens; PAD=0, BOS=1, EOS=2.
- Pesos do checkpoint final da execução
pretraining_legislativo_atual_v1, passo 173.209, treinada no split train da releaselegislativo_atual_v1. model.safetensorscontém os pesos de inferência; estado do otimizador, dados e shards de treinamento não foram incluídos.
Avaliação
Avaliado no split test da release indicada. Os números, protocolo e limitações estão em evaluation/test_metrics_summary.json. A perplexidade depende do tokenizer; use também a métrica byte_nll_v1 para uma comparação normalizada por bytes e respeite a definição da versão.
- Perda média por token: 2,1065.
- Perplexidade por token: 8,2197.
- Perplexidade por palavra (métrica identificada do projeto): 65,6509.
- NLL por byte: 0,7298 nats/byte (1,0529 bits/byte).
- 71.069 documentos e 19.430 janelas de teste.
As gerações são poucas amostras qualitativas, não uma avaliação de factualidade. O corpus/release possui cobertura histórica parcial; o modelo não deve ser tratado como completo ou atualizado.
Inferência
Requer Python, PyTorch, tokenizers, safetensors e PyYAML. O código de arquitetura compatível com os pesos está em source/model/. Na raiz do repositório clonado:
import json, torch
from safetensors.torch import load_file
from tokenizers import Tokenizer
from modeling.legislm.model.config import GPTConfig
from modeling.legislm.model.gpt import GPTModel
config = GPTConfig.from_dict(json.load(open("model_config.json")))
tokenizer = Tokenizer.from_file("tokenizer.json")
model = GPTModel(config)
model.load_state_dict(load_file("model.safetensors"), strict=True)
model.eval()
ids = tokenizer.encode("PROJETO DE LEI Nº\n\nAltera a Lei nº").ids
with torch.no_grad():
logits = model(torch.tensor([ids], dtype=torch.long))
print(logits.shape) # [1, comprimento, 8192]
Geração autorregressiva está disponível em source/model/generation.py.
Tokenizer
O arquivo tokenizer.json foi treinado somente no split train e está acompanhado por tokenizer_manifest.json, com seu hash e configuração. Use Tokenizer.from_file da biblioteca tokenizers; os IDs especiais seguem os valores documentados acima.
Dados, licença e limitações
Os dados de treinamento derivam de documentos legislativos oficiais; este repositório não inclui o corpus. A licença dos pesos do modelo não foi declarada pelo mantenedor. O campo license: unknown reflete essa ausência: não presume uma licença permissiva nem concede direitos de redistribuição ou uso comercial. Verifique as condições aplicáveis aos dados de origem e consulte o mantenedor antes de redistribuir ou usar comercialmente.