You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/NLP/03_embedding.qmd
+30-9Lines changed: 30 additions & 9 deletions
Original file line number
Diff line number
Diff line change
@@ -20,6 +20,7 @@ Ce chapitre va évoluer prochainement.
20
20
21
21
{{< badges
22
22
printMessage="true"
23
+
sspCloudService="pytorch"
23
24
>}}
24
25
25
26
# Introduction
@@ -62,11 +63,23 @@ et un [deuxième](https://www.kaggle.com/meiyizi/spooky-nlp-and-topic-modelling-
62
63
## Packages à installer
63
64
64
65
Comme dans la [partie précédente](/content/NLP/02_exoclean.qmd), il faut télécharger des librairies
65
-
spécialiséees pour le NLP, ainsi que certaines de leurs dépendances.
66
+
spécialiséees pour le NLP, ainsi que certaines de leurs dépendances. Ce TD utilisera plusieurs librairies dont certaines dépendent de `PyTorch` qui est une librairie volumineuse.
67
+
68
+
::: {.important}
69
+
## `PyTorch` sur le `SSPCloud`
70
+
71
+
__La prochaine remarque ne concerne que les utilisateurs.trices du `SSPCloud`.__
72
+
73
+
Les services `Python` standards sur le `SSPCloud` (les services `vscode-python` et `jupyter-python`) ne proposent pas `PyTorch` préinstallé. Cette librairie est en effet assez volumineuse (de l'ordre de 600Mo) et nécessite un certain nombre de configurations _ad hoc_ pour fonctionner de manière transparente quelle que soit la configuration logicielle derrière. Pour des raisons de frugalité écologique, cet environnement _boosté_ n'est pas proposé par défaut. Néanmoins, si besoin, un tel environnement où `Pytorch` est pré à l'emploi est disponible.
74
+
75
+
Pour cela, il suffit de démarrer un service `vscode-pytorch` ou `jupyter-pytorch`. Si vous avez utilisé l'un des boutons disponibles ci-dessus, c'est ce service standardisé qui a automatiquement été mis à disposition pour vous.
Ensuite, comme nous allons utiliser la librairie `SpaCy` avec un corpus de textes
@@ -75,8 +88,8 @@ on peut se référer à [la documentation de `SpaCy`](https://spacy.io/usage/mod
75
88
extrêmement bien faite.
76
89
77
90
```{python}
78
-
#| eval: false
79
91
#| echo: true
92
+
#| output: false
80
93
!python -m spacy download en_core_web_sm
81
94
```
82
95
@@ -105,7 +118,7 @@ from sentence_transformers import SentenceTransformer
105
118
106
119
# Préparation des données
107
120
108
-
Nous allons ainsi à nouveau utiliser le jeu de données `spooky` :
121
+
Nous allons à nouveau utiliser le jeu de données `spooky` :
109
122
110
123
```{python}
111
124
#| echo: true
@@ -258,6 +271,7 @@ pipeline_tfidf
258
271
Entraînons d'ores et déjà notre modèle à vectoriser le texte à partir de la méthode TF-IDF. Pour le moment il n'est pas encore question de faire de l'évaluation, faisons donc un entraînement sur l'ensemble de notre base et pas seulement sur `X_train`.
En premier lieu, on peut chercher le texte le plus proche, au sens de TF-IDF, d'une phrase donnée. Prenons cet exemple:
267
281
268
282
```{python}
283
+
#| echo: true
269
284
text = "He was afraid by Frankenstein monster"
270
285
```
271
286
@@ -299,6 +314,7 @@ X_train_tfidf=pd.DataFrame(
299
314
3. Utiliser la méthode `cosine_similarity` de `Scikit` pour calculer la similarité cosinus entre notre texte vectorisé et l'ensemble du corpus d'entraînement grâce au code suivant:
300
315
301
316
```{.python}
317
+
import numpy as np
302
318
from sklearn.metrics.pairwise import cosine_similarity
303
319
304
320
cosine_similarities = cosine_similarity(
@@ -769,17 +785,22 @@ Si le modèle `Word2Vec` est entraîné de manière contextuelle, sa vocation es
769
785
770
786
L'objectif des architectures _transformers_ est de permettre des représentations vectorielles contextuelles. Autrement dit, un mot aura plusieurs représentations vectorielles, selon son contexte d'occurrence. Ces modèles s'appuient sur le mécanisme d'attention [@vaswani2017attention]. Avant cette approche, lorsqu'un modèle apprenait à vectoriser un texte et qu'il arrivait au énième mot, la seule mémoire qu'il gardait était celle du mot précédent. Par récurrence, cela signifiait qu'il gardait une mémoire des mots précédents mais celle-ci tendait à se dissiper. Par conséquent, pour un mot arrivant loin dans la phrase, il était probable que le contexte de début de phrase était oublié. Autrement dit, dans la phrase _"à la plage, il allait explorer le banc"_, il était fort probable qu'arrivé au mot _"banc"_, le modèle ait oublié le début de phrase qui avait pourtant de l'importance pour l'interprétation.
771
787
772
-
L'objectif du mécanisme d'attention est de créer une mémoire interne au modèle permettant, pour tout mot d'un texte, de pouvoir garder trace des autres mots. Bien-sûr tous ne sont pas pertinents pour interpréter le texte mais cela évite d'oublier ceux qui sont importants.
788
+
L'objectif du mécanisme d'attention est de créer une mémoire interne au modèle permettant, pour tout mot d'un texte, de pouvoir garder trace des autres mots. Bien-sûr tous ne sont pas pertinents pour interpréter le texte mais cela évite d'oublier ceux qui sont importants. L'innovation principale des dernières années en NLP a été de parvenir à créer des mécanismes d'attention à grande échelle sans pour autant rendre intractables les modèles. Les fenêtres de contexte des modèles les plus performants deviennent immenses. Par exemple le modèle Llama 3.1 (rendu public par Meta en Juillet 2024) propose une fenêtre de contexte de 128 000 _tokens_, soit environ 96 000 mots, l'équivalent du _Hobbit_ de Tolkien. Autrement dit, pour déduire la subtilité du sens d'un mot, ce modèle peut parcourir un contexte aussi long qu'un roman d'environ 300 pages.
789
+
790
+
Les deux modèles qui ont marqué leur époque dans le domaine sont les modèles `BERT` développé en 2018 par _Google_ (qui était déjà à l'origine de `Word2Vec`) et la première version du bien-connu `GPT` d'`OpenAI`, qui, en 2017, était le premier modèle préentrainé basé sur l'architecture _transformer_. Ces deux familles de _transformer_ diffèrent dans la manière dont ils intègrent le contexte pour faire une prédiction. `GPT` est un modèle autorégressif, donc ne considère que les _tokens_ avant celui dont on désire faire une prédiction. `BERT` utilise les _tokens_ à gauche et à droite pour inférer le contexte. Ces deux grands modèles de langage entraînés sont entraînés par auto-renforcement, principalement sur des tâches de prédiction du prochain _token_ [@huggingfacecourse]. Depuis le succès de `ChatGPT`, les nouveaux modèles GPT (à partir de la version 3) ne sont plus _open source_. Pour les utiliser, il faut donc passer par les API d'OpenAI. Il existe néanmoins de nombreuses alternatives dont les poids sont ouverts, à défaut d'être _open source_[^diff-open], qui permettent d'utiliser ces LLM par le biais de `Python`, par le biais, notamment, de la librairie `transformers` développée par _Hugging Face_.
773
791
774
-
<!--------
775
-
https://fr.wikipedia.org/wiki/Transformeur
776
-
-------->
792
+
[^diff-open]: Certaines organisations, comme Meta pour Llama, mettent à disposition les poids après entraînement de leur modèle sur la plateforme _Hugging Face_, permettant une réutilisation de ces modèles si la licence le permet. Néanmoins, il ne s'agit pas pour autant de modèles _open source_ puisque le code utilisé pour entraîner les modèles et constituer les corpus d'apprentissage, issus de collectes massives de données par _webscraping_, et les éventuelles annotations supplémentaires pour en faire des versions spécialisées, ne sont pas partagés.
777
793
778
-
Le modèle qui a marqué son époque dans le domaine est le modèle `BERT` développé en 2018 par _Google_ (qui était déjà à l'origine de `Word2Vec`).
0 commit comments