Model pretrained on protein and antibody sequences using a masked language modeling (MLM) objective. It was introduced in the paper
Large scale paired antibody language models.
The model is finetuned from ProtT5 using unpaired antibody sequences from the
Observed Antibody Space.
1from transformers import T5EncoderModel, T5Tokenizer
2
3tokeniser = T5Tokenizer.from_pretrained("Exscientia/IgT5_unpaired", do_lower_case=False)
4model = T5EncoderModel.from_pretrained("Exscientia/IgT5_unpaired")
1# single chain sequences
2sequences = [
3 "EVVMTQSPASLSVSPGERATLSCRARASLGISTDLAWYQQRPGQAPRLLIYGASTRATGIPARFSGSGSGTEFTLTISSLQSEDSAVYYCQQYSNWPLTFGGGTKVEIK",
4 "ALTQPASVSGSPGQSITISCTGTSSDVGGYNYVSWYQQHPGKAPKLMIYDVSKRPSGVSNRFSGSKSGNTASLTISGLQSEDEADYYCNSLTSISTWVFGGGTKLTVL"
5]
6
7# The tokeniser expects input of the form ["E V V M...", "A L T Q..."]
8sequences = [' '.join(sequence) for sequence in sequences]
9
10tokens = tokeniser.batch_encode_plus(
11 sequences,
12 add_special_tokens=True,
13 pad_to_max_length=True,
14 return_tensors="pt",
15 return_special_tokens_mask=True
16)
1output = model(
2 input_ids=tokens['input_ids'],
3 attention_mask=tokens['attention_mask']
4)
5
6residue_embeddings = output.last_hidden_state
To obtain a sequence representation, the residue tokens can be averaged over like so
1import torch
2
3# mask special tokens before summing over embeddings
4residue_embeddings[tokens["special_tokens_mask"] == 1] = 0
5sequence_embeddings_sum = residue_embeddings.sum(1)
6
7# average embedding by dividing sum by sequence lengths
8sequence_lengths = torch.sum(tokens["special_tokens_mask"] == 0, dim=1)
9sequence_embeddings = sequence_embeddings_sum / sequence_lengths.unsqueeze(1)