Transfer learning för textklassificering

Djupinlärning för text med PyTorch

Shubham Jain

Instructor

Vad är transfer learning?

 

Transfer Learning

  • Använd befintlig kunskap från en uppgift på en relaterad uppgift

 

  • Sparar tid
  • Delar kompetens
  • Minskar behovet av stora datamängder

 

  • En engelsklärare börjar undervisa i historia
Djupinlärning för text med PyTorch

Hur transfer learning fungerar

Transfer Learning I

Djupinlärning för text med PyTorch

Hur transfer learning fungerar

Transfer Learning II

Djupinlärning för text med PyTorch

Hur transfer learning fungerar

Transfer Learning II

Djupinlärning för text med PyTorch

Hur transfer learning fungerar

Transfer Learning III

Djupinlärning för text med PyTorch

Förtränad modell: BERT

  • Bidirectional Encoder Representations from Transformers

Bert Sentiment Analysis

  • Tränad för språkmodellering
  • Flera lager av transformers
  • Förtränad på stora textmängder
Djupinlärning för text med PyTorch

Praktiskt: implementera 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)
Djupinlärning för text med PyTorch

Finjustera 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
Djupinlärning för text med PyTorch

Utvärdering på ny 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
Djupinlärning för text med PyTorch

Nu kör vi en övning!

Djupinlärning för text med PyTorch

Preparing Video For Download...