privacy-filter-br

BERTimbau fine-tune para detecção de PII (Personally Identifiable Information) em português brasileiro. 22 categorias, BIOES tagging (89 labels).

Latest: v8.1

main aponta sempre pra última versão estável. Hoje: v8.1 (templates derivados de docs públicos BR fecham o gap de detecção de data em real-world — Phase 1 CVM date F1 0 → 0.75 overlap).

Uso

from transformers import AutoTokenizer, AutoModelForTokenClassification, pipeline

# Latest (recomendado)
tok = AutoTokenizer.from_pretrained("lucianfialho/privacy-filter-br")
model = AutoModelForTokenClassification.from_pretrained("lucianfialho/privacy-filter-br")
ner = pipeline("token-classification", model=model, tokenizer=tok, aggregation_strategy="simple")

# Pin numa versão específica
model = AutoModelForTokenClassification.from_pretrained(
    "lucianfialho/privacy-filter-br",
    revision="v8.1",  # ou "v3" pra legacy baseline
)

Produção: use junto com br-pii-guardrail que aplica boundary merger no output do modelo — fix crítico pra real-world docs onde sub-token fragmentation derruba exact-match F1 pra zero.

Versões disponíveis

Tag F1 sintético (micro) Phase 1 CVM (overlap, 4 cats macro) Notas
v8.1 (main) 0.9906 0.8536 + 7 templates derived from CVM/RFB/JUCESP/DOU; date 0→0.75
v3 0.9900 0.6786 Baseline pre-Phase 2, Haiku-rewritten data

v4, v5, v6, v7, v8 não estão acessíveis nesse repo — iterações intermediárias com problemas conhecidos. v4 teve distribution-shift catastrófico em cross-holdout. v7 fechou o gap de boundary fragmentation (exact F1 0→0.90) mas date detection ficou em 0/30 no CVM. v8 fixou a instrumentação do labeler (data_nasc registrada) mas modelo overfitou no phrasing do rewriter ("nascido(a) em DATE, filho(a)" vs CVM "nascido em DATE, exerce profissão"). v8.1 fecha esse gap.

Phase 1 CVM real benchmark (30 docs)

Com boundary merger (br-pii-guardrail aplica automaticamente):

Categoria overlap F1 exact F1 notas
private_cpf 1.0000 1.0000 perfeito
private_cnpj 1.0000 1.0000 perfeito
private_person 0.7143 0.6905 30/30 detect, 22 FP (boundary slop em "DA SILVA JR.")
private_date 0.7500 0.3125 24/30 detect, boundary precisa polir

Sintético per-category (eval holdout pós-treino): todas as 22 cats com F1 entre 0.93 e 1.00. Date sintético: 0.9616, address sintético: 0.9375.

Categorias detectadas (22)

private_person, private_cpf, private_cnpj, private_rg, private_pis, private_cnh, private_titulo_eleitor, private_ie, private_certidao, private_email, private_phone, private_address, private_date, private_url, account_number, private_customer_id, private_order_id, private_invoice_number, private_tracking_code, private_transaction_id, private_client_revenue, secret

Limitações conhecidas

  • Date exact F1 ainda baixo (0.31 em CVM): modelo detecta a data mas boundary precisa polir. Overlap F1 0.75 já viável pra redaction.
  • Address não mensurável em Phase 1 v1: CVM não tem street addresses nos cadastros. Phase 1 v2 (issue #1) trará fontes com address gold real.
  • Schema não cobre identificadores transacionais BR: CMC7, linha digitável de boleto, chave NF-e, chave PIX EVP, agência+conta bancária. Schema expansion tracked em issue #2.

Recursos

Citação

Se usar em pesquisa, cite o repo: github.com/lucianfialho/privacy-filter-br

Downloads last month
69
Safetensors
Model size
0.1B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for lucianfialho/privacy-filter-br

Finetuned
(206)
this model

Space using lucianfialho/privacy-filter-br 1