This is a domain-adapted version of
facebook/esm2_t6_8M_UR50D, fine-tuned on a curated subset of UniProt TrEMBL containing only plant-kingdom proteins. The adaptation improves representation quality for plant-specific protein tasks compared to the general-purpose ESM-2 baseline.
Part of the
Plant-PLM - ESM-2 models at 8M, 35M, 150M, and 650M parameters, each adapted on the same plant protein corpus.
1from transformers import EsmForMaskedLM, EsmTokenizer
2import torch
3
4model = EsmForMaskedLM.from_pretrained("dipayan26/PlantPLM-8M")
5tokenizer = EsmTokenizer.from_pretrained("dipayan26/PlantPLM-8M")
6
7# --- Masked token prediction ---
8sequence = "MSPQTETKASVGFKAGVKDYKLTYYTPEYETK"
9inputs = tokenizer(sequence, return_tensors="pt")
10
11# mask one position
12inputs["input_ids"][0, 5] = tokenizer.mask_token_id
13
14with torch.no_grad():
15 logits = model(**inputs).logits
16
17masked_pos = (inputs["input_ids"] == tokenizer.mask_token_id).nonzero()[0, 1]
18top5 = logits[0, masked_pos].topk(5)
19print(tokenizer.convert_ids_to_tokens(top5.indices.tolist()))
20
21# --- Sequence embedding ([CLS] token) ---
22inputs = tokenizer(sequence, return_tensors="pt")
23with torch.no_grad():
24 hidden = model.esm(**inputs).last_hidden_state
25cls_embedding = hidden[0, 0, :] # shape: [320]
26print("Embedding shape:", cls_embedding.shape)
1@misc{sarkar2026plantplm,
2 author = {Sarkar, Dipayan},
3 title = {PlantPLM: Domain-Adaptive Pretraining of ESM-2 on Viridiplantae Proteins},
4 year = {2026},
5 publisher = {Hugging Face},
6 howpublished = {\url{https://huggingface.co/dipayan26/PlantPLM-8M}},
7}