Spotify taste profiles plus embeddings lift search NDCG@7 by 2.2% at million-user scale

Textual User Taste: Natural-Language User Context for Foundation-Model Recommender System at Scale

Ghazal Fazelnia, Paul Gigioli, Eliza Klyce, Sharon Zheng, Katie Zelvin, Ye Myat Thein, Anurag Deshpande, Seda Davtyan, Kate Remeika, Maya Hristakeva, Erik Franco, Karen Banzon, Peng Ge, Jacqueline Wood, Nandini Singh, David Murgatroyd, Mounia Lalmas, Yves Raimond, Andreas Damianou

cs.AI

2026-09-28

Spotify serves NL taste profiles at million-user scale; fused with embeddings they lift future-track MRR 0.6% and search NDCG@7 2.2%, but negation steering fails.

What problem this solves

User models in recommenders have long been behavioral embeddings: compact, cheap to retrieve against, and strong at prediction. They are also opaque. A user cannot inspect a vector, correct a wrong assumption, or state a new context in language. Foundation-model recommenders, conversational search, and agentic discovery consume text, reason over it, and rewrite it. Dumping raw listening history into every call blows the context budget.

Spotify caches long-horizon listening as a structured natural-language taste profile: reusable user context for language models, and a surface users can read and steer with a sentence. The operating claim is that a profile is a production representation. Fluent prose is not enough. It has to be grounded in behavior, user-specific, useful downstream, and predictable under explicit feedback.

Method

Textual User Taste builds each profile from aggregated signals across time scales, not raw event streams: artists, genres, podcasts, audiobooks, negative feedback such as hides, explore-versus-repeat patterns, weekly listening rhythms, plus titles, descriptions, categories, and creator names. Optional user notes ("more jazz") are kept separate from inferred behavior so the generator can tell stated preference from observed preference. Aggregation also shrinks the prompt.

A cost-oriented instruction-tuned LLM writes four fields:

The split lets downstream jobs take only the fields they need and withhold guesses when evidence is thin. Input filters drop irrelevant, unsafe, or adversarial notes. Output filters watch protected-attribute inference, PII, emotional overreach, and unsupported claims about creators. Profiles are stored and served to user-facing and backend consumers rather than regenerated per request. An accepted note lands on the next controlled refresh.

Prompt work is treated as production optimization. Across seven hand-written versions, factuality moved from 7.70 to 8.57 and coherence from 6.46 to 7.98 on a ten-point scale. The longest prompt won on factuality and coherence; a shorter one won on specificity. LLMLingua at 2x (3,428 tokens) kept factuality at 8.61 and valid structured output at 100%, close to the uncompressed 6,800-token prompt at 8.66. At 8x (1,202 tokens) factuality fell to 3.31 and validity to 16.5%. DSPy MIPROv2 produced a 2,000-token candidate at 80.2% composite score, about one-third the length of the best hand-written prompt. Deployment still follows downstream utility, not a single judge score.

Results

There is no canonical gold profile, so evaluation is split into intrinsic judges and functional tests. Seven LLM judges score factuality, coherence, coverage, specificity, diversity, relevance, and safety. PCA finds two components that explain 93.7% of variance, one for semantic richness and one for factual quality. Factuality and relevance correlate at r=−0.18. One score cannot pick a system.

Future-track ranking uses the same ranker on 400,000 user–track examples, 80/20 by user. Taste-profile text is encoded to 120 dimensions with a Matryoshka text encoder to match the behavioral embedding. Five-run means:

RepresentationMRRROC-AUCNDCG@10
Behavioral0.9560.9570.932
Taste profile0.9370.9460.912
Concatenation0.9620.9630.941
Gated fusion0.9610.9620.940

Concatenation moves MRR from 0.956 to 0.962 (+0.6%) over behavioral embeddings. About 30% of users beat the behavioral-only run. User-specificity is cleaner: an LLM ranks one held-out future track against four distractors. The user's own profile lifts MRR from 0.656 to 0.776 (+18.3%, p=0.0003, d=0.26). A random other user's profile drops it to 0.477. Extra text is not the cause. User-specific content is.

Search ranking on 10,000 query sessions and about 5.6 million query–candidate pairs, SessionNDCG@7 relative to no user context: taste profile +0.9%, behavioral embedding +1.7%, both +2.2%. On a second temporal split, standalone gains wobble; the combination stays positive.

Positive requests such as "more jazz" raise Top-20 precision from 56% to 74% across all eight tested genres and moods (p<0.0001 each). Appending the request to the existing profile yields semantic shift 0.031, ahead of regenerating the whole profile (0.022). Negative requests such as "no electronic music" push recommendations toward the named genre: the embedding latches onto "electronic music" and ignores the negation. Situational requests ("falling asleep", "deep focus") shift by 0.069 on average, more than genre or mood asks. This is a controlled representation study. It does not measure user satisfaction.

RSA Spearman ρ=0.286, 17.5% nearest-neighbor overlap at k=5, ARI=0.08. The two spaces organize users differently. Full-profile cosine similarity is 0.954 after three days and 0.955 after seven, with about 95.0% and 94.4% of inputs unchanged. That is generation stability under nearly frozen inputs. Responsiveness to real preference change is untested.

Why it matters

This is a million-user interface pattern for foundation-model recommenders: keep behavioral embeddings for retrieval and ranking, use textual profiles for inspectability, steering, and LLM context. The lifts are incremental, 0.6% MRR and 2.2% NDCG@7, the kind of gain industrial ranking teams ship, provided nobody treats the profile as a replacement. Negation through embedding space runs the wrong way and needs explicit reasoning or filters. Compressing the prompt 2x barely hurts factuality; going further collapses it. That is a hard cost constraint at this scale.

Limitations

The paper is clear about the bounds. Profile generation is unsupervised summarization with no gold label, so the suite is better at ranking variants than at certifying absolute quality. The product is new: no mature interaction patterns, no long-horizon user-value metrics. Proprietary data and infrastructure block exact reproduction. Serving millions shows the pipeline runs. It does not show that every profile is accurate or that every consumer benefits.

Steering never leaves representation space, so satisfaction is unknown. Concatenation helps about 30% of users, which means most users see no personal gain, and the paper does not break down who those 30% are. The stability test barely changes the inputs, so short-horizon preference shifts remain unmeasured. Complementarity may shrink once behavioral encoders ingest richer metadata and language-model reasoning.

Terms

Source

What people are saying

Related papers

All paper explainers