{"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/decompdiff-diffusion-models-with-decomposed","title":"DecompDiff: Diffusion Models with Decomposed Priors for Structure-Based Drug Design","arxiv_id":"2403.07902","date":"2024-02-26","proceeding":null,"authors":["Jiaqi Guan","Xiangxin Zhou","Yuwei Yang","Yu Bao","Jian Peng","Jianzhu Ma","Qiang Liu","Liang Wang","Quanquan Gu"],"abstract":"Designing 3D ligands within a target binding site is a fundamental task in drug discovery. Existing structured-based drug design methods treat all ligand atoms equally, which ignores different roles of atoms in the ligand for drug design and can be less efficient for exploring the large drug-like molecule space. In this paper, inspired by the convention in pharmaceutical practice, we decompose the ligand molecule into two parts, namely arms and scaffold, and propose a new diffusion model, DecompDiff, with decomposed priors over arms and scaffold. In order to facilitate the decomposed generation and improve the properties of the generated molecules, we incorporate both bond diffusion in the model and additional validity guidance in the sampling phase. Extensive experiments on CrossDocked2020 show that our approach achieves state-of-the-art performance in generating high-affinity molecules while maintaining proper molecular properties and conformational stability, with up to -8.39 Avg. Vina Dock score and 24.5 Success Rate. The code is provided at https://github.com/bytedance/DecompDiff","url_abs":"https://arxiv.org/abs/2403.07902v1","url_pdf":"https://arxiv.org/pdf/2403.07902v1.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":"decompdiff-diffusion-models-with-decomposed","repo_url":"https://github.com/bytedance/decompdiff","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"NOASSERTION"}},{"paper_slug":"decompdiff-diffusion-models-with-decomposed","repo_url":"https://github.com/ask-berkeley/badger-sbdd","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":null,"task_name":"Avg"},{"task_slug":"drug-design","task_name":"Drug Design"},{"task_slug":"drug-discovery","task_name":"Drug Discovery"}],"methods":[{"method_slug":"diffusion","method_name":"Diffusion"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2403.07902","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2403.07902"}},"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/ask-berkeley/badger-sbdd","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/bytedance/decompdiff","reach":{"status":"ok","spdx":"NOASSERTION"}}],"summary":{"ran_fixture":1,"ran":8,"ran_honours":3,"ran_draft_wrong":2,"unverified":5},"by_repo_kind":{"official":{"samples":18,"ran":13,"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":19,"samples":[{"code_sha256_prefix":"3af636c75c65ce49","entry":"G_fn","repo":"bytedance/decompdiff","repo_kind":"official","path":"utils/guidance_funcs.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/utils/guidance_funcs.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3af636c75c65ce49"}},{"code_sha256_prefix":"e53fa09199fa3989","entry":"GetDihedralFromPointCloud","repo":"bytedance/decompdiff","repo_kind":"official","path":"utils/geometry.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/utils/geometry.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e53fa09199fa3989"}},{"code_sha256_prefix":"1936e85d6b2c8489","entry":"SetDihedralOnPointCloud","repo":"bytedance/decompdiff","repo_kind":"official","path":"utils/geometry.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/utils/geometry.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"1936e85d6b2c8489"}},{"code_sha256_prefix":"c705c3a91a514e7a","entry":"batch_from_data_list","repo":"bytedance/decompdiff","repo_kind":"official","path":"datasets/pl_data.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/datasets/pl_data.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"c705c3a91a514e7a"}},{"code_sha256_prefix":"b0494ad06b18d52c","entry":"categorical_kl","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/decompdiff.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/decompdiff.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"b0494ad06b18d52c"}},{"code_sha256_prefix":"a033042342c5254f","entry":"compute_batch_clash_loss","repo":"bytedance/decompdiff","repo_kind":"official","path":"utils/guidance_funcs.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/utils/guidance_funcs.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"a033042342c5254f"}},{"code_sha256_prefix":"5ea4335b29d66406","entry":"compute_body_intersection_loss","repo":"bytedance/decompdiff","repo_kind":"official","path":"utils/guidance_funcs.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/utils/guidance_funcs.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"5ea4335b29d66406"}},{"code_sha256_prefix":"c92a02b48d8fb1c4","entry":"cosine_beta_schedule","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/transitions.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/transitions.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c92a02b48d8fb1c4"}},{"code_sha256_prefix":"ca0cea1ca1eeec89","entry":"get_beta_schedule","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/transitions.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/transitions.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":"ca0cea1ca1eeec89"}},{"code_sha256_prefix":"8c0cc85de0b651eb","entry":"get_bond_auroc","repo":"bytedance/DecompDiff","repo_kind":"official","path":"scripts/train_diffusion_decomp.py","file_url":"https://github.com/bytedance/DecompDiff/blob/HEAD/scripts/train_diffusion_decomp.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"8c0cc85de0b651eb"}},{"code_sha256_prefix":"18603a28414ef5ca","entry":"index_to_log_onehot","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/transitions.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/transitions.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"18603a28414ef5ca"}},{"code_sha256_prefix":"f4b18dd8f67674cb","entry":"log_categorical","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/decompdiff.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/decompdiff.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":"f4b18dd8f67674cb"}},{"code_sha256_prefix":"66be0bd63ba01421","entry":"torchify_dict","repo":"bytedance/decompdiff","repo_kind":"official","path":"datasets/pl_data.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/datasets/pl_data.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"66be0bd63ba01421"}},{"code_sha256_prefix":"47ce9e33fa6b180f","entry":"unbatch_v_traj","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"47ce9e33fa6b180f"}},{"code_sha256_prefix":"c31403e2f2a539eb","entry":"change_formal_charge","repo":"bytedance/decompdiff","repo_kind":"official","path":"utils/data.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/utils/data.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"c31403e2f2a539eb"}},{"code_sha256_prefix":"89ee6692257f7c6b","entry":"convert_dgl_to_batch","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/common.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/common.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"89ee6692257f7c6b"}},{"code_sha256_prefix":"3c6858db01947fd5","entry":"get_h_dist","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/common.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/common.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"3c6858db01947fd5"}},{"code_sha256_prefix":"27af771ab4cfc179","entry":"get_r_feat","repo":"bytedance/decompdiff","repo_kind":"official","path":"models/common.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/models/common.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"27af771ab4cfc179"}},{"code_sha256_prefix":"288ecf6e1d51c3c7","entry":"parse_pdbbind_index_file","repo":"bytedance/decompdiff","repo_kind":"official","path":"utils/data.py","file_url":"https://github.com/bytedance/decompdiff/blob/HEAD/utils/data.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"288ecf6e1d51c3c7"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}