ProteomeLM-ess / README.md
CyrilMa's picture
Upload folder using huggingface_hub
7618068 verified
|
Raw History Blame Contribute Delete
4.59 kB
metadata
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 (PNAS 2026, 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 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 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

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:

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

@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}
}