{"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/concept-bottleneck-models","title":"Concept Bottleneck Models","arxiv_id":"2007.04612","date":"2020-07-09","proceeding":"ICML 2020 1","authors":["Pang Wei Koh","Thao Nguyen","Yew Siang Tang","Stephen Mussmann","Emma Pierson","Been Kim","Percy Liang"],"abstract":"We seek to learn models that we can interact with using high-level concepts: if the model did not think there was a bone spur in the x-ray, would it still predict severe arthritis? State-of-the-art models today do not typically support the manipulation of concepts like \"the existence of bone spurs\", as they are trained end-to-end to go directly from raw input (e.g., pixels) to output (e.g., arthritis severity). We revisit the classic idea of first predicting concepts that are provided at training time, and then using these concepts to predict the label. By construction, we can intervene on these concept bottleneck models by editing their predicted concept values and propagating these changes to the final prediction. On x-ray grading and bird identification, concept bottleneck models achieve competitive accuracy with standard end-to-end models, while enabling interpretation in terms of high-level clinical concepts (\"bone spurs\") or bird attributes (\"wing color\"). These models also allow for richer human-model interaction: accuracy improves significantly if we can correct model mistakes on concepts at test time.","url_abs":"https://arxiv.org/abs/2007.04612v3","url_pdf":"https://arxiv.org/pdf/2007.04612v3.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":"concept-bottleneck-models","repo_url":"https://github.com/yewsiang/ConceptBottleneck","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}},{"paper_slug":"concept-bottleneck-models","repo_url":"https://worksheets.codalab.org/worksheets/0x362911581fcd4e048ddfd84f47203fd2","is_official":1,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"none","reach":null},{"paper_slug":"concept-bottleneck-models","repo_url":"https://github.com/mateoespinosa/cem","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":null},{"paper_slug":"concept-bottleneck-models","repo_url":"https://github.com/mateoespinosa/concept-quality","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"tf","reach":null}],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2007.04612","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2007.04612"}},"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/mateoespinosa/cem","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://worksheets.codalab.org/worksheets/0x362911581fcd4e048ddfd84f47203fd2","reach":null},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/yewsiang/ConceptBottleneck","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mateoespinosa/concept-quality","reach":null}],"summary":{"ran_fixture":2,"ran_honours":1,"ran_violates":1,"ran_draft_wrong":1,"unverified":14},"by_repo_kind":{"official":{"samples":13,"ran":2,"repositories":1},"listed":{"samples":6,"ran":3,"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":"6f6a066db48a5839","entry":"assign_value_to_bins","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"analysis.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/analysis.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6f6a066db48a5839"}},{"code_sha256_prefix":"7d6319bafb29a83d","entry":"convert_continuous_back_to_ordinal","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"analysis.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/analysis.py","link_basis":"plan_row","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"7d6319bafb29a83d"}},{"code_sha256_prefix":"c55626b02da843fc","entry":"find_max_alignment","repo":"mateoespinosa/concept-quality","repo_kind":"listed","path":"concepts_xai/evaluation/metrics/oracle.py","file_url":"https://github.com/mateoespinosa/concept-quality/blob/HEAD/concepts_xai/evaluation/metrics/oracle.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"c55626b02da843fc"}},{"code_sha256_prefix":"4f3310d325613028","entry":"max_alignment_matrix","repo":"mateoespinosa/concept-quality","repo_kind":"listed","path":"concepts_xai/evaluation/metrics/oracle.py","file_url":"https://github.com/mateoespinosa/concept-quality/blob/HEAD/concepts_xai/evaluation/metrics/oracle.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4f3310d325613028"}},{"code_sha256_prefix":"8095a4f6f683e5f0","entry":"niche_completeness","repo":"mateoespinosa/concept-quality","repo_kind":"listed","path":"concepts_xai/evaluation/metrics/niching.py","file_url":"https://github.com/mateoespinosa/concept-quality/blob/HEAD/concepts_xai/evaluation/metrics/niching.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"8095a4f6f683e5f0"}},{"code_sha256_prefix":"81e8146056025ecb","entry":"assess_performance","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"analysis.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/analysis.py","link_basis":"plan_row","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":"81e8146056025ecb"}},{"code_sha256_prefix":"fe49a67591e2b166","entry":"combine_and_mask","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/gen_cub_synthetic.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/gen_cub_synthetic.py","link_basis":"plan_row","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":"fe49a67591e2b166"}},{"code_sha256_prefix":"af4bce600242a9fb","entry":"concept_similarity_matrix","repo":"mateoespinosa/concept-quality","repo_kind":"listed","path":"concepts_xai/evaluation/metrics/oracle.py","file_url":"https://github.com/mateoespinosa/concept-quality/blob/HEAD/concepts_xai/evaluation/metrics/oracle.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":"af4bce600242a9fb"}},{"code_sha256_prefix":"e2f8b1a98dec9723","entry":"crop_and_resize","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/gen_cub_synthetic.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/gen_cub_synthetic.py","link_basis":"plan_row","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":"e2f8b1a98dec9723"}},{"code_sha256_prefix":"fb9f011b98a5be6f","entry":"extract_data","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/data_processing.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/data_processing.py","link_basis":"first_harvest_node","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":"fb9f011b98a5be6f"}},{"code_sha256_prefix":"7363ec8e1dc1e2bc","entry":"get_attr_groups","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/generate_new_data.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/generate_new_data.py","link_basis":"first_harvest_node","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":"7363ec8e1dc1e2bc"}},{"code_sha256_prefix":"f799ff74497d86d8","entry":"get_conv_layer_substring","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"OAI/template_model.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/OAI/template_model.py","link_basis":"first_harvest_node","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":"f799ff74497d86d8"}},{"code_sha256_prefix":"55a1a81bf8682a6e","entry":"get_places","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/gen_cub_synthetic.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/gen_cub_synthetic.py","link_basis":"first_harvest_node","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":"55a1a81bf8682a6e"}},{"code_sha256_prefix":"3adfc15ac6dd7d81","entry":"inception_v3","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/template_model.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/template_model.py","link_basis":"first_harvest_node","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":"3adfc15ac6dd7d81"}},{"code_sha256_prefix":"11b5a291d1cf99bd","entry":"inference","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/generate_new_data.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/generate_new_data.py","link_basis":"first_harvest_node","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":"11b5a291d1cf99bd"}},{"code_sha256_prefix":"03eae1235a58b502","entry":"inference_no_grad","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/generate_new_data.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/generate_new_data.py","link_basis":"first_harvest_node","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":"03eae1235a58b502"}},{"code_sha256_prefix":"099f946666b64813","entry":"niche_completeness_ratio","repo":"mateoespinosa/concept-quality","repo_kind":"listed","path":"concepts_xai/evaluation/metrics/niching.py","file_url":"https://github.com/mateoespinosa/concept-quality/blob/HEAD/concepts_xai/evaluation/metrics/niching.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":"099f946666b64813"}},{"code_sha256_prefix":"b34032fc514199d9","entry":"niche_impurity","repo":"mateoespinosa/concept-quality","repo_kind":"listed","path":"concepts_xai/evaluation/metrics/niching.py","file_url":"https://github.com/mateoespinosa/concept-quality/blob/HEAD/concepts_xai/evaluation/metrics/niching.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":"b34032fc514199d9"}},{"code_sha256_prefix":"d65244603db1c967","entry":"parse_arguments","repo":"yewsiang/ConceptBottleneck","repo_kind":"official","path":"CUB/hyperopt.py","file_url":"https://github.com/yewsiang/ConceptBottleneck/blob/HEAD/CUB/hyperopt.py","link_basis":"first_harvest_node","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":"d65244603db1c967"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}