{"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/break-it-fix-it-unsupervised-learning-for","title":"Break-It-Fix-It: Unsupervised Learning for Program Repair","arxiv_id":"2106.06600","date":"2021-06-11","proceeding":null,"authors":["Michihiro Yasunaga","Percy Liang"],"abstract":"We consider repair tasks: given a critic (e.g., compiler) that assesses the quality of an input, the goal is to train a fixer that converts a bad example (e.g., code with syntax errors) into a good one (e.g., code with no syntax errors). Existing works create training data consisting of (bad, good) pairs by corrupting good examples using heuristics (e.g., dropping tokens). However, fixers trained on this synthetically-generated data do not extrapolate well to the real distribution of bad inputs. To bridge this gap, we propose a new training approach, Break-It-Fix-It (BIFI), which has two key ideas: (i) we use the critic to check a fixer's output on real bad inputs and add good (fixed) outputs to the training data, and (ii) we train a breaker to generate realistic bad code from good code. Based on these ideas, we iteratively update the breaker and the fixer while using them in conjunction to generate more paired data. We evaluate BIFI on two code repair datasets: GitHub-Python, a new dataset we introduce where the goal is to repair Python code with AST parse errors; and DeepFix, where the goal is to repair C code with compiler errors. BIFI outperforms existing methods, obtaining 90.5% repair accuracy on GitHub-Python (+28.5%) and 71.7% on DeepFix (+5.6%). Notably, BIFI does not require any labeled data; we hope it will be a strong starting point for unsupervised learning of various repair tasks.","url_abs":"https://arxiv.org/abs/2106.06600v2","url_pdf":"https://arxiv.org/pdf/2106.06600v2.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":"break-it-fix-it-unsupervised-learning-for","repo_url":"https://github.com/michiyasunaga/bifi","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"c-code","task_name":"C++ code"},{"task_slug":"code-repair","task_name":"Code Repair"},{"task_slug":"data-augmentation","task_name":"Data Augmentation"},{"task_slug":"domain-adaptation","task_name":"Domain Adaptation"},{"task_slug":"program-repair","task_name":"Program Repair"},{"task_slug":"style-transfer","task_name":"Style Transfer"},{"task_slug":"unsupervised-machine-translation","task_name":"Unsupervised Machine Translation"}],"methods":[{"method_slug":"absolute-position-encodings","method_name":"Absolute Position Encodings"},{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"bpe","method_name":"BPE"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"label-smoothing","method_name":"Label Smoothing"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"position-wise-feed-forward-layer","method_name":"Position-Wise Feed-Forward Layer"},{"method_slug":"repair","method_name":"Repair"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"transformer","method_name":"Transformer"}],"datasets_introduced":[{"slug":"github-python","name":"GitHub-Python","full_name":""}],"methods_introduced":[],"results":[{"leaderboard":"/sota/program-repair-on-deepfix","task":"Program Repair","dataset":"DeepFix","model":"DrRepair + BIFI","rank_in_archive_order":1,"of":4,"metrics":{"Average Success Rate":"71.7"},"uses_additional_data":false},{"leaderboard":"/sota/program-repair-on-github-python","task":"Program Repair","dataset":"GitHub-Python","model":"Transformer + BIFI","rank_in_archive_order":1,"of":2,"metrics":{"Accuracy (%)":"90.5"},"uses_additional_data":false},{"leaderboard":"/sota/program-repair-on-github-python","task":"Program Repair","dataset":"GitHub-Python","model":"Transformer","rank_in_archive_order":2,"of":2,"metrics":{"Accuracy (%)":"62.0"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2106.06600","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2106.06600"}},"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/michiyasunaga/bifi","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":6},"by_repo_kind":{"official":{"samples":6,"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":"7956f0c3ad623dc9","entry":"check_ast_error","repo":"michiyasunaga/bifi","repo_kind":"official","path":"utils/code_error_checker.py","file_url":"https://github.com/michiyasunaga/bifi/blob/HEAD/utils/code_error_checker.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":"7956f0c3ad623dc9"}},{"code_sha256_prefix":"d31293eebb3f2fbb","entry":"code_toks_to_code_string","repo":"michiyasunaga/bifi","repo_kind":"official","path":"utils/code_utils.py","file_url":"https://github.com/michiyasunaga/bifi/blob/HEAD/utils/code_utils.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":"d31293eebb3f2fbb"}},{"code_sha256_prefix":"4e338ff6454175b7","entry":"detect_encoding","repo":"michiyasunaga/bifi","repo_kind":"official","path":"utils/code_tokenizer.py","file_url":"https://github.com/michiyasunaga/bifi/blob/HEAD/utils/code_tokenizer.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":"4e338ff6454175b7"}},{"code_sha256_prefix":"24311a36d4c36789","entry":"fairseq_generate","repo":"michiyasunaga/bifi","repo_kind":"official","path":"utils/fairseq_utils.py","file_url":"https://github.com/michiyasunaga/bifi/blob/HEAD/utils/fairseq_utils.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":"24311a36d4c36789"}},{"code_sha256_prefix":"0b5ffc297fbdf5da","entry":"parse_fairseq_preds","repo":"michiyasunaga/bifi","repo_kind":"official","path":"utils/fairseq_utils.py","file_url":"https://github.com/michiyasunaga/bifi/blob/HEAD/utils/fairseq_utils.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":"0b5ffc297fbdf5da"}},{"code_sha256_prefix":"1661aeef734f01a4","entry":"toks2lines","repo":"michiyasunaga/bifi","repo_kind":"official","path":"utils/code_utils.py","file_url":"https://github.com/michiyasunaga/bifi/blob/HEAD/utils/code_utils.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":"1661aeef734f01a4"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}