Instructions to use FlowRank/mailSort with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use FlowRank/mailSort with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="FlowRank/mailSort")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("FlowRank/mailSort", dtype="auto") - Notebooks
- Google Colab
- Kaggle
| library_name: transformers | |
| pipeline_tag: text-classification | |
| tags: | |
| - 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)) | |
| ``` | |