Transfer learning per la classificazione del testo

Deep Learning per il testo con PyTorch

Shubham Jain

Instructor

Che cos'è il transfer learning?

 

Transfer Learning

  • Riusa conoscenze da un compito a uno correlato

 

  • Fa risparmiare tempo
  • Condivide competenze
  • Riduce il bisogno di molti dati

 

  • Un insegnante di inglese inizia a insegnare storia
Deep Learning per il testo con PyTorch

Meccanica del transfer learning

Transfer Learning I

Deep Learning per il testo con PyTorch

Meccanica del transfer learning

Transfer Learning II

Deep Learning per il testo con PyTorch

Meccanica del transfer learning

Transfer Learning II

Deep Learning per il testo con PyTorch

Meccanica del transfer learning

Transfer Learning III

Deep Learning per il testo con PyTorch

Modello pre-addestrato: BERT

  • Bidirectional Encoder Representations from Transformers

Bert Sentiment Analysis

  • Addestrato per il language modeling
  • Più livelli di transformers
  • Pre-addestrato su grandi corpora
Deep Learning per il testo con PyTorch

Pratica: implementare 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 di 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

Valutare su nuovo testo

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

Esercitiamoci!

Deep Learning per il testo con PyTorch

Preparing Video For Download...