
Hugging Face Transformers en action : apprendre à tirer parti de l’IA pour la PNL
(NLP) a révolutionné la façon dont nous interagissons avec la technologie.
Vous souvenez-vous de l’époque où les chatbots sont apparus pour la première fois et ressemblaient à des robots ? Heureusement, c’est du passé !
Les modèles Transformer ont brandi leur baguette magique et remodelé les tâches de la PNL. Mais avant de laisser tomber ce post, réfléchissez « Bon sang, les transformateurs sont bien trop denses pour être appris », supporte-moi. Nous n’entrerons pas dans un autre article technique pour essayer de vous enseigner les mathématiques derrière cette technologie étonnante, mais nous apprenons plutôt en pratique ce qu’elle peut faire pour nous.
Avec le pipeline Transformers de Hugging Face, les tâches de PNL sont plus faciles que jamais.
Explorons !
La seule explication sur ce qu’est un transformateur
Pensez à modèles de transformateur en tant qu’élite du monde de la PNL.
Les transformateurs excellent en raison de leur capacité à se concentrer sur différentes parties d’une séquence d’entrée grâce à un mécanisme appelé « auto-attention ».
Les transformateurs sont puissants en raison de « l’attention personnelle » une fonctionnalité qui leur permet de décider sur quelles parties spécifiques d’une phrase il est le plus important de se concentrer à un moment donné.
Avez-vous déjà entendu parler de BERT, GPT ou RoBERTa ? C’est eux ! BERTE (Représentations d’encodeurs bidirectionnels à partir de transformateurs) est un modèle de langage révolutionnaire de Google AI de 2018 qui comprend le contexte du texte en lisant simultanément les mots de gauche à droite et de droite à gauche.
Assez parlé, commençons à plonger dans le transformers emballer [1].
Introduction au pipeline de transformateurs
La bibliothèque Transformers offre une boîte à outils complète pour former et exécuter des modèles pré-entraînés de pointe. La classe Pipeline, qui est notre sujet principal, fournit une interface facile à utiliser pour diverses tâches, par exemple :
- Génération de texte
- Segmentation d’images
- Reconnaissance vocale
- Assurance qualité des documents.
Préparation
Avant de commencer, passons en revue les bases et rassemblons nos outils. Nous aurons besoin de Python, de la bibliothèque des transformateurs et peut-être de PyTorch ou de TensorFlow. L’installation se déroule comme d’habitude : pip install transformers.
Les IDE comme Anaconda ou les plateformes comme Google Colab les proposent déjà en installation standard. Aucun problème.
La classe Pipeline vous permet d’exécuter de nombreuses tâches d’apprentissage automatique en utilisant n’importe quel modèle disponible sur Hugging Face Hub. C’est aussi simple que de brancher et de jouer.
Bien que chaque tâche soit accompagnée d’un modèle et d’un préprocesseur par défaut préconfigurés, vous pouvez facilement les personnaliser en utilisant le paramètre model pour échanger un modèle différent de votre choix.
Code
Commençons par les transformateurs 101 et voyons comment ils fonctionnent avant d’aller plus loin. La première tâche que nous effectuerons est une simple analyse des sentiments sur un titre d’actualité donné.
from transformers import pipeline
classifier = pipeline("sentiment-analysis")
classifier("Instagram wants to limit hashtag spam.")
La réponse est la suivante.
No model was supplied, defaulted to distilbert/distilbert-base-uncased-finetuned-sst-2-english and revision 714eb0f (https://huggingface.co/distilbert/distilbert-base-uncased-finetuned-sst-2-english).
Using a pipeline without specifying a model name and revision in production is not recommended.
Device set to use cpu
[{'label': 'NEGATIVE', 'score': 0.988932728767395}]
Puisque nous n’avons pas fourni de model paramètre, il est allé avec l’option par défaut. En tant que classification, nous avons constaté que le sentiment sur ce titre est à 98 % NÉGATIF. De plus, nous pourrions avoir une liste de phrases à classer, pas une seule.
Super facile, non ? Mais ce n’est pas seulement ça. Nous pouvons continuer à explorer d’autres fonctionnalités intéressantes.
Classification du tir zéro
Une classification zero-shot consiste à étiqueter un texte qui n’a pas encore été étiqueté. Nous n’avons donc pas de modèle clair pour cela. Il ne reste plus qu’à passer quelques cours pour que le modèle en choisisse un. Cela peut être très utile lors de la création d’ensembles de données de formation pour l’apprentissage automatique.
Cette fois, nous alimentons la méthode avec le model argument et une liste de phrases à classer.
classifier = pipeline("zero-shot-classification", model = 'facebook/bart-large-mnli')
classifier(
["Inter Miami wins the MLS", "Match tonight betwee Chiefs vs. Patriots", "Michael Jordan plans to sell Charlotte Hornets"],
candidate_labels=["soccer", "football", "basketball"]
)
[{'sequence': 'Inter Miami wins the MLS',
'labels': ['soccer', 'football', 'basketball'],
'scores': [0.9162040948867798, 0.07244189083576202, 0.011354007758200169]},
{'sequence': 'Match tonight betwee Chiefs vs. Patriots',
'labels': ['football', 'basketball', 'soccer'],
'scores': [0.9281435608863831, 0.0391676239669323, 0.032688744366168976]},
{'sequence': 'Michael Jordan plans to sell Charlotte Hornets',
'labels': ['basketball', 'football', 'soccer'],
'scores': [0.9859175682067871, 0.009983371943235397, 0.004099058918654919]}]
Il semble que le modèle ait fait un excellent travail en étiquetant ces phrases !
Génération de texte
Le package peut également générer du texte. C’est un bon moyen de créer un joli petit générateur d’histoires à raconter à nos enfants avant de se coucher. Nous augmentons le temperature paramètre pour rendre le modèle plus créatif.
generator = pipeline("text-generation", temperature=0.8)
generator("Once upon a time, in a land where the King Pineapple was")
[{'generated_text':
"Once upon a time, in a land where the King Pineapple was a common
crop, the Queen of the North had lived in a small village. The Queen had always
lived in a small village, and her daughter, who was also the daughter of the Queen,
had lived in a larger village. The royal family would come to the Queen's village,
and then the Queen would return to her castle and live there with her daughters.
In the middle of the night, she would lay down on the royal bed and kiss the princess
at least once, and then she would return to her castle to live there with her men.
In the daytime, however, the Queen would be gone forever, and her mother would be alone.
The reason for this disappearance, in the form of the Great Northern Passage
and the Great Northern Passage, was the royal family had always wanted to take
the place of the Queen. In the end, they took the place of the Queen, and went
with their daughter to meet the King. At that time, the King was the only person
on the island who had ever heard of the Great Northern Passage, and his return was
in the past.
After Queen Elizabeth's death, the royal family went to the
Great Northern Passage, to seek out the Princess of England and put her there.
The Princess of England had been in"}]
Reconnaissance de nom et d’entité
Cette tâche peut reconnaître une personne (PER), un emplacement (LOC) ou une entité (ORG) dans un texte donné. C’est idéal pour créer des listes marketing rapides de noms de prospects, par exemple.
ner = pipeline("ner", grouped_entities=True)
ner("The man landed on the moon in 1969. Neil Armstrong was the first man to step on the Moon's surface. He was a NASA Astronaut.")
[{'entity_group': 'PER', 'score': np.float32(0.99960065),'word': 'Neil Armstrong',
'start': 36, 'end': 50},
{'entity_group': 'LOC', 'score': np.float32(0.82190216), 'word': 'Moon',
'start': 84, 'end': 88},
{'entity_group': 'ORG', 'score': np.float32(0.9842771), 'word': 'NASA',
'start': 109, 'end': 113},
{'entity_group': 'MISC', 'score': np.float32(0.8394754), 'word': 'As',
'start': 114, 'end': 116}]
Récapitulation
Peut-être l’une des tâches les plus utilisées, la synthèse nous permet de réduire un texte, en gardant son essence et ses éléments importants. Résumons cela Page Wikipédia sur les transformateurs.
summarizer = pipeline("summarization")
summarizer("""
In deep learning, the transformer is an artificial neural network architecture based
on the multi-head attention mechanism, in which text is converted to numerical
representations called tokens, and each token is converted into a vector via lookup
from a word embedding table.[1] At each layer, each token is then contextualized within the scope of the context window with other (unmasked) tokens via a parallel multi-head attention mechanism, allowing the signal for key tokens to be amplified and less important tokens to be diminished.
Transformers have the advantage of having no recurrent units, therefore requiring
less training time than earlier recurrent neural architectures (RNNs) such as long
short-term memory (LSTM).[2] Later variations have been widely adopted for training
large language models (LLMs) on large (language) datasets.[3]
""")
[{'summary_text':
' In deep learning, the transformer is an artificial neural network architecture
based on the multi-head attention mechanism . Transformerers have the advantage of
having no recurrent units, therefore requiring less training time than earlier
recurrent neural architectures (RNNs) such as long short-term memory (LSTM)'}]
Excellent!
Reconnaissance d’images
Il existe d’autres tâches plus complexes, comme la reconnaissance d’images. Et tout aussi simple à utiliser que les autres.
image_classifier = pipeline(
task="image-classification", model="google/vit-base-patch16-224"
)
result = image_classifier(
"https://images.unsplash.com/photo-1689009480504-6420452a7e8e?q=80&w=687&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D"
)
print(result)

[{'label': 'Yorkshire terrier', 'score': 0.9792122840881348},
{'label': 'Australian terrier', 'score': 0.00648861238732934},
{'label': 'silky terrier, Sydney silky', 'score': 0.00571345305070281},
{'label': 'Norfolk terrier', 'score': 0.0013639888493344188},
{'label': 'Norwich terrier', 'score': 0.0010306559270247817}]
Ainsi, avec ces quelques exemples, il est facile de voir à quel point il est simple d’utiliser la bibliothèque Transformers pour effectuer différentes tâches avec très peu de code.
Conclusion
Et si nous terminions nos connaissances en les appliquant dans un petit projet pratique ?
Créons une application Streamlit simple qui peut lire un CV, renvoyer l’analyse des sentiments et classer le ton du texte comme ["Senior", "Junior", "Trainee", "Blue-collar", "White-collar", "Self-employed"]
Dans le code suivant :
- Importer les packages
- Créer le titre et le sous-titre de la page
- Ajouter une zone de saisie de texte
- Tokenisez le texte et divisez-le en morceaux pour la tâche de transformation. Voir la liste des modèles [4].
import streamlit as st
import torch
from transformers import pipeline
from transformers import AutoTokenizer
from langchain_community.document_loaders import PyPDFLoader
from langchain.text_splitter import RecursiveCharacterTextSplitter
st.title("Resumé Sentiment Analysis")
st.caption("Checking the sentiment and language tone of your resume")
# Add input text area
text = st.text_area("Enter your resume text here")
# 1. Load your desired tokenizer
model_checkpoint = "bert-base-uncased"
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
# 2. Tokenize the text without padding or truncation
# We return tensors or lists to slice them manually
tokens = tokenizer(text, add_special_tokens=False, return_tensors="pt")["input_ids"][0]
# 3. Instantiate Text Splitter with Chunk Size of 500 words and Overlap of 100 words so that context is not lost
text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100)
# 4. Split into chunks for efficient retrieval
chunks = text_splitter.split_documents(text)
# 5. Convert back to strings or add special tokens for model input
decoded_chunks = []
for chunk in chunks:
# This adds [CLS] and [SEP] and converts back to a format the model likes
final_input = tokenizer.prepare_for_model(chunk.tolist(), add_special_tokens=True)
decoded_chunks.append(tokenizer.decode(final_input['input_ids']))
st.write(f"Created {len(decoded_chunks)} chunks.")
Ensuite, nous lancerons le pipeline du transformateur pour :
- Effectuez l’analyse des sentiments et renvoyez le% de confiance.
- Classez le ton du texte et renvoyez le% de confiance.
# Initialize sentiment analysis pipeline
sentiment_pipeline = pipeline("sentiment-analysis")
# Perform sentiment analysis
if st.button("Analyze"):
col1, col2 = st.columns(2)
with col1:
# Sentiment analysis
sentiment = sentiment_pipeline(decoded_chunks)[0]
st.write(f"Sentiment: {sentiment['label']}")
st.write(f"Confidence: {100*sentiment['score']:.1f}%")
with col2:
# Categorize tone
tone_pipeline = pipeline("zero-shot-classification", model = 'facebook/bart-large-mnli',
candidate_labels=["Senior", "Junior", "Trainee", "Blue-collar", "White-collar", "Self-employed"])
tone = tone_pipeline(decoded_chunks)[0]
st.write(f"Tone: {tone['labels'][0]}")
st.write(f"Confidence: {100*tone['scores'][0]:.1f}%")
Voici la capture d’écran.

Avant de partir
Les pipelines Transformers Hugging Face (HF) changent véritablement la donne pour les praticiens des données. Ils offrent un moyen incroyablement rationalisé d’aborder des tâches complexes d’apprentissage automatique, comme la génération de texte ou la segmentation d’images, en utilisant seulement quelques lignes de code.
HF a déjà fait le gros du travail en intégrant une logique de modèle sophistiquée dans des méthodes simples et intuitives.
Cela nous détourne du codage de bas niveau et nous permet de nous concentrer sur ce qui compte vraiment : utiliser notre créativité pour créer des applications percutantes et concrètes.
Si vous avez aimé ce contenu, découvrez-en davantage sur moi sur mon site Web.
Dépôt GitHub
https://github.com/gurezende/Resume-Sentiment-Analysis
Références
[1. Transformers package] https://huggingface.co/docs/transformers/index
[2. Transformers Pipelines] https://huggingface.co/docs/transformers/pipeline_tutorial
[3. Pipelines Examples] https://huggingface.co/learn/llm-course/chapter1/3#summarization
[3. HF Models] huggingface.co/models



