Tom11112000's picture
Upload fine-tuned DistilBERT email-reply classifier
c92cc78 verified
|
Raw
History Blame Contribute Delete
3.3 kB
---
license: apache-2.0
language:
- en
library_name: transformers
pipeline_tag: text-classification
base_model: distilbert-base-uncased
tags:
- text-classification
- intent-classification
- email
- sales
- outreach
- distilbert
widget:
- text: "Can we schedule a call next week?"
- text: "Please send your pricing and a few developer CVs."
- text: "I'm not the right person, please contact our CTO."
- text: "Not interested, please remove me from your list."
- text: "This sounds interesting, maybe later this year."
---
# Email Reply Classifier (IT Outsourcing Outreach)
Fine-tuned **DistilBERT** that classifies **inbound replies** to B2B cold-email
campaigns for an IT outsourcing company (offshore teams, dedicated developers,
DevOps/cloud, AI/data engineers, software outsourcing, Vietnam-based talent,
staff augmentation, remote engineering teams) into one of five intents.
## Labels
| id | label | meaning |
|----|-------|---------|
| 0 | `Information Request` | Asks for details (pricing, case studies, deck, CVs, tech stack) — no meeting yet. |
| 1 | `Wrong Person` | Not the right contact; refers another person/department. |
| 2 | `Interested` | Positive intent / openness, no direct ask. |
| 3 | `Meeting Request` | Wants to schedule a call / proposes a time / asks availability. |
| 4 | `Not Interested` | Rejects, opts out, unsubscribes, or no current need. |
The `id2label` / `label2id` maps are stored in `config.json`.
## Usage
```python
from transformers import pipeline
clf = pipeline("text-classification", model="<your-username>/email-reply-classifier")
clf("Can we schedule a call next week?")
# [{'label': 'Meeting Request', 'score': 0.99}]
```
Or with the full project (rule pre-classifier + confidence gating + suggested
actions): https://github.com/ — see the accompanying `email_classifier` package.
## Intended use
First-pass triage of cold-outreach replies so a sales team can auto-pause
sequences and route replies (send materials, book a meeting, find the right
contact, stop outreach). Pair with a confidence threshold (e.g. 0.65) to route
low-confidence replies to a human.
## Training data
Trained on a **synthetically generated** dataset of 5,000 examples (1,000 per
label), balanced, with short/long/ambiguous replies, signatures, quoted
fragments, typos/broken English, and multi-intent replies labeled by priority
rules (Meeting > Wrong Person > Information > Interested > Not Interested).
## Evaluation
On a stratified 10% held-out split of the **synthetic** data: accuracy **1.00**,
macro-F1 **1.00**.
> ⚠️ **Important:** 1.00 on held-out *synthetic* data reflects that the templated
> data is highly separable — it is **not** a measure of real-world accuracy.
> Before production use, collect and label real inbound replies (Smartlead,
> Apollo, Gmail, HubSpot, Instantly), evaluate against them, and fine-tune
> further. Treat this checkpoint as an MVP baseline.
## Limitations & bias
- Domain-specific to IT-outsourcing outreach; out-of-domain text is unreliable.
- Synthetic training data underrepresents real nuance (e.g. "budget frozen until
next year" may be read as *Interested* rather than *Not Interested*).
- English only.
## Framework
DistilBERT base uncased, fine-tuned 3 epochs (lr 2e-5, batch 16, max_len 256).