Transfer learning for text classification

Deep Learning per il testo con PyTorch

Shubham Jain

Instructor

What is transfer learning?

 

Transfer Learning

  • Use pre-existing knowledge from one task to a related task

 

  • Saves time
  • Share expertise
  • Reduces need for large data

 

  • An English teacher starts teaching History
Deep Learning per il testo con PyTorch

Mechanics of transfer learning

Transfer Learning I

Deep Learning per il testo con PyTorch

Mechanics of transfer learning

Transfer Learning II

Deep Learning per il testo con PyTorch

Mechanics of transfer learning

Transfer Learning II

Deep Learning per il testo con PyTorch

Mechanics of transfer learning

Transfer Learning III

Deep Learning per il testo con PyTorch

Pre-trained model : BERT

  • Bidirectional Encoder Representations from Transformers

Bert Sentiment Analysis

  • Trained for language modeling
  • Multiple layers of transformers
  • Pre-trained on large texts
Deep Learning per il testo con PyTorch

Hands-on: implementing BERT

texts = ["I love this!", 
         "This is terrible.", 
         "Amazing experience!", 
         "Not my cup of tea."]
labels = [1, 0, 1, 0]

import torch from transformers import BertTokenizer, BertForSequenceClassification
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
inputs = tokenizer(texts, padding=True, truncation=True, return_tensors="pt", max_length=32) inputs["labels"] = torch.tensor(labels)
Deep Learning per il testo con PyTorch

Fine-tuning BERT

optimizer = torch.optim.AdamW(model.parameters(), lr=0.00001)
model.train()

for epoch in range(1): outputs = model(**inputs)
loss = outputs.loss loss.backward()
optimizer.step() optimizer.zero_grad()
print(f"Epoch: {epoch+1}, Loss: {loss.item()}")
Epoch: 1, Loss: 0.7061821222305298
Deep Learning per il testo con PyTorch

Evaluating on new text

text = "I had an awesome day!"
input_eval = tokenizer(text, return_tensors="pt", truncation=True, 
                       padding=True, max_length=128)

outputs_eval = model(**input_eval)
predictions = torch.nn.functional.softmax(outputs_eval.logits, dim=-1)
predicted_label = 'positive' if torch.argmax(predictions) > 0 else 'negative' print(f"Text: {text}\nSentiment: {predicted_label}")
Text: I had an awesome day!
Sentiment: positive
Deep Learning per il testo con PyTorch

Let's practice!

Deep Learning per il testo con PyTorch

Preparing Video For Download...