TheArtist Music Transformer — F5 (Jazz Only, no pop rehearsal)

Jazz-only fine-tune of the Phase-0 pop baseline with no pop rehearsal data — the catastrophic-forgetting endpoint of the F1–F5 mix-ratio series from Empirical Study of Pop and Jazz Mix Ratios for Genre-Adaptive Chord Generation (Lee, 2026), evaluated further in How Far Can Chord-Symbol Time-Series Adaptation Carry Genre Identity?. The model generates chord-symbol progressions from a key- and genre-conditioned prompt. F5 is strictly dominated by F4 on every axis and should not be selected as a production checkpoint; it is released for replication of the per-epoch forgetting curve and for direct inspection of the failure mode.

Paper · Code · Demo · All models

Model details

Field Value
Architecture Music Transformer with relative positional attention
Parameters 25,661,440
Vocabulary size 351 tokens
Max sequence length 256
d_model / heads / FFN / layers 512 / 8 / 2048 / 8
Fine-tune resumed from Phase-0 pop baseline
Best epoch 7

Usage

Requires torch, huggingface_hub. The repo bundles model.py and tokenizer.py, so nothing needs to be cloned from GitHub.

import sys
import torch
from huggingface_hub import snapshot_download

# Download the full repo (model.py, tokenizer.py, best.pt, config.json).
ckpt_dir = snapshot_download(repo_id="PearlLeeStudio/TheArtist-MusicTransformer-ft-jazz-only")
sys.path.insert(0, ckpt_dir)  # so the next two imports resolve

from model import MusicTransformer
from tokenizer import ChordTokenizer

tokenizer = ChordTokenizer()
ckpt = torch.load(f"{ckpt_dir}/best.pt", map_location="cpu", weights_only=False)
model = MusicTransformer(
    vocab_size=tokenizer.vocab_size,
    d_model=512, n_heads=8, d_ff=2048, n_layers=8,
    max_seq_len=256, dropout=0.0, pad_id=tokenizer.pad_id,
)
model.load_state_dict(ckpt["model_state_dict"])
model.eval()

# Prompt = ii-V-I in C major; ask for a jazz-flavoured continuation.
song = {
    "key": "Cmaj", "time_signature": "4/4", "genre": "jazz",
    "bars": [["Dm7", "G7"], ["Cmaj7"]],
}
prompt_ids = tokenizer.encode_sequence(song)[:-1]
ids = torch.tensor([prompt_ids])
with torch.no_grad():
    for _ in range(32):
        logits = model(ids)
        next_id = torch.multinomial(
            torch.softmax(logits[:, -1, :] / 0.8, dim=-1), 1,
        )
        ids = torch.cat([ids, next_id], dim=-1)
        if next_id.item() == tokenizer.eos_id:
            break
print(tokenizer.decode(ids[0].tolist()))

For per-genre adaptation beyond pop and jazz, see the 11 LoRA adapter repos at PearlLeeStudio — they chain on top of the released ft-pop80 (F1) base, not this checkpoint.

Evaluation

Teacher-forced token-level metrics on the held-out pop and jazz test sets:

Metric Pop test Jazz test
Top-1 accuracy 82.10% 81.30%
Top-5 accuracy 96.31% 92.44%
Perplexity 1.96 2.24
Δ vs. Phase-0 baseline −2.11 +8.44

F5 illustrates the catastrophic-forgetting failure mode that motivated the paper: pop top-1 collapses by 2.11 points — the steepest drop (1.37 points) coming in the first epoch — and does not recover, while jazz top-1 reaches 81.30% against F4's 81.50% (F4 also keeps an extra 0.92 points of pop).

Known failure modes of this checkpoint specifically:

  • Chord progressions trend toward dense chromatic voicings that are commercially niche.
  • Generations on pop prompts retain diatonic structure but show persistent chromatic substitution.
  • See the paper's §6.4 and §7.5 for representative continuations.

Per-genre real-song eval

Genre n_songs Top-1 (%) Top-5 (%) val_loss
pop 10 85.97 95.78 0.6333
rock 10 85.38 96.46 0.5710
jazz 10 71.16 86.77 1.2883
blues 10 79.84 92.63 0.9230
bossa 10 81.01 95.13 0.8129
classical 10 46.86 77.96 2.3232
country 10 84.81 97.04 0.6185
electronic 10 86.49 97.59 0.5834
folk 10 83.70 98.07 0.6290
funk 10 82.42 94.96 0.7809
gospel 10 78.40 95.58 0.8520
hip_hop 10 89.99 98.12 0.4733
rnb_soul 10 84.20 96.47 0.6757

On this eval set F5 peaks on hip_hop (89.99%) and struggles most on classical (46.86%). On the eight genres whose [GENRE:X] tokens do not exist in the 351-token vocabulary (all beyond pop/jazz except rock, blues, and bossa) the F-series decodes without genre conditioning, so the per-genre LoRA adapters are the recommended path beyond pop and jazz.

130 songs (10 per genre × 13 genres, seed 42) drawn from held-out val/test partitions — pop from McGill Billboard (CC0), jazz from public standards corpora, classical from Bach chorales, the other ten genres from the matching Chordonomicon subsets (CC BY-NC 4.0; titles are Spotify track IDs by upstream policy).

Training data

All 1,513 jazz training sequences; no pop rehearsal data. Fine-tuned from the Phase-0 pop baseline, whose pretraining corpus is dominated by the Chordonomicon dataset (CC BY-NC 4.0).

License

CC BY-NC 4.0 (weights; matching Chordonomicon, the dominant training corpus). Research, paper replication, portfolio, and demo use are permitted; commercial use is not.

Citation

@misc{lee2026chordmix,
  title         = {Empirical Study of Pop and Jazz Mix Ratios for Genre-Adaptive Chord Generation},
  author        = {Lee, Jinju},
  year          = {2026},
  eprint        = {2605.04998},
  archivePrefix = {arXiv}
}

@misc{lee2026chordtimeseries,
  title         = {How Far Can Chord-Symbol Time-Series Adaptation Carry Genre Identity?},
  author        = {Lee, Jinju},
  year          = {2026},
  eprint        = {2606.07334},
  archivePrefix = {arXiv}
}
Downloads last month
511
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Papers for PearlLeeStudio/TheArtist-MusicTransformer-ft-jazz-only