|
|
--- |
|
|
license: other |
|
|
license_name: nelya-restrictive |
|
|
license_link: LICENSE |
|
|
datasets: |
|
|
- Clemylia/Charlotte-nekolien-SLM |
|
|
language: |
|
|
- fr |
|
|
pipeline_tag: text-generation |
|
|
tags: |
|
|
- LLM |
|
|
- Neko-LLM |
|
|
- Nekolien |
|
|
- Créativité |
|
|
- Nelya |
|
|
library_name: transformers |
|
|
--- |
|
|
|
|
|
# 📚 Documentation Modèle : Nelya-v1 |
|
|
|
|
|
 |
|
|
|
|
|
## 💎 Introduction |
|
|
|
|
|
Bienvenue à la documentation technique de **Nelya-v1**, un Large Language Model (LLM) de $\mathbf{2}$ milliards de paramètres. Nelya-v1 est un modèle expérimental et de recherche, spécialisé dans la **génération de texte dans une langue inventée, le Nekolien**. Il est conçu pour explorer les frontières de la linguistique artificielle et de l'apprentissage structurel. |
|
|
|
|
|
--- |
|
|
|
|
|
## 🛠️ Vue d'Ensemble Technique |
|
|
|
|
|
Nelya-v1 est le produit d'un entraînement *from scratch* par Clemylia, exploitant les capacités d'accélérateurs de pointe pour valider l'architecture LLM. |
|
|
|
|
|
### Caractéristiques Principales |
|
|
|
|
|
| Caractéristique | Valeur | Note Technique | |
|
|
| :--- | :--- | :--- | |
|
|
| **Nom Complet** | Nelya-v1 (Base Lamina-large) | Dérivé du *Lamina-large-2b-pretrain*. | |
|
|
| **Taille** | $\mathbf{2}$ Milliards de Paramètres | Classification **LLM** (Large Language Model). | |
|
|
| **Architecture** | Transformer Décodeur Seul | Optimisée pour la génération de texte séquentielle. | |
|
|
| **Langue de Sortie** | **Nekolien** (Langue Inventée) | Le modèle génère du texte selon les règles grammaticales apprises du Nekolien. | |
|
|
| **Ressources** | Entraîné sur **TPU** (Google Colab Gratuit) | Optimisation maximale des ressources pour l'entraînement à grande échelle. | |
|
|
|
|
|
### 🔍 Sortie Actuelle du Modèle (État de Recherche) |
|
|
|
|
|
Les exemples de génération confirment que Nelya-v1 a réussi à apprendre les **suffixes** (`-lia`, `-a`), la **syntaxe de base** (`di la`, `eta`), et les **schémas de répétition/affirmation** propres à son *fine-tuning*. |
|
|
|
|
|
* **Exemples :** `La capitalia chimica di la mondia eta la mondia.` |
|
|
* **Observation :** Le modèle excelle dans la création de phrases grammaticalement cohérentes en Nekolien, mais tombe souvent dans des **boucles autoreférentielles** (`...mondia in la mondia...`) ou des **tâches tautologiques** (affirmation d'une vérité vide). |
|
|
|
|
|
--- |
|
|
|
|
|
## 🔒 Licence et Utilisation (Nelya-Restrictive) |
|
|
|
|
|
**ATTENTION :** Nelya-v1 n'est **PAS** un modèle *open-source* classique. L'utilisation est régie par la **Licence Nelya-Restrictive** déposée par Clemylia. |
|
|
|
|
|
| Clause Clé | Interdiction Stricte | Sanction Spécifique | |
|
|
| :--- | :--- | :--- | |
|
|
| **Propriété** | Revendiquer la propriété du modèle ou du Nekolien. | Droits d'auteurs artistiques sur le Nekolien. | |
|
|
| **Redistribution/Copie** | Copie ou distribution non autorisée du modèle. | Amende de $\mathbf{50€}$ à $\mathbf{200€}$ pour malveillance. | |
|
|
| **Fine-Tuning** | Modification ou *fine-tuning* du modèle (sauf par l'équipe Clemylia). | Interdiction totale. | |
|
|
|
|
|
**👉 L'utilisation du modèle implique l'acceptation inconditionnelle de la Licence Nelya-Restrictive.** |
|
|
|
|
|
--- |
|
|
|
|
|
## 🚀 Utilisation et Paramètres de Décodage |
|
|
|
|
|
Nelya-v1 est destiné à être utilisé comme générateur de texte dans le pipeline standard `transformers`. |
|
|
|
|
|
### Recommandations de Décodage |
|
|
|
|
|
Pour explorer le Nekolien, il est crucial de jouer avec les paramètres : |
|
|
|
|
|
| Paramètre | Recommandation | Objectif | |
|
|
| :--- | :--- | :--- | |
|
|
| **`do_sample`** | `True` (Échantillonnage) | Nécessaire pour obtenir des phrases variées en Nekolien. | |
|
|
| **`temperature` ($\tau$)** | $\mathbf{0.7 \rightarrow 0.9}$ | Une valeur élevée encourage l'originalité et les combinaisons nouvelles, tout en maintenant un semblant de structure (contrairement à Charlotte-2b). | |
|
|
| **`max_length`** | Court ($\mathbf{< 100}$ tokens) | Le modèle peut tomber dans des boucles de répétition si la longueur est trop grande. | |
|
|
| **`repetition_penalty`** | $\mathbf{> 1.1}$ | Peut aider à briser les boucles de répétition fréquentes (`...mondia in la mondia...`). | |
|
|
|
|
|
--- |
|
|
|
|
|
## 👩💻 Support et Contact |
|
|
|
|
|
Nelya-v1 a été entièrement créé par **Clemylia** dans le cadre de la recherche personnelle et du développement de LLM. |
|
|
|
|
|
* **Soutien :** Veuillez adresser toute question technique ou demande de licence explicite directement à l'équipe de Clemylia. |
|
|
* **Encouragements :** Merci de respecter l'investissement et l'innovation derrière ce projet ! 💖 |
|
|
|
|
|
# 🩷 Inférence et Utilisation 🌸 |
|
|
|
|
|
**Exemple de code d'inférence fonctionnel** : |
|
|
|
|
|
``` |
|
|
# ============================================================================== |
|
|
# 1. INSTALLATION ET IMPORTS |
|
|
# ============================================================================== |
|
|
# Nous n'avons besoin que des bibliothèques de base pour l'inférence |
|
|
!pip install -q transformers torch |
|
|
|
|
|
import torch |
|
|
from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline |
|
|
|
|
|
# ============================================================================== |
|
|
# 2. DÉFINITION DES CONSTANTES ET CHARGEMENT |
|
|
# ============================================================================== |
|
|
MODEL_NAME = "Clemylia/Nelya-v1" # Votre modèle finetuné |
|
|
# Utiliser "auto" pour charger le modèle sur le GPU si disponible, sinon sur CPU |
|
|
DEVICE = "cuda" if torch.cuda.is_available() else "cpu" |
|
|
|
|
|
print(f"Chargement du modèle {MODEL_NAME} sur {DEVICE}...") |
|
|
|
|
|
# Chargement du tokenizer |
|
|
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME) |
|
|
|
|
|
# Chargement du modèle. Utiliser torch_dtype=torch.bfloat16 si votre environnement |
|
|
# (GPU T4) le supporte et que le modèle a été entraîné ou sauvegardé dans ce format. |
|
|
model = AutoModelForCausalLM.from_pretrained( |
|
|
MODEL_NAME, |
|
|
torch_dtype=torch.bfloat16 if DEVICE == "cuda" else None, |
|
|
device_map="auto" |
|
|
) |
|
|
|
|
|
# ============================================================================== |
|
|
# 3. PRÉPARATION DE LA REQUÊTE ET GÉNÉRATION |
|
|
# ============================================================================== |
|
|
|
|
|
# La question simple génerique (nous utilisons le format Chat utilisé lors du fine-tuning) |
|
|
QUESTION = "Ti eta ?" |
|
|
|
|
|
# Formatage de la question dans le format de conversation attendu par le modèle |
|
|
# <|user|>...</s><|assistant|> |
|
|
prompt = f""### Instruction:{QUESTION}### Response:" |
|
|
|
|
|
# Tokenization du prompt |
|
|
inputs = tokenizer(prompt, return_tensors="pt").to(DEVICE) |
|
|
|
|
|
# Génération de la réponse |
|
|
print("\n--- Génération de la réponse ---") |
|
|
|
|
|
# Paramètres de génération standard |
|
|
output_tokens = model.generate( |
|
|
**inputs, |
|
|
max_new_tokens=150, # Limite la longueur de la réponse |
|
|
do_sample=True, # Utiliser l'échantillonnage pour une réponse plus créative |
|
|
temperature=0.7, # Contrôle le caractère aléatoire |
|
|
top_k=50, |
|
|
eos_token_id=tokenizer.eos_token_id, # Arrêt à la fin de séquence |
|
|
) |
|
|
|
|
|
# ============================================================================== |
|
|
# 4. DÉCODAGE ET AFFICHAGE DU RÉSULTAT |
|
|
# ============================================================================== |
|
|
# Décoder le résultat, en ignorant le prompt initial et le token de padding/spécial |
|
|
generated_text = tokenizer.decode(output_tokens[0], skip_special_tokens=True) |
|
|
|
|
|
# Nettoyage pour n'afficher que la réponse de l'assistant |
|
|
# On cherche le début de la réponse de l'assistant après le prompt formaté |
|
|
assistant_prefix = "### Response:" |
|
|
if assistant_prefix in generated_text: |
|
|
# Retirer le prompt initial et les balises de fin |
|
|
clean_response = generated_text.split(assistant_prefix)[-1].strip() |
|
|
else: |
|
|
# Si le formatage n'a pas été parfait (ce qui arrive) |
|
|
clean_response = generated_text.replace(QUESTION, "").strip() |
|
|
|
|
|
|
|
|
print(f"\n🧠 Réponse de {MODEL_NAME} :\n") |
|
|
print(clean_response) |
|
|
print("\n-------------------------------") |
|
|
|
|
|
# ============================================================================== |
|
|
# 5. UTILISATION OPTIONNELLE DE PIPELINE (plus simple) |
|
|
# ============================================================================== |
|
|
print("\nTest rapide avec le pipeline (méthode simplifiée) :") |
|
|
|
|
|
generator = pipeline( |
|
|
"text-generation", |
|
|
model=model, |
|
|
tokenizer=tokenizer |
|
|
# device=0 if DEVICE == "cuda" else -1 # REMOVED: Conflicts with device_map="auto" |
|
|
) |
|
|
|
|
|
# Le pipeline gère souvent bien le formatage par défaut pour les modèles Chat/Instruction |
|
|
# On utilise la même question, sans le formatage manuel |
|
|
result = generator( |
|
|
QUESTION, |
|
|
max_new_tokens=150, |
|
|
do_sample=True, |
|
|
temperature=0.7 |
|
|
) |
|
|
print(result[0]['generated_text']) |
|
|
``` |
|
|
|
|
|
**Reponses renvoyés (exemples)** : |
|
|
|
|
|
1) La pus grana avst ecrita avst ecrita *La annia la Jalla. |
|
|
|
|
|
2) Quelia eta la monetallia di la miel ? La symbolia di la mondia di la roallia eta la mondia |
|
|
|
|
|
3) La collora di la humia apstournia. |
|
|
|
|
|
4) Quelia eta la fruica di la e la e la e? |
|
|
La collora di la mondia eta la poteé la pi poteé la l'éiella la roria |
|
|
|
|
|
---- |
|
|
|
|
|
**Durer d'entraînement d'un LLM de cette envergure** : 300 heure sur TPU + nombreux fine-tuning de plusieurs heures sur GPU t4. |
|
|
|
|
|
**Variante du nekolien de ce modèle** : Nekolien original/centre. |