{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/denoising-diffusion-recommender-model","title":"Denoising Diffusion Recommender Model","arxiv_id":"2401.06982","date":"2024-01-13","proceeding":null,"authors":["Jujia Zhao","Wenjie Wang","Yiyan Xu","Teng Sun","Fuli Feng","Tat-Seng Chua"],"abstract":"Recommender systems often grapple with noisy implicit feedback. Most studies alleviate the noise issues from data cleaning perspective such as data resampling and reweighting, but they are constrained by heuristic assumptions. Another denoising avenue is from model perspective, which proactively injects noises into user-item interactions and enhances the intrinsic denoising ability of models. However, this kind of denoising process poses significant challenges to the recommender model's representation capacity to capture noise patterns. To address this issue, we propose Denoising Diffusion Recommender Model (DDRM), which leverages multi-step denoising process of diffusion models to robustify user and item embeddings from any recommender models. DDRM injects controlled Gaussian noises in the forward process and iteratively removes noises in the reverse denoising process, thereby improving embedding robustness against noisy feedback. To achieve this target, the key lies in offering appropriate guidance to steer the reverse denoising process and providing a proper starting point to start the forward-reverse process during inference. In particular, we propose a dedicated denoising module that encodes collaborative information as denoising guidance. Besides, in the inference stage, DDRM utilizes the average embeddings of users' historically liked items as the starting point rather than using pure noise since pure noise lacks personalization, which increases the difficulty of the denoising process. Extensive experiments on three datasets with three representative backend recommender models demonstrate the effectiveness of DDRM.","url_abs":"https://arxiv.org/abs/2401.06982v4","url_pdf":"https://arxiv.org/pdf/2401.06982v4.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"denoising-diffusion-recommender-model","repo_url":"https://github.com/polaris-jz/ddrm","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok"}}],"tasks":[{"task_slug":"denoising","task_name":"Denoising"},{"task_slug":"recommendation-systems","task_name":"Recommendation Systems"},{"task_slug":"representation-learning","task_name":"Representation Learning"},{"task_slug":"model","task_name":"model"}],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"},{"method_slug":"focus","method_name":"Focus"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2401.06982","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2401.06982"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/polaris-jz/ddrm","reach":{"status":"ok"}}],"summary":{"ran":8,"ran_honours":2,"ran_draft_wrong":1},"by_repo_kind":{"official":{"samples":11,"ran":11,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"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"},"n_pointer_only_for_licence":11,"samples":[{"code_sha256_prefix":"c0552ff020ee687b","entry":"RecallPrecision_ATk","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/utils.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/utils.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c0552ff020ee687b"}},{"code_sha256_prefix":"2ab2316ac6fdd869","entry":"betas_for_alpha_bar","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/diffusion.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/diffusion.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2ab2316ac6fdd869"}},{"code_sha256_prefix":"c26b918effa6b11b","entry":"betas_from_linear_variance","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/diffusion.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/diffusion.py","link_basis":"harvester_set","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c26b918effa6b11b"}},{"code_sha256_prefix":"16d07311140e61db","entry":"check_ckpt","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/train_amazon.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/train_amazon.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"16d07311140e61db"}},{"code_sha256_prefix":"ca0f5f44ef920a6b","entry":"check_ckpt","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/train_yelp.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/train_yelp.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ca0f5f44ef920a6b"}},{"code_sha256_prefix":"ebc31b08731ac15a","entry":"check_log_finish","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/train_amazon.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/train_amazon.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ebc31b08731ac15a"}},{"code_sha256_prefix":"6355878c62d87a78","entry":"check_log_finish","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/train_yelp.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/train_yelp.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6355878c62d87a78"}},{"code_sha256_prefix":"de045e4529c0ec4a","entry":"computeTopNAccuracy","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/Procedure.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/Procedure.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"de045e4529c0ec4a"}},{"code_sha256_prefix":"cf2798b666b231ca","entry":"normal_kl","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/diffusion.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/diffusion.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"cf2798b666b231ca"}},{"code_sha256_prefix":"fe0264129501e21d","entry":"pid_exists","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/train_amazon.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/train_amazon.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"fe0264129501e21d"}},{"code_sha256_prefix":"3cef9867af2fd687","entry":"timestep_embedding","repo":"polaris-jz/ddrm","repo_kind":"official","path":"DDRM_LightGCN/model.py","file_url":"https://github.com/polaris-jz/ddrm/blob/HEAD/DDRM_LightGCN/model.py","link_basis":"harvester_set","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3cef9867af2fd687"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}