Skip to content

Commit c1853b9

Browse files
linogalianaavouacr
andauthored
Reprise eval + reprise S3 (#576)
* continue à cleaner la partie eval * Tutoriel S3 SSP Cloud (#575) * intro * transfere contenu page eval * export pandas done * export fini * import * parquet * Update * image * image --------- Co-authored-by: Romain Avouac <43444134+avouacr@users.noreply.github.com>
1 parent d22ec21 commit c1853b9

File tree

6 files changed

+822
-168
lines changed

6 files changed

+822
-168
lines changed

_quarto.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ project:
1111
- content/modelisation/index.qmd
1212
- content/modelisation/1_modelevaluation.qmd
1313
- content/NLP/index.qmd
14+
- content/modern-ds/s3.qmd
1415
- content/annexes/corrections.qmd
1516
- content/annexes/evaluation.qmd
1617
- content/git/*.qmd

content/annexes/evaluation.qmd

Lines changed: 1 addition & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ Même si le projet n’est pas celui du cours de stats, il faut que la démarche
8181
Sur le format du rendu, vous devrez :
8282

8383
* Écrire un rapport sous forme de _Notebook_ (quelques exceptions à cette règle peuvent exister, par exemple si vous développer une appli `Dash` ou `Streamlit` comme expliqué dans la @nte-appli) ou de `Quarto Markdown`. Soyez vigilant avec le contrôle de version (@imp-gitnb)
84-
* Avoir un projet `Github` avec le rapport. Les données utilisées doivent être accessibles également, dans le dépôt, sur internet ou sur l'espace de stockage du `SSPCloud` (@tip-s3).
84+
* Avoir un projet `Github` avec le rapport. Les données utilisées doivent être accessibles également, dans le dépôt, sur internet ou sur l'espace de stockage du `SSPCloud` (voir [tutoriel S3](content/modern-ds/s3.qmd#les-données-sur-le-cloud)).
8585
* Les __dépôts `Github` où seul un *upload* du projet a été réalisé seront pénalisés__. A l'inverse, les dépôts dans lequels le contrôle de version et le travail collaboratif ont été activement pratiqués (`commits` fréquents, `pull requests`, ..) seront valorisés.
8686
* Le code contenu dans le rapport devra être un maximum propre (pas de copier coller de cellule, préférez des fonctions)
8787

@@ -100,67 +100,6 @@ de déporter une partie du code dans des fichiers `.py` importés sous forme de
100100
:::
101101

102102

103-
::: {#tip-s3 .callout-tip collapse="true"}
104-
## Sauvegarder des données sur le système de stockage du `SSPCloud`
105-
106-
⚠️ __Cette approche n'est pertinente que pour des données dont le temps d'acquisition est suffisamment long pour être dérangeant et ne doit pas être considéré comme une carte blanche à l'absence de reproductibilité.__
107-
108-
Il peut être pénible de refaire tourner fréquemment le code de récupération des données, notamment
109-
si celui-ci est long. Sous cette condition, il est normal de vouloir écrire des données
110-
intermédiaires pour des analyses ultérieures (au format `CSV` ou encore mieux au format `Parquet`).
111-
Se pose alors la question de l'enregistrement pérenne de celles-ci, les conteneurs sur le
112-
_SSPCloud_ n'étant pas persistant.
113-
114-
Ces données ne doivent pas être mises dans le dépôt `Github`, ce n'est pas le lieu adapté.
115-
Pour le stockage pérenne de données, le _sspcloud_ propose un système de
116-
stockage `S3` (technologie identique à celle des principaux _cloud providers_).
117-
Dans un service ayant moins de 24 heures, afin d'avoir des jetons de connexion
118-
n'étant pas périmés, on instancie la connexion avec
119-
120-
```python
121-
import s3fs
122-
fs = s3fs.S3FileSystem(
123-
client_kwargs={'endpoint_url': 'https://'+'minio.lab.sspcloud.fr'}
124-
)
125-
```
126-
127-
Cette connexion permet de créer un système de fichier distant
128-
comme si on était en local.
129-
Pour écrire un fichier au format `Parquet` sur cet espace avec `Pandas`, il suffit
130-
de partir du modèle suivant
131-
132-
```python
133-
with fs.open("s3/<USERNAME>/<dossier(s)>/<fichier>.parquet") as f:
134-
df.to_parquet(f)
135-
```
136-
137-
Ce principe peut être utilisé pour tout type d'objet, en prenant
138-
le format adéquat.
139-
140-
A ce stade, ce fichier est privé. Il n'est donc pas lisible
141-
par un autre utilisateur. Pour le rendre disponible à quelqu'un
142-
d'autre, il faut rendre disponible ce fichier à un accès _anonyme_. Pour
143-
cela, en ligne de commande il faut faire:
144-
145-
```shell
146-
mc anonymous set download s3/<USERNAME>/<dossier(s)>/<fichier>.parquet
147-
```
148-
149-
Ce fichier devient disponible à n'importe qui par un lien HTTPS. Pour le
150-
lire, il suffira de faire
151-
152-
```python
153-
import pandas as pd
154-
pd.read_parquet("https://minio.lab.sspcloud.fr/<USERNAME>/<dossier(s)>/<fichier>.parquet")
155-
```
156-
157-
Pour en savoir plus sur le système S3, les
158-
librairies `Python` ou les différentes
159-
manières de procéder, consulter [ce chapitre](/content/modern-ds/s3.qmd)
160-
161-
:::
162-
163-
164103

165104
# Barème approximatif
166105

content/modelisation/1_modelevaluation.qmd

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,22 @@ Ces métriques devraient rappeler des souvenirs si vous êtes familiers de la m
125125

126126
## Apprentissage non supervisé
127127

128-
Dans cet ensemble de méthodes, on ne dispose pas de _gold standard_ pour comparer la prédiction à la valeur observée. Pour mesurer la performance d'un algorithme, il faut donc se résoudre à utiliser des métriques de stabilité des prédictions, basées sur des critères statistiques. Cela permet d'évaluer si le fait de complexifier l'algorithme change fondamentalement la distribution des prédictions. Les métriques utilisées dépendent du type d'apprentissage mis en oeuvre.
128+
Dans cet ensemble de méthodes, on ne dispose pas de _gold standard_ pour comparer la prédiction à la valeur observée. Pour mesurer la performance d'un algorithme, il faut donc se résoudre à utiliser des métriques de stabilité des prédictions, basées sur des critères statistiques. Cela permet d'évaluer si le fait de complexifier l'algorithme change fondamentalement la distribution des prédictions.
129129

130+
Les métriques utilisées dépendent du type d'apprentissage mis en oeuvre. Par exemple, le _clustering_ par _K-means_ utilise généralement une mesure d'inertie qui quantifie l'homogénéité des clusters. Une bonne performance correspond au cas où les clusters sont homogènes et se distinguent l'un de l'autre. Plus on a de clusters (le $K$ de $K-means$), plus ceux-ci tendent à être homogènes. Si on ne choisit pas un $K$ adéquat, on peut faire du sur-apprentissage: si on ne compare les modèles qu'en fonction de leur homogénéité, on va choisir un nombre de cluster très élevé ce qui correspond à un cas classique de surapprentissage. Les méthodes de sélection du nombre de cluster optimal, comme la [méthode du coude](https://en.wikipedia.org/wiki/Elbow_method_(clustering)), visent à évaluer le moment où le gain d'inertie lié à l'augmentation du nombre de clusters tend à s'affaisser. On sélectionne alors le nombre de clusters qui offre le meilleur compromis entre parcimonie et performance.
130131

131132

133+
## Comment sont évalués les grands modèles de langage et les IA génératives ?
134+
135+
S'il apparaît relativement intuitif d'évaluer des modèles supervisés (pour lesquels on dispose d'observations faisant office de vérité absolue), comment juger de la qualité d'un outil comme `ChatGPT` ou `Copilot` ? Comment définir une bonne IA générative : est-ce une IA qui fournit une information juste du premier coup (véracité) ? une IA qui fait preuve de capacité de raisonnements (_chain of thought_) dans une discussion ? Doit-on juger le style ou uniquement le fond ?
136+
137+
Ces interrogations sont des champs actifs de recherche. Les [modèles de fondation](https://fr.wikipedia.org/wiki/Mod%C3%A8le_de_fondation) étant très généraux, entraînés à différentes tâches, parfois de manière supervisée, parfois de manière non supervisée, il est difficile de définir un objectif unique permettant de considérer qu'un modèle est, sans ambiguité, meilleur qu'un autre. Le [_leaderboard MTEB (Massive Text Embedding Benchmark)_](https://huggingface.co/blog/lyon-nlp-group/mteb-leaderboard-best-practices) présente par exemple de nombreuses métriques pour des tâches diverses et il peut être difficile de s'y retrouver. Sans compter que le rythme effrené de publication de nouveaux modèles change régulièrement ce classement.
138+
139+
Globalement, même s'il existe des métriques où on fait automatiquement évaluer la qualité d'un texte à un autre LLM (métriques _LLM as a judge_), pour avoir des modèles de langage de qualité, il est nécessaire d'avoir de l'évaluation humaine à plusieurs niveaux. En premier lieu, il est utile d'avoir un corpus de données annotées (des textes avec un résumé rédigé par un humain, des descriptions d'images, etc.) pour la phase d'entraînement et d'évaluation. Ceci permet de guider le comportement du modèle sur une tâche donnée.
140+
141+
Mais l'humain peut aussi intervenir _ex post_, pour faire remonter une évaluation de la qualité d'un modèle. On parle de _feedbacks_. Ceci peut prendre plusieurs formes, par exemple une évaluation positive ou négative de la réponse ou une évaluation plus qualitative. Ces informations remontées ne vont pas forcément servir à la version actuelle du modèle mais pourront servir ultérieurement pour entraîner un modèle selon une technique de renforcement.
142+
132143

133-
## Comment sont évalués les grands modèles de langage ?
134144

135145
## Evaluer sans être tourné vers le passé: les enjeux de la supervision des modèles
136146

0 commit comments

Comments
 (0)