{"id":29124266,"url":"https://github.com/tiger-ai-lab/disprotedit","last_synced_at":"2026-02-03T11:05:06.565Z","repository":{"id":299572169,"uuid":"1003390059","full_name":"TIGER-AI-Lab/DisProtEdit","owner":"TIGER-AI-Lab","description":"Official Repo for \"DisProtEdit: Exploring Disentangled Representations for Multi-Attribute Protein Editing\" [ICMLW 2025]","archived":false,"fork":false,"pushed_at":"2025-06-20T20:36:32.000Z","size":10856,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-27T06:35:16.650Z","etag":null,"topics":["protein","protein-editing"],"latest_commit_sha":null,"homepage":"https://tiger-ai-lab.github.io/DisProtEdit/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TIGER-AI-Lab.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-17T04:40:49.000Z","updated_at":"2025-06-22T21:22:55.000Z","dependencies_parsed_at":"2025-06-17T08:27:47.087Z","dependency_job_id":"11431f43-01c8-4598-8fe4-d16d2ec828e6","html_url":"https://github.com/TIGER-AI-Lab/DisProtEdit","commit_stats":null,"previous_names":["tiger-ai-lab/disprotedit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TIGER-AI-Lab/DisProtEdit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIGER-AI-Lab%2FDisProtEdit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIGER-AI-Lab%2FDisProtEdit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIGER-AI-Lab%2FDisProtEdit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIGER-AI-Lab%2FDisProtEdit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TIGER-AI-Lab","download_url":"https://codeload.github.com/TIGER-AI-Lab/DisProtEdit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TIGER-AI-Lab%2FDisProtEdit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29043745,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-03T10:09:22.136Z","status":"ssl_error","status_checked_at":"2026-02-03T10:09:16.814Z","response_time":96,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["protein","protein-editing"],"created_at":"2025-06-29T20:06:57.188Z","updated_at":"2026-02-03T11:05:06.374Z","avatar_url":"https://github.com/TIGER-AI-Lab.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧬 DisProtEdit\n\n[![arXiv](https://img.shields.io/badge/arXiv-2506.14853-b31b1b.svg)](https://arxiv.org/abs/2506.14853)\n\n[**🌐 Homepage**](https://tiger-ai-lab.github.io/DisProtEdit/)  | [**📖 arXiv**](https://arxiv.org/abs/2506.14853) \n\n[![license](https://img.shields.io/github/license/TIGER-AI-Lab/DisProtEdit.svg)](https://github.com/TIGER-AI-Lab/DisProtEdit/blob/main/LICENSE)\n[![GitHub](https://img.shields.io/github/stars/TIGER-AI-Lab/DisProtEdit?style=social)](https://github.com/TIGER-AI-Lab/DisProtEdit)\n\nThis repo contains the codebase for our paper:  \n**DisProtEdit: Exploring Disentangled Representations for Multi-Attribute Protein Editing**\n\n**📍 ICML 2025 Workshops (GenBio, FM4LS)**\n\n---\n\n## 📌 Introduction\n\nDisProtEdit is a protein editing framework that disentangles structural and functional properties using dual-channel natural language supervision. It learns modular latent representations aligned with protein sequences through a combination of alignment, uniformity, and angular MMD losses. Editing is performed via text modification, enabling interpretable and controllable edits to protein structure or function.\n\n![](https://tiger-ai-lab.github.io/DisProtEdit/static/images/method.png)\n\nSee https://tiger-ai-lab.github.io/DisProtEdit/ for more info.\n---\n\n## 📰 News\n\n- **2025 Jun 20**: Released SwissProtDis Dataset, Editing benchmark, also the full training code.\n- **2025 Jun 18**: Paper available on Arxiv.\n- **2025 Jun 17**: Website created!  \n- **2025 Jun 11**: DisProtEdit accepted to ICMLW GenBio.\n- **2025 Jun 10**: DisProtEdit accepted to ICMLW FM4LS.  \n\n---\n\n## 📦 SwissProtDis Dataset\n\nWe introduce **SwissProtDis**, a large-scale multimodal dataset containing:\n- ~540,000 protein sequences\n- Automatically decomposed structural and functional text descriptions from UniProt using GPT-4o\n\n👉 [https://huggingface.co/datasets/TIGER-Lab/SwissProtDis_500k](https://huggingface.co/datasets/TIGER-Lab/SwissProtDis_500k)\n\n---\n\n## ⚙️ Environment Setup\n\n```\nconda create -n disprot python=3.10\nconda activate disprot\npip install -r requirements.txt\n```\n\n## 🚀 Training\n\nTraining multimodal embeddings\n```shell\n./1_SFs.sh \n./2_empty_SFs.sh \n./2_sample_SFs.sh\n```\n\nAlternatively, you can run:\n```shell\nexport OUTPUT_DIR=\"output/\"\nexport PRETRAINED_DIR=\"output/SFs_AU_b24_gpt4o_500k_DisAngle10\"\n\nCUDA_VISIBLE_DEVICES=0,1,2,3\\\n        python3 pretrain_step_01_SFs.py \\\n        --protein_lr=1e-5 --protein_lr_scale=1 \\\n        --text_lr=1e-5 --text_lr_scale=1 --CL_loss=\"EBM_NCE\"\\\n        --protein_backbone_model=ProtBERT_BFD --wandb_name=\"SFs_AU05_b24_gpt4o_500k\"\\\n        --epochs=10 --batch_size=24 --num_workers=0 --verbose \\\n        --output_model_dir=\"$OUTPUT_DIR\" --CL=0.0 --D=0.0 --U=0.5 --A=1.0 --dis_angle --ds_llm=\"gpt4o\" --ds_name=\"500k\"\n\npython3 pretrain_step_02_empty_sequence_SFs.py \\\n--protein_backbone_model=ProtBERT_BFD \\\n--batch_size=16 --num_workers=4 \\\n--pretrained_folder=\"$PRETRAINED_DIR\" \\\n--target_subfolder=\"pairwise_all\"\n\npython3 pretrain_step_02_pairwise_representation_SFs.py \\\n--protein_backbone_model=ProtBERT_BFD \\\n--batch_size=16 --num_workers=4 \\\n--pretrained_folder=\"$PRETRAINED_DIR\" \\\n--target_subfolder=\"pairwise_all\" \\\n--ds_llm=\"gpt4o\"\n\n```\n\nTraining decoder for editing task\n```shell\n./4_SFs.sh\n```\n\nAlternatively, you can run:\n```shell\nexport PRETRAINED_DIR=\"output/SFs_AU_b24_gpt4o_500k_DisAngle10\"\nCUDA_VISIBLE_DEVICES=0\\\n        python pretrain_step_04_decoder_SFs.py \\\n        --batch_size=8 --lr=1e-4 --epochs=10 \\\n        --decoder_distribution=T5Decoder \\\n        --score_network_type=T5Base --wandb_name=\"SFs_AU_b24_gpt4o_500k_DisAngle10\"\\\n        --hidden_dim=16  --verbose \\\n        --pretrained_folder=\"$PRETRAINED_DIR\" \\\n        --output_model_dir=\"$PRETRAINED_DIR\"/step_04_T5 \\\n        --target_subfolder=\"pairwise_all\"\n```\n\n## 🧪 Editing Benchmark\n\nPlease see [_datasets_and_checkpoints](https://github.com/TIGER-AI-Lab/DisProtEdit/blob/main/_datasets_and_checkpoints).\n* The benchmark contains 196 protein inputs, suitable for protein editing on structure editing and functional editing. \n* Please refer to `editing_dis_interpolation.py`.\n\n## 🚀 Downstream Tasks\n\n### Editing\n\nMulti-Attribute Protein Editing\n```shell\n./5_medit.sh\n```\n\n### TAPE\n\nProtein Properties Prediction\n```shell\n./5_TAPE.sh\n```\n\nThe code is built upon [TAPE in ProteinDT](https://github.com/chao1224/ProteinDT/blob/main/examples/downstream_TAPE.py).\n\n---\n\n\n## 📖 Citation\n\n```bibtex\n@misc{ku2025disproteditexploringdisentangledrepresentations,\n      title={DisProtEdit: Exploring Disentangled Representations for Multi-Attribute Protein Editing}, \n      author={Max Ku and Sun Sun and Hongyu Guo and Wenhu Chen},\n      year={2025},\n      booktitle={ICML Workshop on Generative AI and Biology},\n      eprint={2506.14853},\n      archivePrefix={arXiv},\n      primaryClass={q-bio.QM},\n      url={https://arxiv.org/abs/2506.14853}, \n}\n```\n\n## 💞 Acknowledgements\nThis code is heavily built upon [ProteinDT](https://github.com/chao1224/ProteinDT). we thank all the contributors for open-sourcing.\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiger-ai-lab%2Fdisprotedit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftiger-ai-lab%2Fdisprotedit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftiger-ai-lab%2Fdisprotedit/lists"}