Cornac是Python推荐系统库,用于简单,有效和高效的实验。 Cornac 简单而方便。 它是从头开始设计的,忠实地反映了研究人员实施和评估个性化推荐模型所采取的标准步骤。

Github 地址

Cornac

Cornac is a comparative framework for multimodal recommender systems. It focuses on making it convenient to work with models leveraging auxiliary data (e.g., item descriptive text and image, social network, etc). Cornac enables fast experiments and straightforward implementations of new models. It is highly compatible with existing machine learning libraries (e.g., TensorFlow, PyTorch).

Quick Links

Website |
Documentation |
Tutorials |
Examples |
Models |
Datasets |
Paper |
Preferred.AI

TravisCI
CircleCI
AppVeyor
Codecov
Docs


Release
PyPI
Conda
Conda Recipe


Python
License

Installation

Currently, we are supporting Python 3. There are several ways to install Cornac:

  • From PyPI (you may need a C++ compiler):
pip3 install cornac
  • From Anaconda:
conda install cornac -c conda-forge
  • From the GitHub source (for latest updates):
pip3 install Cython
git clone https://github.com/PreferredAI/cornac.git
cd cornac
python3 setup.py install

Note:

Additional dependencies required by models are listed here.

Some algorithm implementations use OpenMP to support multi-threading. For OSX users, in order to run those algorithms efficiently, you might need to install gcc from Homebrew to have an OpenMP compiler:

brew install gcc | brew link gcc

If you want to utilize your GPUs, you might consider:

Getting started: your first Cornac experiment

Flow of an Experiment in Cornac

Load the built-in MovieLens 100K dataset (will be downloaded if not cached):

import cornac

ml_100k = cornac.datasets.movielens.load_feedback(variant="100K")

Split the data based on ratio:

rs = cornac.eval_methods.RatioSplit(data=ml_100k, test_size=0.2, rating_threshold=4.0, seed=123)

Here we are comparing Biased MF, PMF, and BPR:

mf = cornac.models.MF(k=10, max_iter=25, learning_rate=0.01, lambda_reg=0.02, use_bias=True, seed=123)
pmf = cornac.models.PMF(k=10, max_iter=100, learning_rate=0.001, lambda_reg=0.001, seed=123)
bpr = cornac.models.BPR(k=10, max_iter=200, learning_rate=0.001, lambda_reg=0.01, seed=123)

Define metrics used to evaluate the models:

mae = cornac.metrics.MAE()
rmse = cornac.metrics.RMSE()
prec = cornac.metrics.Precision(k=10)
recall = cornac.metrics.Recall(k=10)
ndcg = cornac.metrics.NDCG(k=10)
auc = cornac.metrics.AUC()
mAP = cornac.metrics.MAP()

Put everything together into an experiment and run it:

cornac.Experiment(
  eval_method=rs,
  models=[mf, pmf, bpr],
  metrics=[mae, rmse, recall, ndcg, auc, mAP],
  user_based=True
).run()

Output:

MAERMSEAUCMAPNDCG@10Precision@10Recall@10Train (s)Test (s)
MF0.74300.89980.74450.04070.04790.04370.03520.131.57
PMF0.75340.91380.77440.04910.06170.05330.04792.181.64
BPRN/AN/A0.86950.07530.09750.07270.08913.741.49

For more details, please take a look at our examples as well as tutorials.

Models

The recommender models supported by Cornac are listed below. Why don't you join us to lengthen the list?

YearModel and paperAdditional dependenciesExamples
2018Collaborative Context Poisson Factorization (C2PF), paperN/Ac2pf_exp.py
Multi-Task Explainable Recommendation (MTER), paperN/Amter_exp.py
Probabilistic Collaborative Representation Learning (PCRL), paperrequirements.txtpcrl_exp.py
Variational Autoencoder for Collaborative Filtering (VAECF), paperrequirements.txtvaecf_citeulike.py
2017Collaborative Variational Autoencoder (CVAE), paperrequirements.txtcvae_exp.py
Conditional Variational Autoencoder for Collaborative Filtering (CVAECF), paperrequirements.txtcvaecf_filmtrust.py
Generalized Matrix Factorization (GMF), paperrequirements.txtncf_exp.py
Indexable Bayesian Personalized Ranking (IBPR), paperrequirements.txtibpr_exp.py
Matrix Co-Factorization (MCF), paperN/Amcf_office.py
Multi-Layer Perceptron (MLP), paperrequirements.txtncf_exp.py
Neural Matrix Factorization (NeuMF) / Neural Collaborative Filtering (NCF), paperrequirements.txtncf_exp.py
Online Indexable Bayesian Personalized Ranking (Online IBPR), paperrequirements.txt
Visual Matrix Factorization (VMF), paperrequirements.txtvmf_clothing.py
2016Collaborative Deep Ranking (CDR), paperrequirements.txtcdr_exp.py
Collaborative Ordinal Embedding (COE), paperrequirements.txt
Convolutional Matrix Factorization (ConvMF), paperrequirements.txtconvmf_exp.py
Spherical K-means (SKM), paperN/A
Visual Bayesian Personalized Ranking (VBPR), paperrequirements.txtvbpr_tradesy.py
2015Collaborative Deep Learning (CDL), paperrequirements.txtcdl_exp.py
Hierarchical Poisson Factorization (HPF), paperN/A
2014Explicit Factor Model (EFM), paperN/Aefm_exp.py
Social Bayesian Personalized Ranking (SBPR), paperN/Asbpr_epinions.py
2013Hidden Factors and Hidden Topics (HFT), paperN/Ahft_exp.py
2012Weighted Bayesian Personalized Ranking (WBPR), paperN/Abpr_netflix.py
2011Collaborative Topic Modeling (CTR), paperN/Actr_citeulike.py
EarlierBaseline Only, paperN/Asvd_exp.py
Bayesian Personalized Ranking (BPR), paperN/Abpr_netflix.py
Global Average (GlobalAvg), paperN/Abiased_mf.py
Item K-Nearest-Neighbors (ItemKNN), paperN/Aknn_movielens.py
Matrix Factorization (MF), paperN/Abiased_mf.py, given_data.py
Maximum Margin Matrix Factorization (MMMF), paperN/Ammmf_exp.py
Most Popular (MostPop), paperN/Abpr_netflix.py
Non-negative Matrix Factorization (NMF), paperN/Anmf_exp.py
Probabilistic Matrix Factorization (PMF), paperN/Apmf_ratio.py
Singular Value Decomposition (SVD), paperN/Asvd_exp.py
Social Recommendation using PMF (SoRec), paperN/Asorec_filmtrust.py
User K-Nearest-Neighbors (UserKNN), paperN/Aknn_movielens.py
Weighted Matrix Factorization (WMF), paperrequirements.txtwmf_exp.py

Support

Your contributions at any level of the library are welcome. If you intend to contribute, please:

  • Fork the Cornac repository to your own account.
  • Make changes and create pull requests.

You can also post bug reports and feature requests in GitHub issues.

Citation

If you use Cornac in a scientific publication, we would appreciate citations to the following paper:

Cornac: A Comparative Framework for Multimodal Recommender Systems, Salah et al., JMLR 21, pp. 1-5, 2020.

Bibtex entry:

@article{cornac,
  author  = {Aghiles Salah and Quoc-Tuan Truong and Hady W. Lauw},
  title   = {Cornac: A Comparative Framework for Multimodal Recommender Systems},
  journal = {Journal of Machine Learning Research},
  year    = {2020},
  volume  = {21},
  number  = {95},
  pages   = {1-5},
  url     = {http://jmlr.org/papers/v21/19-805.html}
}

License

Apache License 2.0

Last modification:June 20, 2021
如果觉得我的文章对你有用,请随意赞赏