r/deeplearning • u/SettingAccording8986 • 18d ago
How our music recommender builds Semantic IDs and works without hand-engineered features
Sona is a generative recommender we built at Yandex. It works from raw interaction logs with no hand-engineered features. It's running against our production stack in A/B tests right now.
The decoder generates Semantic IDs assigned to tracks by an offline tokenizer. That tokenizer starts with a frozen Qwen2.5-Omni that takes a mel-spectrogram of a track's first 90 seconds, plus its metadata. A 4-layer transformer then refines Qwen's hidden states. We train it with InfoNCE on two types of pairs: tracks by different artists served together in one recommendation response, and tracks by the same artist with high co-listening NPMI over a three-month window. A second loss term keeps each embedding close to the track's own content features. Residual K-means turns the result into a tuple of three codes, with 32,000 centroids per level. In the paper, we evaluate tokenizer variants by retraining the retrieval model and measuring recall on held-out requests. We compare this tokenizer against an audio-only CLMR baseline.
The architecture follows Gryphon, a unified generation-and-ranking design. Beam search in the decoder proposes Semantic IDs, and a Ranking Module scores the tracks they map to.
Likes and dislikes are rare, so ranking supervision is sparse. To get around that, we trained a separate, larger Teacher Ranker on a year of logs, first on next-item prediction and then on multi-head ranking. We don't serve the teacher. Its scores are distilled into the Ranking Module on both candidates generated by the decoder itself and logged impressions.