vinimlo/gama-goldenset

Dataset

Gama goldenset

0

117 commits

1 linked in READMEs

updated Sep 30, 2026

See the code

README

Gama goldenset

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.

De onde vêm os dados e os pesos. O dev set da organização, que não sai da máquina, é desmontado em bancos de frases; LLMs abertos só ampliam as frases; o gerador por moldes produz este dataset, com 6.000 documentos na pasta final_v3. O mmBERT-base é ajustado nesses documentos e vira o Gama v1.2; o v1.2 é destilado nas 12 primeiras camadas, com os mesmos documentos e 1.818 ementas reais sem rótulo do celsowm/jurisprudencias_br, e vira o Gama v1.3.

Como os documentos são feitos

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.

Pastas

PastaDocumentosCitaçõesUso
final_v36.00044.234treino 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_v14.00029.532treino 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_org1.500 cada~11.100 cadavalidação por dobras: bancos tirados de metade do dev, só moldes da organização
dobra0_llm, dobra1_llm1.500 cada~11.100 cadavalidação por dobras, com os bancos ampliados por LLM
estresse_glm6004.447só avaliação: frases do GLM-5.3, que nenhum treino usou; metade N1, metade N2
reais/amostra.jsonl2.454 ementasementas reais do STF, STJ e TJRJ, de celsowm/jurisprudencias_br
reais/predicoes.jsonlspans do Gama v1 e da régua nessas ementas
reais/ouro_real.jsonl305 ementas1.085gabarito do benchmark de texto real, com prata.jsonl (onde as duas LLMs concordaram) e ambiguos.jsonl
reais/novo/200 ementas sorteadas, 172 anotadas682teste intocado de texto real: ouro_real.jsonl, os casos ambíguos e as decisões sobre eles
destilacao/reais_ids.json1.818 ementasementas 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).

Como foram gerados

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.

Formato

goldenset_offsets.csv segue o esquema do gabarito oficial do desafio:

ColunaConteúdo
nivel1 (texto limpo) ou 2 (com ruído de OCR)
documento_idnome do .txt, sem extensão
citacao_idordem da citação no documento
inicio, fimoffsets em codepoints, fim exclusivo
trechoo texto da citação, que pode conter quebra de linha
tipojurisprudencia ou lei
classificacaoreal, inventada ou incompleta
id_canonicopara 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.

Uso

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").

Limitações

  • Os documentos imitam os moldes de um gerador específico, não o texto jurídico real em geral. Um modelo treinado só com eles especializa nesse estilo: em ementas reais, o Gama sozinho fica atrás de uma régua de regex (0,620 contra 0,663 no v1.3). Na solução, uma guarda troca os trechos em que o modelo hesita (confiança abaixo de 0,95) pelos da régua e leva o v1.3 a 0,818, sem mudar nada no estilo do desafio; a definição está na seção "A guarda da solução" do card do modelo.
  • As frases vêm do dev set do desafio e de LLMs; as citações reais apontam para os 1.014 registros de um único acervo.

Ementas reais

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.

Licença

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.

Equipe

Vinícius Melo e Gabriel Siron, para o Desafio Caça-Alucinações (BRACIS 2026 × Jusbrasil).

In English

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.

brazilian-portuguese
citation-extraction
legal
synthetic

vinimlo/gama-goldenset

Dataset

Gama goldenset

0

117 commits

1 linked in READMEs

updated Sep 30, 2026

See the code

README

Gama goldenset

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.

De onde vêm os dados e os pesos. O dev set da organização, que não sai da máquina, é desmontado em bancos de frases; LLMs abertos só ampliam as frases; o gerador por moldes produz este dataset, com 6.000 documentos na pasta final_v3. O mmBERT-base é ajustado nesses documentos e vira o Gama v1.2; o v1.2 é destilado nas 12 primeiras camadas, com os mesmos documentos e 1.818 ementas reais sem rótulo do celsowm/jurisprudencias_br, e vira o Gama v1.3.

Como os documentos são feitos

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.

Pastas

PastaDocumentosCitaçõesUso
final_v36.00044.234treino 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_v14.00029.532treino 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_org1.500 cada~11.100 cadavalidação por dobras: bancos tirados de metade do dev, só moldes da organização
dobra0_llm, dobra1_llm1.500 cada~11.100 cadavalidação por dobras, com os bancos ampliados por LLM
estresse_glm6004.447só avaliação: frases do GLM-5.3, que nenhum treino usou; metade N1, metade N2
reais/amostra.jsonl2.454 ementasementas reais do STF, STJ e TJRJ, de celsowm/jurisprudencias_br
reais/predicoes.jsonlspans do Gama v1 e da régua nessas ementas
reais/ouro_real.jsonl305 ementas1.085gabarito do benchmark de texto real, com prata.jsonl (onde as duas LLMs concordaram) e ambiguos.jsonl
reais/novo/200 ementas sorteadas, 172 anotadas682teste intocado de texto real: ouro_real.jsonl, os casos ambíguos e as decisões sobre eles
destilacao/reais_ids.json1.818 ementasementas 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).

Como foram gerados

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.

Formato

goldenset_offsets.csv segue o esquema do gabarito oficial do desafio:

ColunaConteúdo
nivel1 (texto limpo) ou 2 (com ruído de OCR)
documento_idnome do .txt, sem extensão
citacao_idordem da citação no documento
inicio, fimoffsets em codepoints, fim exclusivo
trechoo texto da citação, que pode conter quebra de linha
tipojurisprudencia ou lei
classificacaoreal, inventada ou incompleta
id_canonicopara 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.

Uso

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").

Limitações

  • Os documentos imitam os moldes de um gerador específico, não o texto jurídico real em geral. Um modelo treinado só com eles especializa nesse estilo: em ementas reais, o Gama sozinho fica atrás de uma régua de regex (0,620 contra 0,663 no v1.3). Na solução, uma guarda troca os trechos em que o modelo hesita (confiança abaixo de 0,95) pelos da régua e leva o v1.3 a 0,818, sem mudar nada no estilo do desafio; a definição está na seção "A guarda da solução" do card do modelo.
  • As frases vêm do dev set do desafio e de LLMs; as citações reais apontam para os 1.014 registros de um único acervo.

Ementas reais

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.

Licença

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.

Equipe

Vinícius Melo e Gabriel Siron, para o Desafio Caça-Alucinações (BRACIS 2026 × Jusbrasil).

In English

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.

brazilian-portuguese
citation-extraction
legal
synthetic