Este é um excelente projeto. Como o seu dataset é "bruto" (apenas o número do artigo e o texto da lei), ele serve como base de conhecimento, mas não está pronto para fine-tuning de instrução (instruction tuning).
Para especializar uma LLM aberta (como Llama 3, Mistral ou Gemma) na Constituição Federal, você precisa transformar esse texto cru em pares de Pergunta/Resposta ou Instrução/Output.
Aqui está um roteiro prático de como criar esse dataset sintético usando uma LLM maior (como o Gemini 1.5 Pro ou GPT-4) como "professor":
- Defina as Categorias de Instrução (Taxonomia) Não crie apenas perguntas simples ("O que diz o artigo 5º?"). Para a LLM ficar inteligente, você precisa variar os tipos de raciocínio. Sugiro dividir a geração em 4 categorias:
Factual (Recuperação): Perguntas diretas sobre o texto.
Interpretação/Resumo: Pedir explicações simplificadas ou resumos.
Caso Prático (Raciocínio): Criar uma situação hipotética onde aquele artigo se aplica.
Classificação: Dado um texto, identificar qual princípio constitucional está sendo violado ou seguido.
- O Pipeline de Geração (O "Prompt do Professor") Você vai criar um script (Python) que itera sobre cada linha do seu dataset original e envia o texto do artigo para uma LLM poderosa gerar os dados sintéticos.
Aqui está um exemplo de estrutura de prompt (System Prompt) para usar na LLM geradora:
Role: Você é um especialista em Direito Constitucional Brasileiro e em criação de datasets para treino de IA.
Task: Dado o texto de um artigo da Constituição abaixo, gere 3 pares de treinamento no formato JSON.
Input (Artigo): "{texto_do_artigo}"
Requisitos:
Par 1 (Factual): Uma pergunta direta sobre o conteúdo e a resposta exata baseada no texto.
Par 2 (Simplificação): Uma instrução do tipo "Explique este direito para um leigo" e a resposta adequada.
Par 3 (Caso Concreto): Crie uma situação fictícia curta onde este artigo resolveria o problema, e a resposta explicando o porquê.
Formato de Saída (JSON): [{"instruction": "...", "input": "...", "output": "..."}, ...]
-
Exemplo Prático de TransformaçãoDado de Entrada (Do seu dataset):Texto: "Todos são iguais perante a lei, sem distinção de qualquer natureza..." (Art. 5º, Caput)Dado Sintético Gerado (Pela LLM):TipoInstruction (Pergunta)Output (Resposta Esperada)FactualQuais são as garantias de inviolabilidade previstas no Artigo 5º da Constituição para residentes no país?O Artigo 5º garante a inviolabilidade do direito à vida, à liberdade, à igualdade, à segurança e à propriedade.CasoJoão, um estrangeiro residente no Brasil, teve um direito fundamental negado sob a alegação de não ser brasileiro nato. Com base na Constituição, analise o caso.A ação é inconstitucional. O Artigo 5º estabelece explicitamente que todos são iguais perante a lei, garantindo os direitos fundamentais aos brasileiros e aos estrangeiros residentes no País.
-
Técnicas Avançadas para Melhorar a Qualidade Para que o fine-tuning seja robusto, utilize estas técnicas:
A. Evol-Instruct (Evolução de Complexidade) Não aceite apenas a primeira pergunta que a LLM gerar. Peça para ela "complicar" a pergunta.
Prompt: "Reescreva a pergunta anterior para torná-la mais complexa, exigindo raciocínio em múltiplos passos."
B. Negativas (Rejeição) Treine o modelo para saber o que não está na constituição.
Gere perguntas sobre leis que não existem ou interpretações erradas e faça o modelo responder: "Isso não está previsto no artigo citado."
C. Formato Alpaca ou ChatML Salve o seu dataset final em um formato padrão (JSONL) compatível com bibliotecas de treino (como Unsloth ou Axolotl).
JSON {"instruction": "Um policial pode entrar na casa de alguém à noite sem mandado judicial?", "input": "", "output": "Conforme o Art. 5, XI, a casa é asilo inviolável. Ninguém nela pode penetrar sem consentimento do morador, salvo em caso de flagrante delito, desastre, ou para prestar socorro. Durante o dia, é permitido por determinação judicial, mas à noite, apenas nas exceções citadas."} 5. Ferramentas Recomendadas Para automatizar isso sem escrever tudo do zero, recomendo fortemente estas bibliotecas:
Distilabel (da Argilla): É a melhor ferramenta atual para criar datasets sintéticos. Ela já tem pipelines prontos para gerar, evoluir e criticar (avaliar qualidade) os dados.
Bonito (da Bats Research): Uma biblioteca especializada em converter texto não estruturado (seu dataset) em datasets de instrução (QA).
Resumo do Workflow Leitura: Carregar o dataset celsowm/constituicao_br_1988.
Geração: Passar cada artigo por uma API (OpenAI/Gemini/Anthropic) pedindo para gerar 3-5 variações de perguntas.
Filtragem: Usar a própria LLM para dar uma nota (1-5) para a qualidade do par gerado. Descartar notas baixas.
Formatação: Salvar em .jsonl.
Fine-Tuning: Usar Unsloth (mais rápido e eficiente em memória) para treinar um Llama-3-8B-Instruct ou Mistral com esse novo dataset.
Gostaria que eu montasse um exemplo de código Python usando a API do Gemini ou OpenAI para processar as primeiras linhas desse dataset?
Sim, tecnicamente pode ser considerado uma forma de Data Augmentation (Aumento de Dados), mas no contexto moderno de LLMs, o termo mais preciso e usado pela indústria é Geração de Dados Sintéticos (Synthetic Data Generation).Para ficar bem claro, existe uma diferença sutil, mas importante, entre o "Augmentation Clássico" e o que propus acima:1. Data Augmentation Clássico (A abordagem "xerox")No NLP tradicional, data augmentation geralmente significa pegar uma frase e fazer pequenas alterações sem mudar o sentido, apenas para ter mais volume.Exemplo:Original: "A constituição garante a liberdade."Augmentation (Sinônimos): "A lei suprema assegura a autonomia."Augmentation (Back-translation): Traduzir para inglês e depois voltar para português para mudar levemente a sintaxe.O problema: Isso ajuda o modelo a entender variações de linguagem, mas não ensina raciocínio novo.2. Geração de Dados Sintéticos (A abordagem "caderno de exercícios")O que sugeri (criar perguntas, casos e raciocínio a partir do artigo) vai além de apenas aumentar o volume. Você está transformando a natureza do dado.O que acontece: Você pega um dado bruto (conhecimento passivo) e o transforma em dado de instrução (conhecimento ativo).Benefício: Você não está apenas dando mais texto para a LLM ler; você está criando padrões de raciocínio. A LLM aprende a relação entre "Problema do usuário"