Skip to content

Commit c847bcf

Browse files
authored
Add chapter 10
1 parent 75264a1 commit c847bcf

File tree

7 files changed

+510
-0
lines changed

7 files changed

+510
-0
lines changed

chapters/fr/chapter10/1.mdx

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Introduction à Argilla[[introduction-to-argilla]]
2+
3+
<CourseFloatingBanner
4+
chapter={10}
5+
classNames="absolute z-10 right-0 top-0"
6+
/>
7+
8+
Dans le chapitre 5, vous avez appris à construire un jeu de données en utilisant la bibliothèque 🤗 Datasets et dans le chapitre 6, vous avez exploré comment finetuner modèles pour certaines tâches courantes de NLP. Dans ce chapitre, vous allez apprendre à utiliser [Argilla](https://argilla.io) pour **annoter et nettoyer des jeux de données** que vous pouvez utiliser pour entraîner et évaluer vos modèles.
9+
10+
La clé pour entraîner des modèles performants est de disposer de données de haute qualité. Bien qu'il existe sur le Hub des jeux de données de qualité que vous pouvez utiliser pour entraîner et évaluer vos modèles, il se peut qu'ils ne soient pas pertinents pour votre application ou votre cas d'utilisation spécifique. Dans ce cas, vous voudrez peut-être construire votre propre jeu de données. Argilla vous aidera à le faire efficacement.
11+
12+
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/signin-hf-page.png" alt="Argilla sign in page."/>
13+
14+
Avec Argilla, vous pouvez :
15+
16+
- transformer des données non structurées en **données structurées** pour les utiliser dans des tâches de NLP.
17+
- nettoyer un jeu de données pour passer d'un jeu de données de faible qualité à un jeu de données de **haute qualité**.
18+
- recueillir des **retours humains** pour les LLM et les modèles multimodaux.
19+
- inviter des experts à collaborer avec vous dans Argilla, ou crowdsourcer des annotations !
20+
21+
Voici quelques-unes des choses que vous apprendrez dans ce chapitre :
22+
23+
- Comment configurer votre propre instance Argilla.
24+
- Comment charger un jeu de données et le configurer en fonction de tâches de NLP populaires.
25+
- Comment utiliser l'interface utilisateur d'Argilla pour annoter votre jeu de données.
26+
- Comment utiliser votre jeu de données annoté et l'exporter vers le Hub.

chapters/fr/chapter10/2.mdx

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# Configurez votre instance Argilla[[set-up-your-argilla-instance]]
2+
3+
<CourseFloatingBanner chapter={10}
4+
classNames="absolute z-10 right-0 top-0"
5+
notebooks={[
6+
{label: "English", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section2.ipynb"},
7+
{label: "Français", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section2.ipynb"},
8+
{label: "English", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section2.ipynb"},
9+
{label: "Français", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section2.ipynb"},
10+
]} />
11+
12+
Pour commencer à utiliser Argilla, vous devrez d'abord mettre en place votre propre instance. Ensuite, vous devrez installer le SDK Python afin de pouvoir gérer Argilla avec Python.
13+
14+
## Déployer l'interface utilisateur d'Argilla
15+
16+
La façon la plus simple de créer votre instance Argilla est de passer par Hugging Face Spaces. Pour créer votre Space Argilla, suivez simplement [ce formulaire](https://huggingface.co/new-space?template=argilla%2Fargilla-template-space). Si vous avez besoin de plus de conseils, consultez la page [« Argilla quickstart »](https://docs.argilla.io/latest/getting_started/quickstart/).
17+
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/space_config.png" alt="Space configuration form."/>
18+
19+
>[!WARNING]
20+
> ⚠️ Vous pouvez activer le **stockage persistant** pour que les données ne soient pas perdues si l'espace est interrompu ou redémarré.
21+
> Vous pouvez le faire à partir des paramètres de votre Space.
22+
23+
Une fois qu'Argilla est opérationnel, vous pouvez vous connecter avec vos identifiants.
24+
25+
## Install and connect the Python SDK
26+
27+
Vous pouvez maintenant aller dans votre environnement Python ou votre notebook et installer la bibliothèque argilla :
28+
`!pip install argilla`
29+
30+
Connectons-nous à notre instance Argilla. Pour ce faire, vous aurez besoin des informations suivantes :
31+
32+
- **Votre URL API** : Il s'agit de l'URL où Argilla s'exécute. Si vous utilisez un Space, vous pouvez ouvrir le Space, cliquer sur les trois points dans le coin supérieur droit, puis « Embed this Space » et copier l'**URL directe**. Cela devrait ressembler à `https://<votre-nom-d'utilisateur>.<nom-de-l'espace>.hf.space`.
33+
- **Votre clé API** : Pour obtenir votre clé, connectez-vous à votre instance Argilla et allez dans « My Settings », puis copiez la clé API.
34+
- **Votre token HF** : Si votre Space est privé, vous aurez besoin d'un *Access Token* dans votre compte Hugging Face Hub avec des permissions d'écriture.
35+
36+
```python
37+
import argilla as rg
38+
39+
HF_TOKEN = "..." # uniquement pour les spaces privés
40+
41+
client = rg.Argilla(
42+
api_url="...",
43+
api_key="...",
44+
headers={"Authorization": f"Bearer {HF_TOKEN}"}, # uniquement pour les spaces privés
45+
)
46+
```
47+
48+
Pour vérifier que tout fonctionne correctement, nous allons appeler `me`. Cela devrait nous renvoyer notre utilisateur :
49+
50+
```python
51+
client.me
52+
```
53+
54+
Si cela fonctionne, votre instance Argilla est opérationnelle et vous y êtes connecté ! Félicitations !
55+
56+
Nous pouvons maintenant commencer à charger notre premier jeu de données dans Argilla.

chapters/fr/chapter10/3.mdx

Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
# Chargez votre jeu de données dans Argilla[[load-your-dataset-to-argilla]]
2+
3+
<CourseFloatingBanner chapter={10}
4+
classNames="absolute z-10 right-0 top-0"
5+
notebooks={[
6+
{label: "English", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section3.ipynb"},
7+
{label: "Français", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section3.ipynb"},
8+
{label: "English", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section3.ipynb"},
9+
{label: "Français", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section3.ipynb"},
10+
]} />
11+
12+
En fonction de la tâche NLP sur laquelle vous travaillez et du cas d'utilisation/votre application spécifique, vos données et la tâche d'annotation se présenteront différemment. Pour cette partie du cours, nous utiliserons [un jeu de données collectant des actualités](https://huggingface.co/datasets/SetFit/ag_news) pour réaliser deux tâches : de la classification indiquant le thème de chaque texte et de la reconnaissannce d'entités nommées pour identifier les entités mentionnées.
13+
14+
<iframe
15+
src="https://huggingface.co/datasets/SetFit/ag_news/embed/viewer/default/train"
16+
frameborder="0"
17+
width="100%"
18+
height="560px"
19+
></iframe>
20+
21+
Il est possible d'importer des jeux de données depuis le Hub en utilisant directement l'interface utilisateur Argilla, mais nous utiliserons le SDK pour apprendre à modifier les données si nécessaire.
22+
23+
## Configurez votre jeu de données
24+
25+
La première étape consiste à se connecter à notre instance Argilla comme nous l'avons fait dans la section précédente :
26+
27+
```python
28+
import argilla as rg
29+
30+
HF_TOKEN = "..." # uniquement pour les spaces privés
31+
32+
client = rg.Argilla(
33+
api_url="...",
34+
api_key="...",
35+
headers={"Authorization": f"Bearer {HF_TOKEN}"}, # uniquement pour les spaces privés
36+
)
37+
```
38+
39+
Nous pouvons maintenant réfléchir aux paramètres de notre jeu de données dans Argilla. Ceux-ci représentent la tâche d'annotation que nous allons effectuer sur nos données. Tout d'abord, nous pouvons charger le jeu de données depuis le Hub et inspecter ses caractéristiques, afin de nous assurer que nous le configurons correctement.
40+
41+
```python
42+
from datasets import load_dataset
43+
44+
data = load_dataset("SetFit/ag_news", split="train")
45+
data.features
46+
```
47+
48+
Voici les caractéristiques de notre jeu de données :
49+
50+
```python out
51+
{'text': Value(dtype='string', id=None),
52+
'label': Value(dtype='int64', id=None),
53+
'label_text': Value(dtype='string', id=None)}
54+
```
55+
56+
Il contient un `text` ainsi que des labels pour la tâche de classification. Nous les ajouterons à nos paramètres de jeu de données avec une question `spans` pour les entités nommées :
57+
58+
```python
59+
settings = rg.Settings(
60+
fields=[rg.TextField(name="text")],
61+
questions=[
62+
rg.LabelQuestion(
63+
name="label", title="Classifier le texte :", labels=data.unique("label_text")
64+
),
65+
rg.SpanQuestion(
66+
name="entities",
67+
title="Surligner toutes les entités présentes dans le texte :",
68+
labels=["PERSON", "ORG", "LOC", "EVENT"],
69+
field="text",
70+
),
71+
],
72+
)
73+
```
74+
75+
Voyons un peu plus en détail ce que signifient ces paramètres. Tout d'abord, nous avons défini les **champs**, qui contiennent les informations que nous allons annoter. Dans ce cas, nous n'avons qu'un seul champ et il se présente sous la forme d'un texte, nous avons donc choisi un `TextField`.
76+
77+
Ensuite, nous définissons des **questions** qui représentent les tâches que nous voulons effectuer sur nos données :
78+
79+
- Pour la tâche de classification de texte, nous avons choisi une `LabelQuestion` et nous avons utilisé les valeurs uniques de la colonne `label_text` comme nos labels, pour s'assurer que la question est compatible avec ceux qui existent déjà dans le jeu de données.
80+
- Pour la tâche de classification de *tokens*, nous aurons besoin d'une `SpanQuestion`. Nous avons défini un ensemble de labels que nous utiliserons pour cette tâche, ainsi que le champ sur lequel nous surlignerons les entités.
81+
82+
Pour en savoir plus sur tous les types de champs et de questions disponibles et sur d'autres paramètres avancés, tels que les métadonnées et les vecteurs, consultez la [documentation](https://docs.argilla.io/latest/how_to_guides/dataset/#define-dataset-settings).
83+
84+
## Charger le jeu de données
85+
86+
Maintenant que nous avons défini quelques paramètres, nous pouvons créer le jeu de données :
87+
88+
```python
89+
dataset = rg.Dataset(name="ag_news", settings=settings)
90+
91+
dataset.create()
92+
```
93+
94+
Le jeu de données apparaît maintenant dans notre instance Argilla, mais vous verrez qu'il est vide :
95+
96+
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/empty_dataset.png" alt="Screenshot of the empty dataset."/>
97+
98+
Nous devons maintenant ajouter les enregistrements que nous allons annoter, c'est-à-dire les lignes de notre jeu de données. Pour ce faire, nous devons simplement saisir les données en tant qu'enregistrements et fournir une correspondance pour les éléments qui n'ont pas le même nom dans les jeux de données du Hub et d'Argilla :
99+
100+
```python
101+
dataset.records.log(data, mapping={"label_text": "label"})
102+
```
103+
104+
Dans notre correspondance, nous avons spécifié que la colonne `label_text` dans le jeu de données devrait être associée à la question avec le nom `label`. De cette façon, nous utiliserons les étiquettes existantes dans le jeu de données comme pré-annotations afin de pouvoir annoter plus rapidement.
105+
106+
Pendant que les enregistrements continuent à être consignés, vous pouvez déjà commencer à travailler avec votre jeu de données dans l'interface utilisateur d'Argilla. A ce stade, cela devrait ressembler à ceci :
107+
108+
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/argilla_initial_dataset.png" alt="Screenshot of the dataset in Argilla."/>
109+
110+
Notre jeu de données est maintenant prêt à être annoté !

chapters/fr/chapter10/4.mdx

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Annoter votre jeu de données[[annotate-your-dataset]]
2+
3+
<CourseFloatingBanner
4+
chapter={10}
5+
classNames="absolute z-10 right-0 top-0"
6+
/>
7+
8+
Maintenant, il est temps de commencer à travailler à partir de l'interface utilisateur d'Argilla pour annoter notre jeu de données.
9+
10+
## Alignez votre équipe sur les règles d'annotation à respecter
11+
12+
Avant de commencer à annoter votre jeu de données, il est toujours bon de rédiger quelques lignes directrices, surtout si vous travaillez en équipe. Cela vous aidera à vous aligner sur la tâche et l'utilisation des différentes étiquettes, et à résoudre les questions ou les conflits lorsqu'ils surviennent.
13+
14+
Dans Argilla, vous pouvez aller sur la page des paramètres de votre jeu de données dans l'interface utilisateur et modifier les directives et les descriptions de vos questions pour faciliter l'alignement.
15+
16+
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/argilla_dataset_settings.png" alt="Screenshot of the Dataset Settings page in Argilla."/>
17+
18+
Si vous souhaitez approfondir la question de la rédaction de bonnes règles, nous vous recommandons de lire [cet article de blog](https://argilla.io/blog/annotation-guidelines-practices) ainsi que les références bibliographiques qui y sont mentionnées.
19+
20+
## Répartir la tâche
21+
22+
Dans la page des paramètres du jeu de données, vous pouvez également modifier les paramètres de distribution du jeu de données. Cela vous permettra d'annoter plus efficacement lorsque vous travaillez en équipe. La valeur par défaut du nombre minimum de réponses soumises est de 1, ce qui signifie que dès qu'un enregistrement a une réponse soumise, il est considéré comme complet et compte dans la progression du traitement de votre jeu de données.
23+
24+
Parfois, vous souhaitez avoir plus d'une réponse soumise par enregistrement. Par exemple, si vous voulez analyser l'accord inter-annotateurs dans votre tâche. Dans ce cas, assurez-vous de changer ce paramètre à un nombre plus élevé, mais toujours inférieur ou égal au nombre total d'annotateurs. Si vous travaillez seul sur la tâche, ce paramètre doit être égal à 1.
25+
26+
## Annoter les enregistrements
27+
28+
>[!TIP]
29+
>💡 Si vous déployez Argilla dans un Space, tous les membres de l'équipe pourront se connecter en utilisant le Hugging Face OAuth. Sinon, vous devrez peut-être créer des comptes utilisateurs pour eux en suivant [ce guide](https://docs.argilla.io/latest/how_to_guides/user/).
30+
31+
Lorsque vous ouvrirez votre jeu de données, vous vous rendrez compte que la première question est déjà remplie avec quelques étiquettes suggérées. C'est parce que dans la section précédente nous avons associé notre question appelée `label` à la colonne `label_text` dans le jeu de données, de sorte qu'il nous suffit de revoir et de corriger les étiquettes déjà existantes :
32+
33+
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/argilla_initial_dataset.png" alt="Screenshot of the dataset in Argilla."/>
34+
35+
Pour la classification de *tokens*, nous devrons ajouter toutes les étiquettes manuellement, car nous n'avons pas inclus de suggestions. Voici à quoi cela pourrait ressembler après l'ajout des annotations :
36+
37+
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/argilla_dataset_with_spans.png" alt="Screenshot of the dataset in Argilla with spans annotated."/>
38+
39+
Au fur et à mesure que vous parcourez les différents dossiers, vous pouvez entreprendre différentes actions :
40+
- soumettre vos réponses, une fois que vous avez terminé l'enregistrement.
41+
- les sauvegarder comme brouillon, au cas où vous voudriez y revenir plus tard.
42+
- les écarter, si l'enregistrement ne doit pas faire partie du jeu de données ou si vous ne voulez pas y répondre.
43+
44+
Dans la section suivante, vous apprendrez comment exporter et utiliser ces annotations.

chapters/fr/chapter10/5.mdx

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# Utilisez votre jeu de données annoté[[use-your-annotated-dataset]]
2+
3+
<CourseFloatingBanner chapter={10}
4+
classNames="absolute z-10 right-0 top-0"
5+
notebooks={[
6+
{label: "Google Colab", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section5.ipynb"},
7+
{label: "Aws Studio", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter10/section5.ipynb"},
8+
]} />
9+
10+
Nous allons maintenant apprendre à exporter et à utiliser les données annotées que nous avons dans Argilla.
11+
12+
## Charger le jeu de données
13+
14+
Tout d'abord, nous devons nous assurer que nous sommes connectés à notre instance Argilla comme dans les étapes précédentes :
15+
16+
```python
17+
import argilla as rg
18+
19+
HF_TOKEN = "..." # uniquement pour les spaces privés
20+
21+
client = rg.Argilla(
22+
api_url="...",
23+
api_key="...",
24+
headers={"Authorization": f"Bearer {HF_TOKEN}"}, # uniquement pour les spaces privés
25+
)
26+
```
27+
28+
Nous allons maintenant charger le jeu de données avec lequel nous allons travailler :
29+
30+
```python
31+
dataset = client.datasets(name="ag_news")
32+
```
33+
34+
Charger le jeu de données et appeler ses enregistrements avec `dataset.records` est suffisant pour commencer. Cependant, nous allons également apprendre à effectuer quelques opérations optionnelles, comme filtrer les enregistrements et exporter votre jeu de données vers le Hub d'Hugging Face.
35+
36+
## Filtrer le jeu de données
37+
38+
Il arrive que l'on ne veuille utiliser que les enregistrements qui ont été effectués. Nous allons donc commencer par filtrer les enregistrements de notre jeu de données en fonction de leur statut :
39+
40+
```python
41+
status_filter = rg.Query(filter=rg.Filter([("status", "==", "completed")]))
42+
43+
filtered_records = dataset.records(status_filter)
44+
```
45+
46+
>[!TIP]
47+
>⚠️ Notez que les enregistrements avec le statut `completed` (c'est à dire les enregistrements qui atteignent le minimum de réponses soumises configuré dans les paramètres de distribution des tâches) peuvent avoir plus d'une réponse et que chaque réponse peut avoir n'importe quel statut parmi `submitted`, `draft` ou `discarded`.
48+
49+
Pour en savoir plus sur le requêtage et le filtrage des enregistrements, consultez la [documentation](https://docs.argilla.io/latest/how_to_guides/query/).
50+
51+
## Exportation vers le Hub
52+
53+
Nous pouvons maintenant exporter nos annotations vers le Hub d'Hugging Face, afin de pouvoir les partager avec d'autres personnes. Pour ce faire, nous devrons convertir les enregistrements en un objet Dataset puis le pousser vers le Hub :
54+
55+
```python
56+
filtered_records.to_datasets().push_to_hub("argilla/ag_news_annotated")
57+
```
58+
59+
Il est également possible d'exporter directement le jeu de données Argilla complet (y compris les enregistrements en attente) de la manière suivante :
60+
61+
```python
62+
dataset.to_hub(repo_id="argilla/ag_news_annotated")
63+
```
64+
65+
C'est un choix intéressant au cas où d'autres personnes voudraient ouvrir le jeu de données dans leurs instances Argilla, car les paramètres sont automatiquement sauvegardés et ils peuvent simplement importer le jeu de données complet en utilisant une seule ligne de code :
66+
67+
```python
68+
dataset = rg.Dataset.from_hub(repo_id="argilla/ag_news_annotated")
69+
```

chapters/fr/chapter10/6.mdx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Argilla, coché ![[argilla-check]]
2+
3+
<CourseFloatingBanner
4+
chapter={10}
5+
classNames="absolute z-10 right-0 top-0"
6+
/>
7+
8+
C'est tout ! Félicitations ! 👏
9+
10+
Dans ce chapitre, vous avez appris les étapes de base pour :
11+
- configurer Argilla.
12+
- annoter pour améliorer la qualité de votre jeu de données.
13+
- adapter un jeu de données existant et le réutiliser pour une tâche de NLP différente.
14+
- partager votre jeu de données annoté avec la communauté dans le Hub d'Hugging Face.
15+
16+
## Que faire ensuite ?
17+
- Consultez d'autres tutoriels étape par étape pour d'autres tâches populaires de NLP dans la [page des tutoriels](https://docs.argilla.io/latest/tutorials/).
18+
- Vous pouvez également explorer d'autres exemples de jeux de données dans cette [démo](https://demo.argilla.io/sign-in?auth=ZGVtbzoxMjM0NTY3OA==).
19+
- Si vous souhaitez continuer à en apprendre davantage sur Argilla et ses fonctionnalités avancées, consultez la [documentation](https://docs.argilla.io/latest/).

0 commit comments

Comments
 (0)