Text Classification
setfit
Safetensors
English
bert
dlp
data-loss-prevention
pii-detection
pii
security
false-positive-reduction
intent-classification
Eval Results (legacy)
Instructions to use spidercob/dlp-intent-classifier with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- setfit
How to use spidercob/dlp-intent-classifier with setfit:
from setfit import SetFitModel model = SetFitModel.from_pretrained("spidercob/dlp-intent-classifier") - Notebooks
- Google Colab
- Kaggle
| language: en | |
| license: apache-2.0 | |
| tags: | |
| - setfit | |
| - text-classification | |
| - dlp | |
| - data-loss-prevention | |
| - pii-detection | |
| - pii | |
| - security | |
| - false-positive-reduction | |
| - intent-classification | |
| pipeline_tag: text-classification | |
| library_name: setfit | |
| metrics: | |
| - accuracy | |
| model-index: | |
| - name: spidercob/dlp-intent-classifier | |
| results: | |
| - task: | |
| type: text-classification | |
| name: Text Classification | |
| dataset: | |
| name: Mixed (production DLP findings + ai4privacy + Faker + The Stack) | |
| type: mixed | |
| split: test | |
| metrics: | |
| - type: accuracy | |
| value: 0.9971 | |
| name: Accuracy | |
| # spidercob/dlp-intent-classifier | |
| A [SetFit](https://github.com/huggingface/setfit) model that classifies **DLP (Data Loss Prevention) regex match findings** into 4 intent categories — distinguishing genuine sensitive data from false positives. | |
| ## The Problem | |
| DLP engines use regex patterns to detect PII and secrets (SSNs, credit cards, API keys, emails, etc.). These patterns generate **large numbers of false positives**: | |
| - A CSS rule like `z-index: 100-200-300` matches an SSN pattern | |
| - A Stripe test card `4242424242424242` in a README matches a credit card pattern | |
| - A code comment `# Set OPENAI_API_KEY=sk-xxxx in .env` matches an API key pattern | |
| Without intent classification, every regex hit triggers an alert. This model reads the surrounding context and decides whether the match is real. | |
| ## Labels | |
| | Label | Description | Recommended Action | | |
| |---|---|---| | |
| | `REAL_DATA` | Genuine PII, credential, or secret | BLOCK (conf > 0.7) | | |
| | `TEST_DATA` | Test/mock/sandbox value | ALLOW (conf > 0.8) | | |
| | `DOCUMENTATION` | Regex hit inside a comment, README, or docstring | ALLOW | | |
| | `NOISE` | False positive — low-signal pattern match | IGNORE | | |
| ## Quick Start | |
| ```python | |
| from setfit import SetFitModel | |
| model = SetFitModel.from_pretrained("spidercob/dlp-intent-classifier") | |
| examples = [ | |
| "Context surrounding a ssn: Patient record: Maria Garcia SSN=523-89-4521 DOB=1975-03-12", | |
| "Context surrounding a credit_card: Stripe test card 4242424242424242 in checkout flow test", | |
| "Context surrounding a api_key: # Set OPENAI_API_KEY=sk-xxxx in .env before running", | |
| "Context surrounding a ssn: CSS z-index: 100-200-300 matched SSN pattern", | |
| ] | |
| predictions = model.predict(examples) | |
| # ['REAL_DATA', 'TEST_DATA', 'DOCUMENTATION', 'NOISE'] | |
| probabilities = model.predict_proba(examples) | |
| # Shape: (4, 4) — confidence per class | |
| ``` | |
| ## Input Format | |
| ``` | |
| Context surrounding a {finding_type}: {context_text} | |
| ``` | |
| - `finding_type`: the DLP pattern that matched — e.g. `ssn`, `credit_card`, `aws_access_key`, `email`, `api_key`, `password`, `phone`, `ip_address` | |
| - `context_text`: surrounding content snippet, up to ~400 characters | |
| ## Integration Pattern | |
| ```python | |
| from setfit import SetFitModel | |
| model = SetFitModel.from_pretrained("spidercob/dlp-intent-classifier") | |
| def should_block(finding_type: str, context: str) -> dict: | |
| text = f"Context surrounding a {finding_type}: {context}" | |
| label = model.predict([text])[0] | |
| probs = model.predict_proba([text])[0] | |
| conf = max(probs) | |
| if label == "REAL_DATA" and conf > 0.7: | |
| return {"action": "BLOCK", "label": label, "confidence": conf} | |
| elif label == "TEST_DATA" and conf > 0.8: | |
| return {"action": "ALLOW", "label": label, "confidence": conf} | |
| elif label == "DOCUMENTATION": | |
| return {"action": "ALLOW", "label": label, "confidence": conf} | |
| elif label == "NOISE": | |
| return {"action": "IGNORE", "label": label, "confidence": conf} | |
| else: | |
| return {"action": "REVIEW", "label": label, "confidence": conf} | |
| # Example | |
| result = should_block("ssn", "Patient record: Maria Garcia SSN=523-89-4521") | |
| # {"action": "BLOCK", "label": "REAL_DATA", "confidence": 0.99} | |
| ``` | |
| ## Model Details | |
| - **Base model**: `sentence-transformers/all-MiniLM-L6-v2` (22.7M params, 6 BERT layers, 384-dim embeddings) | |
| - **Method**: SetFit — contrastive fine-tuning of sentence transformer + logistic regression head | |
| - **Architecture**: GELU activations throughout; tanh only in pooler layer | |
| - **Test accuracy**: **99.7%** on held-out stratified 20% split | |
| - **Training time**: ~2.5 hours on Apple M-series (MPS) | |
| ## Training Data | |
| 2,000+ examples across 4 balanced classes: | |
| | Source | Count | Label | | |
| |---|---|---| | |
| | Production DLP scan findings (Spidercob) | ~256 | Mixed (auto-labeled) | | |
| | [ai4privacy/pii-masking-300k](https://huggingface.co/datasets/ai4privacy/pii-masking-300k) | 500 | REAL_DATA | | |
| | Faker-generated test fixtures | 500 | TEST_DATA | | |
| | [bigcode/the-stack-smol](https://huggingface.co/datasets/bigcode/the-stack-smol) code comments + synthetic | 500 | DOCUMENTATION | | |
| | Generated false-positive patterns | 500 | NOISE | | |
| ## Fine-tune on Your Own Data | |
| See the training pipeline at [github.com/SpiderCob/dlp-intent-classifier](https://github.com/SpiderCob/dlp-intent-classifier). | |
| ```bash | |
| git clone https://github.com/SpiderCob/dlp-intent-classifier | |
| cd dlp-intent-classifier | |
| pip install -r requirements.txt | |
| # Export your DLP findings, augment, and retrain | |
| python scripts/export_training_data.py # pull from your DB | |
| python scripts/augment_training_data.py # add synthetic examples | |
| python scripts/build_public_dataset.py # fetch public datasets | |
| python scripts/merge_and_retrain.py # merge + fine-tune | |
| ``` | |
| ## About | |
| Built by [Spidercob](https://spidercob.com) — enterprise DLP SaaS. This model powers the false-positive reduction layer in Spidercob's DLP engine, reducing alert fatigue while maintaining high sensitivity to real data leaks. | |
| ## License | |
| Apache 2.0 | |