Instructions to use carloseducorinto/bypass_bertbase_portuguese_detector with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use carloseducorinto/bypass_bertbase_portuguese_detector with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="carloseducorinto/bypass_bertbase_portuguese_detector")# Load model directly from transformers import AutoTokenizer, AutoModelForSequenceClassification tokenizer = AutoTokenizer.from_pretrained("carloseducorinto/bypass_bertbase_portuguese_detector") model = AutoModelForSequenceClassification.from_pretrained("carloseducorinto/bypass_bertbase_portuguese_detector", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Model Card for Bypass Detector (BERTimbau Base)
Detector supervisionado de tentativas de bypass (transação/contato fora da plataforma) em conversas de chat de negociação, desenvolvido para operar como segunda camada de moderação em cascata.
Model Details
Model Description
Este modelo é uma versão fine-tuned do BERTimbau Base (neuralmind/bert-base-portuguese-cased) para classificação binária de sequências (0: nao_bypass, 1: bypass).
O objetivo é identificar quando um participante da negociação tenta migrar o contato para canais externos (WhatsApp, telefone, Telegram, e-mail, redes sociais ou chaves PIX em formato de telefone), considerando a mensagem atual juntamente com o contexto imediato dos turnos anteriores ($k = 3$).
- Developed by: Time de Dados & IA
- Funded by: CEGS
- Shared by:
Carlos Eduardo Gabriel Santos - Model type: Transformer Encoder (
BertForSequenceClassification) - Language(s) (NLP): Português (pt-BR)
- License: CEGS
- Finetuned from model:
neuralmind/bert-base-portuguese-cased
Model Sources
- Repository: Repositório privado Hugging Face (
carloseducorinto/bypass_bertbase_portuguese_detector) - Paper: Devlin et al., 2018 (BERT) e Souza et al., 2020 (BERTimbau)
Uses
Direct Use
O modelo destina-se à classificação pontual e em lote de mensagens de chat em plataformas de marketplace, avaliando o texto da mensagem-alvo precedido por até 3 turnos de contexto formatados estruturalmente.
Entrada esperada do modelo:
[CONTEXTO]
REMETENTE_1: Texto do turno -3
REMETENTE_2: Texto do turno -2
REMETENTE_1: Texto do turno -1
[MENSAGEM]
REMETENTE_2: Mensagem atual a ser avaliada
Downstream Use
- Segunda Camada em Cascata: Atua após filtros heurísticos e regras de alta precisão (ex: regex de telefones canônicos), capturando ofuscações complexas (
62x993x34xx68xx90), fragmentações entre múltiplos turnos, links encurtados/grupos (chat.whatsapp.com), e-mails e chaves PIX de telefone. - Auditoria Assíncrona: Reprocessamento e scoring em lote de históricos de negociação para mitigação de fraudes e desintermediação.
Out-of-Scope Use
- Uso sem contexto formatado: Avaliar mensagens sem o prefixo
[MENSAGEM]ou omitir o histórico quando existente pode degradar o recall em fragmentos multi-turno. - Truncamento à direita (
truncation_side = "right"): A mensagem-alvo situa-se no final da sequência. Cortar pela direita remove a mensagem a ser classificada, gerando falsos negativos silenciosos. - Decisão judicial ou punitiva automática sem revisão: O modelo deve ser utilizado com limiares calibrados ($P \ge 97%$) ou fila de revisão humana para pontuações limítrofes.
Bias, Risks, and Limitations
Modelo Treinado em Dados Sintéticos (Regra 7 do Projeto): Para estrita conformidade com a LGPD e sigilo de dados sensíveis, o modelo foi treinado integralmente sobre um corpus sintético procedural enriquecido a partir de distribuições e n-gramas agregados do mundo real (sem PII). Antes da implantação em produção final, deve ser validado no ambiente restrito com dados reais anotados.
- Assimetria por Família de Bypass:
- O modelo atinge Recall de 100% em ofuscações com caracteres intercalados (
fornecimento_ofuscado), números fragmentados (fragmento), links de WhatsApp (recrutamento_externo) e chaves PIX com telefone (pix_telefone). - A família
solicitacao(pedidos de contato sem envio de dígitos, ex: "me chama lá", "tem zap?") apresenta recall menor (~73,7% no limiar de alta precisão).
- O modelo atinge Recall de 100% em ofuscações com caracteres intercalados (
- Contextos com Bypass Prévio (Falsos Positivos Conhecidos):
- Mensagens de despedida ou confirmação após o envio de um contato (ex: "Boa noite", "Blz" precedidos por turno com telefone) podem herdar pontuação positiva devido ao contexto.
- Frases Ambíguas por Desenho:
- Expressões como "chama" ou "fala comigo" sem menção explícita a canal externo são tratadas como legítimas da plataforma para evitar falsos positivos excessivos.
Recommendations
- Configurar Tokenizador: Sempre configurar explicitamente
tokenizer.truncation_side = "left"emax_length = 256. - Limiar de Operação: Utilizar o limiar calibrado
T = 0.4506para garantir Precisão $\ge 96.8%$ e Recall $\ge 91.5%$, ouT = 0.5000para operação conservadora (Precisão $\ge 98.9%$).
How to Get Started with the Model
Instalação
pip install torch transformers
Exemplo de Inferência em Python
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification
# 1. Carregar modelo e tokenizador
REPO_ID = "carloseducorinto/bypass_bertbase_portuguese_detector"
tokenizer = AutoTokenizer.from_pretrained(REPO_ID)
tokenizer.truncation_side = "left" # OBRIGATÓRIO: preserva a mensagem-alvo no fim
model = AutoModelForSequenceClassification.from_pretrained(REPO_ID)
model.eval()
# 2. Formatar mensagem com histórico de até 3 turnos
contexto = [
{"sender": "CAMINHONEIRO", "texto": "Boa tarde, tenho interesse no frete"},
{"sender": "EMBARCADOR", "texto": "Boa tarde amigo, carga disponível em Curitiba"},
{"sender": "CAMINHONEIRO", "texto": "Qual o valor fechado?"}
]
mensagem_alvo = {
"sender": "EMBARCADOR",
"texto": "chama no 4 1 9 9 1 2 3 4 5 6 7 pra fechar"
}
# Montar o template de entrada
linhas_contexto = [f"{t['sender']}: {t['texto']}" for t in contexto[-3:]]
texto_contexto = "\n".join(linhas_contexto) if linhas_contexto else "[SEM HISTORICO ANTERIOR]"
input_text = f"[CONTEXTO]\n{texto_contexto}\n[MENSAGEM]\n{mensagem_alvo['sender']}: {mensagem_alvo['texto']}"
# 3. Tokenização e Predição
inputs = tokenizer(
input_text,
max_length=256,
truncation=True,
padding=True,
return_tensors="pt"
)
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=-1)
score_bypass = probs[0, 1].item() # Classe 1 = bypass
# 4. Decisão via limiar calibrado
LIMIAR_CALIBRADO = 0.4506
is_bypass = score_bypass >= LIMIAR_CALIBRADO
print(f"Score Bypass: {score_bypass:.5f}")
print(f"Classificação: {'🚨 BYPASS DETECTADO' if is_bypass else '✅ MENSAGEM REGULAR'}")
Training Details
Training Data
O modelo foi treinado em um corpus de 534.964 exemplos sintéticos com prevalência natural balanceada de 3,99% de positivos, estruturado segundo o contrato de 31 colunas do projeto.
- Ausência total de PII: Padrões numéricos e nomes foram gerados deterministicamente baseados em distribuições de n-gramas do mundo real.
- Diversidade de Negativos Realistas: Inclui placas de veículos (
ABC1D23), CEPs (13480-000), valores monetários (R$ 4.500,00), dimensões (11.40 x 2.60), pesos em toneladas e kg, e URLs legítimas da plataforma. - Garantia de Split: Divisão estratificada por
chat_idcom deduplicação prévia, garantindo 0 vazamento entre treino, validação e teste.
Training Procedure
Preprocessing
- Formatação em turnos com prefixos estruturados
[CONTEXTO]e[MENSAGEM]. - Tokenização via BERTimbau cased com
max_length = 256etruncation_side = "left".
Training Hyperparameters
- Regime de Treino: FP16 mixed precision
- Otimizador: AdamW
- Learning Rate:
2e-5com linear decay - Warmup:
1.505 passos(~6% do total) - Batch Size: 64
- Épocas: 3 épocas (25.092 passos de otimização)
- Seleção de Checkpoint:
load_best_model_at_end = Truemonitorandorecall @ precision >= 97%(Melhor checkpoint na Época 2).
Speeds, Sizes, Times
- Hardware de Treino: 1x NVIDIA A100 SXM4 40GB (Google Colab Enterprise)
- Tempo Total de Treino: 43 minutos e 49 segundos
- Tamanho dos Pesos: 435,7 MB (
model.safetensors, 108.9M parâmetros)
Evaluation
Testing Data, Factors & Metrics
Testing Data
Conjunto de teste independente contendo 115.962 mensagens (4.634 bypass e 111.328 não-bypass), avaliado com reponderação para a prevalência real de 4%.
Factors & Taxonomia
Avaliação desagregada pelas 9 famílias de bypass reais:
fornecimento_ofuscado(dígitos com separadores/caracteres intercalados)fragmento(número dividido em 2 a 4 mensagens sequenciais)solicitacao(pedido de canal externo sem envio de número)pix_telefone(chave PIX em formato de celular - Regra R5)valor_camuflado(telefone disfarçado de valor em R$)recrutamento_externo(linkswa.me,chat.whatsapp.com,linktr.ee)fornecimento_explicito(e-mails e números canônicos)combinacao_canal(promessa de contato com letras espaçadas)instrucao_ofuscacao(orientações sobre como burlar o filtro)
Metrics
- AUC-PR (Reponderado): Integração da curva Precision-Recall ajustada à prevalência.
- Precisão e Recall por Mensagem.
- Precisão e Recall por Negociação: Agregação por
max(score)em cadanegotiation_id(basta 1 detecção para conter o bypass).
Results
| Métrica | Limiar Calibrado (0.4506) |
Ponto Médio (0.5000) |
|---|---|---|
| AUC-PR (Reponderado) | 0.9918 | 0.9918 |
| Precisão por Mensagem | 96.87 % | 98.96 % |
| Recall por Mensagem | 91.53 % | 89.54 % |
| Precisão por Negociação | 94.94 % | 98.43 % |
| Recall por Negociação | 98.24 % | 97.72 % |
Desempenho por Família de Bypass (Teste)
Família (bypass_type) |
Recall ($T = 0.4506$) | Recall ($T = 0.5000$) | Severidade |
|---|---|---|---|
fornecimento_ofuscado |
100.0 % | 100.0 % | Alta |
fragmento |
100.0 % | 100.0 % | Alta |
pix_telefone |
100.0 % | 100.0 % | Média |
valor_camuflado |
100.0 % | 100.0 % | Alta |
recrutamento_externo (links) |
100.0 % | 100.0 % | Crítica |
fornecimento_explicito |
100.0 % | 100.0 % | Alta |
combinacao_canal |
100.0 % | 100.0 % | Média |
instrucao_ofuscacao |
100.0 % | 100.0 % | Crítica |
solicitacao |
73.72 % | 67.53 % | Média |
Teste de Estresse (Casos Desafiadores Fora da Distribuição)
Em suite de testes com 33 casos manuais contendo ruídos, gírias e números legais:
- Casos Vistos: 8/8 (100% de acerto)
- Casos Inéditos: 21/25 (84% de acerto)
- Negativos Numéricos Críticos:
CEP 13480-000,nota fiscal 000123456789,placa ABC1D23epedido 4500123 ja liberadoforam classificados corretamente com score 0.0000.
Model Examination
- Resolução de Sub-tokens: O vocabulário do BERTimbau separa estruturalmente ofuscações de medidas (
62 ##x ##99 ##3para telefone vs11 . 40 x 2 . 60para dimensões de carreta), dispensando normalizadores heurísticos que causavam perda de sinal em emojis e leetspeak. - Análise Pareada vs Versões Anteriores: Em comparação direta pareada (teste de McNemar, $p < 0.001$), esta versão superou a baseline em 26 discordâncias consecutivas a zero, corrigindo disparos indevidos em CEPs e placas.
Environmental Impact
- Hardware Type: 1x NVIDIA A100 SXM4 (40 GB VRAM)
- Hours Used: ~1.5 horas de computação ativa (treino + validações)
- Cloud Provider: Google Cloud Platform (GCP / Colab Enterprise)
- Compute Region:
us-central1 - Carbon Estimation: ~0.18 kg CO₂eq (estimado via Machine Learning Impact Calculator).
Technical Specifications
Model Architecture and Objective
BertForSequenceClassification(
(bert): BertModel (12 layers, 768 hidden, 12 heads, 29,794 vocab)
(dropout): Dropout(p=0.1)
(classifier): Linear(in_features=768, out_features=2, bias=True)
)
- Número Total de Parâmetros: 108.923.138 (~108.9M)
- Formato de Serialização: Safetensors (
model.safetensors)
Compute Infrastructure
Latência de Inferência Medida
| Ambiente / Configuração | Latência p50 | Latência p95 | Throughput (Lote 32) |
|---|---|---|---|
| GPU A100 (fp16 / fp32) | ~11.2 ms | 13.5 ms | > 350 msg/s |
| CPU Container Docker (fp32, 4 threads) | 112.7 ms | 120.9 ms | 16 msg/s (62.6 ms/msg) |
| CPU Container Docker (int8 dinâmico) | 66.7 ms | 69.8 ms | 22 msg/s (45.1 ms/msg) |
Citation
@article{souza2020bertimbau,
title={BERTimbau: Pretrained BERT Models for Brazilian Portuguese},
author={Souza, F{\'a}bio and Nogueira, Rodrigo and Lotufo, Roberto},
journal={9th Brazilian Conference on Intelligent Systems (BRACIS)},
year={2020}
}
@article{devlin2018bert,
title={BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding},
author={Devlin, Jacob and Chang, Ming-Wei and Lee, Kenton and Toutanova, Kristina},
journal={arXiv preprint arXiv:1810.04805},
year={2018}
}
Glossary
- Bypass: Qualquer tentativa de fornecer, solicitar ou instruir a migração da negociação para canal externo fora da plataforma segura.
- Segunda Camada em Cascata: Arquitetura onde o modelo processa mensagens que não foram filtradas por regras determinísticas estritas, maximizando recall em padrões complexos sem sobrecarregar a infraestrutura.
- Regras R1–R5: Regras normativas de desempate do projeto (prioridade do canal sobre rótulo alegado, contagem de dígitos sem unidade, validação de chaves PIX).
- Truncamento à Esquerda (
left): Estratégia de tokenização que descarta turnos mais antigos do contexto quando o tamanho excedemax_length = 256, preservando intacta a mensagem-alvo.
Model Card Authors
- Time de Dados e IA
- Downloads last month
- -
Model tree for carloseducorinto/bypass_bertbase_portuguese_detector
Base model
neuralmind/bert-base-portuguese-casedPaper for carloseducorinto/bypass_bertbase_portuguese_detector
Evaluation results
- Precision (Message) on Synthetic Bypass Datasetself-reported0.969
- Recall (Message) on Synthetic Bypass Datasetself-reported0.915
- Precision (Negotiation) on Synthetic Bypass Datasetself-reported0.949
- Recall (Negotiation) on Synthetic Bypass Datasetself-reported0.982
- AUC-PR (Reweighted) on Synthetic Bypass Datasetself-reported0.992