🐶 Documentation du Modèle Marius
🌟 Présentation du Modèle
| Clé | Valeur |
|---|---|
| Nom du Modèle | Marius |
| Auteure | Clemylia (18 ans, Développeuse d'IA) |
| Version Actuelle | v1.0 |
| Objectif | Simulation de la prise de décision du chien Marius 🐕 en fonction d'un contexte textuel. |
| Licence | (MIT) |
| Lien Hugging Face | `Clemylia/Marius |
🧠 Aperçu Fonctionnel
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.
L'objectif est de s'amuser à interpréter le "point de vue" canin sur des situations variées.
🎯 Classes de Prédiction (Sorties)
Marius classifie la phrase d'entrée dans l'une des trois catégories suivantes :
| ID | Classe (Label) | Description | Emoji |
|---|---|---|---|
| 0 | Rien | Marius est indifférent ou ne réagit pas (e.g., il dort ou ignore l'événement). | 😴 |
| 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). | 🤸 |
| 2 | Manger | Marius perçoit une opportunité de nourriture (e.g., bruit de sachet, heure du repas, mention d'un aliment). | 🍖 |
🛠️ Utilisation et Installation (Inférence)
Pour utiliser Marius, vous pouvez l'importer dans un environnement Python (ce code fournit un exemple d'inférence).
💻 Exemple de Code
import torch
import torch.nn as nn
import re
# Define the model class (needs to be the same as the training script)
class SimpleTextClassifier(nn.Module):
def __init__(self, vocab_size, embed_dim, num_class):
super().__init__()
self.embedding = nn.Embedding(vocab_size, embed_dim)
self.fc = nn.Linear(embed_dim, num_class)
def forward(self, text):
embedded = self.embedding(text)
mask = (text != 0).unsqueeze(2).float()
masked_embedded = embedded * mask
averaged = masked_embedded.sum(dim=1) / mask.sum(dim=1).clamp(min=1e-9)
return self.fc(averaged)
# Load the saved model weights
# Make sure vocab_size, embed_dim, and num_classes are defined from previous cells
# You also need the 'vocab' dictionary and 'label_map_reverse' dictionary from previous cells
try:
model = SimpleTextClassifier(vocab_size, embed_dim, num_classes)
model.load_state_dict(torch.load('simple_text_classifier.pth'))
model.eval() # Set the model to evaluation mode
except NameError:
print("Please ensure 'vocab_size', 'embed_dim', 'num_classes', 'vocab', and 'label_map_reverse' are defined by running previous cells.")
# Function to tokenize text manually (same as in training)
def simple_tokenizer(text):
text = re.sub(r'[^\w\s]', '', text)
return text.lower().split()
# Function to convert text to numerical representation (same as in training)
def text_to_sequence(text, vocab):
return [vocab[word] for word in simple_tokenizer(text) if word in vocab]
# Define the reverse label mapping (from integer to label string)
# This should be the same as the one used during training
label_map_reverse = {0: 'Rouler', 1: 'Rien', 2: 'Manger'} # Ensure this matches your training labels
# Inference function
def predict_action(sentence):
with torch.no_grad():
# Preprocess the input sentence
# Use the vocab built during training
sequence = text_to_sequence(sentence, vocab)
if not sequence:
return "Could not process the input sentence (no known words)."
# Pad the sequence to the maximum length seen during training or a reasonable fixed length
# For simplicity here, we'll just process single sentences without padding to a batch max_len
# A more robust inference would pad to a fixed length or handle batches
text_tensor = torch.tensor(sequence, dtype=torch.int64).unsqueeze(0) # Add batch dimension
# Make prediction
outputs = model(text_tensor)
_, predicted_class = torch.max(outputs, 1)
# Convert predicted class to label
predicted_label = label_map_reverse[predicted_class.item()]
return predicted_label
# Example usage with French sentences:
french_sentences = [
"Marius aime bien rouler par terre.",
"Il n'y a rien à faire ici.",
"Marius veut manger maintenant.",
"Je suis dehors, je vais rouler.",
"On se promène tranquillement.",
]
print("Testing inference with French sentences:")
for sentence in french_sentences:
predicted_action = predict_action(sentence)
print(f"Sentence: '{sentence}' -> Predicted Action: {predicted_action}")
📊 Données d'Entraînement
Ce modèle a été entraîné sur la petite dataset de Clemylia : Clemylia/canape.
- Taille de la Dataset : 25 exemples uniques.
- 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.
- 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.
📝 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.
🛑 Limitations et Bienséance
- 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.
- 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.
- 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.
