{"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/interpreting-clip-with-sparse-linear-concept","title":"Interpreting CLIP with Sparse Linear Concept Embeddings (SpLiCE)","arxiv_id":"2402.10376","date":"2024-02-16","proceeding":null,"authors":["Usha Bhalla","Alex Oesterling","Suraj Srinivas","Flavio P. Calmon","Himabindu Lakkaraju"],"abstract":"CLIP embeddings have demonstrated remarkable performance across a wide range of multimodal applications. However, these high-dimensional, dense vector representations are not easily interpretable, limiting our understanding of the rich structure of CLIP and its use in downstream applications that require transparency. In this work, we show that the semantic structure of CLIP's latent space can be leveraged to provide interpretability, allowing for the decomposition of representations into semantic concepts. We formulate this problem as one of sparse recovery and propose a novel method, Sparse Linear Concept Embeddings, for transforming CLIP representations into sparse linear combinations of human-interpretable concepts. Distinct from previous work, SpLiCE is task-agnostic and can be used, without training, to explain and even replace traditional dense CLIP representations, maintaining high downstream performance while significantly improving their interpretability. We also demonstrate significant use cases of SpLiCE representations including detecting spurious correlations and model editing.","url_abs":"https://arxiv.org/abs/2402.10376v2","url_pdf":"https://arxiv.org/pdf/2402.10376v2.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":"interpreting-clip-with-sparse-linear-concept","repo_url":"https://github.com/ai4life-group/splice","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"model-editing","task_name":"Model Editing"}],"methods":[{"method_slug":"clip","method_name":"CLIP"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2402.10376","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2402.10376"}},"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":"deterministic:regex_extraction","url":"https://github.com/AI4LIFE-GROUP/SpLiCE","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/ai4life-group/splice","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"ran":7,"unverified":3},"by_repo_kind":{"official":{"samples":10,"ran":7,"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":"ca4861da7831431c","entry":"ADMM","repo":"ai4life-group/splice","repo_kind":"official","path":"splice/model.py","file_url":"https://github.com/ai4life-group/splice/blob/HEAD/splice/model.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ca4861da7831431c"}},{"code_sha256_prefix":"74164be1a6eb14e0","entry":"concept_histogram","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"experiments/concept_histogram.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/experiments/concept_histogram.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"74164be1a6eb14e0"}},{"code_sha256_prefix":"85af1036c36ed190","entry":"data_dict","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"experiments/embed_mscoco.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/experiments/embed_mscoco.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"85af1036c36ed190"}},{"code_sha256_prefix":"acb9a8b3cb5a4623","entry":"find_closest","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"experiments/zero_shot.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/experiments/zero_shot.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"acb9a8b3cb5a4623"}},{"code_sha256_prefix":"75d0d4017fcd11fd","entry":"get_vocabulary","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"splice/splice.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/splice/splice.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"75d0d4017fcd11fd"}},{"code_sha256_prefix":"d93e0b7ed23beede","entry":"train_cbm","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"experiments/intervention.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/experiments/intervention.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d93e0b7ed23beede"}},{"code_sha256_prefix":"4c4ae513d3e2a80c","entry":"zero_shot_eval","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"experiments/zero_shot.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/experiments/zero_shot.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4c4ae513d3e2a80c"}},{"code_sha256_prefix":"8aa0733e4ad736c4","entry":"SPLICE","repo":"ai4life-group/splice","repo_kind":"official","path":"splice/model.py","file_url":"https://github.com/ai4life-group/splice/blob/HEAD/splice/model.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8aa0733e4ad736c4"}},{"code_sha256_prefix":"4111f212a752fb6d","entry":"get_tokenizer","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"splice/splice.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/splice/splice.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4111f212a752fb6d"}},{"code_sha256_prefix":"ee2e9a9f832ca3fd","entry":"load","repo":"AI4LIFE-GROUP/SpLiCE","repo_kind":"official","path":"splice/splice.py","file_url":"https://github.com/AI4LIFE-GROUP/SpLiCE/blob/HEAD/splice/splice.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"ee2e9a9f832ca3fd"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}