Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[FR] Add chapter 10 + few fixes #517

Open
wants to merge 16 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions chapters/en/chapter1/1.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ About the authors:

[**Dawood Khan**](https://huggingface.co/dawoodkhan82) is a Machine Learning Engineer at Hugging Face. He's from NYC and graduated from New York University studying Computer Science. After working as an iOS Engineer for a few years, Dawood quit to start Gradio with his fellow co-founders. Gradio was eventually acquired by Hugging Face.

[Sasha Luccioni](https://huggingface.co/sasha) is a researcher at Hugging Face, where she works on the ethical and societal impacts of machine learning models.

[**Merve Noyan**](https://huggingface.co/merve) is a developer advocate at Hugging Face, working on developing tools and building content around them to democratize machine learning for everyone.

[**Lucile Saulnier**](https://huggingface.co/SaulLu) is a machine learning engineer at Hugging Face, developing and supporting the use of open source tools. She is also actively involved in many research projects in the field of Natural Language Processing such as collaborative training and BigScience.
Expand Down
21 changes: 20 additions & 1 deletion chapters/fr/_toctree.yml
Original file line number Diff line number Diff line change
Expand Up @@ -168,7 +168,6 @@
quiz: 8

- title: 9. Construire et partager des démos
new: true
subtitle: J'ai entraîné un modèle, mais comment puis-je le montrer ?
sections:
- local: chapter9/1
Expand All @@ -191,6 +190,26 @@
title: Quiz de fin de chapitre
quiz: 9

- title: 10. Obtenir des jeux de données de grande qualité
new: true
subtitle: Comment utiliser Argilla pour créer des jeux de données exceptionnels ?
sections:
- local: chapter10/1
title: Introduction à Argilla
- local: chapter10/2
title: Configurez votre instance Argilla
- local: chapter10/3
title: Chargez votre jeu de données dans Argilla
- local: chapter10/4
title: Annoter votre jeu de données
- local: chapter10/5
title: Utilisez votre jeu de données annoté
- local: chapter10/6
title: Argilla, coché !
- local: chapter10/7
title: Quiz de fin de chapitre
quiz: 10

- title: Evènements liés au cours
sections:
- local: events/1
Expand Down
2 changes: 2 additions & 0 deletions chapters/fr/chapter1/1.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ Après avoir terminé ce cours, nous vous recommandons de suivre la [Spécialisa

[**Dawood Khan**](https://huggingface.co/dawoodkhan82) est un ingénieur en apprentissage automatique chez Hugging Face. Il vient de New York et est diplômé en informatique de l’Université de New York. Après avoir travaillé comme ingénieur iOS pendant quelques années, Dawood a quitté son poste pour créer Gradio avec ses cofondateurs. Gradio a finalement été acquis par Hugging Face.

[Sasha Luccioni](https://huggingface.co/sasha) est chercheuse chez Hugging Face, où elle travaille sur les impacts éthiques et sociétaux des modèles d'apprentissage automatique.

[**Merve Noyan**](https://huggingface.co/merve) est développeuse *advocate* chez Hugging Face et travaille à la création d'outils et de contenus visant à démocratiser l'apprentissage machine pour tous.

[**Lucile Saulnier**](https://huggingface.co/SaulLu) est ingénieure en apprentissage machine chez Hugging Face et travaille au développement et à l'implémentation de nombreux outils *open source*. Elle est également activement impliquée dans de nombreux projets de recherche dans le domaine du NLP comme l'entraînement collaboratif de modèles et le projet [BigScience](https://bigscience.huggingface.co/).
Expand Down
26 changes: 26 additions & 0 deletions chapters/fr/chapter10/1.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Introduction à Argilla[[introduction-to-argilla]]

<CourseFloatingBanner
chapter={10}
classNames="absolute z-10 right-0 top-0"
/>

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.

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.

<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/signin-hf-page.png" alt="Argilla sign in page."/>

Avec Argilla, vous pouvez :

- transformer des données non structurées en **données structurées** pour les utiliser dans des tâches de NLP.
- 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é**.
- recueillir des **retours humains** pour les LLM et les modèles multimodaux.
- inviter des experts à collaborer avec vous dans Argilla, ou crowdsourcer des annotations !

Voici quelques-unes des choses que vous apprendrez dans ce chapitre :

- Comment configurer votre propre instance Argilla.
- Comment charger un jeu de données et le configurer en fonction de tâches de NLP populaires.
- Comment utiliser l'interface utilisateur d'Argilla pour annoter votre jeu de données.
- Comment utiliser votre jeu de données annoté et l'exporter vers le Hub.
56 changes: 56 additions & 0 deletions chapters/fr/chapter10/2.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Configurez votre instance Argilla[[set-up-your-argilla-instance]]

<CourseFloatingBanner chapter={10}
classNames="absolute z-10 right-0 top-0"
notebooks={[
{label: "English", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section2.ipynb"},
{label: "Français", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section2.ipynb"},
{label: "English", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section2.ipynb"},
{label: "Français", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section2.ipynb"},
]} />

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.

## Déployer l'interface utilisateur d'Argilla

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/).
<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/space_config.png" alt="Space configuration form."/>

>[!WARNING]
> ⚠️ Vous pouvez activer le **stockage persistant** pour que les données ne soient pas perdues si l'espace est interrompu ou redémarré.
> Vous pouvez le faire à partir des paramètres de votre Space.

Une fois qu'Argilla est opérationnel, vous pouvez vous connecter avec vos identifiants.

## Install and connect the Python SDK

Vous pouvez maintenant aller dans votre environnement Python ou votre notebook et installer la bibliothèque argilla :
`!pip install argilla`

Connectons-nous à notre instance Argilla. Pour ce faire, vous aurez besoin des informations suivantes :

- **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`.
- **Votre clé API** : Pour obtenir votre clé, connectez-vous à votre instance Argilla et allez dans « My Settings », puis copiez la clé API.
- **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.

```python
import argilla as rg

HF_TOKEN = "..." # uniquement pour les spaces privés

client = rg.Argilla(
api_url="...",
api_key="...",
headers={"Authorization": f"Bearer {HF_TOKEN}"}, # uniquement pour les spaces privés
)
```

Pour vérifier que tout fonctionne correctement, nous allons appeler `me`. Cela devrait nous renvoyer notre utilisateur :

```python
client.me
```

Si cela fonctionne, votre instance Argilla est opérationnelle et vous y êtes connecté ! Félicitations !

Nous pouvons maintenant commencer à charger notre premier jeu de données dans Argilla.
110 changes: 110 additions & 0 deletions chapters/fr/chapter10/3.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# Chargez votre jeu de données dans Argilla[[load-your-dataset-to-argilla]]

<CourseFloatingBanner chapter={10}
classNames="absolute z-10 right-0 top-0"
notebooks={[
{label: "English", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section3.ipynb"},
{label: "Français", value: "https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter10/section3.ipynb"},
{label: "English", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section3.ipynb"},
{label: "Français", value: "https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter10/section3.ipynb"},
]} />

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.

<iframe
src="https://huggingface.co/datasets/SetFit/ag_news/embed/viewer/default/train"
frameborder="0"
width="100%"
height="560px"
></iframe>

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.

## Configurez votre jeu de données

La première étape consiste à se connecter à notre instance Argilla comme nous l'avons fait dans la section précédente :

```python
import argilla as rg

HF_TOKEN = "..." # uniquement pour les spaces privés

client = rg.Argilla(
api_url="...",
api_key="...",
headers={"Authorization": f"Bearer {HF_TOKEN}"}, # uniquement pour les spaces privés
)
```

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.

```python
from datasets import load_dataset

data = load_dataset("SetFit/ag_news", split="train")
data.features
```

Voici les caractéristiques de notre jeu de données :

```python out
{'text': Value(dtype='string', id=None),
'label': Value(dtype='int64', id=None),
'label_text': Value(dtype='string', id=None)}
```

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 :

```python
settings = rg.Settings(
fields=[rg.TextField(name="text")],
questions=[
rg.LabelQuestion(
name="label", title="Classifier le texte :", labels=data.unique("label_text")
),
rg.SpanQuestion(
name="entities",
title="Surligner toutes les entités présentes dans le texte :",
labels=["PERSON", "ORG", "LOC", "EVENT"],
field="text",
),
],
)
```

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`.

Ensuite, nous définissons des **questions** qui représentent les tâches que nous voulons effectuer sur nos données :

- 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.
- 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.

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).

## Charger le jeu de données

Maintenant que nous avons défini quelques paramètres, nous pouvons créer le jeu de données :

```python
dataset = rg.Dataset(name="ag_news", settings=settings)

dataset.create()
```

Le jeu de données apparaît maintenant dans notre instance Argilla, mais vous verrez qu'il est vide :

<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter10/empty_dataset.png" alt="Screenshot of the empty dataset."/>

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 :

```python
dataset.records.log(data, mapping={"label_text": "label"})
```

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.

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 :

<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."/>

Notre jeu de données est maintenant prêt à être annoté !
44 changes: 44 additions & 0 deletions chapters/fr/chapter10/4.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
# Annoter votre jeu de données[[annotate-your-dataset]]

<CourseFloatingBanner
chapter={10}
classNames="absolute z-10 right-0 top-0"
/>

Maintenant, il est temps de commencer à travailler à partir de l'interface utilisateur d'Argilla pour annoter notre jeu de données.

## Alignez votre équipe sur les règles d'annotation à respecter

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.

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.

<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."/>

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.

## Répartir la tâche

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.

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.

## Annoter les enregistrements

>[!TIP]
>💡 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/).

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 :

<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."/>

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 :

<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."/>

Au fur et à mesure que vous parcourez les différents dossiers, vous pouvez entreprendre différentes actions :
- soumettre vos réponses, une fois que vous avez terminé l'enregistrement.
- les sauvegarder comme brouillon, au cas où vous voudriez y revenir plus tard.
- les écarter, si l'enregistrement ne doit pas faire partie du jeu de données ou si vous ne voulez pas y répondre.

Dans la section suivante, vous apprendrez comment exporter et utiliser ces annotations.
Loading
Loading