# 2. Échantillonnage de Données {{#include /banners/hacktricks-training.md}} ## **Échantillonnage de Données** **L'échantillonnage de données** est un processus crucial dans la préparation des données pour l'entraînement de grands modèles de langage (LLMs) comme GPT. Il implique l'organisation des données textuelles en séquences d'entrée et de cible que le modèle utilise pour apprendre à prédire le mot suivant (ou token) en fonction des mots précédents. Un échantillonnage de données approprié garantit que le modèle capture efficacement les motifs et les dépendances linguistiques. > [!TIP] > L'objectif de cette deuxième phase est très simple : **Échantillonner les données d'entrée et les préparer pour la phase d'entraînement, généralement en séparant l'ensemble de données en phrases d'une longueur spécifique et en générant également la réponse attendue.** ### **Pourquoi l'Échantillonnage de Données est Important** Les LLMs tels que GPT sont entraînés à générer ou prédire du texte en comprenant le contexte fourni par les mots précédents. Pour y parvenir, les données d'entraînement doivent être structurées de manière à ce que le modèle puisse apprendre la relation entre les séquences de mots et leurs mots suivants. Cette approche structurée permet au modèle de généraliser et de générer un texte cohérent et contextuellement pertinent. ### **Concepts Clés dans l'Échantillonnage de Données** 1. **Tokenisation :** Décomposer le texte en unités plus petites appelées tokens (par exemple, mots, sous-mots ou caractères). 2. **Longueur de Séquence (max_length) :** Le nombre de tokens dans chaque séquence d'entrée. 3. **Fenêtre Glissante :** Une méthode pour créer des séquences d'entrée qui se chevauchent en déplaçant une fenêtre sur le texte tokenisé. 4. **Pas :** Le nombre de tokens que la fenêtre glissante avance pour créer la prochaine séquence. ### **Exemple Étape par Étape** Passons en revue un exemple pour illustrer l'échantillonnage de données. **Texte d'Exemple** ```arduino "Lorem ipsum dolor sit amet, consectetur adipiscing elit." ``` **Tokenization** Supposons que nous utilisions un **tokenizer de base** qui divise le texte en mots et en signes de ponctuation : ```vbnet Tokens: ["Lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit."] ``` **Paramètres** - **Longueur maximale de séquence (max_length) :** 4 tokens - **Pas de fenêtre glissante :** 1 token **Création de séquences d'entrée et de cible** 1. **Approche de fenêtre glissante :** - **Séquences d'entrée :** Chaque séquence d'entrée se compose de `max_length` tokens. - **Séquences cibles :** Chaque séquence cible se compose des tokens qui suivent immédiatement la séquence d'entrée correspondante. 2. **Génération de séquences :**
Position de la fenêtre | Séquence d'entrée | Séquence cible |
---|---|---|
1 | ["Lorem", "ipsum", "dolor", "sit"] | ["ipsum", "dolor", "sit", "amet,"] |
2 | ["ipsum", "dolor", "sit", "amet,"] | ["dolor", "sit", "amet,", "consectetur"] |
3 | ["dolor", "sit", "amet,", "consectetur"] | ["sit", "amet,", "consectetur", "adipiscing"] |
4 | ["sit", "amet,", "consectetur", "adipiscing"] | ["amet,", "consectetur", "adipiscing", "elit."] |
Position du token | Token |
---|---|
1 | Lorem |
2 | ipsum |
3 | dolor |
4 | sit |
5 | amet, |
6 | consectetur |
7 | adipiscing |
8 | elit. |