readme: ---
  tags:
  - protein language model
  datasets:
  - UniRef50
  ---
  
  # ProtT5-XL-UniRef50 model
  
  Pretrained model on protein sequences using a masked language modeling (MLM) objective. It was introduced in
  [this paper](https://doi.org/10.1101/2020.07.12.199554) and first released in
  [this repository](https://github.com/agemagician/ProtTrans). This model is trained on uppercase amino acids: it only works with capital letter amino acids.
  
  
  ## Model description
  
  ProtT5-XL-UniRef50 is based on the `t5-3b` model and was pretrained on a large corpus of protein sequences in a self-supervised fashion.
  This means it was pretrained on the raw protein sequences only, with no humans labelling them in any way (which is why it can use lots of
  publicly available data) with an automatic process to generate inputs and labels from those protein sequences.
  
  One important difference between this T5 model and the original T5 version is the denosing objective.
  The original T5-3B model was pretrained using a span denosing objective, while this model was pre-trained with a Bart-like MLM denosing objective.
  The masking probability is consistent with the original T5 training by randomly masking 15% of the amino acids in the input.
  
  It has been shown that the features extracted from this self-supervised model (LM-embeddings) captured important biophysical properties governing protein shape.
  shape.
  This implied learning some of the grammar of the language of life realized in protein sequences.
  
  ## Intended uses & limitations
  
  The model could be used for protein feature extraction or to be fine-tuned on downstream tasks.
  We have noticed in some tasks on can gain more accuracy by fine-tuning the model rather than using it as a feature extractor.
  We have also noticed that for feature extraction, its better to use the feature extracted from the encoder not from the decoder.
  
  ### How to use
  
  Here is how to use this model to extract the features of a given protein sequence in PyTorch:
  
  ```python
  sequence_examples = ["PRTEINO", "SEQWENCE"]
  # this will replace all rare/ambiguous amino acids by X and introduce white-space between all amino acids
  sequence_examples = [" ".join(list(re.sub(r"[UZOB]", "X", sequence))) for sequence in sequence_examples]
  
  # tokenize sequences and pad up to the longest sequence in the batch
  ids = tokenizer.batch_encode_plus(sequence_examples, add_special_tokens=True, padding="longest")
  input_ids = torch.tensor(ids['input_ids']).to(device)
  attention_mask = torch.tensor(ids['attention_mask']).to(device)
  
  # generate embeddings
  with torch.no_grad():
      embedding_repr = model(input_ids=input_ids,attention_mask=attention_mask)
  
  # extract embeddings for the first ([0,:]) sequence in the batch while removing padded & special tokens ([0,:7]) 
  emb_0 = embedding_repr.last_hidden_state[0,:7] # shape (7 x 1024)
  print(f"Shape of per-residue embedding of first sequences: {emb_0.shape}")
  # do the same for the second ([1,:]) sequence in the batch while taking into account different sequence lengths ([1,:8])
  emb_1 = embedding_repr.last_hidden_state[1,:8] # shape (8 x 1024)
  
  # if you want to derive a single representation (per-protein embedding) for the whole protein
  emb_0_per_protein = emb_0.mean(dim=0) # shape (1024)
  
  print(f"Shape of per-protein embedding of first sequences: {emb_0_per_protein.shape}")
  ```
  
  ## Training data
  
  The ProtT5-XL-UniRef50 model was pretrained on [UniRef50](https://www.uniprot.org/help/uniref), a dataset consisting of 45 million protein sequences.
  
  ## Training procedure
  
  ### Preprocessing
  
  The protein sequences are uppercased and tokenized using a single space and a vocabulary size of 21. The rare amino acids "U,Z,O,B" were mapped to "X".
  The inputs of the model are then of the form:
  
  ```
  Protein Sequence [EOS]
  ```
  
  The preprocessing step was performed on the fly, by cutting and padding the protein sequences up to 512 tokens.
  
  The details of the masking procedure for each sequence are as follows:
  - 15% of the amino acids are masked.
  - In 90% of the cases, the masked amino acids are replaced by `[MASK]` token.
  - In 10% of the cases, the masked amino acids are replaced by a random amino acid (different) from the one they replace.
  
  ### Pretraining
  
  The model was trained on a single TPU Pod V2-256 for 991.5 thousand steps in total, using sequence length 512 (batch size 2k).
  It was trained using ProtT5-XL-BFD model as an initial checkpoint, rather than training from scratch.  
  It has a total of approximately 3B parameters and was trained using the encoder-decoder architecture.
  The optimizer used is AdaFactor with inverse square root learning rate schedule for pre-training.
  
  
  ## Evaluation results
  
  When the model is used for feature extraction, this model achieves the following results:
  
  Test results :
  
  | Task/Dataset | secondary structure (3-states) | secondary structure (8-states)  |  Localization | Membrane  |
  |:-----:|:-----:|:-----:|:-----:|:-----:|
  |   CASP12  | 81 | 70 |    |    |
  |   TS115   | 87 | 77 |    |    |