I’m playing around with the movielens data and the model that we create in lesson 4/5 and trying to transform it into a working system. I have a number of questions…
At 32:00 in Lesson 5 video @jeremy says that in order to create recommendations for an existing user we can iterate through movies they haven’t watched and come up with their predicted ranking on a single movie. I’m wondering if it wouldn’t make more sense to multiply the users latent factors with all of the movie factors as a single dot product? For the NN implementation is there a similar methodology or do we just have to iterate because the input to the model is user movie pairs?
I’m also wondering about the practicalities of keeping the system up to date and initializing new users and new movies. We can’t take the inverse of the dot product to get the users latent factors because the problem is intractable but with an NN is there a way to get new user vectors? Can we take the mean latent factors? Or is that meaningless? I know we can somewhat bypass this by just looking at the movie bias for the first few movies and recommending popular movies and i’m guessing that’s what most recommender systems do.
What about for new movies? How do you recommend a movie that noone has watched? Or do you just refrain from recommending it until it’s built up a number of recommendations?
Finally and probably most importantly when do we update the model? If a single user rates a single movie we just want to update that user and that movie’s latent factors. Is there a way to do this without retraining the whole model? Or do you simply wait for a number of updates and then retrain? I feel like this could dramatically affect the new user experience as they’re starting from a sparse matrix and rating movies should have a big impact on their vector.
I can’t see retraining the model after every user action so there must be some other way to update the users and movies latent factors independently, but I can’t think of how to do that. Has anyone thought this through and how did you solve this issue?