Трансферное обучение для классификации текста

Глубокое обучение для работы с текстом на PyTorch

Shubham Jain

Instructor

Что такое трансферное обучение?

 

Трансферное обучение

  • Применение знаний, полученных при решении одной задачи, к смежной

 

  • Экономит время
  • Обмен экспертизой
  • Снижает потребность в больших данных

 

  • Учитель английского языка начинает преподавать историю
Глубокое обучение для работы с текстом на PyTorch

Механика трансферного обучения

Трансферное обучение I

Глубокое обучение для работы с текстом на PyTorch

Механика трансферного обучения

Трансферное обучение II

Глубокое обучение для работы с текстом на PyTorch

Механика трансферного обучения

Трансферное обучение II

Глубокое обучение для работы с текстом на PyTorch

Механика трансферного обучения

Трансферное обучение III

Глубокое обучение для работы с текстом на PyTorch

Предобученная модель: BERT

  • Bidirectional Encoder Representations from Transformers

Анализ тональности с BERT

  • Обучен для языкового моделирования
  • Несколько слоёв трансформеров
  • Предобучен на больших текстах
Глубокое обучение для работы с текстом на PyTorch

Практика: реализация 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)
Глубокое обучение для работы с текстом на PyTorch

Дообучение 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
Глубокое обучение для работы с текстом на PyTorch

Оценка на новых текстах

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
Глубокое обучение для работы с текстом на PyTorch

Давайте потренируемся!

Глубокое обучение для работы с текстом на PyTorch

Preparing Video For Download...