DanielRegaladoCardoso/lastfm-1k-twotower
Last.fm 1K — Two-Tower Ready A processed, train-ready version of the Last.fm 1K users dataset, prepared for retrieval/recommender models (two-tower, ALS, BPR, etc.). Built as part of loopback — an open-source two-tower neural recommender for music. What's inside Split Rows Size train 15,320,694 144 MB val 1,915,086 18 MB test 1,915,087 18 MB Each row: (user_idx, track_idx, artist_idx, ts) — integer-encoded IDs ready to plug into an embedding… See the full description on the dataset page: https://huggingface.co/datasets/DanielRegaladoCardoso/lastfm-1k-twotower.
Last.fm 1K — Two-Tower Ready
A processed, train-ready version of the Last.fm 1K users dataset, prepared for retrieval/recommender models (two-tower, ALS, BPR, etc.).
Built as part of loopback — an open-source two-tower neural recommender for music.
What's inside
Each row: (user_idx, track_idx, artist_idx, ts) — integer-encoded IDs ready to plug into an embedding layer, plus a UTC timestamp.
Vocabulary: 992 users · 1,500,661 unique tracks · 174,091 artists.
Splits
Temporal, not random: oldest 80 % → train, next 10 % → val, last 10 % → test. Temporal splits avoid look-ahead bias that random splits hide and are standard for honest RecSys evaluation.
Source
Last.fm 1K users — 19.1 M listening events from 1000 users (2005–2009). Original schema: (user_id, timestamp, artist_mbid, artist_name, track_mbid, track_name).
Processing
track_idx is encoded from the key f"{artist_name} — {track_name}" (artist + title combo, deduplicates the same track across MBIDs). Nulls in user_id, track_name, artist_name, timestamp were dropped. UTF-8 quirks handled with quote_char=None in Polars.
Full pipeline: <https://github.com/DanielRegaladoUMiami/loopback/blob/main/src/loopback/data.py>
License
Apache 2.0 for the processing pipeline and integer encoding. The underlying interaction data follows the original Last.fm 1K dataset terms.
