Papers › Variational Autoencoders for Collaborative Filtering

Variational Autoencoders for Collaborative Filtering

16 Feb 2018arXiv:1802.05814archive 2025-07-28

Dawen Liang, Rahul G. Krishnan, Matthew D. Hoffman, Tony Jebara

We extend variational autoencoders (VAEs) to collaborative filtering for implicit feedback. This non-linear probabilistic model enables us to go beyond the limited modeling capacity of linear factor models which still largely dominate collaborative filtering research.We introduce a generative model with multinomial likelihood and use Bayesian inference for parameter estimation. Despite widespread use in language modeling and economics, the multinomial likelihood receives less attention in the recommender systems literature. We introduce a different regularization parameter for the learning objective, which proves to be crucial for achieving competitive performance. Remarkably, there is an efficient way to tune the parameter using annealing. The resulting model and learning algorithm has information-theoretic connections to maximum entropy discrimination and the information bottleneck principle. Empirically, we show that the proposed approach significantly outperforms several state-of-the-art baselines, including two recently-proposed neural network approaches, on several real-world datasets. We also provide extended experiments comparing the multinomial likelihood with other commonly used likelihood functions in the latent factor collaborative filtering literature and show favorable results. Finally, we identify the pros and cons of employing a principled Bayesian inference approach and characterize settings where it provides the most significant improvements.

PaperPDFCodeCode Syntology ran

In Syntology Open this paper in Syntology's Atlas, the map of the papers in Syntology's graph and their citations.

For agents, Syntology's MCP tool lists every function and class Syntology harvested from this paper and whether it ran (how to connect): get_harvested_code_for_paper(arxiv_id="1802.05814")

Code

Syntology Ran 2 of 21 code samples harvested from 5 repositories linked to this paper; 19 have no recorded run. Of those that ran: 2 ran · our draft was wrong.

By repository: community (archive-listed): 21 samples from 5 repositories, 2 ran. The run record, sample by sample. “Ran” means executed on a synthesized input, not that the code is correct or reproduces the paper.

18 repositories listed; official and paper-mentioned ones first.

dawenl/vae_cf officialmentioned in papermentioned on GitHubApache-2.0 report
LehengTHU/Agent4Rec mentioned on GitHubpytorchMIT report
NamCyan/RecSys-VAE4CF mentioned on GitHub report
amoussawi/recoder mentioned on GitHubpytorchMIT report
anonymouspap/latte_recsys mentioned on GitHubpytorch report
hasteck/EDLAE_NeurIPS2020 mentioned on GitHubtfApache-2.0 report
hasteck/MRF_NeurIPS_2019 mentioned on GitHubApache-2.0 report
jvbalen/autoencoders_cf mentioned on GitHubpytorch report
mkfilipiuk/VAE-CF mentioned on GitHubtfApache-2.0 report
onurboyar/RecommenderSystems mentioned on GitHub report
pyy0715/vae-cf-pyorch mentioned on GitHubpytorchApache-2.0 report
younggyoseo/vae-cf-pytorch mentioned on GitHubpytorch report

Repository list and official/mentioned flags are the archive's, frozen 2025-07-28. Reachability, where shown, is from one Syntology probe window (2026-09-16 to 2026-09-18); repositories not probed show nothing. GitHub stars are not tracked.

Code Syntology ran Syntology

21 samples harvested; 2 ran; 0 honoured the contract we drafted; 19 have no recorded run. Read from Syntology's graph 2026-09-24; that is when this build read the record, not when the samples ran.

2ran · our draft was wrong
19unverified

Licence: 1 of the 21 samples is pointer only, meaning Syntology does not serve that copy's text. This page shows no code text for any sample; each one links to its file in the repository.

Harvested from 5 repositories linked to this paper, official or community; each sample names its own and says which. “Ran” means the sample executed on a synthesized input. It does not mean the output is correct, and nothing here reproduces the paper's results. “Honoured” and “violated” refer to a contract Syntology drafted from the code itself; “our draft was wrong” and “fixture could not drive it” are failures of Syntology's instrument, not of the code.

Each sample ends with its code_sha256, Syntology's identity for that exact code. An agent fetches the stored sample with Syntology's MCP tool get_code(code_sha256="…") (how to connect); click an identity to copy that call.

Repository labels, per sample. official repository: The archive marks this repository official for the paper. named in the paper: The archive records that the paper mentions this repository; it is not marked official. community (archive-listed): In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper. found in paper text by Syntology: Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted. community: Not in the archive's code links for this paper; a community repository Syntology harvested. Samples from a repository marked official are listed first. Licence labels name the repository's licence as recorded at harvest. “Pointer only” means Syntology does not serve that copy's text, for one of four reasons: no licence file was found; the licence was not identified; the licence is recorded as permissive but that copy's record is not marked cleared; or the licence is outside the permissive list Syntology serves text under (MIT, Apache-2.0, BSD and similar). Some licences outside that list permit redistribution, such as WTFPL, and GPL-3.0 under its conditions; they are simply not on the list. Hover a licence label for the reason. File links open the file on GitHub at the default branch, which may have changed since the harvest.

get_count cydonia999/variational-autoencoders-for-collaborative-filtering-pytorch/create_lastfm.py community (archive-listed) ran · our draft was wrong MIT (permissive) · 39a54c6a662a97bd · report
loss_function younggyoseo/vae-cf-pytorch/models.py community (archive-listed) ran · our draft was wrong fingerprinted no licence file found · pointer only · 615c1c088d110d1a · report
activation amoussawi/recoder/recoder/nn.py community (archive-listed) unverified MIT (permissive) · 6770d02bb49a9b81 · report
average_precision amoussawi/recoder/recoder/metrics.py community (archive-listed) unverified MIT (permissive) · 4d7b97afc9598a02 · report
dataframe_to_csr_matrix amoussawi/recoder/recoder/utils.py community (archive-listed) unverified MIT (permissive) · 004289d147995228 · report
dcg amoussawi/recoder/recoder/metrics.py community (archive-listed) unverified MIT (permissive) · ff00d18b0b2b2c4e · report
decoder_model mkfilipiuk/VAE-CF/vae/models/Mult_VAE_model.py community (archive-listed) unverified Apache-2.0 (permissive) · 66bea44117c43219 · report
filter_triplets cydonia999/variational-autoencoders-for-collaborative-filtering-pytorch/create_lastfm.py community (archive-listed) unverified MIT (permissive) · b5ec9af0318ff9eb · report
filter_triplets pyy0715/vae-cf-pyorch/data.py community (archive-listed) unverified Apache-2.0 (permissive) · 5aa9bf5f5f1e9c45 · report
get_top_k_sorted mkfilipiuk/VAE-CF/vae/utils/top_k.py community (archive-listed) unverified Apache-2.0 (permissive) · ac973f19c12eeefb · report
get_top_k_sorted_worker mkfilipiuk/VAE-CF/vae/utils/top_k.py community (archive-listed) unverified Apache-2.0 (permissive) · 6dcfff18732766dc · report
get_users mkfilipiuk/VAE-CF/vae/load/parsers.py community (archive-listed) unverified Apache-2.0 (permissive) · 826fc932eb62a3c9 · report
load_weights_pkl cydonia999/variational-autoencoders-for-collaborative-filtering-pytorch/utils.py community (archive-listed) unverified MIT (permissive) · 1b0443a94970d13e · report
make_feedback_implicit mkfilipiuk/VAE-CF/vae/load/parsers.py community (archive-listed) unverified Apache-2.0 (permissive) · 66776fde1ecb3000 · report
ndcg mkfilipiuk/VAE-CF/vae/metrics/ndcg.py community (archive-listed) unverified Apache-2.0 (permissive) · 4026df4b925b1a11 · report
normalize amoussawi/recoder/recoder/utils.py community (archive-listed) unverified MIT (permissive) · 71bc7ecec58aab2c · report
recall amoussawi/recoder/recoder/metrics.py community (archive-listed) unverified MIT (permissive) · 2af77108d5dda3c6 · report
recall mkfilipiuk/VAE-CF/vae/metrics/recall.py community (archive-listed) unverified Apache-2.0 (permissive) · f65fb0842e61d96e · report
split_train_test_proportion pyy0715/vae-cf-pyorch/data.py community (archive-listed) unverified Apache-2.0 (permissive) · 7918fea013c88cf0 · report
split_users pyy0715/vae-cf-pyorch/data.py community (archive-listed) unverified Apache-2.0 (permissive) · 8e8667bf040f2423 · report
unzip amoussawi/recoder/recoder/utils.py community (archive-listed) unverified MIT (permissive) · 0b263d9c0bf98eef · report

Tasks

Bayesian InferenceCollaborative FilteringLanguage ModelingLanguage ModellingRecommendation Systemsparameter estimation

Results from the paper archive 2025-07-28

TaskDatasetModelMetricValueRank at snapshotLeaderboardReport
Recommendation Systems Million Song Dataset Mult-VAE PR Recall@20 0.266 #5 of 7 Archive leaderboard report
Recommendation Systems Million Song Dataset Mult-VAE PR Recall@50 0.364 #5 of 7 Archive leaderboard report
Recommendation Systems Million Song Dataset Mult-VAE PR nDCG@100 0.316 #5 of 7 Archive leaderboard report
Recommendation Systems Million Song Dataset Mult-DAE Recall@20 0.266 #6 of 7 Archive leaderboard report
Recommendation Systems Million Song Dataset Mult-DAE Recall@50 0.363 #6 of 7 Archive leaderboard report
Recommendation Systems Million Song Dataset Mult-DAE nDCG@100 0.313 #6 of 7 Archive leaderboard report
Recommendation Systems MovieLens 20M Mult-VAE PR Recall@20 0.395 #11 of 18 Archive leaderboard report
Recommendation Systems MovieLens 20M Mult-VAE PR Recall@50 0.537 #11 of 18 Archive leaderboard report
Recommendation Systems MovieLens 20M Mult-VAE PR nDCG@100 0.426 #11 of 18 Archive leaderboard report
Recommendation Systems MovieLens 20M Mult-DAE Recall@20 0.387 #13 of 18 Archive leaderboard report
Recommendation Systems MovieLens 20M Mult-DAE Recall@50 0.524 #13 of 18 Archive leaderboard report
Recommendation Systems MovieLens 20M Mult-DAE nDCG@100 0.419 #13 of 18 Archive leaderboard report
Recommendation Systems Netflix Mult-VAE PR Recall@20 0.351 #5 of 10 Archive leaderboard report
Recommendation Systems Netflix Mult-VAE PR Recall@50 0.444 #5 of 10 Archive leaderboard report
Recommendation Systems Netflix Mult-VAE PR nDCG@100 0.386 #5 of 10 Archive leaderboard report
Recommendation Systems Netflix Mult-DAE Recall@20 0.344 #6 of 10 Archive leaderboard report
Recommendation Systems Netflix Mult-DAE Recall@50 0.438 #6 of 10 Archive leaderboard report
Recommendation Systems Netflix Mult-DAE nDCG@100 0.380 #6 of 10 Archive leaderboard report

Ranks are positions in the archive's leaderboards as they stood at the 2025-07-28 snapshot. Results published since then are not among these rows, so a rank here is not a current standing.

Report a problem or propose a change · a person checks every report against the paper or source before anything changes; decisions are listed on /corrections