{"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/towards-generalizable-single-cell","title":"Towards generalizable single-cell perturbation modeling via the Conditional Monge Gap","arxiv_id":"2504.08328","date":"2025-04-11","proceeding":null,"authors":["Alice Driessen","Benedek Harsanyi","Marianna Rapsomaniki","Jannis Born"],"abstract":"Learning the response of single-cells to various treatments offers great potential to enable targeted therapies. In this context, neural optimal transport (OT) has emerged as a principled methodological framework because it inherently accommodates the challenges of unpaired data induced by cell destruction during data acquisition. However, most existing OT approaches are incapable of conditioning on different treatment contexts (e.g., time, drug treatment, drug dosage, or cell type) and we still lack methods that unanimously show promising generalization performance to unseen treatments. Here, we propose the Conditional Monge Gap which learns OT maps conditionally on arbitrary covariates. We demonstrate its value in predicting single-cell perturbation responses conditional to one or multiple drugs, a drug dosage, or combinations thereof. We find that our conditional models achieve results comparable and sometimes even superior to the condition-specific state-of-the-art on scRNA-seq as well as multiplexed protein imaging data. Notably, by aggregating data across conditions we perform cross-task learning which unlocks remarkable generalization abilities to unseen drugs or drug dosages, widely outperforming other conditional models in capturing heterogeneity (i.e., higher moments) in the perturbed population. Finally, by scaling to hundreds of conditions and testing on unseen drugs, we narrow the gap between structure-based and effect-based drug representations, suggesting a promising path to the successful prediction of perturbation effects for unseen treatments.","url_abs":"https://arxiv.org/abs/2504.08328v1","url_pdf":"https://arxiv.org/pdf/2504.08328v1.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":"towards-generalizable-single-cell","repo_url":"https://github.com/ai4scr/conditional-monge","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"jax","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2504.08328","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2504.08328"}},"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/ai4scr/conditional-monge","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":11},"by_repo_kind":{"official":{"samples":11,"ran":0,"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":0,"samples":[{"code_sha256_prefix":"a5712ac6c46f4de0","entry":"average_r2","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/metrics.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/metrics.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"a5712ac6c46f4de0"}},{"code_sha256_prefix":"30a3dab2700717d6","entry":"drug_signature","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/metrics.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/metrics.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"30a3dab2700717d6"}},{"code_sha256_prefix":"c606066275caa1e0","entry":"get_conditional_loaders_for_eval","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/evaluate.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/evaluate.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c606066275caa1e0"}},{"code_sha256_prefix":"abd191103db45143","entry":"get_single_loaders_for_eval","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/evaluate.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/evaluate.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"abd191103db45143"}},{"code_sha256_prefix":"231b54b2789b0fc4","entry":"get_source_target_transport","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/utils.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"231b54b2789b0fc4"}},{"code_sha256_prefix":"53f93f6725f8035e","entry":"get_train_valid_test_split","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/datasets/single_loader.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/datasets/single_loader.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"53f93f6725f8035e"}},{"code_sha256_prefix":"57921b30fc040ef3","entry":"init_logger_dict","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/evaluate.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/evaluate.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"57921b30fc040ef3"}},{"code_sha256_prefix":"fec87c44fb543a38","entry":"jax_serializer","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/utils.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"fec87c44fb543a38"}},{"code_sha256_prefix":"109a5bcf71189ffb","entry":"maximum_mean_discrepancy","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/metrics.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/metrics.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"109a5bcf71189ffb"}},{"code_sha256_prefix":"3fb71471e13d7dd9","entry":"monge_get_source_target_transport","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/utils.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/utils.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3fb71471e13d7dd9"}},{"code_sha256_prefix":"bd21c49c1f57e0ba","entry":"mse_reconstruction_loss","repo":"ai4scr/conditional-monge","repo_kind":"official","path":"cmonge/trainers/ae_trainer.py","file_url":"https://github.com/ai4scr/conditional-monge/blob/HEAD/cmonge/trainers/ae_trainer.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bd21c49c1f57e0ba"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}