Рекуррентные нейронные сети для классификации текста

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

Shubham Jain

Data Scientist

RNN для текста

  • Обрабатывают последовательности переменной длины
  • Поддерживают краткосрочную память
  • CNN выявляют паттерны в фрагментах
  • RNN учитывают предыдущие слова для понимания смысла
Глубокое обучение для работы с текстом на PyTorch

RNN для классификации текста

Изображение сарказма

Почему?

  • RNN читают предложения как человек — слово за словом
  • Понимают контекст и порядок слов

Пример: определение сарказма в твите

«I just love getting stuck in traffic.»

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

Повторение: реализация Dataset и DataLoader

# Import libraries
from torch.utils.data import Dataset, DataLoader

# Create a class class TextDataset(Dataset):
def __init__(self, text): self.text = text
def __len__(self): return len(self.text)
def __getitem__(self, idx): return self.text[idx]
Глубокое обучение для работы с текстом на PyTorch

Реализация RNN

sample_tweet = "This movie had a great plot and amazing acting."
# Preprocess the review and convert it to a tensor (not shown for brevity)
# ...
sentiment_prediction = model(sample_tweet_tensor)
  • Обучите модель RNN классифицировать твит как позитивный или негативный
  • Результат: «Positive»
Глубокое обучение для работы с текстом на PyTorch

Вариация RNN: LSTM

Изображение анализа тональности

Твит:

  «Loved the cinematography, 
  hated the dialogue. 
  The acting was exceptional,
  but the plot fell flat.»
  • Long Short-Term Memory (LSTM) справляется со сложными зависимостями там, где RNN могут не справиться
Глубокое обучение для работы с текстом на PyTorch

LSTM

Архитектура LSTM: входной, забывающий и выходной вентили

class LSTMModel(nn.Module):

def __init__(self, input_size, hidden_size, output_size): super(LSTMModel, self).__init__() self.lstm = nn.LSTM(input_size, hidden_size, batch_first=True) self.fc = nn.Linear(hidden_size, output_size)
def forward(self, x): _, (hidden, _) = self.lstm(x) output = self.fc(hidden.squeeze(0)) return output
Глубокое обучение для работы с текстом на PyTorch

Вариация RNN: GRU

  • Тема письма:

       «Congratulations!
        You've won a free trip 
        to Hawaii!»
    

 

  • Gated Recurrent Unit (GRU) быстро распознаёт спам-паттерны, не требуя полного контекста

Спам по электронной почте

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

GRU

class GRUModel(nn.Module):
    def __init__(self, input_size, hidden_size, output_size):
        super(GRUModel, self).__init__()
        self.gru = nn.GRU(input_size, hidden_size, batch_first=True)
        self.fc = nn.Linear(hidden_size, output_size)

def forward(self, x): _, hidden = self.gru(x) output = self.fc(hidden.squeeze(0)) return output
Глубокое обучение для работы с текстом на PyTorch

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

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

Preparing Video For Download...