Hugging Face
Transformers
Nlp
Open Source
Explorer Hugging Face pour utiliser les modèles NLP open source via l'API Inference et transformers.js dans le navigateur.
Qu'est-ce que Hugging Face ?
Hugging Face est la plateforme de référence pour les modèles de machine learning open source. Elle héberge plus de 500 000 modèles NLP, vision et audio, accessibles via une API cloud ou directement dans le navigateur avec transformers.js.
- Model Hub — dépôt de modèles pré-entraînés (BERT, GPT-2, Whisper, LLaMA…).
- Inference API — API REST pour utiliser les modèles sans les héberger.
- Transformers.js — port JavaScript de la bibliothèque Python, tourne dans le navigateur.
- Spaces — démonstrations interactives de modèles.
Avantage clé : des milliers de modèles spécialisés (sentiment, résumé, traduction, génération de code) disponibles gratuitement pour des usages non-commerciaux.
Utiliser l'API Inference
L'API Inference hébergée permet d'appeler n'importe quel modèle sans infrastructure. Obtenez une clé API gratuite sur huggingface.co/settings/tokens.
const HF_TOKEN = 'hf_votre_cle_api';
async function interrogerModele(modele, inputs) {
const response = await fetch(
`https://api-inference.huggingface.co/models/${modele}`,
{
method: 'POST',
headers: {
'Authorization': `Bearer ${HF_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ inputs })
}
);
if (!response.ok) {
throw new Error(`Erreur API: ${response.status}`);
}
return response.json();
}
// Analyse de sentiment
const sentiment = await interrogerModele(
'cardiffnlp/twitter-roberta-base-sentiment-latest',
'Angular est vraiment un super framework !'
);
console.info(sentiment);
// [{ label: 'POSITIVE', score: 0.97 }]
Limite du plan gratuit
- Requêtes limitées par heure sur le plan gratuit.
- Les modèles "cold start" peuvent mettre 20-30 secondes au premier appel.
- L'API retourne parfois une erreur 503 "Model is loading" — retenter après quelques secondes.
Transformers.js dans le navigateur
@xenova/transformers exécute les modèles directement dans le navigateur via WebAssembly et ONNX, sans API externe.
npm install @xenova/transformers
import { pipeline } from '@xenova/transformers';
// Crée un pipeline d'analyse de sentiment
// Le modèle est téléchargé et mis en cache la première fois
const analyseur = await pipeline(
'sentiment-analysis',
'Xenova/distilbert-base-uncased-finetuned-sst-2-english'
);
// Analyse
const resultat = await analyseur('I love building web apps with Angular!');
console.info(resultat);
// [{ label: 'POSITIVE', score: 0.9998 }]
A retenir : le premier chargement télécharge le modèle (~50-200 Mo selon le modèle). Utilisez des modèles "quantized" (suffixe
quantized) pour les applications web — 4 fois plus légers avec une perte de qualité minime.
// Modèle quantisé pour le web (recommandé)
const summarizer = await pipeline(
'summarization',
'Xenova/distilbart-cnn-6-6',
{ quantized: true } // Modèle allégé
);
const resume = await summarizer(texte_long, {
max_new_tokens: 100,
min_new_tokens: 30
});
console.info(resume[0].summary_text);
Tâches NLP courantes
Les pipelines disponibles couvrent la majorité des besoins NLP :
import { pipeline } from '@xenova/transformers';
// 1. Classification de texte / sentiment
const classifier = await pipeline('text-classification');
await classifier('Le service est excellent !');
// 2. Réponse aux questions (Question Answering)
const qa = await pipeline('question-answering');
await qa({
question: 'Qui a créé Angular ?',
context: 'Angular est un framework créé par Google en 2016.'
});
// { answer: 'Google', score: 0.99 }
// 3. Génération de texte
const generator = await pipeline('text-generation', 'Xenova/gpt2');
await generator('Angular est', { max_new_tokens: 50 });
// 4. Traduction
const translator = await pipeline('translation', 'Xenova/opus-mt-fr-en');
await translator('Bonjour le monde', { tgt_lang: 'en' });
// 5. Reconnaissance d'entités nommées (NER)
const ner = await pipeline('token-classification');
await ner('Apple a été fondée par Steve Jobs.');
Choisir le bon modèle
- Sentiment français —
cmarkea/distilcamembert-base-sentiment - Résumé anglais —
Xenova/distilbart-cnn-6-6 - Traduction FR→EN —
Xenova/opus-mt-fr-en - Question answering FR —
etalab-ia/camembert-base-squadFR-fquad-piaf - Génération de code —
Xenova/codegen-350M-mono - Vocal → texte —
Xenova/whisper-tiny
Conseil : filtrez sur le Model Hub avec les critères "Tasks", "Languages: French", et triez par "Most downloads" pour trouver les modèles les plus fiables.
Bonnes pratiques
- Charger le pipeline une seule fois et le réutiliser — éviter de le recréer à chaque appel.
- Utiliser un
Web Workerpour exécuter l'inférence sans bloquer le thread principal. - Afficher une barre de progression pendant le téléchargement du modèle.
- Pour l'API Inference, gérer les erreurs 503 avec une logique de retry exponentiel.
- Stocker les résultats dans un cache local pour éviter les appels redondants.
// Charger le pipeline dans un Web Worker
// worker.js
import { pipeline, env } from '@xenova/transformers';
env.allowLocalModels = false;
let classifier = null;
self.onmessage = async ({ data: { texte } }) => {
if (!classifier) {
classifier = await pipeline('sentiment-analysis');
}
const result = await classifier(texte);
self.postMessage(result);
};
// main.js
const worker = new Worker(new URL('./worker.js', import.meta.url), { type: 'module' });
worker.postMessage({ texte: 'Super article !' });
worker.onmessage = ({ data }) => console.info(data);