/ Модель

Характеристики

Контекст
1 024 токена
Архитектура
gpt2 · dense
Базовая модель
gpt2
Опубликована
31 авг 2022

mutopia_guitar_mmm

Генерация текстаТекст → текст3 профессии

Дообученная GPT-2 генерирует текстовые представления MIDI-секвенций для сольной гитарной музыки.

339скачиваний за 30 дней4лайкавеса обновлены15 сен 2023

Бенчмарки

Как модель справилась с задачами пользователей ailist и что о ней публикуют открытые лидерборды

Публичные оценки

Из открытых лидербордов. Сравнивайте результаты одного теста при одинаковых условиях — отсутствие оценки не значит, что модель хуже.

В подключённых источниках результатов для этой модели пока нет.

Что умеет модель

Описание составлено по карточке модели и метаданным Hugging Face

juancopi81/mutopia_guitar_mmm — дообученная автором GPT-2 для генерации музыки для гитары. Модель использует архитектуру GPT2LMHeadModel и представляет MIDI-композиции в виде текстовой последовательности на основе кодирования MMM; для токенизации применяется WhitespaceSplit. В метаданных указан контекст 1024 токена, а в README описан размер контекста 256; автор также указывает словарь из 588 токенов.

Модель обучена на сольных гитарных произведениях из Mutopia Guitar Dataset, преимущественно на западной классической музыке композиторов Sor, Aguado, Carcassi и Giuliani. Она предназначена для экспериментов с генерацией музыкальных последовательностей и для учебных проектов, показывающих подготовку данных, обучение токенизатора и дообучение GPT-2. Автор сообщает о сильном переобучении на небольшом наборе данных, поэтому качество и разнообразие генерации ограничены.

Лицензия в предоставленных сведениях не указана. Это образовательный эксперимент, обученный на бесплатном Colab; результаты можно преобразовать в звучащую музыку с помощью упомянутого автором блокнота.

Сценарии применения

  • генерация MIDI-последовательностей для сольной гитары
  • создание музыкальных фрагментов в стиле западной классической гитарной музыки
  • эксперименты с генерацией музыки языковой моделью
  • обучающие проекты по дообучению GPT-2 на музыкальных данных

Ограничения

Автор сообщает о сильном переобучении из-за небольшого обучающего набора, поэтому качество и разнообразие генерации ограничены. Для прослушивания сгенерированной музыки автор предлагает использовать отдельный блокнот.

Для каких профессий подходит3

Разделы каталога профессий, в задачах которых используется эта модель

Все профессии

Карточка модели

README от автора на Hugging Face, как он его опубликовал

Открыть на Hugging Face

juancopi81/mutopia_guitar_mmm

Music generation could be approached similarly to language generation. There are many ways to represent music as text and then use a language model to create a model capable of music generation. For encoding MIDI files as text, I am using the excellent implementation of Dr. Tristan Beheren of the paper: MMM: Exploring Conditional Multi-Track Music Generation with the Transformer.

This model is a fine-tuned version of gpt2 on the Mutopia Guitar Dataset. Use the widget to generate your piece, and then use this notebook to listen to the results (work in progress). I created the notebook as an adaptation of the one created by Dr. Tristan Behrens.

It achieves the following results on the evaluation set:

  • Train Loss: 0.5365
  • Validation Loss: 1.5482

Model description

The model is GPT-2 loaded with the GPT2LMHeadModel architecture from Hugging Face. The context size is 256, and the vocabulary size is 588. The model uses a WhitespaceSplit pre-tokenizer. The tokenizer is also in the Hugging Face hub.

Intended uses & limitations

I built this model to learn more about how to use Hugging Face. I am implementing some of the parts of the Hugging Face course with a project that I find interesting. The main intention of this model is educational. I am creating a series of notebooks where I show every step of the process:

  • Collecting the data
  • Pre-processing the data
  • Training a tokenizer from scratch
  • Fine-tuning a GPT-2 model
  • Building a Gradio app for the model

I trained the model using the free version of Colab with a small dataset. Right now, it is heavily overfitting. My idea is to have a more extensive dataset of Guitar Music from Latinoamerica to train a new model similar to the Mutopia Guitar Model, using more GPU resources.

Training and evaluation data

I am training the model with Mutopia Guitar Dataset. This dataset consists of the soloist guitar pieces of the Mutopia Project. The dataset mainly contains guitar music from western classical composers, such as Sor, Aguado, Carcassi, and Giuliani.

For the first epochs of training, I transposed the notes by raising and lowering the pitches using the twelve semi-tones of an entire octave. Later, I trained the model without transposing the pieces so that generation shows better results of a real guitar piece.

Training hyperparameters

The following hyperparameters were used during training (with transposition):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 5e-07, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 5e-07, 'decay_steps': 5726, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

The following hyperparameters were used during training (without transposition - first round):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 5e-07, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 5e-07, 'decay_steps': 350, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

The following hyperparameters were used during training (without transposition - second round):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 5e-07, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 5e-07, 'decay_steps': 350, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

The following hyperparameters were used during training (without transposition, new tokenizer - third round):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 5e-07, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 5e-07, 'decay_steps': 350, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

The following hyperparameters were used during training (without transposition, new tokenizer - fourth round):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 5e-07, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 5e-07, 'decay_steps': 350, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

The following hyperparameters were used during training (without transposition, new tokenizer - fifth round):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 5e-07, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 5e-07, 'decay_steps': 350, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

The following hyperparameters were used during training (without transposition, new tokenizer - sixth round):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 5e-07, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 5e-07, 'decay_steps': 350, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

The following hyperparameters were used during training (without transposition, new tokenizer - seventh round):

  • optimizer: {'name': 'AdamWeightDecay', 'learning_rate': {'class_name': 'WarmUp', 'config': {'initial_learning_rate': 0.0005, 'decay_schedule_fn': {'class_name': 'PolynomialDecay', 'config': {'initial_learning_rate': 0.0005, 'decay_steps': 1025, 'end_learning_rate': 0.0, 'power': 1.0, 'cycle': False, 'name': None}, 'passive_serialization': True}, 'warmup_steps': 1000, 'power': 1.0, 'name': None}}, 'decay': 0.0, 'beta_1': 0.9, 'beta_2': 0.999, 'epsilon': 1e-08, 'amsgrad': False, 'weight_decay_rate': 0.01}

  • training_precision: mixed_float16

Training results

Without transposition (first round):

Train LossValidation LossEpoch
0.55031.54360
0.55031.54251
0.54761.54252
0.54671.54253
0.54471.54314
0.54181.54475
0.54181.54516
0.54011.54727
0.53861.54798
0.53651.54829

Without transposition (second round):

Train LossValidation LossEpoch
0.53681.54820
0.53551.54801
0.53261.54882
0.53631.54933
0.53461.54884
0.53291.55025
0.53291.55146
0.53081.55147
0.52921.55368
0.52721.55439

Without transposition (third round - new tokenizer):

Train LossValidation LossEpoch
6.13616.45690
5.63835.82491
4.91254.89562
4.20134.27783
3.86654.03304
3.71063.89565
3.60413.79956
3.53013.74857
3.49733.73238
3.49093.73239

Without transposition (fourth round - new tokenizer):

Train LossValidation LossEpoch
3.48793.72060
3.46673.68741
3.42293.63732
3.36803.57513
3.29983.50264
3.22083.42405
3.13853.33976
3.05803.25877
2.99493.21188
2.96463.19589

Without transposition (fifth round - new tokenizer):

Train LossValidation LossEpoch
2.95623.19020
2.94573.17511
2.92663.15122
2.90393.11763
2.87053.07754
2.82913.02955
2.78722.98116
2.73942.93217
2.69962.90238
2.68192.89279

Without transposition (sixth round - new tokenizer):

Train LossValidation LossEpoch
2.67692.88940
2.67192.87911
2.66122.86382
2.64652.84393
2.62422.81744
2.60062.78775
2.56792.75546
2.53872.72237
2.51152.70298
2.50112.69709

Without transposition (seventh round - new tokenizer):

Train LossValidation LossEpoch
2.28812.20590
1.77021.85331
1.46251.69482
1.28761.68653
1.19261.64144
1.13291.63605
1.10691.64486
1.04081.62077
0.89391.58378
0.72651.59019
0.59021.626110
0.44891.700711
0.32231.794012
0.21581.903213
0.14481.989214

Framework versions

  • Transformers 4.22.1
  • TensorFlow 2.8.2
  • Datasets 2.5.1
  • Tokenizers 0.12.1

Как запустить

На своей GPU в ailist. Цена — по текущим предложениям провайдеров

GPU в ailist

Универсальный рантайм

Нельзя запустить

В репозитории нет весов в формате PyTorch/safetensors.

Класс архитектуры
GPT2LMHeadModel
Ревизия весов
abbd085

0 моделей