
After studying this material, students should be able to:
Imagine you are Spotify and you want to recommend audiobooks to users.
The Problem:
┌─────────────────────────────────────────┐
│ New User to Audiobooks │
│ │
│ Audiobook history: ❌ EMPTY │
│ Music history: ✅ 500 songs │
│ Podcast history: ✅ 30 episodes │
│ │
│ Traditional system: "I don't know │
│ what audiobooks you'd like" │
└─────────────────────────────────────────┘
Traditional recommendation systems rely on:
The cold-start problem = when there is no in-domain history, traditional systems fail completely.
💡 Key Insight: Most users on a music platform have NEVER played an audiobook — but they have rich histories in OTHER domains.
A domain is a category of content type:
| Domain | Examples |
|---|---|
| 🎵 Music | Songs, albums, playlists |
| 🎙️ Podcasts | Talk shows, news, interviews |
| 📚 Audiobooks | Narrated books |
| 🎬 Video | Music videos, documentaries |
Instead of asking:
"What audiobooks did you listen to?"
Ask:
"What did you consume ACROSS ALL domains?"
And use that to infer audiobook taste.
Real-world analogy:
If you listen to true crime podcasts and watch crime documentaries, a system can reasonably infer you might enjoy a true crime audiobook — even if you've never tried one.
The paper's key innovation is representing everything as text.
Traditional approach used collaborative vectors:
User Vector: [0.2, 0.8, 0.1, 0.5, ...]
Item Vector: [0.3, 0.7, 0.2, 0.4, ...]
❌ Problem: These vectors carry no content information — they only encode "who consumed what together"
New approach — Text Representation:
User is described by:
"The Midnight Library, Serial Podcast,
Dark Side of the Moon, Making a Murderer..."
Audiobook is described by:
"A novel about parallel lives and second
chances, narrated by..."
✅ Now the system understands what things are about
An embedding converts text into a list of numbers (a vector) that captures meaning.
Text → [Encoder] → Vector in Semantic Space
"True crime podcast" → [0.8, 0.2, 0.9, ...]
"Murder mystery book" → [0.7, 0.3, 0.8, ...]
"Cooking show" → [0.1, 0.9, 0.2, ...]
Similar meanings → vectors that are close together in space
ONE encoder maps EVERYTHING into the SAME space:
Music titles ──────┐
Podcast titles ────┤──→ [Multilingual ──→ Single
Audiobook titles ──┤ Text Encoder] Vector Space
Video titles ──────┘
Audiobook metadata ┘
Why this matters:
Once everything is in the same vector space, recommendation becomes a geometry problem:
Vector Space (simplified to 2D):
📚 True Crime Audiobook
★
★ ← User Vector
📚 Mystery Novel (based on their
cross-domain history)
🎵 Pop Album
★
Nearest-neighbor retrieval = find the audiobooks whose vectors are closest to the user's vector
Algorithm:
1. Encode user history → User Vector
2. Encode all audiobooks → Audiobook Vectors
3. Find Top-K closest audiobooks to User Vector
4. Recommend those audiobooks
💡 This is called dense retrieval — everything is represented as dense numerical vectors
Not every user has every domain signal:
User A: Music ✅ Podcasts ✅ Audiobooks ✅ Video ✅
User B: Music ✅ Podcasts ❌ Audiobooks ❌ Video ❌
User C: Music ✅ Podcasts ✅ Audiobooks ❌ Video ✅
If User B has no podcast history, using an empty podcast signal would add noise, not information.
A learned gate is a weight between 0 and 1 assigned to each domain:
User B's Gate:
Music: 0.95 ← high weight (has signal)
Podcasts: 0.02 ← suppressed (no signal)
Audiobooks: 0.01 ← suppressed (no signal)
Video: 0.02 ← suppressed (no signal)
Final User Vector =
0.95 × Music_Vector +
0.02 × Podcast_Vector + ...
"Learned" means the gate values are automatically determined by training on data — the system learns which domains to trust for which users.
Recall@10 measures: "Of all the audiobooks a user actually listened to, how many appear in our top 10 recommendations?"
Example:
User actually listened to: [Book A, Book B, Book C, Book D, Book E]
Our top 10 recommendations: [Book A, Book X, Book B, Book Y, Book Z,
Book C, Book W, Book V, Book U, Book T]
Recall@10 = 3 found out of 5 total = 60%
Higher Recall@10 = better recommendations
| Signals Used | Recall@10 Improvement |
|---|---|
| Baseline (production) | 0% (reference point) |
| + Music + Podcast + Audiobook | +27.3% |
| + Music + Podcast + Audiobook + Video | +32.8% |
Per-group breakdown:
Users with audiobook history elsewhere:
Audiobook signal alone → +50% improvement
(Makes sense! Direct domain transfer)
Users with only music history:
Video signal helps most
(Video taste correlates with audiobook taste
better than music alone)
┌─────────────────────────────────────────────────────┐
│ INPUT │
│ │
│ User's recent consumption (as text titles): │
│ Music: "Abbey Road, Dark Side of Moon..." │
│ Podcasts: "Serial, This American Life..." │
│ Audiobooks: "Atomic Habits..." │
│ Video: "Planet Earth..." │
└──────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ DOMAIN GATE │
│ Weights each domain based on signal availability │
└──────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ MULTILINGUAL TEXT ENCODER │
│ Maps weighted user text → User Vector │
│ Maps audiobook metadata → Audiobook Vectors │
└──────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ NEAREST-NEIGHBOR RETRIEVAL │
│ Find Top-K audiobooks closest to User Vector │
└──────────────────┬──────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ OUTPUT │
│ Ranked audiobook recommendations │
└─────────────────────────────────────────────────────┘
| Concept | Simple Definition |
|---|---|
| Cold Start | No history in target domain to recommend from |
| Cross-Domain | Using signals from multiple content types |
| Text Encoder | Converts text meaning into numbers |
| Unified Embedding Space | One shared mathematical space for all content |
| Dense Retrieval | Finding similar items by vector distance |
| Domain Gate | Learned weights that suppress missing signals |
| Recall@10 | How many relevant items appear in top 10 |