|
--- |
|
license: mit |
|
language: |
|
- en |
|
library_name: transformers |
|
tags: |
|
- esm |
|
- esm-2 |
|
- sequence classifier |
|
- proteins |
|
- protein language model |
|
pipeline_tag: zero-shot-classification |
|
--- |
|
|
|
# ESM-2 Sequence Classifier |
|
This is a small sequence classifier trained on synthetic data generated by GPT-4 |
|
which classifies protein sequences into three categories `enzymes` (class `0`), `receptor_proteins` (class `1`), and `structural_proteins` (class `2`). |
|
This is trained using [facebook/esm2_t6_8M_UR50D](https://huggingface.co/facebook/esm2_t6_8M_UR50D), one of the [ESM-2 models](https://huggingface.co/docs/transformers/model_doc/esm). |
|
|
|
This model is not well tested, and is for experimental purposes. Use with caution. |
|
|
|
## Using the Model |
|
To use the model, try running: |
|
|
|
``` python3 |
|
# Load the trained model and tokenizer |
|
model = EsmForSequenceClassification.from_pretrained("./esm2_t6_8M_UR50D_sequence_classifier_v1") |
|
tokenizer = AutoTokenizer.from_pretrained("facebook/esm2_t6_8M_UR50D") |
|
|
|
# Suppose these are your new sequences that you want to classify |
|
# Additional Family 0: Enzymes |
|
new_sequences_0 = [ |
|
"ACGYLKTPKLADPPVLRGDSSVTKAICKPDPVLEK", |
|
"GVALDECKALDYLPGKPLPMDGKVCQCGSKTPLRP", |
|
"VLPGYTCGELDCKPGKPLPKCGADKTQVATPFLRG", |
|
"TCGALVQYPSCADPPVLRGSDSSVKACKKLDPQDK", |
|
"GALCEECKLCPGADYKPMDGDRLPAAATSKTRPVG", |
|
"PAVDCKKALVYLPKPLPMDGKVCRGSKTPKTRPYG", |
|
"VLGYTCGALDCKPGKPLPKCGADKTQVATPFLRGA", |
|
"CGALVQYPSCADPPVLRGSDSSVKACKKLDPQDKT", |
|
"ALCEECKLCPGADYKPMDGDRLPAAATSKTRPVGK", |
|
"AVDCKKALVYLPKPLPMDGKVCRGSKTPKTRPYGR", |
|
] |
|
|
|
# Additional Family 1: Receptor Proteins |
|
new_sequences_1 = [ |
|
"VGQRFYGGRQKNRHCELSPLPSACRGSVQGALYTD", |
|
"KDQVLTVPTYACRCCPKMDSKGRVPSTLRVKSARS", |
|
"PLAGVACGRGLDYRCPRKMVPGDLQVTPATQRPYG", |
|
"CGVRLGYPGCADVPLRGRSSFAPRACMKKDPRVTR", |
|
"RKGVAYLYECRKLRCRADYKPRGMDGRRLPKASTT", |
|
"RPTGAVNCKQAKVYRGLPLPMMGKVPRVCRSRRPY", |
|
"RLDGGYTCGQALDCKPGRKPPKMGCADLKSTVATP", |
|
"LGTCRKLVRYPQCADPPVMGRSSFRPKACCRQDPV", |
|
"RVGYAMCSPKLCSCRADYKPPMGDGDRLPKAATSK", |
|
"QPKAVNCRKAMVYRPKPLPMDKGVPVCRSKRPRPY", |
|
] |
|
|
|
# Additional Family 2: Structural Proteins |
|
new_sequences_2 = [ |
|
"VGKGFRYGSSQKRYLHCQKSALPPSCRRGKGQGSAT", |
|
"KDPTVMTVGTYSCQCPKQDSRGSVQPTSRVKTSRSK", |
|
"PLVGKACGRSSDYKCPGQMVSGGSKQTPASQRPSYD", |
|
"CGKKLVGYPSSKADVPLQGRSSFSPKACKKDPQMTS", |
|
"RKGVASLYCSSKLSCKAQYSKGMSDGRSPKASSTTS", |
|
"RPKSAASCEQAKSYRSLSLPSMKGKVPSKCSRSKRP", |
|
"RSDVSYTSCSQSKDCKPSKPPKMSGSKDSSTVATPS", |
|
"LSTCSKKVAYPSSKADPPSSGRSSFSMKACKKQDPPV", |
|
"RVGSASSEPKSSCSVQSYSKPSMSGDSSPKASSTSK", |
|
"QPSASNCEKMSSYRPSLPSMSKGVPSSRSKSSPPYQ", |
|
] |
|
|
|
# Tokenize the sequences and convert to tensors |
|
# Merge all sequences |
|
new_sequences = new_sequences_0 + new_sequences_1 + new_sequences_2 |
|
inputs = tokenizer(new_sequences, return_tensors="pt", padding=True, truncation=True) |
|
|
|
# Use the model to get the logits |
|
with torch.no_grad(): |
|
logits = model(**inputs).logits |
|
|
|
# Get the predicted class for each sequence |
|
predicted_class_ids = torch.argmax(logits, dim=-1) |
|
|
|
# Print the predicted class for each sequence |
|
for sequence, predicted_class in zip(new_sequences, predicted_class_ids): |
|
print(f"Sequence: {sequence}, Predicted class: {predicted_class.item()}") |
|
``` |
|
|