YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
Maestro REMI Fine-tuned VA
Este es un modelo GPT-2 fine-tuneado para generación de música simbólica usando la representación REMI (Revamped MIDI-derived events) con conditioning emocional Valencia-Activación (VA).
Modelo en Hugging Face: mmayorga/maestro-remi-finetuned-va
Características Principales
Generación controlada por emociones: El modelo incluye 18 tokens especiales para controlar la valencia (valence) y activación (arousal) de la música generada.
- Valencia: Dimensión emocional de positivo/negativo (-4 a +4)
- Activación: Nivel de energía/intensidad de la música (-4 a +4)
Descripción del Modelo
- Modelo Base: Natooz/Maestro-REMI-bpe20k
- Arquitectura: GPT2LMHeadModel
- Dataset: Lakh Piano Dataset con labels VA generados heurísticamente
- Parámetros:
- Embedding dimension: 512
- Attention heads: 8
- Layers: 12
- Context length: 2048 tokens
- Vocabulary size: 20,018 tokens (20,000 base + 18 conditioning tokens)
Entrenamiento
El modelo fue fine-tuneado con los siguientes parámetros:
- Dataset: Lakh Piano Dataset (4,284 archivos MIDI procesados)
- Ejemplos de entrenamiento: 12,820
- Ejemplos de validación: 1,396
- Épocas: 5
- Learning rate: 5e-5
- Train batch size: 4 (por dispositivo)
- Eval batch size: 4 (por dispositivo)
- Gradient accumulation steps: 2
- Precision: FP16
Conditioning Tokens
El modelo incluye 18 tokens especiales para controlar la emoción de la música:
Valencia (Valence): 9 tokens
[VAL=-4]a[VAL=+4]- Valores negativos: música triste, melancólica, menor
- Valores positivos: música alegre, optimista, mayor
Activación (Arousal): 9 tokens
[ARO=-4]a[ARO=+4]- Valores bajos: música calmada, lenta, suave
- Valores altos: música energética, rápida, intensa
Token IDs: 20000-20017 (extendido del vocabulario base)
Formato de uso: Los tokens de conditioning se añaden al inicio de la secuencia: [VAL=X] [ARO=Y] <música>
Resultados
- Train Loss: 0.432
- Eval Loss: 1.942
- Perplexity: 6.98
- Tiempo de entrenamiento: ~97 minutos (1.63 horas en GPU Tesla T4)
Uso
Instalación
pip install transformers torch miditok
Generación de música
from transformers import AutoModelForCausalLM, AutoTokenizer
from miditok import REMI
import torch
# Cargar el modelo y tokenizer
model_name = "mmayorga/maestro-remi-finetuned-va"
model = AutoModelForCausalLM.from_pretrained(model_name)
tokenizer = AutoTokenizer.from_pretrained(model_name)
# Configurar dispositivo
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
# Generar música con conditioning emocional
# Ejemplo: música alegre (valence +3) y energética (arousal +3)
prompt = "[VAL=+3] [ARO=+3] Bar_None"
input_ids = tokenizer.encode(prompt, return_tensors="pt").to(device)
# Generar tokens
output = model.generate(
input_ids,
max_new_tokens=512,
do_sample=True,
temperature=2.5,
top_k=15,
top_p=0.95,
pad_token_id=tokenizer.pad_token_id
)
# Decodificar resultado
generated_sequence = tokenizer.decode(output[0], skip_special_tokens=True)
print(generated_sequence)
Ejemplos de Conditioning
# Música triste y calmada (balada lenta)
prompt = "[VAL=-3] [ARO=-2] Bar_None"
# Música alegre y energética (pop/rock animado)
prompt = "[VAL=+3] [ARO=+3] Bar_None"
# Música neutral y moderada
prompt = "[VAL=0] [ARO=0] Bar_None"
# Música melancólica pero intensa (drama, tensión)
prompt = "[VAL=-2] [ARO=+2] Bar_None"
# Música tranquila y positiva (ambiente, chill)
prompt = "[VAL=+2] [ARO=-2] Bar_None"
Convertir a MIDI
Para convertir la salida del modelo a un archivo MIDI:
from miditok import REMI
from pathlib import Path
# Inicializar el tokenizer REMI
midi_tokenizer = REMI()
# Decodificar tokens a MIDI
tokens = tokenizer.convert_ids_to_tokens(output[0].tolist())
midi = midi_tokenizer.tokens_to_midi([tokens])
# Guardar archivo MIDI
midi.dump("output.mid")
Parámetros de Generación
Los parámetros recomendados para la generación están configurados en generation_config.json:
- temperature: 2.5 (mayor creatividad)
- top_k: 15 (limita a los 15 tokens más probables)
- top_p: 0.95 (nucleus sampling)
- max_new_tokens: 512
Puedes ajustar estos parámetros según tus necesidades:
- Temperatura más baja (1.0-1.5): Generaciones más conservadoras y predecibles
- Temperatura más alta (2.0-3.0): Generaciones más creativas y variadas
- top_k más bajo (5-10): Menor diversidad
- top_k más alto (20-50): Mayor diversidad
Formato REMI
REMI (Revamped MIDI-derived events) es una representación de música simbólica que incluye:
- Bar: Marcadores de compás
- Position: Posición dentro del compás
- Tempo: Cambios de tempo
- Pitch: Notas musicales
- Velocity: Intensidad de las notas
- Duration: Duración de las notas
Esta representación permite una generación más natural y musicalmente coherente.
Dataset
El modelo fue entrenado usando el Lakh Piano Dataset, un subconjunto del Lakh MIDI Dataset enfocado en música de piano:
- Archivos procesados: 4,284 archivos MIDI
- Labels VA: Generados heurísticamente a partir de características musicales
- Tempo → Arousal
- Velocity media → Arousal
- Distribución de pitches → Valence
- Preprocesamiento:
- Tokenización REMI
- Normalización de pitches (21-108)
- Windowing con overlap (1024 tokens, stride 512)
- Split por archivo (sin data leakage)
Distribución Emocional
El dataset muestra una distribución característica:
- Valence: Sesgo hacia valores negativos (música contemplativa/melancólica)
- Arousal: Distribución más uniforme
- Media de longitud: ~945 tokens por ejemplo
Limitaciones
- La temperatura alta (2.5) produce resultados variados pero puede generar secuencias menos coherentes
- El modelo está optimizado para el dominio específico de los datos de entrenamiento (Lakh Piano Dataset)
- Los labels de Valencia-Activación fueron generados heurísticamente a partir de características musicales (tempo, velocity, pitch), por lo que pueden no reflejar perfectamente la percepción emocional humana
- La distribución del dataset tiene un sesgo hacia valence negativo (música contemplativa), lo que puede afectar la generación con valores de valencia positiva
- El modelo está diseñado específicamente para música de piano
Licencia
Por favor, verifica la licencia del modelo base Natooz/Maestro-REMI-bpe20k y del Lakh MIDI Dataset.
Notas Técnicas
- Conditioning tokens: Los 18 tokens de Valencia-Activación están integrados en el vocabulario del tokenizer (IDs 20000-20017)
- Compatibilidad: Compatible con el tokenizador base de Maestro-REMI, con extensión para conditioning
- Reproducibilidad: Seeds fijados para shuffle y generación de labels VA heurísticos
- Normalización: Los pitches están normalizados al rango 21-108 para evitar tokens fuera de rango
Citas
Si usas este modelo, considera citar el trabajo original de REMI y MidiTok:
@inproceedings{miditok2021,
title={{MidiTok}: A Python package for {MIDI} file tokenization},
author={Fradet, Nathan and Briot, Jean-Pierre and Chhel, Fabien and El Fallah Seghrouchni, Amal and Gutowski, Nicolas},
booktitle={Extended Abstracts for the Late-Breaking Demo Session of the 22nd International Society for Music Information Retrieval Conference},
year={2021},
url={https://archives.ismir.net/ismir2021/latebreaking/000005.pdf},
}
@inproceedings{raffel2016lakh,
title={Learning-Based Methods for Comparing Sequences, with Applications to Audio-to-MIDI Alignment and Matching},
author={Raffel, Colin},
year={2016},
school={Columbia University}
}
- Downloads last month
- 3