OpenRec is an open-source and modular library for neural network-inspired recommendation algorithms. Each recommender is modeled as a computational graph that consists of a structured ensemble of reusable modules connected through a set of well-defined interfaces. OpenRec is built to ease the process of extending and adapting state-of-the-art neural recommenders to heterogeneous recommendation scenarios, where different users', items', and contextual data sources need to be incorporated.
For the structure and the design philosophy of OpenRec, please refer to the following paper published in WSDM'18:
Longqi Yang, Eugene Bagdasaryan, Joshua Gruenstein, Cheng-Kang Hsieh, and Deborah Estrin. 2018. OpenRec: A Modular Framework for Extensible and Adaptable Recommendation Algorithms. In Proceedings of WSDM’18, February 5–9, 2018, Marina Del Rey, CA, USA.
2020-02-17 OpenRec now uses Tensorflow 2.0 by default. Supports for Tensorflow 1.x are deprecated (all prior APIs have been moved to openrec.tf1
). Currently supported recommendation algorithms include:
- BPR (
openrec.tf2.recommenders.BPR
): Bayesian Personalized Ranking (Rendle et al., 2009) - WRMF (
openrec.tf2.recommenders.WRMF
): Weighted Regularized Matrix Factorization (Hu et al., 2008) - UCML (
openrec.tf2.recommenders.UCML
): Collaborative Metric Learning with uniformly sampled triplets (Hsieh et al., 2017) - GMF (
openrec.tf2.recommenders.GMF
): Generalized Matrix Factorization, a.k.a., Neural Collaborative Filtering (He et al., 2017) - DLRM (
openrec.tf2.recommenders.DLRM
): Deep Learning Recommendation Model, developed by Facebook (Naumov et al., 2019)
2019-07-12 OpenRec is being migrated to Tensorflow 2.0. Major changes to expect:
- All OpenRec modules will be compatible with tf.keras.layers.Layer, so that they can be used seamlessly with any Tensorflow 2.0 code base.
- All OpenRec models will be compatible with tf.keras.Model.
- All input data pipelines will be compatible with tf.data.Dataset but are made much more friendly for recommendation models.
- Minimizing boilerplate while keeping the modularity and adaptability of OpenRec.
To get things started, we introduce OpenRec (Tensorflow 2.0) implementations of deep learning recommendation model (DLRM). Check out tf2_examples/dlrm_criteo.py
.
To experiment with these new features, do pip3 install .
inside the repo and then import openrec.tf2
. You need to have Tensorflow 2.0 installed (Follow the instructions here).
More examples, tutorials and documents will be available soon. Check out tf2_examples/
.
2018-08-31 Introducing new modular interfaces for OpenRec. Major changes:
- A new paradigm for defining, extending, and building recommenders.
- Remove boilerplate class structure of recommenders.
- Introduce a macro-based recommender construction paradigm.
- Disentangle module construction and connection.
- Support module construction directly using Tensorflow and Keras APIs.
- A more efficient and customizable pipeline for recommender training and evaluation.
- A new Dataset class for complex data input.
- A customizable ModelTrainer handling complex training/evaluation scenarios.
- Caching mechanism to speed up evaluation of complex recommenders.
- Provide model training and evaluation examples for new interfaces.
More recommenders, examples, documents and tutorials are under development. Please checkout following events where we will present OpenRec new features:
Strata Data Conference 2018: https://conferences.oreilly.com/strata/strata-ny/public/schedule/detail/68280
Recsys 2018: https://recsys.acm.org/recsys18/tutorials/#content-tab-1-1-tab
To use original openrec, simply import openrec.legacy
.
Installation
Before installing OpenRec, please install TensorFlow backend (GPU version is recommended).
- Install OpenRec from PyPI (recommended):
pip install openrec
- Install OpenRec from source code:
First, clone OpenRec using git
:
git clone https://github.com/ylongqi/openrec
Then, cd
to the OpenRec folder and run the install command:
cd openrec
python setup.py install
Dataset download
All datasets can be downloaded from Google drive here.
Get started
How to cite
@inproceedings{yang2018openrec,
title={OpenRec: A Modular Framework for Extensible and Adaptable Recommendation Algorithms},
author={Yang, Longqi and Bagdasaryan, Eugene and Gruenstein, Joshua and Hsieh, Cheng-Kang and Estrin, Deborah},
booktitle={Proceedings of the Eleventh ACM International Conference on Web Search and Data Mining},
year={2018},
organization={ACM}
}