Clemylia commited on
Commit
defc83e
·
verified ·
1 Parent(s): 67ee974

Update README.md

Browse files
Files changed (1) hide show
  1. README.md +133 -1
README.md CHANGED
@@ -9,4 +9,136 @@ tags:
9
  - Simply
10
  - Dog
11
  - ia dog
12
- ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  - Simply
10
  - Dog
11
  - ia dog
12
+ ---
13
+
14
+ ## 🐶 Documentation du Modèle **Marius**
15
+
16
+ ![Marius](http://www.image-heberg.fr/files/17614011693382322406.jpg)
17
+
18
+ ### 🌟 Présentation du Modèle
19
+
20
+ | Clé | Valeur |
21
+ | :--- | :--- |
22
+ | **Nom du Modèle** | **Marius** |
23
+ | **Auteure** | Clemylia (18 ans, Développeuse d'IA) |
24
+ | **Version Actuelle** | v1.0 |
25
+ | **Objectif** | Simulation de la prise de décision du chien Marius 🐕 en fonction d'un contexte textuel. |
26
+ | **Licence** | (MIT) |
27
+ | **Lien Hugging Face** | `Clemylia/Marius |
28
+
29
+ ### 🧠 Aperçu Fonctionnel
30
+
31
+ Le modèle **Marius** est un classifieur de texte léger, entraîné **entièrement à partir de zéro (from scratch)** par Clemylia. Il est conçu pour prédire l'action la plus probable que le chien Marius (Chien de Clemylia) choisirait parmi trois options, basées sur la phrase fournie par l'utilisateur.
32
+
33
+ L'objectif est de s'amuser à interpréter le "point de vue" canin sur des situations variées.
34
+
35
+ ### 🎯 Classes de Prédiction (Sorties)
36
+
37
+ **Marius** classifie la phrase d'entrée dans l'une des trois catégories suivantes :
38
+
39
+ | ID | Classe (Label) | Description | Emoji |
40
+ | :---: | :--- | :--- | :---: |
41
+ | **0** | **Rien** | Marius est indifférent ou ne réagit pas (e.g., il dort ou ignore l'événement). | 😴 |
42
+ | **1** | **Rouler** | Marius est probablement sur le canapé, prêt à jouer, ou s'ennuie et demande de l'attention (rouler sur le dos est une demande de caresse ou un signe d'amusement). | 🤸 |
43
+ | **2** | **Manger** | Marius perçoit une opportunité de nourriture (e.g., bruit de sachet, heure du repas, mention d'un aliment). | 🍖 |
44
+
45
+ ### 🛠️ Utilisation et Installation (Inférence)
46
+
47
+ Pour utiliser Marius, vous pouvez l'importer dans un environnement Python (ce code fournit un exemple d'inférence).
48
+
49
+ #### 💻 Exemple de Code
50
+
51
+ ```python
52
+ import torch
53
+ import torch.nn as nn
54
+ import re
55
+
56
+ # Define the model class (needs to be the same as the training script)
57
+ class SimpleTextClassifier(nn.Module):
58
+ def __init__(self, vocab_size, embed_dim, num_class):
59
+ super().__init__()
60
+ self.embedding = nn.Embedding(vocab_size, embed_dim)
61
+ self.fc = nn.Linear(embed_dim, num_class)
62
+
63
+ def forward(self, text):
64
+ embedded = self.embedding(text)
65
+ mask = (text != 0).unsqueeze(2).float()
66
+ masked_embedded = embedded * mask
67
+ averaged = masked_embedded.sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
68
+ return self.fc(averaged)
69
+
70
+ # Load the saved model weights
71
+ # Make sure vocab_size, embed_dim, and num_classes are defined from previous cells
72
+ # You also need the 'vocab' dictionary and 'label_map_reverse' dictionary from previous cells
73
+ try:
74
+ model = SimpleTextClassifier(vocab_size, embed_dim, num_classes)
75
+ model.load_state_dict(torch.load('simple_text_classifier.pth'))
76
+ model.eval() # Set the model to evaluation mode
77
+ except NameError:
78
+ print("Please ensure 'vocab_size', 'embed_dim', 'num_classes', 'vocab', and 'label_map_reverse' are defined by running previous cells.")
79
+
80
+ # Function to tokenize text manually (same as in training)
81
+ def simple_tokenizer(text):
82
+ text = re.sub(r'[^\w\s]', '', text)
83
+ return text.lower().split()
84
+
85
+ # Function to convert text to numerical representation (same as in training)
86
+ def text_to_sequence(text, vocab):
87
+ return [vocab[word] for word in simple_tokenizer(text) if word in vocab]
88
+
89
+ # Define the reverse label mapping (from integer to label string)
90
+ # This should be the same as the one used during training
91
+ label_map_reverse = {0: 'Rouler', 1: 'Rien', 2: 'Manger'} # Ensure this matches your training labels
92
+
93
+ # Inference function
94
+ def predict_action(sentence):
95
+ with torch.no_grad():
96
+ # Preprocess the input sentence
97
+ # Use the vocab built during training
98
+ sequence = text_to_sequence(sentence, vocab)
99
+ if not sequence:
100
+ return "Could not process the input sentence (no known words)."
101
+
102
+ # Pad the sequence to the maximum length seen during training or a reasonable fixed length
103
+ # For simplicity here, we'll just process single sentences without padding to a batch max_len
104
+ # A more robust inference would pad to a fixed length or handle batches
105
+ text_tensor = torch.tensor(sequence, dtype=torch.int64).unsqueeze(0) # Add batch dimension
106
+
107
+ # Make prediction
108
+ outputs = model(text_tensor)
109
+ _, predicted_class = torch.max(outputs, 1)
110
+
111
+ # Convert predicted class to label
112
+ predicted_label = label_map_reverse[predicted_class.item()]
113
+ return predicted_label
114
+
115
+ # Example usage with French sentences:
116
+ french_sentences = [
117
+ "Marius aime bien rouler par terre.",
118
+ "Il n'y a rien à faire ici.",
119
+ "Marius veut manger maintenant.",
120
+ "Je suis dehors, je vais rouler.",
121
+ "On se promène tranquillement.",
122
+ ]
123
+
124
+ print("Testing inference with French sentences:")
125
+ for sentence in french_sentences:
126
+ predicted_action = predict_action(sentence)
127
+ print(f"Sentence: '{sentence}' -> Predicted Action: {predicted_action}")
128
+ ```
129
+
130
+ ### 📊 Données d'Entraînement
131
+
132
+ Ce modèle a été entraîné sur la **petite dataset** de Clemylia : `Clemylia/canape`.
133
+
134
+ * **Taille de la Dataset :** **25 exemples** uniques.
135
+ * **Création :** Cette dataset a été créée manuellement par Clemylia, documentant des situations réelles et hypothétiques de son chien Marius pour simuler ses choix.
136
+ * **Méthode :** Le modèle a été développé **from scratch** (entièrement de zéro) sans l'utilisation d'un modèle pré-entraîné existant, démontrant une maîtrise complète du pipeline d'apprentissage.
137
+
138
+ > 📝 **Note :** La petite taille de la dataset (25 exemples) et le développement *from scratch* font de ce modèle une démonstration de concept puissante. Les prédictions sont **fiables pour le contexte d'entraînement**, mais l'utilisation sur des phrases très éloignées de la dataset initiale pourrait mener à des prédictions inattendues.
139
+
140
+ ### 🛑 Limitations et Bienséance
141
+
142
+ 1. **Fiabilité Scientifique :** Le modèle est une simulation amusante et **n'a aucune validité scientifique** pour prédire le comportement réel d'un chien.
143
+ 2. **Généralisation :** En raison de la petite taille de la dataset (25 exemples), le modèle peut avoir des difficultés à généraliser à des phrases très éloignées des exemples d'entraînement.
144
+ 3. **Biais :** Le modèle reflète le biais de l'environnement et des interactions de Marius et de son humaine. Il est optimisé pour les *habitudes* de ce chien spécifique.