| --- |
| license: mit |
| language: |
| - fr |
| tags: |
| - mon chien |
| - prise de décision |
| - classificateur de texte |
| - Simply |
| - Dog |
| - ia dog |
| pipeline_tag: text-classification |
| datasets: |
| - Clemylia/Canape |
| --- |
| |
| ## 🐶 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 |
|
|
| ```python |
| 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 |
|
|
| 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. |
| 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. |
| 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. |