{"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/guiding-generative-protein-language-models","title":"Guiding Generative Protein Language Models with Reinforcement Learning","arxiv_id":"2412.12979","date":"2024-12-17","proceeding":null,"authors":["Filippo Stocco","Maria Artigues-Lleixa","Andrea Hunklinger","Talal Widatalla","Marc Guell","Noelia Ferruz"],"abstract":"Autoregressive protein language models (pLMs) have emerged as powerful tools to efficiently design functional proteins with extraordinary diversity, as evidenced by the successful generation of diverse enzyme families, including lysozymes or carbonic anhydrases. However, a fundamental limitation of pLMs is their propensity to sample from dense regions within the training distribution, which constrains their ability to sample from rare, high-value regions of the sequence space. This limitation becomes particularly critical in applications targeting underrepresented distribution tails, such as engineering for enzymatic activity or binding affinity. To address this challenge, we implement DPO_pLM, a reinforcement learning (RL) framework for protein sequence optimization with pLMs. Drawing inspiration from the success of RL in aligning language models to human preferences, we approach protein optimization as an iterative process that fine-tunes pLM weights to maximize a reward provided by an external oracle. Our strategy demonstrates that RL can efficiently optimize for a variety of custom properties without the need for additional data, achieving significant while preserving sequence diversity. We applied DPO_pLM to the design of EGFR binders, successfully identifying nanomolar binders within hours. Our code is publicly available at https://github.com/AI4PDLab/DPO_pLM.","url_abs":"https://arxiv.org/abs/2412.12979v2","url_pdf":"https://arxiv.org/pdf/2412.12979v2.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":"guiding-generative-protein-language-models","repo_url":"https://github.com/ai4pdlab/dpo_plm","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":"diversity","task_name":"Diversity"},{"task_slug":"reinforcement-learning","task_name":"Reinforcement Learning"},{"task_slug":"reinforcement-learning-1","task_name":"Reinforcement Learning (RL)"},{"task_slug":"reinforcement-learning-2","task_name":"reinforcement-learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2412.12979","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2412.12979"}},"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/ai4pdlab/dpo_plm","reach":{"status":"ok","spdx":"MIT"}}],"summary":{"unverified":5},"by_repo_kind":{"official":{"samples":5,"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":"7eb95b024fabf1cc","entry":"calculate_perplexity","repo":"ai4pdlab/dpo_plm","repo_kind":"official","path":"seq_gen.py","file_url":"https://github.com/ai4pdlab/dpo_plm/blob/HEAD/seq_gen.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":"7eb95b024fabf1cc"}},{"code_sha256_prefix":"40f248d3cb0502ae","entry":"format_sequence","repo":"ai4pdlab/dpo_plm","repo_kind":"official","path":"train_exp.py","file_url":"https://github.com/ai4pdlab/dpo_plm/blob/HEAD/train_exp.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":"40f248d3cb0502ae"}},{"code_sha256_prefix":"d410f03c3fef7440","entry":"generate_sequences","repo":"ai4pdlab/dpo_plm","repo_kind":"official","path":"seq_gen.py","file_url":"https://github.com/ai4pdlab/dpo_plm/blob/HEAD/seq_gen.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":"d410f03c3fef7440"}},{"code_sha256_prefix":"90128cc8101092a3","entry":"pad_without_fast_tokenizer_warning","repo":"ai4pdlab/dpo_plm","repo_kind":"official","path":"src/ProtRL_Trainer/ProtRL_dataCollator.py","file_url":"https://github.com/ai4pdlab/dpo_plm/blob/HEAD/src/ProtRL_Trainer/ProtRL_dataCollator.py","link_basis":"harvester_set","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":"90128cc8101092a3"}},{"code_sha256_prefix":"ab4826f36110fd7c","entry":"reward_len","repo":"ai4pdlab/dpo_plm","repo_kind":"official","path":"benchmarking/train_benchmark.py","file_url":"https://github.com/ai4pdlab/dpo_plm/blob/HEAD/benchmarking/train_benchmark.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":"ab4826f36110fd7c"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}