mailSort / README.md
enzofrnt's picture
feat(training): pipeline minimal train/test + artefacts HF
8153a62 unverified
---
library_name: transformers
pipeline_tag: text-classification
tags:
- email
- text-classification
language:
- en
---
## mailSort
Repo minimal (Python) pour **entraîner, évaluer et publier** un modèle de classification multi-classes d’e-mails à partir du dataset Hugging Face [`FlowRank/labeled_emails`](https://huggingface.co/datasets/FlowRank/labeled_emails).
Le script principal est `mailsort.train` (Transformers `Trainer`).
### Prérequis
- Python géré par `uv` (ce repo est prévu pour être lancé avec `uv run`)
- (Optionnel) un GPU CUDA si tu veux accélérer l’entraînement
- (Optionnel) un token HF si tu veux publier sur le Hub
### Installation
`uv` installe/synchronise automatiquement les dépendances la première fois.
```bash
uv sync
```
### Entraîner + évaluer (train + test)
Par défaut, le script charge le dataset **depuis le Hub** et utilise ses splits `train` et `test`.
L’évaluation se fait à chaque epoch, puis une évaluation finale est exécutée à la fin.
Les artefacts (modèle, tokenizer) sont sauvegardés dans `outputs/` (ou le dossier passé via `--output-dir`).
```bash
uv run python -m mailsort.train \
--dataset-id FlowRank/labeled_emails \
--model-name distilbert-base-uncased \
--hub-model-id FlowRank/mailSort \
--num-train-epochs 2
```
### Tester / évaluer uniquement
Le script n’a pas (encore) de mode “eval-only”.
Le **minimum** pour faire uniquement une passe rapide est de mettre `--num-train-epochs 0` (ce qui évite l’entraînement) et de garder la phase `evaluate`.
```bash
uv run python -m mailsort.train --num-train-epochs 0
```
### Évaluer sur le split `test` du dataset (recommandé)
Après ton entraînement dans `outputs/`, tu peux évaluer proprement sur le **split `test`** de `FlowRank/labeled_emails` :
```bash
uv run python -m mailsort.eval --model outputs --dataset-id FlowRank/labeled_emails --split test
```
(Optionnel) Pour un test rapide :
```bash
uv run python -m mailsort.eval --model outputs --split test --max-samples 200
```
### Publier sur le Hub (FlowRank/mailSort)
Le push se fait automatiquement si la variable d’environnement `HF_TOKEN` (ou `HUGGINGFACE_HUB_TOKEN`) est définie.
```bash
export HF_TOKEN="..."
uv run python -m mailsort.train --hub-model-id FlowRank/mailSort
```
### Publier via Git (README à la racine + artefacts dans `model/`)
Pour avoir un repo Hugging Face “complet” (doc + poids) tout en gardant une structure propre, on met :
- `README.md` à la racine (documentation + model card)
- les artefacts (config, poids, tokenizer) dans `model/`
Hugging Face pourra charger le modèle via `subfolder="model"`.
1) Préparer le dossier `model/` à partir de `outputs/` :
```bash
uv run python -m mailsort.prepare_model --outputs-dir outputs --model-dir model
```
2) Commit + push vers le repo Hugging Face `FlowRank/mailSort` :
```bash
git add README.md model
git commit -m "Add model artifacts under model/ + docs"
git push
```
### Inférence (utiliser le modèle publié)
```python
from transformers import AutoModelForSequenceClassification, AutoTokenizer, pipeline
tok = AutoTokenizer.from_pretrained("FlowRank/mailSort", subfolder="model")
model = AutoModelForSequenceClassification.from_pretrained("FlowRank/mailSort", subfolder="model")
clf = pipeline("text-classification", model=model, tokenizer=tok, truncation=True)
text = "Subject: Insurance claim\n\nBody: Hello, I need to update my policy..."
print(clf(text))
```