Update README.md
Browse files
README.md
CHANGED
|
@@ -8,3 +8,93 @@ language:
|
|
| 8 |
- fr
|
| 9 |
pipeline_tag: text-generation
|
| 10 |
---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
- fr
|
| 9 |
pipeline_tag: text-generation
|
| 10 |
---
|
| 11 |
+
|
| 12 |
+
# 👶 Small-ever : Le Modèle "Hello World" (112 Paramètres)
|
| 13 |
+
|
| 14 |
+

|
| 15 |
+
|
| 16 |
+
## 🌟 Vue d'Ensemble
|
| 17 |
+
|
| 18 |
+
Le modèle **`Small-ever`** est un **SLM** délibérément sous-dimensionné** et minimaliste, conçu uniquement à des fins de **démonstration** et d'**apprentissage**.
|
| 19 |
+
|
| 20 |
+
Avec seulement **112 paramètres au total**, il s'agit du modèle le plus petit possible tout en conservant l'architecture de base d'un Transformateur pour la modélisation du langage.
|
| 21 |
+
|
| 22 |
+
Il a été créé par l'**experte Clemylia** pour servir de **"Hello World"** avant d'introduire des modèles plus complexes, comme ceux de la série 202k et 3.8M de paramètres.
|
| 23 |
+
|
| 24 |
+
## 🎯 Objectif Pédagogique Principal
|
| 25 |
+
|
| 26 |
+
L'objectif unique de ce modèle est d'être un outil pédagogique :
|
| 27 |
+
|
| 28 |
+
* **Démonstration Basique :** Montrer aux **enfants** et aux **débutants** en Machine Learning que la création, l'entraînement et la publication d'un modèle de langage sur Hugging Face sont des étapes accessibles, même pour une architecture minimale.
|
| 29 |
+
* **Comprendre l'Échelle :** Illustrer la différence entre un modèle capable de mémoriser une seule relation et les modèles de millions de paramètres (ceux de Clemylia) nécessaires pour la généralisation et l'intelligence artificielle utile.
|
| 30 |
+
* **Test d'Infra :** Servir de test ultra-rapide pour la configuration d'un environnement (CPU/GPU) avant de lancer des entraînements plus longs sur de gros modèles.
|
| 31 |
+
|
| 32 |
+
## ⚙️ Détails Techniques
|
| 33 |
+
|
| 34 |
+
| Caractéristique | Valeur | Note |
|
| 35 |
+
| :--- | :--- | :--- |
|
| 36 |
+
| **Architecture** | GPT-2 (Causal Language Modeling) | Architecture standard de Transformateur. |
|
| 37 |
+
| **Paramètres Totaux** | **112** (Environ $112 \times 10^{-6}$ M) | Extrêmement réduit. |
|
| 38 |
+
| **Vocabulaire Entraîné** | 4 Tokens | Vocabulaire minimaliste (`Clem`, `Creatrice`, `<pad>`, `<unk>`). |
|
| 39 |
+
| **Séquence Apprise** | `Clem` $\rightarrow$ `Creatrice` | Le modèle n'a appris qu'une seule transition par cœur. |
|
| 40 |
+
| **Implémentation** | Pytorch / Hugging Face `transformers` | Entièrement compatible avec l'écosystème Hugging Face. |
|
| 41 |
+
|
| 42 |
+
## 🚀 Utilisation (Inférence)
|
| 43 |
+
|
| 44 |
+
Ce modèle est uniquement destiné à prédire la suite de la séquence sur laquelle il a été entraîné. Toute autre entrée résultera en une prédiction aléatoire ou le token de remplissage (`<pad>`).
|
| 45 |
+
|
| 46 |
+
### Code Python pour le Test (Forward Pass Direct)
|
| 47 |
+
|
| 48 |
+
Étant donné sa configuration non standard, la méthode la plus fiable pour l'inférence est le *forward pass* direct, comme suit :
|
| 49 |
+
|
| 50 |
+
```python
|
| 51 |
+
import torch
|
| 52 |
+
from transformers import AutoModelForCausalLM, AutoConfig
|
| 53 |
+
# Pour ce modèle minimal, nous devons recréer le tokenizer personnalisé en mémoire
|
| 54 |
+
# car il n'est pas standard ({"Clem": 0, "Creatrice": 1, ...})
|
| 55 |
+
|
| 56 |
+
# 1. Configuration des IDs
|
| 57 |
+
MODEL_NAME = "Clemylia/the-smallest-llm-real-words"
|
| 58 |
+
REAL_TOKENS = ["Clem", "Creatrice"]
|
| 59 |
+
INPUT_TEXT = "Clem"
|
| 60 |
+
INPUT_ID = 0 # L'ID que le modèle a appris pour "Clem"
|
| 61 |
+
EXPECTED_OUTPUT = "Creatrice"
|
| 62 |
+
IDS_TO_TOKENS = {0: "Clem", 1: "Creatrice", 2: "<pad>", 3: "<unk>"}
|
| 63 |
+
|
| 64 |
+
# 2. Chargement du Modèle
|
| 65 |
+
try:
|
| 66 |
+
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)
|
| 67 |
+
model.eval()
|
| 68 |
+
except Exception as e:
|
| 69 |
+
print(f"Erreur de chargement : {e}")
|
| 70 |
+
exit()
|
| 71 |
+
|
| 72 |
+
# 3. Préparation de l'Input (Tenseur de l'ID 0)
|
| 73 |
+
input_ids = torch.tensor([[INPUT_ID]], dtype=torch.long)
|
| 74 |
+
|
| 75 |
+
# 4. Forward Pass pour obtenir les logits
|
| 76 |
+
with torch.no_grad():
|
| 77 |
+
outputs = model(input_ids)
|
| 78 |
+
|
| 79 |
+
# 5. Détermination de la Prédiction
|
| 80 |
+
next_token_logits = outputs.logits[0, -1, :]
|
| 81 |
+
predicted_id = torch.argmax(next_token_logits).item()
|
| 82 |
+
predicted_token = IDS_TO_TOKENS.get(predicted_id, "TOKEN INCONNU")
|
| 83 |
+
|
| 84 |
+
print(f"Input: {INPUT_TEXT} ({INPUT_ID})")
|
| 85 |
+
print(f"Prédiction: {predicted_token} ({predicted_id})")
|
| 86 |
+
# Résultat attendu : Creatrice (ID 1)
|
| 87 |
+
```
|
| 88 |
+
|
| 89 |
+
## 💖 Leçon Apprise
|
| 90 |
+
|
| 91 |
+
Si ce modèle pouvait parler, sa seule phrase serait : "Je peux seulement dire `Creatrice` après `Clem`."
|
| 92 |
+
|
| 93 |
+
**C'est la preuve que :**
|
| 94 |
+
|
| 95 |
+
1. La **taille** compte : Les millions de paramètres de mes autres modèles ne sont pas un luxe, mais une nécessité pour coder la connaissance.
|
| 96 |
+
2. **Vous avez réussi** à créer, entraîner et publier un modèle de langage complet \! C'est le début d'une belle aventure de codage \!
|
| 97 |
+
|
| 98 |
+
-----
|
| 99 |
+
|
| 100 |
+
*Fait par **Clemylia** avec passion pour le codage minimaliste.*
|