{"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/contrastive-code-representation-learning","title":"Contrastive Code Representation Learning","arxiv_id":"2007.04973","date":"2020-07-09","proceeding":"EMNLP 2021 11","authors":["Paras Jain","Ajay Jain","Tianjun Zhang","Pieter Abbeel","Joseph E. Gonzalez","Ion Stoica"],"abstract":"Recent work learns contextual representations of source code by reconstructing tokens from their context. For downstream semantic understanding tasks like summarizing code in English, these representations should ideally capture program functionality. However, we show that the popular reconstruction-based BERT model is sensitive to source code edits, even when the edits preserve semantics. We propose ContraCode: a contrastive pre-training task that learns code functionality, not form. ContraCode pre-trains a neural network to identify functionally similar variants of a program among many non-equivalent distractors. We scalably generate these variants using an automated source-to-source compiler as a form of data augmentation. Contrastive pre-training improves JavaScript summarization and TypeScript type inference accuracy by 2% to 13%. We also propose a new zero-shot JavaScript code clone detection dataset, showing that ContraCode is both more robust and semantically meaningful. On it, we outperform RoBERTa by 39% AUROC in an adversarial setting and up to 5% on natural code.","url_abs":"https://arxiv.org/abs/2007.04973v4","url_pdf":"https://arxiv.org/pdf/2007.04973v4.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":"contrastive-code-representation-learning","repo_url":"https://github.com/parasj/contracode","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}}],"tasks":[{"task_slug":"clone-detection","task_name":"Clone Detection"},{"task_slug":"contrastive-learning","task_name":"Contrastive Learning"},{"task_slug":"data-augmentation","task_name":"Data Augmentation"},{"task_slug":"method-name-prediction","task_name":"Method name prediction"},{"task_slug":"representation-learning","task_name":"Representation Learning"},{"task_slug":"code-summarization","task_name":"Source Code Summarization"},{"task_slug":"type-prediction","task_name":"Type prediction"}],"methods":[{"method_slug":"adam","method_name":"Adam"},{"method_slug":"attention","method_name":"Attention"},{"method_slug":"attention-dropout","method_name":"Attention Dropout"},{"method_slug":"bert","method_name":"BERT"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"layer-normalization","method_name":"Layer Normalization"},{"method_slug":"linear-layer","method_name":"Linear Layer"},{"method_slug":"linear-warmup-with-linear-decay","method_name":"Linear Warmup With Linear Decay"},{"method_slug":"multi-head-attention","method_name":"Multi-Head Attention"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"roberta","method_name":"RoBERTa"},{"method_slug":"softmax","method_name":"Softmax"},{"method_slug":"weight-decay","method_name":"Weight Decay"},{"method_slug":"wordpiece","method_name":"WordPiece"}],"datasets_introduced":[],"methods_introduced":[],"results":[{"leaderboard":"/sota/method-name-prediction-on-codesearchnet","task":"Method name prediction","dataset":"CodeSearchNet","model":"ContraCode","rank_in_archive_order":1,"of":1,"metrics":{"F1":"17.24"},"uses_additional_data":false},{"leaderboard":"/sota/code-summarization-on-codesearchnet","task":"Source Code Summarization","dataset":"CodeSearchNet","model":"ContraCode","rank_in_archive_order":1,"of":1,"metrics":{"F1":"17.24"},"uses_additional_data":false},{"leaderboard":"/sota/type-prediction-on-deeptyper","task":"Type prediction","dataset":"DeepTyper","model":"ContraCode","rank_in_archive_order":1,"of":1,"metrics":{"Accuracy@5":"84.60"},"uses_additional_data":false}],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2007.04973","mcp":null,"developers":"https://syntology.ai/developers"},"arxiv_metadata":null,"syntology_extracted_results":null}