readme: ---
  license: apache-2.0
  tags:
  - Irony Detection
  - Text Classification
  - tweet_eval
  #metrics:
  #- accuracy
  model-index:
  - name: roberta-base-finetuned-irony
    results: []
  ---
  
  # roberta-base-finetuned-irony
  
  This model is a fine-tuned version of [roberta-base](https://huggingface.co/roberta-base) on the Irony Dataset from [Tweet_Eval](https://huggingface.co/datasets/tweet_eval). 
  
  This is the classification report after training for 10 full epochs:
  
  |  | Precision | Recall | F-1 Score | Support |
  |:-------------:|:-----:|:----:|:---------------:|:--------:|
  | Not Irony (0)        | 0.73  | 0.78| 0.75          | 473   |
  | Irony (1)       | 0.62   | 0.56 | 0.59          | 311   |
  | accuracy        |    |  | 0.69          | 784   |
  | macro avg        | 0.68   | 0.67 | 0.67          | 784   |
  | weighted avg        | 0.69   | 0.69 | 0.69          | 784   |
  
  ## Training and evaluation data
  
  All of the process to train this model is available in [this](https://github.com/vikram71198/Transformers/tree/main/Irony%20Detection) repository. The dataset has been split into 2,862 examples for training, 955 for validation & 784 for testing.
  
  ### Training hyperparameters
  
  The following hyperparameters were used during training:
  - learning_rate: 5e-05
  - train_batch_size: 32
  - eval_batch_size: 32
  - optimizer: default AdamW Optimizer
  - num_epochs: 10
  - warmup_steps: 500
  - weight_decay: 0.01
  - random seed: 42
  
  I also trained for 10 full epochs on Colab's Tesla P100-PCIE-16GB GPU.
  
  ### Training results
  
  | Epoch | Training Loss | Validation Loss |
  |:-------------:|:----:|:---------------:|
  | 1        | 0.691600	  |0.6738196        |
  | 2        | 0.621800  | 0.611911        |
  | 3        | 0.510800  | 0.516174       |
  | 4        | 0.384700  | 0.574607       |
  | 5        | 0.273900  | 0.644613       |
  | 6        | 0.162300  | 0.846262       |
  | 7        | 0.119000  | 0.869178       |
  | 8        | 0.079700  | 1.131574       |
  | 9        | 0.035800  | 1.5123457      |
  | 10        | 0.013600	  |1.5706617       |
  
  ## Model in Action 🚀
  ```python
  from transformers import AutoTokenizer, AutoModelForSequenceClassification
  import torch.nn as nn
  tokenizer = AutoTokenizer.from_pretrained("vikram71198/roberta-base-finetuned-irony")
  model = AutoModelForSequenceClassification.from_pretrained("vikram71198/roberta-base-finetuned-irony")
  #Following the same truncation & padding strategy used while training
  encoded_input = tokenizer("Enter any text/tweet to be classified. Can input a list of tweets too.", padding = True, return_tensors='pt')
  output = model(**encoded_input)["logits"]
  #detaching the output from the computation graph
  detached_output = output.detach()
  #Applying softmax here for single label classification
  softmax = nn.Softmax(dim = 1)
  prediction_probabilities = list(softmax(detached_output).detach().numpy())
  predictions = []
  for x,y in prediction_probabilities:
     predictions.append("not_irony") if x > y else predictions.append("irony")
  print(predictions)
  ```
  Please note that if you're performing inference on a lengthy dataset, split it up into multiple batches, otherwise your RAM will overflow, unless you're using a really high end GPU/TPU setup. I'd recommend a batch length of 50, if you're working with a vanilla GPU setup.
  ### Framework versions
  
  - Transformers 4.12.5
  - Pytorch 1.11.0
  - Datasets 1.17.0
  - Tokenizers 0.10.3