Closed jaswellnitz closed 7 years ago
As a consequence of the decision to develop a Java application (see issue #21 – architecture design), recommender systems or case-based reasoning platforms with a Java libraries were investigated. The following list helped to get an overview of several recommender system solution: https://github.com/grahamjenson/list_of_recommender_systems
As discussed in the previous Sprint Planning, jcolibri was investigated, a platform for developing case based reasoning applications. It provides a rich documentation and a lot of examples as guidelines. Installing jcolibri, Hibernate is already included which facilitates the data base access. However, the development seems to be abandoned since the newest downloadable version is still from 2008.
Another investigated solution is Apache Mahout, which is quite popular and supports the development of machine learning application. Using Apache Mahout, it is easy to set up simple Recommender Systems which are based on user preferences. Various recommendation algorithms are available, including collaborative filtering and content based filtering algorithms. However, due to the fact that the processed data model heavily relies on a numerical preference value describing the relationship between user and item, using Mahout may need some adjustments to suit this project.
Tutorial Recommendator in Mahout: http://de.slideshare.net/Cataldo/tutoria-mahout-recommendation Mahout – item based recommendation with no preference: http://stackoverflow.com/questions/17712903/mahout-item-based-recommendation-engine-with-no-preference-values
Proposed Recommendation Mechanism The paper “Case base querying for travel planning recommendation” describes the architecture of an intelligent recommendation system that supports travelers to pick a tourist destination. It proposes a interesting recommendation mechanism which basic idea seems to be suitable for this project, where
1) First, results that match the given user parameters are obtained from the GIS database (e.g. Museum close to the current location). 2) Then, it is checked if there are cases in the case base that are similar to the obtained results and rank them. The most similar result is returned to the user.
Recommendation mechanism described in "Case base querying for travel planning recommendation"
This could be extended by a mechanism where e.g. the closest result to the user's current location could be returned if there is no similar case at all in the case base. Additionally, the user could be asked to rate the proposed result. In order to measure the similarity between the cases better, there could be included some categories to describe points of interests (e.g. Culture, Food, Nightlife, Sports, Nature, Leisure Time…). Another idea is to include a user survey at the beginning of the recommendation process where the user has to rate which of the above stated tourist categories he prefers. This could help to create an initial user profile and not start with a complete empty recommendation base (cold start problem)
As discussed in the Sprint Review of Iteration 3, the best recommendation mechanism is a combination of collaborative filtering (based on similar user tastes) and content-based filtering. The first step is to construct a user profile by investigating the user's preferences in the chatbot. Ideally, this should happen in a natural conversation and not only proposing the user a simple survey (e.g. Politibot). Then, content-based filtering is applied to propose POIs that are similar to the user profile. In order to compute the similarity, POIs and user's preferences can be rated regarding different tourist categories (e.g. culture, nature, sports,...). After proposing POIs to the user, he is asked to rate them in order to get exact rating values for the collaborative filtering. The data used for collaborative filtering is growing with increasing user interaction with the application. Next steps are the issues #30 and #31 where the recommender library Apache Mahout is tested and a first mock-up of the recommendator mechanism is set up.
In this issue, recommender system libraries (jcolibri, crab and possible other solutions) are examined in order to find out which one is the most suitable for this project. Besides, concepts of case based reasoning (collaborative filtering, content based filtering,...) are revised.