Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

🤗 Hugging Face Transformers – L'Écosystème SOTA du NLP

Guide complet IDEO-Lab : Pipeline, Tokenizer, Models (BERT/GPT), Fine-Tuning & Model Hub.

1.1 Facile

Vue d'ensemble

L'écosystème "standard" du NLP (SOTA). (BERT, GPT, Llama...).

NLP SOTA Transformers
1.2 Moyen

Pourquoi Transformers ?

Accès facile au SOTA. (vs SpaCy/NLTK). Interopérable (PyTorch/TF).

PyTorch TensorFlow
1.3 Facile

Installation (pip)

pip install transformers. (Nécessite PyTorch ou TensorFlow).

pip transformers
1.4 Facile

Concept N°1 : Le Model Hub

"GitHub pour les Modèles". (huggingface.co/models).

Model Hub Modèles
2.1 Facile

Concept N°2 : pipeline()

L'API "facile" (haut niveau). Gère tout (Tokenize, Predict, Decode).

pipeline Haut Niveau
2.2 Facile

Usage : Classification

sentiment-analysis, zero-shot-classification.

sentiment-analysis zero-shot
2.3 Facile

Usage : Extraction / Génération

ner, question-answering, text-generation.

ner text-generation
2.4 Moyen

Concept N°3 : Le Workflow

Le "cœur" (manuel) : Tokenizer -> Model -> Output.

Tokenizer Model
3.1 Moyen

Composant : AutoTokenizer

.from_pretrained(). (BPE/WordPiece). input_ids, attention_mask.

AutoTokenizer input_ids
3.2 Moyen

Composant : AutoModel (Base)

.from_pretrained(). Charge le "corps" (body) du Transformer.

AutoModel Base
3.3 Avancé

Composant : Modèles "Head"

AutoModelForSequenceClassification. (Base + Tête de Tâche).

...ForTask Head
3.4 Avancé

Concept N°4 : Fine-Tuning

Adapter (ré-entraîner) un modèle SOTA (ex: BERT) sur vos données.

Fine-Tuning Transfer Learning
4.1 Moyen

Écosystème : datasets

La bibliothèque datasets (load_dataset) pour charger/pré-traiter.

datasets load_dataset
4.2 Avancé

Écosystème : Trainer API

TrainingArguments, Trainer. (Abstrait la boucle PyTorch/TF).

Trainer TrainingArguments
4.3 Avancé

Écosystème : accelerate

Gère le Multi-GPU / TPU / Précision mixte (FP16) "sans effort".

accelerate Multi-GPU
4.4 Moyen

Écosystème : diffusers

La bibliothèque SOTA pour la GenAI (Image) (Stable Diffusion).

diffusers Stable Diffusion
5.1 Facile

Vitrine (Qui l'utilise ?)

Quasiment **toute** la R&D IA (OpenAI, Google, Meta, ...).

OpenAI Meta (Llama)
5.2 Facile

Liens Utiles & Formation

huggingface.co (Le Hub), Docs, "The Hugging Face Course".

huggingface.co HF Course
5.3 Facile

Cheat-sheet

Workflow (pipeline) vs Workflow (Tokenizer + Model).

cheat pipeline
1.1 Vue d'ensemble : L'Écosystème SOTA
Qu'est-ce que Hugging Face ?

Hugging Face (🤗) n'est pas "juste" une bibliothèque, c'est un **écosystème** (une entreprise) centré sur la démocratisation du Machine Learning (surtout le NLP).

transformers est leur bibliothèque (library) principale. Elle fournit un accès **simple et unifié** à des milliers de modèles "SOTA" (State-of-the-Art) basés sur l'architecture Transformer (ex: BERT, GPT-2, Llama, T5...).

Diagramme : L'Écosystème
+-------------------------+
| Hugging Face Hub        | (Modèles, Datasets, Démos)
+-------------------------+
      ^         ^
      | (Pull)  | (Push)
+-------------------------+
| `transformers` (Bibliothèque) |
+-------------------------+
| (API unifiée pour...)   |
| (BERT, GPT-2, Llama,    |
|  T5, BART, ...)         |
+-------------------------+
      | (Backend)
      ▼
+-----------+ +-----------+
| PyTorch   | | TensorFlow|
+-----------+ +-----------+
1.2 Pourquoi Transformers ? (vs SpaCy/NLTK)

SpaCy/NLTK utilisent des modèles "classiques" (statistiques ou CNN simples). transformers utilise des modèles "Deep Learning" (SOTA) pré-entraînés sur des Pétaoctets de texte.

CritèreSpaCy🤗 Transformers
Performance (Précision)Bonne (rapide)SOTA (State-of-the-Art)
Performance (Vitesse)Très rapide (CPU, Cython)Lent (GPU/TPU requis)
Taille ModèlesPetit/Moyen (_sm, _lg: 10MB-700MB)Lourd (BERT: 400MB, GPT: 1.5GB, Llama: 7B+ params)
ContexteContextuel (limité)Contextuel profond (Comprend les relations longues)
Cas d'usageParsing, NER, Tâches "rapides" (Prod).Traduction, Résumé, Q&A, Génération, Fine-Tuning.
1.3 Installation (transformers & Dépendances)

transformers est "agnostique" : il a besoin d'un backend (PyTorch ou TensorFlow) pour tourner. (PyTorch est le backend par défaut/préféré par la communauté).

1. Installation (avec PyTorch)
# 1. (Recommandé) Installer PyTorch d'abord (voir guide PyTorch)
pip install torch

# 2. Installer transformers
pip install transformers

# (OU: Installer les deux en une fois)
# pip install transformers[torch]
2. Installation (avec TensorFlow)
# 1. Installer TensorFlow
pip install tensorflow

# 2. Installer transformers
pip install transformers

# (OU: Installer les deux en une fois)
# pip install transformers[tensorflow]
3. Installation (avec datasets & accelerate)
# (Pour le Fine-Tuning)
pip install transformers[torch] datasets accelerate
1.4 Concept N°1 : Le Model Hub (huggingface.co)

Le **Hugging Face Hub** (huggingface.co) est le "cœur" de l'écosystème. C'est un "GitHub pour le Machine Learning".

Il héberge (gratuitement) :

  • Des milliers de Modèles pré-entraînés (ex: bert-base-uncased, meta-llama/Llama-2-7b).
  • Des milliers de Datasets (via datasets).
  • Des Démos (Spaces) (via Gradio/Streamlit).

Toutes les fonctions .from_pretrained() de la bibliothèque transformers téléchargent les modèles *depuis* ce Hub.

2.1 Concept N°2 : L'API pipeline() (Haut Niveau)

Le pipeline() est l'API "facile". C'est la meilleure façon de commencer.

Elle abstrait **tout** le workflow (Tokenizer, Modèle, Post-processing) en une seule fonction. Il suffit de lui donner le nom de la "tâche" (task).

Diagramme (pipeline)
(Votre texte: "I love this!")
      |
      ▼
+------------------------------------------+
| pipeline("sentiment-analysis")           | (Cache le workflow)
|                                          |
| 1. Tokenizer (Texte -> IDs)              |
| 2. Model (IDs -> Logits)                 |
| 3. Post-process (Logits -> Label)        |
|                                          |
+------------------------------------------+
      |
      ▼
(Résultat: [{'label': 'POSITIVE', 'score': 0.99...}])
Syntaxe (Générique)
from transformers import pipeline

// 1. Charger un pipeline (par tâche)
// (Télécharge le modèle par défaut pour cette tâche)
classifier = pipeline("sentiment-analysis")

// 2. Utiliser
result = classifier("This movie is fantastic!")

// 3. Charger un pipeline (modèle spécifique du Hub)
ner_pipeline = pipeline(
    "ner", 
    model="dbmdz/bert-large-cased-finetuned-conll03-english"
)

// 4. Spécifier le device (GPU)
text_gen = pipeline("text-generation", device=0) // (GPU 0)
2.2 Usage : Classification (Sentiment & Zero-Shot)
sentiment-analysis
pipe = pipeline("sentiment-analysis")
pipe("This is beautiful.")
// [{'label': 'POSITIVE', 'score': 0.99...}]

pipe("I hate this product.")
// [{'label': 'NEGATIVE', 'score': 0.99...}]
zero-shot-classification (Incroyable)

Permet de classifier un texte selon des labels que le modèle n'a **jamais** vus (sans fine-tuning).

pipe = pipeline("zero-shot-classification")
pipe(
    "Apple announces new M4 chip.",
    candidate_labels=["technology", "politics", "sports"]
)
// {'labels': ['technology', 'politics', 'sports'],
//  'scores': [0.95, 0.03, 0.02]}
2.3 Usage : Extraction (NER, Q&A) & Génération
ner (Named Entity Recognition)
pipe = pipeline("ner")
pipe("My name is Bob and I live in Paris.")
// [{'entity_group': 'PER', 'word': 'Bob', ...},
//  {'entity_group': 'LOC', 'word': 'Paris', ...}]
question-answering
pipe = pipeline("question-answering")
pipe(
    question="What is the capital of France?",
    context="France is a country... The capital is Paris."
)
// {'score': 0.99..., 'answer': 'Paris'}
text-generation
pipe = pipeline("text-generation", model="gpt2")
pipe("The meaning of life is", max_length=10)
// [{'generated_text': 'The meaning of life is to live it.'}]
summarization (Résumé)
pipe = pipeline("summarization")
pipe("Long article text...", min_length=10, max_length=50)
// [{'summary_text': 'Short summary...'}]
2.4 Concept N°3 : Le Workflow "Manuel" (Core)

Pour le fine-tuning ou un contrôle avancé, on n'utilise pas pipeline(). On utilise les 3 composants manuels :

Diagramme (Workflow Manuel)
+-------------------------+
| Texte brut (String)     |
+-------------------------+
      |
      ▼ (1. Tokenizer)
+-------------------------+
| AutoTokenizer           | (Ex: bert-base-uncased)
| (Texte -> IDs)          |
+-------------------------+
      |
      ▼
+-------------------------+
| Dictionnaire (Python)   |
| {'input_ids': [...],    |
|  'attention_mask': [...]} |
+-------------------------+
      |
      ▼ (2. Model)
+-------------------------+
| AutoModel (PyTorch/TF)  | (Ex: bert-base-uncased)
| (IDs -> Logits)         |
+-------------------------+
      |
      ▼
+-------------------------+
| Output (Logits/Vecteurs)|
+-------------------------+
      |
      ▼ (3. Post-processing)
+-------------------------+
| Votre code (ex: ArgMax) |
+-------------------------+
3.1 Composant : AutoTokenizer

Le Tokenizer (Tokeniseur) convertit le texte (string) en "Tensors" (nombres) que le modèle comprend.

AutoTokenizer est une "factory" qui charge le bon tokenizer (WordPiece, BPE, ...) associé au modèle (.from_pretrained()).

from transformers import AutoTokenizer

model_name = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_name)

text = "Hello, world!"

# (Tokenize + Convert to IDs + Add Special Tokens [CLS]/[SEP])
inputs = tokenizer(
    text, 
    padding=True, 
    truncation=True, 
    return_tensors="pt" // "pt" (PyTorch) ou "tf" (TensorFlow)
)

print(inputs)
// {
//  'input_ids': tensor([[ 101, 7592, 1010, 2088,  102]]),
//  'token_type_ids': tensor([[   0,    0,    0,    0,    0]]),
//  'attention_mask': tensor([[   1,    1,    1,    1,    1]])
// }
// (attention_mask = 1 si 'vrai' token, 0 si 'padding')
3.2 Composant : AutoModel (Base)

AutoModel charge le "corps" (base) du Transformer. Il retourne les **hidden states** (les "embeddings" contextuels), mais **pas** de prédiction finale.

Utile pour extraire des features (Embeddings) ou pour construire une "tête" (Head) custom.

from transformers import AutoModel

model = AutoModel.from_pretrained(model_name)

// (inputs = Tensors du Tokenizer)
outputs = model(**inputs) // (Le ** décompose le dict)

// (La sortie 'last_hidden_state'
// est le vecteur (embedding) de chaque token)
print(outputs.last_hidden_state.shape)
// torch.Size([1, 5, 768])
// (Batch=1, N_Tokens=5, Dim_Hidden=768)
3.3 Composant : Modèles "Head" (...ForTask)

C'est ce qu'on utilise 99% du temps (y compris pour le fine-tuning). Ce sont des classes (ex: AutoModelForSequenceClassification) qui ajoutent une "tête" (Head) de tâche (ex: une couche Dense) au-dessus du modèle de base.

Diagramme (Base + Head)
(input_ids)
     |
     ▼
+----------+
| AutoModel| (Ex: BERT)
| (Base)   | (Retourne Hidden States 768-dim)
+----------+
     |
     ▼
+----------+
| "Head"   | (Couche Dense (768 -> 2) + Softmax)
| (Tâche)  |
+----------+
     |
     ▼
(Logits/Probas) (ex: POSITIVE/NEGATIVE)
Exemple (Classification)
from transformers import AutoModelForSequenceClassification

// (Charge BERT + une tête de classification
// (2 labels: POS/NEG) déjà fine-tunée)
model_name = "distilbert-base-uncased-finetuned-sst-2-english"
model = AutoModelForSequenceClassification.from_pretrained(model_name)

outputs = model(**inputs)

print(outputs.logits) // (Logits bruts, avant Softmax)
// tensor([[-4.2, 4.5]]) (-> POSITIVE)
3.4 Concept N°4 : Fine-Tuning (Transfer Learning)

On n'entraîne (quasiment) **jamais** un Transformer (BERT, GPT) "from scratch" (de zéro). C'est trop coûteux (Mois, Millions $).

Le **Fine-Tuning** (Transfer Learning) est le processus :

  1. Pre-training (Pré-entraînement) : (Fait 1x par Google/Meta). Le modèle (ex: BERT) apprend le langage sur des Pétaoctets de texte (ex: Wikipédia). (Coûteux).
  2. Fine-Tuning (Ajustement) : (Fait par vous). On prend le modèle (ex: bert-base-uncased), on y ajoute une "tête" (Head) (ex: classifieur 3 classes), et on le ré-entraîne (.train()) sur **nos données spécifiques** (ex: 5000 tickets support).

C'est la méthode SOTA pour adapter un gros modèle à une tâche de niche.

4.1 Écosystème : datasets

La bibliothèque datasets est l'outil standard (de Hugging Face) pour charger et pré-traiter (mapper, filtrer) des datasets (petits ou très gros) depuis le Hub ou localement.

from datasets import load_dataset

# 1. Charger depuis le Hub
dataset = load_dataset("imdb") # (Dataset de reviews de films)
// (Retourne un 'DatasetDict': {'train': ..., 'test': ...})

# 2. Charger un CSV local
dataset_local = load_dataset("csv", data_files="mon_fichier.csv")

# 3. Tokenizer (Preprocessing)
// (On utilise .map() pour appliquer le tokenizer
// à tout le dataset de manière optimisée)
def tokenize_function(examples):
    return tokenizer(examples["text"], padding="max_length", truncation=True)

tokenized_datasets = dataset.map(tokenize_function, batched=True)
4.2 Écosystème : L'API Trainer

L'API Trainer est l'équivalent du .fit() de Keras. Elle abstrait la boucle d'entraînement (for epoch...) de PyTorch/TF.

C'est la méthode "standard" pour le Fine-Tuning.

from transformers import Trainer, TrainingArguments

# (tokenized_datasets = dataset (4.1))
# (model = AutoModelFor... (3.3))

# 1. Arguments d'entraînement
training_args = TrainingArguments(
    output_dir="./results",
    num_train_epochs=3,
    per_device_train_batch_size=16,
    per_device_eval_batch_size=16,
    evaluation_strategy="epoch", // (Évaluer à chaque epoch)
    logging_dir="./logs",
)

# 2. Initialiser le Trainer
trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets["train"],
    eval_dataset=tokenized_datasets["test"],
    # (compute_metrics=... (optionnel))
)

# 3. Lancer le Fine-Tuning
trainer.train()

# 4. Sauvegarder
trainer.save_model("./mon_modele_finetuned")
4.3 Écosystème : accelerate

accelerate est une bibliothèque qui simplifie le passage d'un script PyTorch d'un CPU -> 1 GPU -> Multi-GPU -> TPU, sans (presque) changer le code.

Elle est utilisée en interne par le Trainer, mais peut aussi être utilisée pour des boucles custom (PyTorch natif).

4.4 Écosystème : diffusers (GenAI Image)

Hugging Face n'est plus "juste" du NLP. La bibliothèque diffusers est devenue le "standard" (similaire à transformers) pour la **Génération d'Images** (Modèles de Diffusion).

from diffusers import DiffusionPipeline

# (Ex: Stable Diffusion)
pipeline = DiffusionPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5"
)
pipeline.to("cuda") // (GPU obligatoire)

prompt = "A high-quality photo of an astronaut riding a horse."
image = pipeline(prompt).images[0]

image.save("astronaut.png")
5.1 Vitrine (Qui utilise Transformers ?)

transformers est devenu l'outil standard de l'industrie et de la recherche pour le SOTA (Deep Learning).

Entreprise / ProjetCas d'usage
OpenAILes modèles (ex: GPT-2) sont disponibles sur le Hub. (GPT-3/4 sont propriétaires, mais les concepts sont implémentés dans transformers).
Google (DeepMind)Les modèles (BERT, T5, Flan-T5) sont des piliers du Hub.
Meta (FAIR)Les modèles (Llama, BART, NLLB) sont des piliers du Hub.
Toute la R&D IAStandard académique pour la publication (partage de modèles).
Startups IAFondation de 99% des startups NLP/GenAI (Fine-tuning de modèles du Hub).
5.3 Cheat-sheet (Workflow)
Voie 1 : pipeline (Facile)
from transformers import pipeline

// 1. Charger
pipe = pipeline(
    "sentiment-analysis",
    model="distilbert-base-uncased-finetuned-sst-2-english"
)

// 2. Prédire
result = pipe("This is great!")
// [{'label': 'POSITIVE', ...}]
Voie 2 : Manuel (Contrôle)
from transformers import (
    AutoTokenizer, 
    AutoModelForSequenceClassification
)
import torch

model_name = "distilbert-base-uncased-finetuned-sst-2-english"

# 1. Tokenizer
tokenizer = AutoTokenizer.from_pretrained(model_name)
inputs = tokenizer("This is great!", return_tensors="pt")

# 2. Model
model = AutoModelForSequenceClassification.from_pretrained(model_name)

# 3. Prédire
with torch.no_grad():
    outputs = model(**inputs)

# 4. Post-process
logits = outputs.logits
predicted_class_id = logits.argmax().item()
label = model.config.id2label[predicted_class_id]
// 'POSITIVE'