{"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/2408-00113","title":"Measuring Progress in Dictionary Learning for Language Model Interpretability with Board Game Models","arxiv_id":"2408.00113","date":"2024-07-31","proceeding":null,"authors":["Adam Karvonen","Benjamin Wright","Can Rager","Rico Angell","Jannik Brinkmann","Logan Smith","Claudio Mayrink Verdun","David Bau","Samuel Marks"],"abstract":"What latent features are encoded in language model (LM) representations? Recent work on training sparse autoencoders (SAEs) to disentangle interpretable features in LM representations has shown significant promise. However, evaluating the quality of these SAEs is difficult because we lack a ground-truth collection of interpretable features that we expect good SAEs to recover. We thus propose to measure progress in interpretable dictionary learning by working in the setting of LMs trained on chess and Othello transcripts. These settings carry natural collections of interpretable features -- for example, \"there is a knight on F3\" -- which we leverage into $\\textit{supervised}$ metrics for SAE quality. To guide progress in interpretable dictionary learning, we introduce a new SAE training technique, $\\textit{p-annealing}$, which improves performance on prior unsupervised metrics as well as our new metrics.","url_abs":"https://arxiv.org/abs/2408.00113v2","url_pdf":"https://arxiv.org/pdf/2408.00113v2.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":"2408-00113","repo_url":"https://github.com/adamkarvonen/SAE_BoardGameEval","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"jax","reach":{"status":"ok"}}],"tasks":[{"task_slug":"dictionary-learning","task_name":"Dictionary Learning"},{"task_slug":"language-modeling","task_name":"Language Modeling"},{"task_slug":"language-modelling","task_name":"Language Modelling"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2408.00113","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2408.00113"}},"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/adamkarvonen/SAE_BoardGameEval","reach":{"status":"ok"}}],"summary":{"ran_draft_wrong":2,"ran":7},"by_repo_kind":{"official":{"samples":9,"ran":9,"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":9,"samples":[{"code_sha256_prefix":"aa412f80ec9fb5e9","entry":"append_results","repo":"adamkarvonen/sae_boardgameeval","repo_kind":"official","path":"circuits/full_pipeline.py","file_url":"https://github.com/adamkarvonen/sae_boardgameeval/blob/HEAD/circuits/full_pipeline.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"aa412f80ec9fb5e9"}},{"code_sha256_prefix":"20b38de861aaa616","entry":"get_all_evals_file_names","repo":"adamkarvonen/SAE_BoardGameEval","repo_kind":"official","path":"circuits/analysis.py","file_url":"https://github.com/adamkarvonen/SAE_BoardGameEval/blob/HEAD/circuits/analysis.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":"20b38de861aaa616"}},{"code_sha256_prefix":"9f92ec13dc94a9bb","entry":"get_all_feature_label_file_names","repo":"adamkarvonen/SAE_BoardGameEval","repo_kind":"official","path":"circuits/eval_board_reconstruction.py","file_url":"https://github.com/adamkarvonen/SAE_BoardGameEval/blob/HEAD/circuits/eval_board_reconstruction.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":"9f92ec13dc94a9bb"}},{"code_sha256_prefix":"32db23e490a732e8","entry":"get_all_feature_labels_file_names","repo":"adamkarvonen/SAE_BoardGameEval","repo_kind":"official","path":"circuits/analysis.py","file_url":"https://github.com/adamkarvonen/SAE_BoardGameEval/blob/HEAD/circuits/analysis.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":"32db23e490a732e8"}},{"code_sha256_prefix":"6ab50e647ecb2b8a","entry":"get_all_results_file_names","repo":"adamkarvonen/SAE_BoardGameEval","repo_kind":"official","path":"circuits/analysis.py","file_url":"https://github.com/adamkarvonen/SAE_BoardGameEval/blob/HEAD/circuits/analysis.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":"6ab50e647ecb2b8a"}},{"code_sha256_prefix":"54fa6ae3b5575ea1","entry":"get_indexing_function_name","repo":"adamkarvonen/SAE_BoardGameEval","repo_kind":"official","path":"circuits/eval_sae_as_classifier.py","file_url":"https://github.com/adamkarvonen/SAE_BoardGameEval/blob/HEAD/circuits/eval_sae_as_classifier.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":"54fa6ae3b5575ea1"}},{"code_sha256_prefix":"460c83659a8c1ac8","entry":"initialize_dataframe","repo":"adamkarvonen/sae_boardgameeval","repo_kind":"official","path":"circuits/full_pipeline.py","file_url":"https://github.com/adamkarvonen/sae_boardgameeval/blob/HEAD/circuits/full_pipeline.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"460c83659a8c1ac8"}},{"code_sha256_prefix":"513f27ab7d012da1","entry":"initialize_reconstruction_dict","repo":"adamkarvonen/SAE_BoardGameEval","repo_kind":"official","path":"circuits/eval_board_reconstruction.py","file_url":"https://github.com/adamkarvonen/SAE_BoardGameEval/blob/HEAD/circuits/eval_board_reconstruction.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":"513f27ab7d012da1"}},{"code_sha256_prefix":"35657022f5a6f260","entry":"initialized_constructed_boards_dict","repo":"adamkarvonen/SAE_BoardGameEval","repo_kind":"official","path":"circuits/eval_board_reconstruction.py","file_url":"https://github.com/adamkarvonen/SAE_BoardGameEval/blob/HEAD/circuits/eval_board_reconstruction.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":"35657022f5a6f260"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}