CoolFace
Datasetpublic

lucianfialho/privacy-filter-br-dataset

privacy-filter-br Dataset Synthetic Portuguese (BR) PII detection dataset used to fine-tune the privacy-filter-br NER model. 22 PII categories, BIOES tagging compatible. Latest: v8.1 main aponta sempre pra última versão estável. Hoje: v8.1 (172075 train + 17072 holdout). from datasets import load_dataset ds = load_dataset("lucianfialho/privacy-filter-br-dataset") # ou pin: load_dataset("lucianfialho/privacy-filter-br-dataset", revision="v8.1") Schema… See the full description on the dataset page: https://huggingface.co/datasets/lucianfialho/privacy-filter-br-dataset.

sourceHugging Faceapache-2.0updated 4mo agoView on Hugging Face
0likes67downloads
Dataset Card

privacy-filter-br Dataset

Synthetic Portuguese (BR) PII detection dataset used to fine-tune the privacy-filter-br NER model. 22 PII categories, BIOES tagging compatible.

Latest: v8.1

main aponta sempre pra última versão estável. Hoje: v8.1 (172075 train + 17072 holdout).

python
from datasets import load_dataset
ds = load_dataset("lucianfialho/privacy-filter-br-dataset")
# ou pin: load_dataset("lucianfialho/privacy-filter-br-dataset", revision="v8.1")

Schema

Cada linha é um JSON object:

json
{
  "text": "Documento completo em PT-BR...",
  "entities": [
    {"start": 12, "end": 27, "label": "private_cpf"},
    {"start": 45, "end": 67, "label": "private_person"}
  ],
  "template": "cvm_fre_administrador"
}
  • text: documento completo após rewrite via LLM (gpt-5-nano)
  • entities: lista de spans char-level com start/end/label
  • template: qual template Jinja gerou o esqueleto antes do rewrite

Categorias (22)

Identificadores BR estruturados (8): private_cpf, private_cnpj, private_rg, private_cnh, private_pis, private_titulo_eleitor, private_ie, private_certidao

Contato pessoal (5): private_person, private_email, private_phone, private_address, private_date

B2B / e-commerce (6): private_order_id, private_customer_id, private_tracking_code, private_invoice_number, private_transaction_id, private_client_revenue

OAI taxonomy (3): private_url, account_number, secret

Distribuição de labels (v8.1, 172075 docs train)

CategoriaTotal spans% docs
private_person234816137%
private_address14009181%
private_phone15170088%
private_email14727986%
private_cpf14623985%
private_cnpj12553973%
private_ie6975841%
private_date6480138%
privateclientrevenue7144242%
...outras 13...(ver auditlabeldistribution.py no repo)

Geração

Pipeline em github.com/lucianfialho/privacy-filter-br:

  1. 1.Perfis sintéticos via 4devs API (BR CPF/CNPJ/RG/etc com checksum válido)
  2. 2.Templates Jinja2 (35+ templates: BR public docs, narrative, structured)
  3. 3.Rewrite via LLM (gpt-5-nano para diversidade de linguagem)
  4. 4.Format-aware labeler (skeleton match para formats numerical + exact match para free-text)
  5. 5.Holdout split 9%

Versões disponíveis

TagTrain docsHoldout docsNotas
v8.1 (main)17207517072+ 7 templates derived from CVM/RFB/JUCESP/DOU; date detection 0→0.75 em CVM real

Limitações

  • Synthetic only. Todos os PII são fictícios (geração 4devs com checksum válido mas pessoa não existe). Reflete formato BR mas não comportamento real de prosa.
  • Synth-to-real gap. F1 sintético ≈ 0.99, F1 em 30 docs reais CVM ≈ 0.85 (overlap, com boundary merger). Para uso em produção, sempre validar contra documentos do seu domínio antes de subir.
  • Schema fixo em 22 categorias. Não cobre identificadores transacionais BR como CMC7, linha digitável de boleto, chave NF-e, chave PIX EVP, agência+conta. Schema expansion planejado para v9+.

Reproducibility

Para regenerar v8.1 do zero:

bash
git clone https://github.com/lucianfialho/privacy-filter-br
cd privacy-filter-br
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt

# Generate perfis cache (~3h, free)
python scripts/openai_batch.py perfis --n 1500 --output data/perfis_full.jsonl

# Prepare + submit OpenAI batch (~$1.50)
python scripts/openai_batch.py prepare --n 30000 \
  --perfis data/perfis_full.jsonl --output data/batch_input_v8_1.jsonl
python scripts/openai_batch.py submit --input data/batch_input_v8_1.jsonl

# Wait ~1h, then process
python scripts/openai_batch.py process --batch-id batch_XXX \
  --metadata data/batch_input_v8_1.metadata.jsonl \
  --output data/dataset_br_v8_1_main.jsonl

# Then combine with v7 + extras → v8.1
# See model-evolution.md for full sequence

Total cost: ~$1.80 OpenAI + ~7h GPU (RTX 2070 SUPER) para fine-tune.

Citação

@misc{privacy-filter-br-dataset-2026,
  author = {Lucian Fialho},
  title = {privacy-filter-br: Synthetic Brazilian Portuguese PII detection dataset},
  year = {2026},
  publisher = {HuggingFace},
  howpublished = {\url{https://huggingface.co/datasets/lucianfialho/privacy-filter-br-dataset}}
}

Licença

Apache 2.0 — uso livre incluindo comercial. Atribuição apreciada.

Modelo correspondente

`lucianfialho/privacy-filter-br` — BERTimbau fine-tuned no dataset acima. Mesmas tags de versão (v3, v8.1).