/multi_channel_bpr

Implementation of Bayesian Personalized Ranking (BPR) for Multiple Feedback Channels

Primary LanguagePythonMIT LicenseMIT

Recommender System Theory put into Practice

This repository contains Python implementations and combination of interesting scientific papers on recommender systems.

I will support my implementations with explanations on the theory using summaries and JuPyter Notebooks. Each section references a new paper which results I try to reproduce or apply to other datasets.

Bayesian Personalized Ranking with Multi-channel User Feedback - Loni et al. (2016)

This paper builds upon the famous paper by Rendle on Bayesian Personalized Ranking for triplets (u,i,j) with a user prefering an item i over j. This pairwise learning-to-rank approach was extended to better capture the individual preferences regarding different feedback channels and preferences degreees associated with those channels.

Usage

  1. Clone the repository
  2. Obtain the MovieLens 1M Dataset from grouplens and unzip it
  3. Change to the cloned folder cd multi_channel_bpr
  4. Make sure you have pandas, numpy and scikit-learn installed in your environment
  5. Install the package with python setup.py install
  6. Call the package with the command multi_channel_bpr followed by the respective parameters:
    • -d (int): no. of latent features for user and item representations
    • -beta [(float)]: share of unobserved feedback within the overall negative feedback
    • -lr (float): learning rate for stochastic gradient descent
    • -reg [(float)]: regularization parameters for user, positive and negative item
    • -k(int): no. of most relevant items rating
    • -rd_seed (int): random number generator seed
    • -folds (int): no. of folds for crossfold evaluation
    • -epochs (int): no. of training epochs
    • -sampling [(str)]: list of negative item sampling modes, uniform and/or non-uniform
    • -data (str): path to read input data from
    • -results (str): path to write results into

Results

  • run multi_channel_bpr -v -d 50 -beta 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0 -k 10 -epochs 100 -v -sampling 'uniform' 'non-uniform' -seed 42 and report results

Related Papers with implemented ideas

Open Points

  • Create JuPyter notebook to reproduce a single graph of the paper and use the different modules
  • Add results of own experiments

Backlog

Note

This project has been set up using PyScaffold 3.0.3. For details and usage information on PyScaffold see http://pyscaffold.org/.