Views
No views yet
transformers library1from transformers import BertModel, BertTokenizer
2
3tokeniser = BertTokenizer.from_pretrained("Exscientia/IgBert_unpaired", do_lower_case=False)
4model = BertModel.from_pretrained("Exscientia/IgBert_unpaired", add_pooling_layer=False)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) [CLS] token at the beginning of each sequence, a [SEP] token at the end of each sequence and pads using the [PAD] token. For example a batch containing sequences E V V M, A L will be tokenised to [CLS] E V V M [SEP] and [CLS] A L [SEP] [PAD] [PAD].1output = model(
2 input_ids=tokens['input_ids'],
3 attention_mask=tokens['attention_mask']
4)
5
6residue_embeddings = output.last_hidden_state1import 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)add_pooling_layer=True and using output.pooler_output in the down-stream task.