It's very impressive. But, I'm curious about some of the technical details. For each of these representations you basically end up with a dense vector on a song level. Which I assume you would then kNN with a user specific vector. But I've never come across a nice kNN data structure that supports high dimensional vectors in a larger than memory setting whilst supporting updates. Spotifys own Annoy is cool https://github.com/spotify/annoy, but changing or adding a song requires rebuilding the whole structure ... surely that's prohibitive at scale?