Outils d’IA 101
Guide complet pour les débutants sur les outils LLM de Hugging Face

Hugging Face est un laboratoire de recherche en intelligence artificielle et un hub qui a créé une communauté de chercheurs, de scientifiques et d’enthousiastes. En un laps de temps relativement court, Hugging Face a acquis une présence significative dans l’espace de l’intelligence artificielle. Les géants de la technologie, notamment Google (GOOGL ), Amazon (AMZN ) et Nvidia (NVDA ), ont investi dans la startup Hugging Face, ce qui a porté sa valorisation à 4,5 milliards de dollars.
Dans ce guide, nous allons présenter les transformateurs, les LLM et le rôle important que joue la bibliothèque Hugging Face dans la création d’une communauté open source d’intelligence artificielle. Nous allons également explorer les fonctionnalités essentielles de Hugging Face, notamment les pipelines, les datasets, les modèles, etc., avec des exemples pratiques en Python.
Transformateurs en NLP
En 2017, l’Université de Cornell a publié un article influent qui a introduit les transformateurs. Il s’agit de modèles d’apprentissage profond utilisés en NLP. Cette découverte a alimenté le développement de grands modèles de langage comme ChatGPT.
Les grands modèles de langage ou LLM sont des systèmes d’intelligence artificielle qui utilisent des transformateurs pour comprendre et créer du texte similaire à celui des humains. Cependant, la création de ces modèles est coûteuse, nécessitant souvent des millions de dollars, ce qui limite leur accessibilité aux grandes entreprises.
Hugging Face, créé en 2016, vise à rendre les modèles de NLP accessibles à tous. Malgré le fait qu’il s’agisse d’une entreprise commerciale, il propose une gamme de ressources open source pour aider les personnes et les organisations à créer et à utiliser des modèles de transformateurs de manière abordable. L’apprentissage automatique consiste à enseigner aux ordinateurs à effectuer des tâches en reconnaissant des modèles, tandis que l’apprentissage profond, un sous-ensemble de l’apprentissage automatique, crée un réseau qui apprend de manière autonome. Les transformateurs sont un type d’architecture d’apprentissage profond qui utilise efficacement et de manière flexible les données d’entrée, ce qui les rend populaires pour la création de grands modèles de langage en raison de leur temps de formation réduit.
Comment Hugging facilite les projets NLP et LLM
Hugging Face a simplifié le travail avec les LLM en offrant :
- Une gamme de modèles pré-entraînés à choisir.
- Des outils et des exemples pour affiner ces modèles à vos besoins spécifiques.
- Des options de déploiement faciles pour différents environnements.
Une ressource précieuse disponible via Hugging Face est le Open LLM Leaderboard. Fonctionnant comme une plateforme complète, il surveille systématiquement, classe et évalue l’efficacité d’une gamme de grands modèles de langage (LLM) et de chatbots, offrant une analyse discriminante des progrès dans le domaine open source.
Les benchmarks LLM mesurent les modèles à l’aide de quatre métriques :
- AI2 Reasoning Challenge (25-shot) — une série de questions autour du programme scientifique élémentaire.
- HellaSwag (10-shot) — un test d’inférence de bon sens qui, bien que simple pour les humains, constitue un défi important pour les modèles de pointe.
- MMLU (5-shot) — une évaluation multifacette qui touche à la compétence d’un modèle de texte dans 57 domaines divers, englobant les mathématiques de base, le droit et l’informatique, entre autres.
- TruthfulQA (0-shot) — un outil pour déterminer la tendance d’un modèle à échoir les informations erronées souvent rencontrées en ligne.
Les benchmarks, décrits en termes tels que « 25-shot », « 10-shot », « 5-shot » et « 0-shot », indiquent le nombre d’exemples de prompt que le modèle reçoit lors du processus d’évaluation pour mesurer ses performances et ses capacités de raisonnement dans divers domaines. Dans les paradigmes « few-shot », les modèles sont fournis avec un petit nombre d’exemples pour guider leurs réponses, tandis que dans un cadre « 0-shot », les modèles ne reçoivent aucun exemple et doivent s’appuyer uniquement sur leurs connaissances préexistantes pour répondre de manière appropriée.
Composants de Hugging
Pipelines
Les « pipelines » font partie de la bibliothèque de transformateurs de Hugging Face, une fonctionnalité qui aide à l’utilisation facile des modèles pré-entraînés disponibles dans le référentiel Hugging Face. Il fournit une API intuitive pour une gamme de tâches, notamment l’analyse de sentiments, la réponse à des questions, la modélisation de langage masqué, la reconnaissance d’entités nommées et la synthèse.
Les pipelines intègrent trois composants centraux de Hugging Face :
- Tokeniseur : Prépare votre texte pour le modèle en le convertissant dans un format que le modèle peut comprendre.
- Modèle : C’est le cœur de la pipeline où les prédictions réelles sont effectuées sur la base des données d’entrée prétraitées.
- Post-processeur : Transforme les prédictions brutes du modèle en une forme lisible par l’homme.
Ces pipelines ne réduisent pas seulement la quantité de code étendu, mais offrent également une interface utilisateur conviviale pour accomplir diverses tâches de NLP.
Applications de transformateurs à l’aide de la bibliothèque Hugging
Un point fort de la bibliothèque Hugging Face est la bibliothèque de transformateurs, qui simplifie les tâches de NLP en reliant un modèle avec les étapes de prétraitement et de post-traitement nécessaires, rationalisant ainsi le processus d’analyse. Pour installer et importer la bibliothèque, utilisez les commandes suivantes :
pip install -q transformers from transformers import pipeline
Une fois cela fait, vous pouvez exécuter des tâches de NLP en commençant par l’analyse de sentiments, qui catégorise le texte en sentiments positifs ou négatifs. La fonction pipeline() puissante de la bibliothèque sert de centre pour d’autres pipelines et facilite les applications spécifiques aux tâches dans les domaines audio, vision et multimodal.
Applications pratiques
Classification de texte
La classification de texte devient un jeu d’enfant avec la fonction pipeline() de Hugging Face. Voici comment vous pouvez initialiser une pipeline de classification de texte :
classifier = pipeline("text-classification")
Pour une expérience pratique, alimentez une chaîne ou une liste de chaînes dans votre pipeline pour obtenir des prédictions, qui peuvent être visualisées de manière élégante à l’aide de la bibliothèque Pandas de Python. Voici un extrait de code Python qui démontre cela :
sentences = ["Je suis ravi de vous présenter le monde merveilleux de l'IA.",
"J'espère qu'il ne vous décevra pas."]
<p># Obtenez les résultats de classification pour chaque phrase de la liste
results = classifier(sentences)</p>
<p># Bouclez à travers chaque résultat et imprimez l'étiquette et le score
for i, result in enumerate(results):
print(f"Résultat {i + 1}:")
print(f" Étiquette : {result['label']}")
print(f" Score : {round(result['score'], 3)}\n")
Sortie
Résultat 1 : Étiquette : POSITIVE Score : 1.0 Résultat 2 : Étiquette : POSITIVE Score : 0.996
Reconnaissance d’entités nommées (NER)
La NER est cruciale pour extraire des objets du monde réel appelés « entités nommées » du texte. Utilisez la pipeline NER pour identifier ces entités de manière efficace :
ner_tagger = pipeline("ner", aggregation_strategy="simple")
text = "Elon Musk est le PDG de SpaceX."
outputs = ner_tagger(text)
print(outputs)
Sortie
Elon Musk : PER, SpaceX : ORG
Réponse à des questions
La réponse à des questions implique l’extraction de réponses précises à des questions spécifiques à partir d’un contexte donné. Initialisez une pipeline de réponse à des questions et entrez votre question et votre contexte pour obtenir la réponse souhaitée :
reader = pipeline("question-answering")
text = "Hugging Face est une entreprise qui crée des outils pour la NLP. Elle est basée à New York et a été fondée en 2016."
question = "Où est basée Hugging Face ?"
outputs = reader(question=question, context=text)
print(outputs)
Sortie
{ 'score': 0.998, 'start': 51, 'end': 60, 'answer': 'New York'} La fonction pipeline de Hugging Face offre une gamme de pipelines pré-construits pour différentes tâches, outre la classification de texte, la NER et la réponse à des questions. Voici des détails sur un sous-ensemble de tâches disponibles :
Tableau : Tâches de pipeline Hugging Face
| Tâche | Description | Identifiant de pipeline |
| Génération de texte | Générer du texte en fonction d’un prompt donné | pipeline(task=”text-generation”) |
| Résumé | Résumer un texte ou un document long | pipeline(task=”summarization”) |
| Classification d’images | Étiqueter une image d’entrée | pipeline(task=”image-classification”) |
| Classification audio | Catégoriser des données audio | pipeline(task=”audio-classification”) |
| Réponse à des questions visuelles | Répondre à une question en utilisant à la fois une image et une question | pipeline(task=”vqa”) |
Pour des descriptions détaillées et plus de tâches, consultez la documentation de pipeline sur le site Web de Hugging Face.
Pourquoi Hugging se concentre sur Rust
L’écosystème Hugging Face (HF) a commencé à utiliser Rust dans ses bibliothèques telles que safesensors et tokenizers.
Hugging Face a également récemment publié un nouveau framework d’apprentissage automatique appelé Candle. Contrairement aux frameworks traditionnels qui utilisent Python, Candle est construit avec Rust. L’objectif derrière l’utilisation de Rust est d’améliorer les performances et de simplifier l’expérience utilisateur tout en prenant en charge les opérations GPU.
L’objectif principal de Candle est de faciliter l’inférence sans serveur, permettant le déploiement de binaires légers et supprimant Python des charges de travail de production, qui peuvent parfois ralentir les processus en raison de ses surcharges. Ce framework vient résoudre les problèmes rencontrés avec les frameworks d’apprentissage automatique complets comme PyTorch qui sont grands et lents lors de la création d’instances sur un cluster.
Commençons par explorer pourquoi Rust devient un choix de plus en plus populaire que Python.
- Vitesse et performances – Rust est connu pour sa vitesse incroyable, surpassant Python, traditionnellement utilisé dans les frameworks d’apprentissage automatique. Les performances de Python peuvent parfois être ralenties en raison de son verrouillage d’interpréteur global (GIL), mais Rust ne rencontre pas ce problème, promettant une exécution plus rapide des tâches et, par conséquent, de meilleures performances dans les projets où il est implémenté.
- Sécurité – Rust offre des garanties de sécurité de la mémoire sans collecteur de garbage, un aspect essentiel pour assurer la sécurité des systèmes concurrents. Cela joue un rôle crucial dans des domaines comme safetensors où la sécurité dans la manipulation des structures de données est une priorité.
Safetensors
Safetensors bénéficient de la vitesse et des fonctionnalités de sécurité de Rust. Safetensors impliquent la manipulation de tenseurs, une entité mathématique complexe, et avoir Rust garantit que les opérations ne sont pas seulement rapides, mais également sécurisées, évitant les bogues et les problèmes de sécurité qui pourraient survenir en raison d’une mauvaise gestion de la mémoire.
Tokeniseur
Tokenizers gèrent la division de phrases ou de phrases en unités plus petites, comme des mots ou des termes. Rust aide dans ce processus en accélérant le temps d’exécution, garantissant que le processus de tokenisation ne soit pas seulement précis, mais également rapide, améliorant l’efficacité des tâches de traitement du langage naturel.
Au cœur du tokeniseur de Hugging Face se trouve le concept de tokenisation de sous-mots, qui équilibre délicatement la tokenisation au niveau du mot et du caractère pour optimiser la conservation d’informations et la taille du vocabulaire. Il fonctionne via la création de sous-mots, tels que « ##ing » et « ##ed », conservant la richesse sémantique tout en évitant un vocabulaire gonflé.
La tokenisation de sous-mots implique une phase d’apprentissage pour identifier l’équilibre le plus efficace entre la tokenisation au niveau du caractère et du mot. Elle va au-delà des règles de préfixe et de suffixe, nécessitant une analyse approfondie des modèles de langage dans de vastes corpus de texte pour concevoir un tokeniseur de sous-mots efficace. Le tokeniseur généré est capable de gérer des mots nouveaux en les décomposant en sous-mots connus, maintenant un niveau élevé de compréhension sémantique.
Composants de tokenisation
La bibliothèque de tokeniseurs divise le processus de tokenisation en plusieurs étapes, chacune abordant un aspect distinct de la tokenisation. Plongeons dans ces composants :
- Normaliseur : Applique les transformations initiales sur la chaîne d’entrée, appliquant les ajustements nécessaires tels que la conversion en minuscules, la normalisation Unicode et le débordement.
- Pré-tokeniseur : Responsable de la fragmentation de la chaîne d’entrée en pré-segments, déterminant les divisions en fonction de règles prédéfinies, telles que les délimitations d’espace.
- Modèle : Supervise la découverte et la création de sous-mots, s’adaptant aux spécificités de vos données d’entrée et offrant des capacités d’apprentissage.
- Post-processeur : Améliore les fonctionnalités de construction pour assurer la compatibilité avec de nombreux modèles basés sur les transformateurs, comme BERT, en ajoutant des jetons tels que [CLS] et [SEP].
Pour commencer avec les tokeniseurs Hugging Face, installez la bibliothèque en utilisant la commande pip install tokenizers et importez-la dans votre environnement Python. La bibliothèque peut tokeniser de grandes quantités de texte en très peu de temps, économisant ainsi des ressources de calcul précieuses pour des tâches plus intensives comme la formation de modèles.
La bibliothèque de tokeniseurs utilise Rust, qui hérite de la similarité syntaxique de C++ tout en introduisant de nouveaux concepts dans la conception de langages de programmation. Couplé avec des liaisons Python, il garantit que vous bénéficiez des performances d’un langage de niveau inférieur tout en travaillant dans un environnement Python.
Ensembles de données
Les ensembles de données sont la base des projets d’intelligence artificielle. Hugging Face propose une grande variété d’ensembles de données, adaptés à une gamme de tâches de NLP et plus. Pour les utiliser efficacement, comprendre le processus de chargement et d’analyse est essentiel. Voici un script Python bien commenté qui montre comment explorer les ensembles de données disponibles sur Hugging Face :
from datasets import load_dataset
# Chargez un ensemble de données
dataset = load_dataset('squad')
# Affichez la première entrée
print(dataset[0])
Ce script utilise la fonction load_dataset pour charger l’ensemble de données SQuAD, un choix populaire pour les tâches de réponse à des questions.
Exploitation de modèles pré-entraînés et rassemblement
Les modèles pré-entraînés forment la colonne vertébrale de nombreux projets d’apprentissage profond, permettant aux chercheurs et aux développeurs de lancer leurs initiatives sans partir de zéro. Hugging Face facilite l’exploration d’une gamme variée de modèles pré-entraînés, comme le montre le code ci-dessous :
from transformers import AutoModelForQuestionAnswering, AutoTokenizer
<p># Chargez le modèle et le tokeniseur pré-entraînés
model = AutoModelForQuestionAnswering.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')
tokenizer = AutoTokenizer.from_pretrained('bert-large-uncased-whole-word-masking-finetuned-squad')</p>
<p># Affichez l'architecture du modèle
print(model)</p>
Avec le modèle et le tokeniseur chargés, nous pouvons maintenant créer une fonction qui prend un texte et une question comme entrées et retourne la réponse extraite du texte. Nous allons utiliser le tokeniseur pour traiter le texte d’entrée et la question en un format compatible avec le modèle, puis nous allons alimenter ce texte traité dans le modèle pour obtenir la réponse :
<p>def get_answer(text, question): # Tokenisez le texte et la question d'entrée inputs = tokenizer(question, text, return_tensors='pt', max_length=512, truncation=True) outputs = model(**inputs)</p> <p> # Obtenez les scores de début et de fin pour la réponse answer_start = torch.argmax(outputs.start_logits) answer_end = torch.argmax(outputs.end_logits) + 1</p> <p> answer = tokenizer.convert_tokens_to_string(tokenizer.convert_ids_to_tokens(inputs['input_ids'][0][answer_start:answer_end])) return answer</p>
Dans l’extrait de code, nous importons les modules nécessaires du package de transformateurs, puis chargeons un modèle et un tokeniseur pré-entraînés en utilisant la méthode from_pretrained. Nous choisissons un modèle BERT affiné sur l’ensemble de données SQuAD.
Voyons un cas d’utilisation de cette fonction où nous avons un paragraphe de texte et où nous voulons extraire une réponse spécifique à une question à partir de ce texte :
<p>text = """
La tour Eiffel, située à Paris, en France, est l'une des attractions les plus emblématiques au monde. Elle a été conçue par Gustave Eiffel et achevée en 1889. La tour s'élève à une hauteur de 324 mètres et était la structure artificielle la plus haute du monde au moment de son achèvement.
"""</p>
<p>question = "Qui a conçu la tour Eiffel ?"</p>
<p># Obtenez la réponse à la question
answer = get_answer(text, question)
print(f"La réponse à la question est : {answer}")
# Sortie : La réponse à la question est : Gustave Eiffel</p>
Dans ce script, nous construisons une fonction get_answer qui prend un texte et une question, tokenise ces entrées appropriément, puis utilise le modèle BERT pré-entraîné pour extraire la réponse du texte. Il démontre une application pratique de la bibliothèque de transformateurs de Hugging Face pour construire un système de réponse à des questions simple mais puissant. Pour bien comprendre les concepts, il est recommandé de procéder à une expérimentation pratique en utilisant un carnet de notes Google Colab.
Conclusion
Grâce à sa gamme étendue d’outils open source, de modèles pré-entraînés et de pipelines conviviaux, Hugging Face permet aux professionnels chevronnés et aux nouveaux venus de s’aventurer dans le vaste monde de l’intelligence artificielle avec facilité et compréhension. De plus, l’initiative d’intégrer Rust, en raison de ses fonctionnalités de vitesse et de sécurité, souligne l’engagement de Hugging Face à favoriser l’innovation tout en assurant l’efficacité et la sécurité dans les applications d’intelligence artificielle. Le travail transformatif de Hugging Face non seulement démocratise l’accès à des outils d’intelligence artificielle de haut niveau, mais crée également un environnement collaboratif pour l’apprentissage et le développement dans l’espace de l’intelligence artificielle, facilitant un avenir où l’intelligence artificielle est accessible à tous.

















