session-rec is a Python-based framework for building and evaluating recommender systems (Python 3.5.x). It
implements a suite of state-of-the-art algorithms and baselines for session-based and session-aware recommendation.
The authors developed this framework to carry out the experiments described in:
Parts of the framework and its algorithms are based on code developed and shared by:
To run session-aware, the following libraries are required:
docker pull maltel/session-rec-cpu:v1
docker pull maltel/session-rec-gpu:v1
https://github.com/rn5l/session-rec.git
conda install --yes --file environment_gpu.yml
conda install --yes --file environment_cpu.yml
conda activate srec37
https://github.com/rn5l/session-rec.git
The data folder contains a small sample dataset. It's possible to have an overview of how the framework works by using as a configuration file:
At the end of the experiments, you can find the evalutaion results in the "results" folder.
./dpython_gpu run_config.py conf/in conf/out
./dpython run_config.py conf/in conf/out
./dpython.bat run_config.py conf/in conf/out
THEANO_FLAGS="device=cuda0,floatX=float32" CUDA_DEVICE_ORDER=PCI_BUS_ID python run_config.py conf/in conf/out
python run_config.py conf/in conf/out
conf/example_next.yml
instead of:
conf/in conf/out
./dpython_gpu run_preprocessing.py conf/preprocess/window/rsc15.yml
Otherwise, replace ./dpython_gpu
with the correct command based on your installation and your OS.
Entry | Example | Description |
---|---|---|
type | window | Values: single (one single training-test split), window (sliding-window protocol), opt (parameters optimization). |
evaluation | evaluation_user_based | Values: for session-aware evaluation: evaluation_user_based (evaluation in term of the next item and in terms of the remaining items of the sessions), for session-based evaluation: evaluation (evaluation in term of the next item), evaluation_last (evaluation in term of the last item of the session), evaluation_multiple (evaluation in terms of the remaining items of the sessions). |
slices | 5 | Number of slices for the window protocol. |
opts | opts: {sessions_test: 10} | Number of sessions used as a test during the optimization phase. |
metrics | -class: accuracy.HitRate length: [5,10,15,20] |
List of accuracy measures (HitRate, MRR, Precision, Recall, MAP, Coverage, Popularity,
Time_usage_training, Time_usage_testing, Memory_usage).
If you want to save the files with the recommedation lists use the option: - class: saver.Saver
It's possible to use the saved recommendations using the ResultFile class.
|
opts | opts: {sessions_test: 10} | Number of session used as a test during the optimization phase. |
optimize | class: accuracy.MRR length: [20] iterations: 100 #optional |
Measure to which optimize the parameters. |
algorithms | - | See the configuration files in the conf folder for a list of the
algorithms and their parameters. |
Algorithm | File | Description |
---|---|---|
Association Rules | ar.py | Simplified version of the association rule mining technique with a maximum rule size of two. |
Markov Chains | markov.py | Variant of association rules with a focus on sequences in the data. The rules are extracted from a first-order Markov Chain. |
Sequential Rules | sr.py | Variation of mc or ar respectively. It also takes the order of actions into account, but in a less restrictive manner. |
BPR-MF | bpr.py | Rendle et al., BPR: Bayesian Personalized Ranking from Implicit Feedback, UAI 2009. |
Context Tree | ct.py | Mi et al., Context Tree for Adaptive Session-based Recommendation, 2018. |
Algorithm | File | Description |
---|---|---|
Item-based kNN | iknn.py | Considers the last element in a given session and then returns those items as recommendations that
are most similar to it in terms of their co-occurrence in other sessions. |
Session-based kNN | sknn.py | Recommend items from the most similar sessions, where session distance is determined with the cosine similarity function or the jaccard index. |
Vector Multiplication Session-Based kNN | vsknn.py | More emphasis on the more recent events of a session when computing the similarities. The weights of the other elements are determined using a linear decay function that depends on the position of the element within the session, where elements appearing earlier in the session obtain a lower weight. |
Sequence and Time Aware Neighborhood | stan.py | Garg et al., Sequence and time aware neighborhood for session-based recommendations: Stan, SIGIR 2019. |
Sequence and Time Aware Neighborhood | vstan.py | It combines ideas from stan and v-sknn in a single approach. Furthermore, it has a sequence-aware item scoring procedure as well as the IDF weighting scheme from v-sknn. |
Algorithm | File | Description |
---|---|---|
CSRM | csrm.py | Wang et al., A collaborative session-based recommendation approach with parallel memory modules, SIGIR 2019. |
Gru4Rec | gru4rec.py | Hidasi et al., Recurrent Neural Networks with Top-k Gains for Session-based Recommendations, CIKM 2018. |
NextItNet | nextitrec.py | Yuan et al., A simple convolutional generative network for next item recommendation, WSDM 2019. |
NARM | narm.py | Li et al., Neural Attentive Session-based Recommendation, CIKM 2017. |
SR-GNN | gnn.py | Wu et al., Session-based recommendation with graph neural networks, AAAI 2019. |
STAMP | STAMP.py | Liu et al., STAMP: Short-Term Attention/Memory Priority Model for Session-based Recommendation, KDD 2018. |
Algorithm | File | Description |
---|---|---|
HGru4Rec | hgru4rec.py | Quadrana et al., Method based on the gru4rec algorithm. To model the interactions of a user within a session, it utilizes RNNs based on a single GRU layer, RecSys 2017. |
IIRNN | ii_rnn.py | Ruocco et al., Method extending a session-based recommender built on RNN, called intra-session RNN, by using a second RNN that is called inter-session RNN, DLRS 2017. |
NCSF | ncfs.py | Hu et al., Method using three encoders to model inter-session context, intra-session context, and to integrate the information of the intra-session context and the inter-session context for item prediction, IEEE Intelligent Systems, 2018. |
NSAR | nsar.py | Phuong et al., Method using RNNs to encode session patterns (short-term user preferences) and user embeddings to represent long-term user preferences across session, IEEE Access 2019. |
SHAN | shan.py | Ying et al., Model using a two-layer hierarchical attention network to learn a hybrid representation for each user that combines the long-term and short-term preferences, IJCAI 2018. |
Algorithm | File | Description |
---|---|---|
Factorized Personalized Markov Chains | fpmc.py | Rendle et al., Factorizing Personalized Markov Chains for Next-basket Recommendation. WWW 2010. |
Factored Item Similarity Models | fism.py | Kabbur et al., FISM: Factored Item Similarity Models for top-N Recommender Systems, KDD 2013. |
Factorized Sequential Prediction with Item Similarity Models | fossil.py | He and McAuley. Fusing Similarity Models with Markov Chains for Sparse Sequential Recommendation. CoRR abs/1609.09152, 2016. |
Session-based Matrix Factorization | smf.py | It combines factorized Markov chains with classic matrix factorization. In addition, the method considers the cold-start situation of session-based recommendation scenarios. |
RSC15 | The e-commerce dataset used in the 2015 ACM RecSys Challenge. |
RETAILROCKET | An e-commerce dataset from the company Retail Rocket. |
DIGINETICA | An e-commerce dataset shared by the company Diginetica. |
ZALANDO | A private dataset consisting of interaction logs from a European fashion retailer. |
NOWPLAYING | Music listening logs obtained from Twitter. |
30MUSIC | Music listening logs obtained from Last.fm. |
AOTM | A public music dataset containing hand-crafted music playlists. |
8TRACKS | A private music dataset with hand-crafted playlists. |
Interactions of job postings on a career-oriented social networking site, XING, from about three month. | |
COSMETICS | An e-commerce dataset containing the event history of a cosmetics shop for five months. |
LASTFM | A music dataset that contains the entire listening history of almost 1,000 users during five year. |