Skip to content

Commit 441da89

Browse files
committed
Utilise un service pytorch
1 parent 0ec1e15 commit 441da89

File tree

2 files changed

+38
-9
lines changed

2 files changed

+38
-9
lines changed

content/NLP/03_embedding.qmd

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ Ce chapitre va évoluer prochainement.
2020

2121
{{< badges
2222
printMessage="true"
23+
sspCloudService="pytorch"
2324
>}}
2425
2526
# Introduction
@@ -62,11 +63,23 @@ et un [deuxième](https://www.kaggle.com/meiyizi/spooky-nlp-and-topic-modelling-
6263
## Packages à installer
6364

6465
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.
76+
77+
:::
6678

6779
```{python}
6880
#| eval: false
69-
!pip install scipy==1.12 gensim sentence_transformers pandas matplotlib seaborn
81+
#| echo: true
82+
!pip install numpy pandas spacy transformers scikit-learn langchain_community
7083
```
7184

7285
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
7588
extrêmement bien faite.
7689

7790
```{python}
78-
#| eval: false
7991
#| echo: true
92+
#| output: false
8093
!python -m spacy download en_core_web_sm
8194
```
8295

@@ -105,7 +118,7 @@ from sentence_transformers import SentenceTransformer
105118

106119
# Préparation des données
107120

108-
Nous allons ainsi à nouveau utiliser le jeu de données `spooky` :
121+
Nous allons à nouveau utiliser le jeu de données `spooky` :
109122

110123
```{python}
111124
#| echo: true
@@ -258,6 +271,7 @@ pipeline_tfidf
258271
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`.
259272

260273
```{python}
274+
#| echo: true
261275
pipeline_tfidf.fit(spooky_df['text_clean'])
262276
```
263277

@@ -266,6 +280,7 @@ pipeline_tfidf.fit(spooky_df['text_clean'])
266280
En premier lieu, on peut chercher le texte le plus proche, au sens de TF-IDF, d'une phrase donnée. Prenons cet exemple:
267281

268282
```{python}
283+
#| echo: true
269284
text = "He was afraid by Frankenstein monster"
270285
```
271286

@@ -299,6 +314,7 @@ X_train_tfidf=pd.DataFrame(
299314
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:
300315

301316
```{.python}
317+
import numpy as np
302318
from sklearn.metrics.pairwise import cosine_similarity
303319
304320
cosine_similarities = cosine_similarity(
@@ -769,17 +785,22 @@ Si le modèle `Word2Vec` est entraîné de manière contextuelle, sa vocation es
769785
770786
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.
771787
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_.
773791
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.
777793
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`).
779794
795+
```{python}
796+
from transformers import AutoTokenizer
780797
798+
tokenizer = AutoTokenizer.from_pretrained("distilbert/distilbert-base-uncased")
799+
```
781800
801+
```{python}
782802
803+
```
783804
784805
785806
# Word2vec pré-entraîné + averaging

reference.bib

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ @book{Turrell2021
66
url = "https://aeturrell.github.io/coding-for-economists"
77
}
88

9+
@misc{huggingfacecourse,
10+
author = {Hugging Face},
11+
title = {The Hugging Face Course, 2022},
12+
howpublished = "\url{https://huggingface.co/course}",
13+
year = {2022},
14+
note = "[Online; accessed <today>]"
15+
}
16+
917
@book{silver2012signal,
1018
title={The signal and the noise: Why so many predictions fail-but some don't},
1119
author={Silver, Nate},

0 commit comments

Comments
 (0)