Documentos judiciais sintéticos em português do Brasil, com cada citação de jurisprudência
e de lei marcada pela posição no texto e classificada como real, inventada ou
incompleta. É o conjunto de treino e de avaliação do Gama,
o extrator da nossa solução para o Desafio Caça-Alucinações (BRACIS 2026 × Jusbrasil).
Gerador, treino e pipeline: github.com/vinimlo/gama. O comando de cada passo, dos bancos de frases aos pesos, está no guia de reprodução.
Os documentos do desafio saem de um gerador por moldes: 62% das frases se repetem entre documentos, cada documento usa uma única data e a quebra de linha segue uma regra fixa. Desmontamos os 26 documentos do dev set em bancos de peças (preâmbulo, narrativa por matéria, enchimento, frases que carregam citação) e remontamos documentos novos.
Cada citação sai de uma ficha real do acervo do desafio (acórdão, súmula ou dispositivo
de lei) ou é inventada de propósito, do jeito que a organização inventa: artigo além do
último do diploma, súmula acima da numeração existente, processo que não está no acervo.
O rótulo é exato por construção, porque os offsets são calculados antes da quebra de
linha, e a quebra só troca espaço por \n.
LLMs de pesos abertos (DeepSeek-V4-Pro, Kimi-K3 e GLM-5.3) ampliaram os bancos com frases
sem citação e criaram gêneros de documento novos. Nunca escrevem citação nem decidem
rótulo. O nível 2 recebe ruído de OCR calibrado no nível 2 da organização: letra no lugar
de dígito dentro do número (l→1, S→5, O→0) e, a partir do final_v3, também dentro
das palavras-chave (Súmula→Súrnula).
Todo documento passa por dois filtros. As bordas precisam seguir as convenções do gabarito
oficial, e a régua de regex não pode achar citação sem rótulo. Quem falha é descartado, e
o relatorio.json de cada pasta conta os descartes.
| Pasta | Documentos | Citações | Uso |
|---|---|---|---|
final_v3 | 6.000 | 44.234 | treino do Gama v1.2 (vinimlo/gama@ad06ffd), na revisão 31474b1 deste dataset, e destilação do Gama v1.3 (vinimlo/gama@5f924ca), na revisão ec430c0 |
final_v1 | 4.000 | 29.532 | treino do Gama v1 (vinimlo/gama@2aba5d1); depois, parte dos 4.626 documentos em que o JSON final do v1.3 sai igual ao do v1.2 |
dobra0_org, dobra1_org | 1.500 cada | ~11.100 cada | validação por dobras: bancos tirados de metade do dev, só moldes da organização |
dobra0_llm, dobra1_llm | 1.500 cada | ~11.100 cada | validação por dobras, com os bancos ampliados por LLM |
estresse_glm | 600 | 4.447 | só avaliação: frases do GLM-5.3, que nenhum treino usou; metade N1, metade N2 |
reais/amostra.jsonl | 2.454 ementas | ementas reais do STF, STJ e TJRJ, de celsowm/jurisprudencias_br | |
reais/predicoes.jsonl | spans do Gama v1 e da régua nessas ementas | ||
reais/ouro_real.jsonl | 305 ementas | 1.085 | gabarito do benchmark de texto real, com prata.jsonl (onde as duas LLMs concordaram) e ambiguos.jsonl |
reais/novo/ | 200 ementas sorteadas, 172 anotadas | 682 | teste intocado de texto real: ouro_real.jsonl, os casos ambíguos e as decisões sobre eles |
destilacao/reais_ids.json | 1.818 ementas | ementas de reais/amostra.jsonl usadas sem rótulo na destilação do v1.3, fora de qualquer teste | |
bench/ | entradas e saídas do benchmark contra extratores sem treino (GLiNER, Qwen3-8B), da avaliação dos modelos destilados e dos controles (concorrentes treinados nos mesmos dados, sementes, verificadores de candidatos) | ||
codigo/, bench/codigo/ | cópia do pacote gama da solução, na versão que cada job de treino e de avaliação importou |
As pastas de documentos têm txt/ (um arquivo por documento, UTF-8, LF), o gabarito
goldenset_offsets.csv, o meta.jsonl e o relatorio.json. Os conjuntos de treino e o
de estresse usam sementes diferentes (7 no v1, 11 no v3, 100 e 101 nas dobras,
99 no estresse).
Com os dados da organização em dados/ e os bancos de frases em corpus/bancos, no
repositório do GitHub:
# final_v3
docker compose run --rm gama python -m geracao.gerar --n 6000 --semente 11 \
--bancos /app/corpus/bancos/org.json,/app/corpus/bancos/llm_v1.json \
--saida /app/corpus/goldenset/v3
# estresse_glm
docker compose run --rm gama python -m geracao.gerar --n 600 --semente 99 --fracao-llm 0.9 \
--bancos /app/corpus/bancos/org.json,/app/corpus/bancos/llm_glm.json \
--saida /app/corpus/goldenset/estresse_glm
O gerador é determinístico, mas recebeu correções depois que estas pastas foram geradas.
Conferido em 30/09/2026: o primeiro comando reproduz 5.978 dos 6.000 documentos do
final_v3 byte a byte, com as mesmas 44.234 citações, e o segundo, 278 dos 600 do
estresse_glm. Por isso o que vale para refazer os pesos são as pastas deste dataset, na
revisão fixa, e não uma geração nova.
goldenset_offsets.csv segue o esquema do gabarito oficial do desafio:
| Coluna | Conteúdo |
|---|---|
nivel | 1 (texto limpo) ou 2 (com ruído de OCR) |
documento_id | nome do .txt, sem extensão |
citacao_id | ordem da citação no documento |
inicio, fim | offsets em codepoints, fim exclusivo |
trecho | o texto da citação, que pode conter quebra de linha |
tipo | jurisprudencia ou lei |
classificacao | real, inventada ou incompleta |
id_canonico | para as reais, o doc_id do registro no acervo do desafio |
O acervo (desafio1_bracis.db, 1.014 registros) é distribuído pela organização na
competição do Kaggle
e não está aqui.
meta.jsonl traz, por documento: split (treino ou estresse, a fatia de 10% que o
script de treino separa para medir; no estresse_glm a pasta inteira é avaliação e o
campo não tem uso), semente, genero (molde de um documento da organização ou
llm:<modelo>:<matéria>:<n>), materia, nivel e, no nível 2, a intensidade do ruido.
from huggingface_hub import snapshot_download
pasta = snapshot_download(
"vinimlo/gama-goldenset", repo_type="dataset",
revision="31474b1f7db9096c4ca4f2a4eae2e9b82852d7a7", # a revisão que treinou o v1.2
allow_patterns=["final_v3/*"],
)
A destilação do v1.3 usou a revisão ec430c0373f6ef96ba3bb91a3f11b24e391c5e6a, com
final_v3/*, destilacao/* e reais/amostra.jsonl.
As citações também abrem como tabela: load_dataset("vinimlo/gama-goldenset", "final_v3").
Todo o texto real deste dataset vem do
celsowm/jurisprudencias_br,
que o Celso F. publica no Hugging Face: decisões do STF, do STJ e do TJRJ coletadas pelo
Juriscraper, ferramenta dele, sob CC-BY-4.0.
Usamos a revisão 97380755dcb4709a5dccc4a31f54077ac3f874d3.
Foi com esse texto que descobrimos o limite do Gama fora dos moldes do desafio, e é dele que
saem as três peças de texto real do projeto: o benchmark de 305 ementas, o teste intocado de
172 e as 1.818 ementas sem rótulo da destilação do v1.3. Os gabaritos foram anotados por
duas LLMs de pesos abertos (DeepSeek-V4-Pro e Kimi-K3) e adjudicados por critério escrito,
com o GLM-5.3 como terceiro voto; não são anotação humana independente. Cada registro
guarda a proveniência: fonte, licença, revisão, tribunal, classe e o documento_id na
origem.
MIT para os documentos sintéticos e os gabaritos deles. Tudo o que contém texto das
ementas reais (reais/, destilacao/ e as entradas de texto real em bench/) mantém a
CC-BY-4.0 da fonte; ao reutilizar, credite o
celsowm/jurisprudencias_br.
O código em codigo/ e bench/codigo/ segue a MIT do repositório.
Vinícius Melo e Gabriel Siron, para o Desafio Caça-Alucinações (BRACIS 2026 × Jusbrasil).
Synthetic Brazilian Portuguese court documents with every case-law and statute citation
annotated by character offsets and labeled real, inventada (fabricated) or
incompleta (incomplete). Documents are reassembled from the challenge's own templates,
citing real records of its frozen collection or deliberately fabricated ones, so labels
are exact by construction; open-weight LLMs only expanded the phrase banks. Used to train
and evaluate the Gama citation extractor. Real
court summaries (ementas) come from
celsowm/jurisprudencias_br
(CC-BY-4.0), collected with Juriscraper, and keep that license.
Documentos judiciais sintéticos em português do Brasil, com cada citação de jurisprudência
e de lei marcada pela posição no texto e classificada como real, inventada ou
incompleta. É o conjunto de treino e de avaliação do Gama,
o extrator da nossa solução para o Desafio Caça-Alucinações (BRACIS 2026 × Jusbrasil).
Gerador, treino e pipeline: github.com/vinimlo/gama. O comando de cada passo, dos bancos de frases aos pesos, está no guia de reprodução.
Os documentos do desafio saem de um gerador por moldes: 62% das frases se repetem entre documentos, cada documento usa uma única data e a quebra de linha segue uma regra fixa. Desmontamos os 26 documentos do dev set em bancos de peças (preâmbulo, narrativa por matéria, enchimento, frases que carregam citação) e remontamos documentos novos.
Cada citação sai de uma ficha real do acervo do desafio (acórdão, súmula ou dispositivo
de lei) ou é inventada de propósito, do jeito que a organização inventa: artigo além do
último do diploma, súmula acima da numeração existente, processo que não está no acervo.
O rótulo é exato por construção, porque os offsets são calculados antes da quebra de
linha, e a quebra só troca espaço por \n.
LLMs de pesos abertos (DeepSeek-V4-Pro, Kimi-K3 e GLM-5.3) ampliaram os bancos com frases
sem citação e criaram gêneros de documento novos. Nunca escrevem citação nem decidem
rótulo. O nível 2 recebe ruído de OCR calibrado no nível 2 da organização: letra no lugar
de dígito dentro do número (l→1, S→5, O→0) e, a partir do final_v3, também dentro
das palavras-chave (Súmula→Súrnula).
Todo documento passa por dois filtros. As bordas precisam seguir as convenções do gabarito
oficial, e a régua de regex não pode achar citação sem rótulo. Quem falha é descartado, e
o relatorio.json de cada pasta conta os descartes.
| Pasta | Documentos | Citações | Uso |
|---|---|---|---|
final_v3 | 6.000 | 44.234 | treino do Gama v1.2 (vinimlo/gama@ad06ffd), na revisão 31474b1 deste dataset, e destilação do Gama v1.3 (vinimlo/gama@5f924ca), na revisão ec430c0 |
final_v1 | 4.000 | 29.532 | treino do Gama v1 (vinimlo/gama@2aba5d1); depois, parte dos 4.626 documentos em que o JSON final do v1.3 sai igual ao do v1.2 |
dobra0_org, dobra1_org | 1.500 cada | ~11.100 cada | validação por dobras: bancos tirados de metade do dev, só moldes da organização |
dobra0_llm, dobra1_llm | 1.500 cada | ~11.100 cada | validação por dobras, com os bancos ampliados por LLM |
estresse_glm | 600 | 4.447 | só avaliação: frases do GLM-5.3, que nenhum treino usou; metade N1, metade N2 |
reais/amostra.jsonl | 2.454 ementas | ementas reais do STF, STJ e TJRJ, de celsowm/jurisprudencias_br | |
reais/predicoes.jsonl | spans do Gama v1 e da régua nessas ementas | ||
reais/ouro_real.jsonl | 305 ementas | 1.085 | gabarito do benchmark de texto real, com prata.jsonl (onde as duas LLMs concordaram) e ambiguos.jsonl |
reais/novo/ | 200 ementas sorteadas, 172 anotadas | 682 | teste intocado de texto real: ouro_real.jsonl, os casos ambíguos e as decisões sobre eles |
destilacao/reais_ids.json | 1.818 ementas | ementas de reais/amostra.jsonl usadas sem rótulo na destilação do v1.3, fora de qualquer teste | |
bench/ | entradas e saídas do benchmark contra extratores sem treino (GLiNER, Qwen3-8B), da avaliação dos modelos destilados e dos controles (concorrentes treinados nos mesmos dados, sementes, verificadores de candidatos) | ||
codigo/, bench/codigo/ | cópia do pacote gama da solução, na versão que cada job de treino e de avaliação importou |
As pastas de documentos têm txt/ (um arquivo por documento, UTF-8, LF), o gabarito
goldenset_offsets.csv, o meta.jsonl e o relatorio.json. Os conjuntos de treino e o
de estresse usam sementes diferentes (7 no v1, 11 no v3, 100 e 101 nas dobras,
99 no estresse).
Com os dados da organização em dados/ e os bancos de frases em corpus/bancos, no
repositório do GitHub:
# final_v3
docker compose run --rm gama python -m geracao.gerar --n 6000 --semente 11 \
--bancos /app/corpus/bancos/org.json,/app/corpus/bancos/llm_v1.json \
--saida /app/corpus/goldenset/v3
# estresse_glm
docker compose run --rm gama python -m geracao.gerar --n 600 --semente 99 --fracao-llm 0.9 \
--bancos /app/corpus/bancos/org.json,/app/corpus/bancos/llm_glm.json \
--saida /app/corpus/goldenset/estresse_glm
O gerador é determinístico, mas recebeu correções depois que estas pastas foram geradas.
Conferido em 30/09/2026: o primeiro comando reproduz 5.978 dos 6.000 documentos do
final_v3 byte a byte, com as mesmas 44.234 citações, e o segundo, 278 dos 600 do
estresse_glm. Por isso o que vale para refazer os pesos são as pastas deste dataset, na
revisão fixa, e não uma geração nova.
goldenset_offsets.csv segue o esquema do gabarito oficial do desafio:
| Coluna | Conteúdo |
|---|---|
nivel | 1 (texto limpo) ou 2 (com ruído de OCR) |
documento_id | nome do .txt, sem extensão |
citacao_id | ordem da citação no documento |
inicio, fim | offsets em codepoints, fim exclusivo |
trecho | o texto da citação, que pode conter quebra de linha |
tipo | jurisprudencia ou lei |
classificacao | real, inventada ou incompleta |
id_canonico | para as reais, o doc_id do registro no acervo do desafio |
O acervo (desafio1_bracis.db, 1.014 registros) é distribuído pela organização na
competição do Kaggle
e não está aqui.
meta.jsonl traz, por documento: split (treino ou estresse, a fatia de 10% que o
script de treino separa para medir; no estresse_glm a pasta inteira é avaliação e o
campo não tem uso), semente, genero (molde de um documento da organização ou
llm:<modelo>:<matéria>:<n>), materia, nivel e, no nível 2, a intensidade do ruido.
from huggingface_hub import snapshot_download
pasta = snapshot_download(
"vinimlo/gama-goldenset", repo_type="dataset",
revision="31474b1f7db9096c4ca4f2a4eae2e9b82852d7a7", # a revisão que treinou o v1.2
allow_patterns=["final_v3/*"],
)
A destilação do v1.3 usou a revisão ec430c0373f6ef96ba3bb91a3f11b24e391c5e6a, com
final_v3/*, destilacao/* e reais/amostra.jsonl.
As citações também abrem como tabela: load_dataset("vinimlo/gama-goldenset", "final_v3").
Todo o texto real deste dataset vem do
celsowm/jurisprudencias_br,
que o Celso F. publica no Hugging Face: decisões do STF, do STJ e do TJRJ coletadas pelo
Juriscraper, ferramenta dele, sob CC-BY-4.0.
Usamos a revisão 97380755dcb4709a5dccc4a31f54077ac3f874d3.
Foi com esse texto que descobrimos o limite do Gama fora dos moldes do desafio, e é dele que
saem as três peças de texto real do projeto: o benchmark de 305 ementas, o teste intocado de
172 e as 1.818 ementas sem rótulo da destilação do v1.3. Os gabaritos foram anotados por
duas LLMs de pesos abertos (DeepSeek-V4-Pro e Kimi-K3) e adjudicados por critério escrito,
com o GLM-5.3 como terceiro voto; não são anotação humana independente. Cada registro
guarda a proveniência: fonte, licença, revisão, tribunal, classe e o documento_id na
origem.
MIT para os documentos sintéticos e os gabaritos deles. Tudo o que contém texto das
ementas reais (reais/, destilacao/ e as entradas de texto real em bench/) mantém a
CC-BY-4.0 da fonte; ao reutilizar, credite o
celsowm/jurisprudencias_br.
O código em codigo/ e bench/codigo/ segue a MIT do repositório.
Vinícius Melo e Gabriel Siron, para o Desafio Caça-Alucinações (BRACIS 2026 × Jusbrasil).
Synthetic Brazilian Portuguese court documents with every case-law and statute citation
annotated by character offsets and labeled real, inventada (fabricated) or
incompleta (incomplete). Documents are reassembled from the challenge's own templates,
citing real records of its frozen collection or deliberately fabricated ones, so labels
are exact by construction; open-weight LLMs only expanded the phrase banks. Used to train
and evaluate the Gama citation extractor. Real
court summaries (ementas) come from
celsowm/jurisprudencias_br
(CC-BY-4.0), collected with Juriscraper, and keep that license.