|
Download README.md from Bitbol-Lab/ProteomeLM-ess: direct link, hf CLI and curl.
- Browser
- Download file 4.59 kB
-
https://huggingface.co/Bitbol-Lab/ProteomeLM-ess/resolve/main/README.md
- Command line
-
hf download hf://Bitbol-Lab/ProteomeLM-ess/README.md
-
curl -L -o README.md https://huggingface.co/Bitbol-Lab/ProteomeLM-ess/resolve/main/README.md
4.59 kB
| license: apache-2.0 | |
| library_name: pytorch | |
| base_model: Bitbol-Lab/ProteomeLM-L | |
| tags: | |
| - biology | |
| - proteomics | |
| - gene-essentiality | |
| - protein-language-model | |
| - proteomelm | |
| # ProteomeLM-ess | |
| Gene-essentiality classifier of [ProteomeLM](https://github.com/Bitbol-Lab/ProteomeLM) | |
| ([PNAS 2026](https://www.pnas.org/doi/10.1073/pnas.2524201123), Fig. 5). Given a whole | |
| proteome, it gives each protein a probability of being essential. | |
| ## Model | |
| - **Input**: a whole proteome (one genome), as a protein FASTA file. | |
| - **Embeddings**: every protein is embedded with ESM-C 600M (mean over residues, first | |
| 4096 residues). The frozen backbone [Bitbol-Lab/ProteomeLM-L](https://huggingface.co/Bitbol-Lab/ProteomeLM-L) then reads the | |
| whole proteome at once, in bfloat16, with each protein's own ESM-C embedding as input and | |
| group embedding. | |
| - **Head**: a two-layer classifier (linear 1152 → 2048, ReLU, dropout 0.5, linear | |
| 2048 → 2) on the backbone's `hidden_states[8]` (index 0 is the input projection). | |
| Class 0 is *essential*, class 1 *non-essential*; the output is `p_essential` = softmax class 0. | |
| - **Files**: `config.json` (backbone, layer, dimensions, labels) and `model.safetensors` | |
| (2,365,442 parameters, stored in bfloat16; inference runs the head in float32). | |
| ## Training data | |
| Essentiality labels (E / NE) from [OGEE](https://v3.ogee.info) for 82 genomes, mostly | |
| bacteria plus several eukaryotes (e.g. mouse, zebrafish, *Drosophila*, *C. elegans*, | |
| *Arabidopsis*, fission yeast). The head was trained on the training folds of the paper's | |
| gene-level train / validation / test split, with Adam (learning rate 1e-3) and early stopping | |
| on the validation-fold AUPR (ProteomeLM-L layer 8, seed 42). | |
| Seven OGEE genomes were held out of training entirely: *S. cerevisiae* S288C (taxid 580240), | |
| *E. coli* K-12 MG1655 (83333), and taxids 199310, 679895, 941322, 1380365 and 1124478. | |
| ## Performance | |
| Whole-genome predictions on genomes held out of training (as in Fig. 5B of the paper): the N | |
| highest-ranked proteins are called essential, with N the number of labelled essential genes. | |
| AUROC is computed on the genes labelled essential or non-essential. | |
| | genome | proteins | labelled essential (N) | AUROC | labelled essential genes in the top N | | |
| |---|---|---|---|---| | |
| | *E. coli* K-12 MG1655 (taxid 83333) | 4,361 | 286 | 0.952 | 201 (70.3%) | | |
| | *S. cerevisiae* S288C (taxid 580240) | 5,975 | 937 | 0.810 | 432 (46.1%) | | |
| | JCVI-Syn1.0 (taxid 766747) | 820 | 202 | 0.879 | 121 (59.9%) | | |
| | JCVI-Syn3A (taxid 2144189) | 455 | 199 | 0.830 | 130 (65.3%) | | |
| Labels: OGEE (*E. coli*, *S. cerevisiae*), Hutchison et al. 2016 (JCVI-Syn1.0) and SynWiki | |
| (JCVI-Syn3A). The embeddings are computed in bfloat16, so scores vary slightly across GPUs | |
| and library versions (top-N counts by a gene or two). | |
| ## Usage | |
| ```bash | |
| pip install "proteomelm @ git+https://github.com/Bitbol-Lab/ProteomeLM" | |
| python -m proteomelm.essentiality --fasta proteome.fasta --out scores.tsv --top-fraction 0.1 | |
| ``` | |
| The TSV lists every protein, most essential first: `protein_id`, `p_essential`, `rank` and, | |
| with `--top-n N`, `--top-fraction F` or `--threshold T`, `predicted_essential`. Ranks are | |
| more reliable than the raw probabilities, which are not calibrated across organisms (the | |
| fraction of essential genes ranges from a few percent in free-living bacteria to about half | |
| in minimal cells), so a top-N or top-fraction rule is recommended. | |
| or, from Python: | |
| ```python | |
| from proteomelm.essentiality import EssentialityPredictor, read_fasta | |
| ids, sequences = read_fasta("proteome.fasta") | |
| predictor = EssentialityPredictor.from_pretrained("Bitbol-Lab/ProteomeLM-ess", device="cuda") | |
| table = predictor.predict(ids, sequences, top_fraction=0.1) # pandas DataFrame, sorted by rank | |
| ``` | |
| The input should be one complete proteome: ProteomeLM scores every protein in the context | |
| of all the others. A GPU is recommended (a bacterial proteome takes about a minute, most of | |
| it ESM-C); the first run downloads ESM-C 600M and Bitbol-Lab/ProteomeLM-L. | |
| ## Citation | |
| ```bibtex | |
| @article{malbranke2026proteomelm, | |
| title={ProteomeLM: A proteome-scale language model enables accurate and rapid prediction of protein-protein interactions and gene essentiality across taxa}, | |
| author={Malbranke, Cyril and Zalaffi, Gionata Paolo and Bitbol, Anne-Florence}, | |
| journal={Proceedings of the National Academy of Sciences}, | |
| volume={123}, | |
| number={21}, | |
| pages={e2524201123}, | |
| year={2026}, | |
| publisher={National Academy of Sciences}, | |
| doi={10.1073/pnas.2524201123}, | |
| url={https://www.pnas.org/doi/10.1073/pnas.2524201123} | |
| } | |
| ``` | |