Melta / README.md
Clemylia's picture
Update README.md
7172771 verified
---
library_name: transformers
license: apache-2.0
datasets:
- Clemylia/Melta-revive
language:
- fr
pipeline_tag: text-generation
---
# 🚀 Melta-82M : Le LLM Fonctionnel et Efficace
## 💡 Présentation Générale
| Caractéristique | Détail |
| :--- | :--- |
| **Nom du Modèle** | **Melta-82M** (Basé sur le projet Melta-revive) |
| **Créateur** | Clemylia / LES-IA-ETOILES |
| **Architecture** | **Transformer Llama** (Initialisé *from scratch*) |
| **Taille (Paramètres)** | **82 millions** |
| **Objectif** | Servir de modèle de fondation (**LLM Fonctionnel à Faible Paramètre**) pour le *Fine-Tuning* d'assistants spécialisés (comme Malya 🎶 ou Charlotte 💖). |
| **Langue** | Français |
Melta-82M représente la première tentative réussie de Clemylia d'entraîner une architecture Llama *from scratch*. Il est conçu pour prouver que l'efficacité de l'apprentissage des Transformers peut être atteinte avec un nombre de paramètres relativement faible, défiant la nécessité de modèles de plusieurs milliards.
## ⚙️ Détails Techniques de l'Architecture
Melta-82M est basé sur une configuration Llama optimisée pour la vitesse d'entraînement :
| Hyperparamètre | Valeur | Rôle dans l'Efficacité |
| :--- | :--- | :--- |
| **`hidden_size`** | 512 | Définit la dimension cachée du modèle. Gardé faible pour minimiser le coût de calcul. |
| **`num_hidden_layers`** | 12 | Nombre de blocs Transformer. Un bon équilibre pour capturer la complexité du langage sans alourdir le modèle. |
| **`num_attention_heads`**| 12 | Nombre de têtes d'attention. Permet au modèle d'analyser différentes facettes de la séquence simultanément. |
| **`vocab_size`** | \~32 000 | Taille du vocabulaire (ajustée après l'ajout du jeton `[PAD]`). Utilise un *tokenizer* sub-mot standard. |
| **`max_position_embeddings`**| 600 | Longueur maximale des séquences que le modèle peut traiter. |
## 🧪 Statut et Utilisation Actuelle
### 🚧 Statut de l'Entraînement
Melta-82M est actuellement dans une **phase de pré-apprentissage précoce** :
* **Données d'Entraînement :** Entraîné initialement sur seulement 650 lignes de paires Questions/Réponses (`Clemylia/Melta-revive`).
### 🎯 Prochaine Étape : Le Fine-Tuning
Ce modèle est prêt pour :
1. **L'augmentation massive du *dataset* :** Il nécessite un entraînement sur des millions de *tokens* pour atteindre une cohérence factuelle et sémantique.
2. **L'Affinement d'Instruction (Fine-Tuning) :** Une fois la cohérence atteinte, il pourra être affiné
## ⬇️ Comment Utiliser Melta-82M
Vous pouvez charger ce modèle directement via la bibliothèque **Hugging Face Transformers** pour l'inférence :
```python
from transformers import AutoTokenizer, LlamaForCausalLM
# Le modèle Llama 82M est chargé avec ses poids entraînés
model = LlamaForCausalLM.from_pretrained("Clemylia/Melta")
tokenizer = AutoTokenizer.from_pretrained("Clemylia/Melta")
```
**⚠️ Note :** En raison de son statut d'entraînement précoce, les utilisateurs sont invités à effectuer des Fine-Tuning supplémentaires avant toute utilisation en production.
toujours utilisé :
Question: Votre entrée\nRéponse
utilisation :
```
import torch
from transformers import (
AutoTokenizer,
LlamaForCausalLM,
)
# --- CONFIGURATION D'INFÉRENCE ---
# Remplacé par le dépôt Hugging Face
MODEL_REPO = "Clemylia/Melta"
def load_model_and_tokenizer(repo_id):
"""Charge le modèle LLaMA entraîné et son Tokenizer depuis Hugging Face."""
print(f"Chargement du modèle et du tokenizer depuis Hugging Face : {repo_id}...")
try:
# 1. Charger le Tokenizer
tokenizer = AutoTokenizer.from_pretrained(repo_id, trust_remote_code=True)
# S'assurer que le pad_token_id est correctement défini si le modèle en a besoin
if tokenizer.pad_token_id is None:
if tokenizer.pad_token is None:
# Le modèle LLaMA entraîné from scratch aura besoin de cette configuration
tokenizer.add_special_tokens({'pad_token': '[PAD]'})
tokenizer.pad_token_id = tokenizer.convert_tokens_to_ids(tokenizer.pad_token)
# 2. Charger le Modèle LLaMA
# LlamaForCausalLM charge le modèle et sa configuration depuis le dépôt HF
model = LlamaForCausalLM.from_pretrained(repo_id)
except Exception as e:
print(f"❌ Erreur lors du chargement depuis Hugging Face. Le dépôt '{repo_id}' existe-t-il ? : {e}")
return None, None
return model, tokenizer
def run_inference(model, tokenizer):
"""Effectue l'inférence (génération de texte) avec le modèle chargé."""
print("\n--- TEST D'INFÉRENCE ---")
# 0. Vérification de l'environnement
# Utiliser la carte graphique si elle est disponible
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
model.eval()
# 1. Définir le prompt
prompt = "Question: Qui est Clem ?\nRéponse:"
print(f"Prompt d'entrée : {prompt}")
# 2. Tokenisation
inputs = tokenizer(prompt, return_tensors="pt").to(device)
# 3. Génération de la réponse
with torch.no_grad():
output_tokens = model.generate(
**inputs,
max_length=150, # Limite de longueur de la réponse
num_return_sequences=1,
do_sample=True,
top_k=50,
top_p=0.95,
temperature=0.7,
pad_token_id=tokenizer.pad_token_id
)
# 4. Décodage et affichage
# skip_special_tokens=False pour voir les balises de fin de séquence (</s>)
response = tokenizer.decode(output_tokens[0], skip_special_tokens=False)
print(f"\nRéponse générée :\n{response}")
print("-------------------------")
# --- EXECUTION PRINCIPALE ---
if __name__ == "__main__":
model, tokenizer = load_model_and_tokenizer(MODEL_REPO)
if model and tokenizer:
run_inference(model, tokenizer)
print("\n✅ Test d'inférence terminé.")
else:
print("\n❌ Impossible de lancer l'inférence. Vérifiez le nom du dépôt Hugging Face.")
```