Client-side recommendations
Most recommender systems found on the web are server-based and centralised. This suits the typical scenario where the relationship between the user and the recommender system is passive - a background process monitors their behaviour and the resulting recommendations are embedded in the user interface with little or no opportunity for immediate interaction or refinement. However, in future work for IRFS we imagine users interacting directly with recommendations, steering the recommender to suit their current mood and interests. This interaction will obviously require a lot more work from the recommender system and raises some concerns about scalability and responsiveness. To overcome these potential difficulties we've recently developed a novel client-side recommender system which is implemented in Javascript.
The client-side recommender system consists of two parts:
- the recommender model
- the recommender engine
The recommender model is non-personalised data that describes the relationship between all the TV and radio programmes available from iPlayer. We rebuild this model every hour to accommodate new programmes as they become available and remove older content. The recommender engine contains code that makes recommendations using data from the model and user feedback, such as likes and dislikes, expressed via the user interface or past viewing choices recorded in persistent local storage.
In the current implementation we've used a classical weighted (KNN) algorithm which can easily accommodate positive and negative user feedback. The recommender model in this algorithm is a sparse correlation matrix which describes the similarity between each programme and its nearest neighbors. The similarity can be based either on the number of common viewers (collaborative filtering) or the number of common attributes (metadata-based filtering). Both options give reasonable personalised recommendations after the user has provided four or five programme preferences or ratings.
The challenge with this client-side approach is to keep the model down to a reasonable size. In the case of the 91Èȱ¬'s catch-up services this has not been a problem because the number of programmes available at any one time is limited. However, the issue would become more significant with deep archives. In our current implementation the model is just over 100 KB and for convenience has been embedded within the Javascript.
We hope to use the client-side recommender in some public experiments later in the year so watch this space for further news.
Comments Post your comment