Photo credit: kazuend

Notes on Session-Based Recommendations With Recurrent Neural Networks



This paper presents a Recommender System based on Recurrent Neural Networks. In particular, the authors focus on recommendations based on session data, which are useful when recommending to anonymous users or for fast changing items (e.g. classified sites). The algorithm currently used for the problem is Item-KNN, which takes into account only the last event of the session; RNNs should have an advantage, factoring in the whole session.

The proposed RNN uses Gated Recurrent Units (GRU), takes as input the state of the session and outputs the next item in the session. For the input, it was tried both one-hot encoding with the last item of the session and a weighted sum of the items in the session.

RNNs with a single layer GRU and one-hot encoding resulted performing best, seems like the network doesn’t need to be fed the complete history of the session but is fine just keeping it in its internal state (the internal state is reset to zero after each session). There were no benefits in having multiple layers, while increasing the number of hidden units of the GRU improved the results.

Overall, there is substantial gain over Item-KNN.

My two cents

While at RecSys ’15, I was really really puzzled by the absence of Deep Learning papers. Finally a promising research that can add new algorithms to the toolbelt! It’s also interesting that the paper was submitted to ICLR.

I really appreciated the practical approach, like the discussion on training time to understand the feasibility in production. It would be interesting to understand why they considered training times on a 8-core CPU instead of on GPUs. Also, it would be good to have a glimpse at serving times and potential scaling issues, even though there can be some mitigations, like caching recommendations and RNN weights for the first item of the session.

As stated by the authors, this is an explorative work and I expect much more built on this by the community. It could be interesting for example to see the output when you feed the whole history of a user. Overall a great contribution!