À quoi ça sert

Entraîner un gros modèle de deep learning (BERT, Whisper, un détecteur d'objets…) demande des milliers d'heures de GPU et des téraoctets de données. Personne ne fait ça de zéro pour un projet d'application — on récupère un modèle pré-entraîné, on l'adapte si besoin (« fine-tuning »), et c'est tout.

Hugging Face propose deux choses indissociables :

  • Le Hub — un site (huggingface.co) où on télécharge et partage des modèles, des datasets, des démos interactives (« Spaces »). Plus de 1 million de modèles disponibles, la plupart gratuits.
  • La lib transformers — du code Python qui télécharge un modèle du Hub et l'expose avec une API uniforme. Tu écris la même chose pour BERT, GPT-2 ou Whisper.

Cas d'usage typiques :

  • NLP — classification de sentiment, génération de texte, traduction, résumé automatique, NER.
  • Vision — classification d'image, détection d'objets, segmentation.
  • Audio — transcription (Whisper), synthèse vocale, classification.
  • Multimodal — modèles qui mélangent texte + image (CLIP, LLaVA…).
Hugging Face vs OpenAI / Claude / Gemini ?

Les API d'OpenAI ou Anthropic sont des services fermés : tu envoies du texte, tu reçois une réponse, tu paies à la requête. Hugging Face héberge des modèles open-source que tu télécharges et fais tourner toi-même (CPU/GPU local, ou sur ton serveur). Avantages : pas de coût récurrent, pas de fuite de données, possibilité de fine-tuner. Inconvénient : les modèles open-source restent un cran en dessous des frontaliers (GPT-4, Claude…) pour le raisonnement complexe.

Un exemple d'usage

Tu veux savoir si un avis client est positif ou négatif, sans entraîner de modèle. En 3 lignes :

python
from transformers import pipeline

clf = pipeline("sentiment-analysis")
print(clf("Le produit est nul, je le déconseille."))
# [{'label': 'NEGATIVE', 'score': 0.9998}]

Au premier run, transformers télécharge un modèle adapté depuis le Hub (mis en cache localement). Aux runs suivants, c'est instantané. pipeline() existe pour des dizaines de tâches : "summarization", "translation_fr_to_en", "automatic-speech-recognition", "object-detection"

How-to : installer et utiliser Hugging Face

  1. Installer transformers

    La lib s'appuie sur PyTorch (par défaut), donc on installe les deux. Avec UV :

    bash
    uv add transformers torch

    Pour certaines tâches multimédia, il faut aussi des extras :

    bash
    uv add "transformers[audio]"   # Whisper, etc.
    uv add "transformers[vision]"  # classification image, etc.
  2. Utiliser un pipeline (le plus simple)

    pipeline est l'API haute-niveau. On donne le nom d'une tâche, optionnellement un modèle précis, et c'est tout.

    python
    from transformers import pipeline
    
    # Sentiment (modèle par défaut)
    clf = pipeline("sentiment-analysis")
    
    # Modèle précis (le slug se trouve sur huggingface.co)
    clf = pipeline(
        "sentiment-analysis",
        model="cardiffnlp/twitter-roberta-base-sentiment-latest"
    )
    
    # Transcription audio avec Whisper
    asr = pipeline("automatic-speech-recognition",
                   model="openai/whisper-small")
    print(asr("audio.mp3"))
  3. Trouver un modèle sur le Hub

    Va sur huggingface.co/models, filtre par tâche (gauche) et par langue. Le « slug » d'un modèle est de la forme auteur/nom-du-modèle. Quelques valeurs sûres :

    • distilbert-base-uncased — BERT léger pour classification de texte.
    • openai/whisper-small — transcription audio multilingue.
    • sentence-transformers/all-MiniLM-L6-v2 — embeddings de phrases (pour RAG/similarité).
    • facebook/bart-large-cnn — résumé en anglais.
  4. API bas-niveau : tokenizer + modèle

    pipeline est pratique mais cache tout. Pour plus de contrôle (batch, GPU explicite, fine-tuning) on passe par l'API bas-niveau :

    python
    from transformers import AutoTokenizer, AutoModelForSequenceClassification
    import torch
    
    model_name = "distilbert-base-uncased-finetuned-sst-2-english"
    tokenizer = AutoTokenizer.from_pretrained(model_name)
    model = AutoModelForSequenceClassification.from_pretrained(model_name)
    
    inputs = tokenizer("This is great", return_tensors="pt")
    with torch.no_grad():
        logits = model(**inputs).logits
    pred = logits.argmax(dim=-1).item()
    print(model.config.id2label[pred])
  5. Datasets : la lib compagnon

    Hugging Face héberge aussi des datasets. La lib datasets les charge sans effort :

    bash
    uv add datasets
    python
    from datasets import load_dataset
    
    ds = load_dataset("imdb")
    print(ds["train"][0])
    # {'text': 'Plot is solid…', 'label': 1}
  6. Authentification et téléchargement

    La majorité des modèles est publique. Pour les modèles gated (Llama, etc.) ou pour publier les tiens, il faut un compte et un token :

    bash
    huggingface-cli login        # colle ton token HF

    Les modèles téléchargés sont mis en cache dans ~/.cache/huggingface/. Tu peux changer l'emplacement avec la variable d'environnement HF_HOME.

  7. Fine-tuner un modèle (aperçu)

    Fine-tuner = repartir d'un modèle pré-entraîné et l'adapter à tes données. La Trainer API encapsule la boucle :

    python
    from transformers import Trainer, TrainingArguments
    
    args = TrainingArguments(
        output_dir="./out",
        num_train_epochs=3,
        per_device_train_batch_size=8,
    )
    trainer = Trainer(model=model, args=args,
                      train_dataset=ds["train"],
                      eval_dataset=ds["test"])
    trainer.train()
    Fine-tuner sans GPU ?

    Le fine-tuning de gros modèles demande un GPU. Pour expérimenter sans, vise des petits modèles (DistilBERT, MiniLM) sur des petits datasets (quelques milliers d'exemples). Sinon, Google Colab donne un T4 gratuit.

Aide-mémoire

python (pipelines)
from transformers import pipeline
pipeline("sentiment-analysis")
pipeline("text-generation", model="gpt2")
pipeline("automatic-speech-recognition", model="openai/whisper-small")
pipeline("image-classification")
pipeline("object-detection")
python (auto-classes)
from transformers import AutoTokenizer, AutoModel
tok = AutoTokenizer.from_pretrained("name")
mdl = AutoModel.from_pretrained("name")
inputs = tok("texte", return_tensors="pt")
outputs = mdl(**inputs)
bash (CLI)
huggingface-cli login
huggingface-cli download <model-name>
huggingface-cli repo create my-model

Hugging Face et le reste de l'écosystème

  • PyTorch — le backend par défaut. Les modèles renvoyés par transformers sont des nn.Module PyTorch standards, manipulables comme n'importe quel modèle.
  • scikit-learn — complémentaire : sklearn fait du ML classique tabulaire, HF fait du deep learning multimodal. Pattern courant : utiliser un modèle HF pour générer des embeddings, puis sklearn pour les classer.
  • FastAPI — pour exposer un modèle HF comme service web. On charge le pipeline au démarrage de l'app, chaque requête appelle pipeline(...).
  • MLflow — sait logger un modèle Hugging Face directement (mlflow.transformers.log_model). Track les hyperparamètres de fine-tuning, reproduit l'expérience plus tard.
  • DVC — pour versionner les modèles fine-tunés (souvent > 100 Mo donc trop gros pour Git). Combo classique : git checkout + dvc pull pour retrouver le modèle de la v1.
  • Streamlit — créer une démo en quelques lignes au-dessus d'un pipeline HF. C'est aussi le moteur derrière les « Spaces » du Hub (démos publiques gratuites).
Embeddings : la brique cachée de RAG

Beaucoup de projets « chatbot avec mes documents » (RAG) utilisent un modèle d'embeddings de Hugging Face (sentence-transformers) pour transformer du texte en vecteurs, puis cherchent les vecteurs proches. Pas besoin d'un gros LLM pour faire ça — un MiniLM tient sur un Raspberry Pi.

Pour aller plus loin