Personalized Music Recommendation at Scale Using LLMs and User Embeddings

spotify · Media & Entertainment · 2026 · source Agentic: no · promotional bias: med · source-backed · extracted with prompt 0.5.6 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Personalized recommendation systems with LLMs and user embeddings

Spotify needed to move from siloed recommendation models toward a unified, steerable, LLM-compatible recommendation architecture that can personalize across hundreds of millions of users and a massive catalog of tracks, podcasts, audiobooks, and videos.

Constraints:

Architecture

Spotify combines transformer-based user representations, semantic IDs for catalog items, continual LLM training, and soft-token user personalization. User interaction history and request context become embeddings; content vectors for tracks, artists, podcasts, and episodes are compressed into hierarchical semantic ID tokens; open-weight LLMs are fine-tuned to speak those semantic IDs; and user embeddings are projected into the LLM token space as soft tokens so production recommendation features such as AI DJ, prompted playlists, taste profiles, and next-episode podcast recommendations can be both personalized and steerable.

Diagram confidence: explicit (topology described by the source).

flowchart LR
  User_interaction_history["User interaction history"] --> Transformer_user_model["Transformer user model"]
  Transformer_user_model --> User_embedding_store["User embedding store"]
  Transformer_user_model --> Cross_content_embedding_space["Cross-content embedding space"]
  Catalog_embedding_pipeline["Catalog embedding pipeline"] --> Semantic_ID_tokenizer["Semantic ID tokenizer"]
  Catalog_embedding_pipeline --> Cross_content_embedding_space
  Semantic_ID_tokenizer --> Continual_LLM_training["Continual LLM training"]
  Open_weight_LLM_backbone["Open-weight LLM backbone"] --> Continual_LLM_training
  Continual_LLM_training --> Generative_recommender["Generative recommender"]
  User_embedding_store --> Soft_token_projection["Soft token projection"]
  Soft_token_projection --> Generative_recommender
  Generative_recommender --> Product_surfaces["Product surfaces"]
  Product_surfaces --> Taste_profile_feedback_loop["Taste profile feedback loop"]
  Taste_profile_feedback_loop --> Generative_recommender
  Taste_profile_feedback_loop --> User_interaction_history
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
User interaction history Captures listening sessions, product surface, query, and user behavior used as model context. Transformer user model
Transformer user model Learns sequential user representations from interaction history and request context. User embedding store, Cross-content embedding space
User embedding store Stores daily user vectors used by downstream recommendation models and soft-token projection. Soft token projection
Catalog embedding pipeline Represents songs, artists, podcasts, and episodes as Spotify content vectors. Semantic ID tokenizer, Cross-content embedding space
Cross-content embedding space Places users, tracks, and podcast episodes in a shared space for cross-content modeling. Transformer user model, Catalog embedding pipeline
Semantic ID tokenizer Compresses content vectors into hierarchical token IDs that an LLM can learn and generate. Continual LLM training
Open-weight LLM backbone Provides world knowledge and language-modeling capacity through models such as Llama or Qwen. Continual LLM training
Continual LLM training Adapts the LLM to Spotify semantic IDs and interaction sequences so it can predict next items. Generative recommender
Soft token projection Projects each user's embedding into the LLM token space as a user-specific soft token. Generative recommender
Generative recommender Generates personalized tracks, episodes, or playlist recommendations using semantic IDs and user soft tokens. Product surfaces
Product surfaces Serves AI DJ, prompted playlists, taste profiles, podcast recommendations, search, and personalized playlists. Taste profile feedback loop
Taste profile feedback loop Lets users inspect, edit, keep, or forget taste-profile information and sends that feedback back into the generative model. Generative recommender, User interaction history

Data flow

User interactions, request context, and product surface context are processed by transformer user-modeling pipelines into embeddings; catalog entities are embedded and compressed into semantic IDs; Spotify trains or adapts open-weight LLMs on semantic-ID sequences and Spotify interaction data; user embeddings are projected into soft tokens inserted into the prompt; the generative recommender predicts tracks, episodes, or playlists; taste-profile edits and user feedback feed back into the generative model.

3 supporting quotes
“the users interactions as a part of the prompt, so it's it's kind of like the context”transcript, stated
“we use semantic IDs to compress the like the vectors into semantic or sorry, the vectors into semantic IDs”transcript, stated
“you project the user representation into the space of the LLM”transcript, stated

Why this architecture

Spotify's architecture bridges platform-specific recommendation knowledge with LLM world knowledge. User embeddings summarize taste at scale, semantic IDs teach LLMs the catalog in token form, and soft tokens personalize generation without training a separate model for every user.

3 supporting quotes
“And uh what that does is it gives you steerability, it gives you better recommendations, it gives you explainability.”transcript, stated
“it kind of compresses that massive like let's say a thousand dimensional vector into like four or six tokens”transcript, stated
“You cannot train them on every like 750 million plus users that we have.”transcript, stated

Models used: Transformer user models · Autoencoder user models · Open-weight LLMs · Llama · Qwen · Spotify semantic ID models · Soft token projection model

Scale

Alternatives considered (roads not taken)

Keep siloed product-specific recommendation models

Rejected because: Spotify is moving from separate team-owned models toward a unified LLM-backbone model that supports user steerability.

“every product has its own team that has its own model. So it's kind of like spread across different groups of people”transcript, stated
“we're kind of moving away from that sort of siloed model of working towards this single unified model”transcript, stated

Use traditional candidate generation and ranking only

Rejected because: The LLM-based generative approach adds steerability, natural-language interaction, explainability, and cross-content modeling.

“candidate generation step which kind of reduces that item space to from like millions to like a few hundred”transcript, stated
“this kind of moves away from the traditional recommender system model, and it kind of moves towards this sort of sequential modeling”transcript, stated

Represent catalog content only with Spotify vectors

Rejected because: Spotify wants to combine internal catalog/user vectors with world knowledge from open-weight LLMs.

“So, that is like the Spotify knowledge. So, that's what we know about the the content”transcript, stated
“then you have uh the world knowledge. So, that's coming not from Spotify, but it's coming from these open-weight LLMs”transcript, stated

Train the LLM on every individual user

Rejected because: The model cannot be trained on all 750 million-plus users, so Spotify projects user embeddings into the LLM token space instead.

“You cannot train them on every like 750 million plus users that we have.”transcript, stated
“you have a user vector, which is projected to the space of the LLM. And that gets kind of inserted into the prompt”transcript, stated

Ignore catastrophic forgetting during domain adaptation

Rejected because: Spotify acknowledges forgetting as a tradeoff when embedding platform knowledge into open-weight LLMs.

“there are like tradeoffs here, so that the model does end up like forgetting stuff, like catastrophic forgetting is an issue.”transcript, stated
“these models are really good at combining world knowledge with whatever sort of the knowledge that you have from your platform”transcript, stated

Patterns

context-engineering (context)

Spotify treats user interactions, request context, product surface, item context, semantic IDs, and soft tokens as modeled context for the LLM recommender.

“this is going to be less about context engineering from the conventional like agentic sense. It's going to be more about how we do context engineering on the modeling side.”transcript, stated
“the users interactions as a part of the prompt, so it's it's kind of like the context”transcript, stated

agent-memory (personalization)

User embeddings and taste profiles encode long-term listening history and preferences so recommendations can be personalized at generation time.

“user embeddings uh which are essentially representations of vectors that that tell Spotify about the user's taste”transcript, stated
“a token that represents the user, which is obviously contextually changed depending on on the user”transcript, stated

model-routing (model-operations)

Spotify moves from product-specific recommender models toward a unified LLM backbone adapted with domain data, while still combining user, catalog, and LLM model components.

“some models are better than others, some have different features”transcript, stated
“single unified model uh which is which supports uh similar to how LLMs work, which supports like an LLM backbone”transcript, stated

human-in-the-loop-gate (feedback)

The taste profile lets users inspect and edit what Spotify knows, then feeds those edits back into the generative recommendation model.

“we want to expose what we know about you”transcript, stated
“let you choose which part of that you want us to kind of keep, which part of that you want us to forget”transcript, stated

eval-driven-development (evaluation)

Spotify reports internal metrics and production rollout status for the LLM-based podcast next-episode recommender before expanding the approach.

“we've seen some pretty positive results on our internal metrics.”transcript, stated
“if you're getting a recommendation, it's it's coming from from something like this”transcript, stated

Tradeoffs

Move from traditional candidate/ranking pipelines toward a generative recommender.

Chose Unified LLM-style sequential/generative model over Siloed candidate generation and ranking models only.

Rationale: The generative approach adds steerability and natural-language interaction while unifying recommendations across surfaces.

“allows you the user to kind of steer it towards the sort of recommendations that you want”transcript, stated
“this kind of moves away from the traditional recommender system model, and it kind of moves towards this sort of sequential modeling”transcript, stated

Use semantic IDs to teach catalog structure to the LLM.

Chose Hierarchical semantic ID tokens over Raw high-dimensional content vectors inside the LLM.

Rationale: Semantic IDs compress catalog vectors into token sequences the LLM can be trained to predict autoregressively.

“compresses that massive like let's say a thousand dimensional vector into like four or six tokens”transcript, stated
“allows the model auto-regressively generate like the next artist or the next song”transcript, stated

Project user embeddings as soft tokens.

Chose Soft token personalization over Per-user LLM training.

Rationale: Soft tokens let the model personalize recommendations for a user without training on every individual user.

“create what's called a soft token within the model and it's essentially a token that represents the user”transcript, stated
“the model is personalized because it kind of has the context on you”transcript, stated

Accept continual-training tradeoffs for Spotify-specific recommendations.

Chose Fine-tune/open-weight LLM adaptation with Spotify data over Use open-weight LLM world knowledge unchanged.

Rationale: The adapted model can combine world knowledge with Spotify catalog knowledge, but the team must manage catastrophic forgetting.

“we fine-tune those models, and then we kind of embed Spotify's knowledge into those models”transcript, stated
“the model does end up like forgetting stuff, like catastrophic forgetting is an issue”transcript, stated

Expose taste profiles to users.

Chose User-visible preference editing over Opaque personalization only.

Rationale: Taste profiles give users steerability and control over what Spotify remembers or forgets.

“The idea is that you have some piece of text that represents what the the user is. We we expose it to you the user”transcript, stated
“that data that edit or is going to come back into the generative model”transcript, stated

Gotchas (what bit them)

Siloed recommendation models fragment user understanding.

Root cause: Different Spotify product teams historically maintained separate models with different features and quality levels.

Resolution: Move toward a unified LLM-backbone recommendation model with shared user and catalog representations.

“every product has its own team that has its own model. So it's kind of like spread across different groups of people”transcript, stated
“moving away from that sort of siloed model of working towards this single unified model”transcript, stated

LLMs do not naturally understand Spotify catalog identifiers.

Root cause: Spotify's content knowledge exists as internal vectors and URIs, while open-weight LLMs understand language/world knowledge.

Resolution: Tokenize content vectors into semantic IDs and train the LLM to use those tokens.

“the prompt on the left has the Spotify URI, which is like our representation of the of of the uh the item”transcript, stated
“We convert that into a semantic ID, which is like the actual tokens that the the model is um attending to.”transcript, stated

Domain adaptation can cause catastrophic forgetting.

Root cause: Fine-tuning open-weight LLMs on Spotify catalog data may degrade some original world-knowledge capabilities.

Resolution: Monitor the tradeoff while using semantic IDs to combine platform knowledge with world knowledge.

“catastrophic forgetting is an issue”transcript, stated
“combining world knowledge with whatever sort of the knowledge that you have from your platform”transcript, stated

User-scale personalization cannot be solved by training on each user individually.

Root cause: Spotify has hundreds of millions of users, and the LLM is trained on limited training data.

Resolution: Use collaborative filtering plus soft-token projection of user embeddings into the prompt.

“these models are trained on like a limited amount of training data. You cannot train them on every like 750 million plus users that we have.”transcript, stated
“you project the user representation into the space of the LLM”transcript, stated

The user-embedding pipeline is operationally expensive.

Root cause: Spotify generates embeddings for a billion-plus users every day.

Resolution: Use the embeddings as foundational infrastructure for downstream recommendation models and soft-token personalization.

“we generate embeddings for like a billion plus users”transcript, stated
“we do that every day, so it's it's like a massive uh pipeline. It's very expensive.”transcript, stated

Evaluation

The presentation does not disclose detailed metrics, but says the LLM-based recommender showed positive internal metrics and is productionized for next-episode podcast recommendations. The system is evaluated through internal recommendation metrics, production rollout, steerability/user-feedback features, and ongoing expansion across recommendation surfaces.

Metrics: Internal recommendation metrics · Productionization status · Next-episode recommendation quality · Steerability · Personalization quality · Taste profile edits · Podcast recommendation behavior · Cross-content embedding quality

3 supporting quotes
“we've seen some pretty positive results on our internal metrics.”transcript, stated
“this is something which is actually productionized now”transcript, stated
“we have the embeddings which represent the users. We have the semantic IDs which represent uh like a compressed version of the content”transcript, stated

Outcomes

The system is designed around about 750 million users, a 100M-plus-track catalog, about 400,000 audiobooks, millions of podcasts/video episodes, 184 markets, daily embeddings for a billion-plus users, semantic IDs of four to six tokens, and productionized podcast next-episode recommendations.

3 supporting quotes
“AI DJ where you can kind of talk to it and it kind of recommends you stuff or it plays stuff for you”transcript, stated
“prompted playlist where you can actually prompt the model uh like Spotify's model and it kind of generates like a custom playlist”transcript, stated
“if you're getting a recommendation, it's it's coming from from something like this”transcript, stated