Monday, June 11, 2012

Building a Recommendation System

I have been interested in recommendation systems for a number of years and following research in this area and finally had an opportunity to experiment more with this technology.  I was spurred on by a chance conversation with a family relative that had purchased an eReader and went to some of the public domain book sites that I told them about, but was a bit overwhelmed with the number of books available and the relative difficulty in browsing their lists.

So I decided to build a mobile web application that would serve as a front-end to these public domain sites  and help guide people to: new books, top books that others enjoyed reading, and recommendations for other books based on your reading history and ratings.  You can try the application at http://www.impactsoftwarelabs.com/book/new.php and please provide comments about ways that it could be improved.

It turns out that a book application is a great subject area for recommendation systems because:
  • The quantity of items is large enough (about 40,000 books) to be non-trivial, but not too large to be difficult to work with.
  • Each book has a variety of primary attributes that can be used by the recommendation algorithm including: title, book category, subject, author, date written, and language.
  • Availability of download information over several years that can help rate a book's popularity.
I built the system using the following key pieces of technology:
  • Information about books, categories, downloads, and recommendations are stored in a MySQL database.
  • User interface built using HTML5 and JQuery Mobile Javascript libraries. 
  • Initially I built the recommendation components using custom code, but later replaced it using the MyMediaLite Recommender System Library.  MyMediaLite is an open-source system developed at the University of Hildesheim in Germany.  It contains a number of different recommendation methods that can be easily applied to many different problem domains.
  • XML parsing of book catalog and download information performed by custom-written Java parsers.

I think the finished product turned out much nicer that I had hoped and the recommendations generated by the engine seem to be very relevant.  Please try it and let me know what you think.

1 comment:

  1. Great work!
    have you thought to do a tutorial? I need to do something similar.

    ReplyDelete