TheArtist Music Transformer — F2 (Pop 5K Mix)

F2 in the pop→jazz fine-tuning sweep: the Phase-0 pop baseline fine-tuned on all 1,513 jazz training sequences with a 5,000-sequence pop rehearsal buffer. It sits between the pop-leaning F1 and the sweet-spot F3; the mix-ratio paper finds it dominated by F3 on every axis, so it is released for reproducibility of the saturation curve rather than as a recommended operating point (prefer F3 for the balanced setting, F1 for pop-leaning, F4 for jazz-leaning). One of six checkpoints from Empirical Study of Pop and Jazz Mix Ratios for Genre-Adaptive Chord Generation (Lee, 2026).

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
Fine-tune mix 1,513 jazz + 5,000 pop rehearsal (pop:jazz ≈ 3.3:1, seed 42)
Best epoch 4

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-pop67")
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 pop-flavoured continuation.
song = {
    "key": "Cmaj", "time_signature": "4/4", "genre": "pop",
    "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 — they chain on top of the released ft-pop80 (F1) base, not this checkpoint.

Evaluation

Held-out per-genre test sets:

Metric Pop test Jazz test
Top-1 accuracy 84.06% 79.91%
Top-5 accuracy 96.17% 91.46%
Perplexity 1.75 2.34
Δ vs. Phase-0 baseline −0.15 +7.05

Per-genre real-song eval

Teacher-forced token-level metrics per genre; on this set F2 peaks on hip_hop (90.49%) and struggles most on classical (49.84%). The 11 per-genre LoRA adapters remain the recommended path beyond pop and jazz — for the eight genres without a [GENRE:X] token in the 351-token vocabulary (all but rock, blues, and bossa) the F-series numbers reflect decoding without genre conditioning.

Genre n_songs Top-1 (%) Top-5 (%) val_loss
pop 10 86.23 95.70 0.5810
rock 10 87.04 96.90 0.4660
jazz 10 69.43 85.73 1.3464
blues 10 83.11 93.35 0.7935
bossa 10 82.44 95.04 0.7304
classical 10 49.84 83.17 2.0839
country 10 85.80 97.25 0.5200
electronic 10 86.81 97.49 0.5097
folk 10 84.60 98.06 0.5295
funk 10 83.76 95.61 0.6983
gospel 10 80.47 95.83 0.7463
hip_hop 10 90.49 97.62 0.3990
rnb_soul 10 84.66 96.40 0.5954

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 plus 5,000 pop rehearsal sequences (seed 42). Pop:jazz ≈ 3.3:1. Sources across pretraining and fine-tuning: Chordonomicon (CC BY-NC 4.0), McGill Billboard (CC0), Jazz Harmony Treebank (public), JazzStandards (community redistribution), Weimar Jazz Database (ODbL), JAAH (research-use).

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
350
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Papers for PearlLeeStudio/TheArtist-MusicTransformer-ft-pop67