--- library_name: transformers tags: - music license: apache-2.0 pipeline_tag: text-to-audio --- # 🎹 PremierMusic-SLM 🏛️ ![Music](http://www.image-heberg.fr/files/17695202753185176676.jpg) "La Rencontre de la Mélodie et de la Forge" # 📜 Présentation PremierMusic-SLM est le premier modèle de langage de petite taille (SLM) de la lignée Clemylia dédié exclusivement à la génération de structures musicales. Conçu sur une architecture GPT-2, il traite la musique comme une syntaxe vivante, transformant les probabilités mathématiques en séquences de notes MIDI. Il est le pont direct entre l'expertise de forgeuse d'IA et un héritage musical de plus de 400 compositions originales. # 🛠️ Spécifications Techniques * Architecture : Transformers / GPT-2 * Taille : 3,23 Millions de paramètres (Ultra-Dense) * Format de Sortie : Séquences MIDI brutes * Compatibilité : Totalement intégré à l'écosystème des SLM textuels Clemylia. * Contrôle : Gestion chirurgicale de la température et de l'aléatoire (Stochasticité contrôlée). # ⚡ Caractéristiques & Comportement * Vibrato Logique : Le modèle ne se contente pas de prédire des notes, il cherche la structure dans le chaos. * Ascension Sémantique : Dans sa version 1.0, le modèle présente une tendance naturelle à l'escalade tonale (du grave vers l'aigu), nécessitant une configuration précise pour stabiliser les octaves. * Précision Chirurgicale : Ce n'est pas un outil "grand public". Il exige une maîtrise du code et un paramétrage fin pour extraire la substantifique moelle de sa créativité. # 🧪 Paramétrage de la Forge Pour dompter la vivité de PremierMusic-SLM, l'utilisateur doit jouer sur deux leviers : * La Température : Pour calmer ou exciter la créativité harmonique. * L'Aléatoire (Top-K / Top-P) : Pour éviter les boucles infinies ou les montées chromatiques trop abruptes. # 🎨 L'Âme du Projet > "Ce modèle est la fusion de deux passions : le code from scratch et la composition musicale. C'est l'aboutissement technique d'un parcours commencé à 15 ans, porté par 400 titres publiés sur les plateformes mondiales." # 🚀 Limites de la V1 (Roadmap) * Format unique : Génération MIDI exclusive (pas d'audio brut pour le moment). * Courbe de progression : Tendance à la montée des notes nécessitant un monitoring humain. * Niveau requis : Savoir coder est indispensable pour forger avec lui. # 🏛️ Verdict de la Forge PremierMusic-SLM est une preuve de concept majeure. Il prouve qu'avec moins de 4M de paramètres, on peut capturer l'essence d'une partition. Il est la première pierre d'une future symphonie entièrement générée par la Forge. # ✨ Exemple d'utilisation **adaptez ce code a votre usage** : ``` import torch from transformers import AutoModelForCausalLM, GPT2Config import mido from mido import MidiFile, MidiTrack, Message # 1. Chargement du modèle model_path = "Finisha-f-scratch/PremierMusic-SLM" device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = AutoModelForCausalLM.from_pretrained(model_path).to(device) model.eval() # 2. Paramètres de génération start_note = 60 # Do central temperature = 0.4 # Plus c'est haut, plus c'est "fou" et créatif do_sample = True # Active l'échantillonnage aléatoire max_length = 64 # Nombre de notes à générer # Préparation de l'entrée input_ids = torch.tensor([[start_note]], device=device) # 3. Génération avec Transformers print(f"Génération en cours (Temp: {temperature})...") with torch.no_grad(): output_tokens = model.generate( input_ids, max_length=max_length, do_sample=do_sample, temperature=temperature, top_k=50, # Limite aux 50 notes les plus probables top_p=0.95, # Nucleus sampling pour plus de cohérence pad_token_id=127 # Utilise la note 127 comme padding si besoin ) generated_notes = output_tokens[0].tolist() # 4. Conversion en fichier MIDI mid = MidiFile() track = MidiTrack() mid.tracks.append(track) for note in generated_notes: # On s'assure que la note reste dans les limites MIDI (0-127) note_val = max(0, min(127, int(note))) track.append(Message('note_on', note=note_val, velocity=70, time=150)) track.append(Message('note_off', note=note_val, velocity=70, time=150)) mid.save('musique_generee.mid') print("Terminé ! Fichier 'musique_generee.mid' prêt à l'écoute.") ```