Ответ
До революционной работы "Attention Is All You Need" (2017) в NLP преобладали три основных класса архитектур:
-
Рекуррентные нейронные сети (RNN) и их варианты (LSTM, GRU):
- Принцип: Последовательная обработка текста, где скрытое состояние обновляется на каждом шаге.
- Недостатки:
- Плохой параллелизм из-за последовательной природы, что замедляет обучение.
- Проблемы с запоминанием долгосрочных зависимостей (частично решены LSTM).
- Пример кода LSTM для классификации на PyTorch:
import torch.nn as nn
class TextClassifierLSTM(nn.Module): def init(self, vocab_size, embedding_dim, hidden_dim, output_dim): super().init() self.embedding = nn.Embedding(vocab_size, embedding_dim) self.lstm = nn.LSTM(embedding_dim, hidden_dim, batch_first=True, bidirectional=True) self.fc = nn.Linear(hidden_dim 2, output_dim) # 2 для bidirectional
def forward(self, text): embedded = self.embedding(text) # [batch_size, seq_len, emb_dim] output, (hidden, cell) = self.lstm(embedded) # Объединяем скрытые состояния для bidirectional LSTM hidden = torch.cat((hidden[-2,:,:], hidden[-1,:,:]), dim=1) return self.fc(hidden) -
Сверточные нейронные сети (CNN):
- Применяли одномерные свертки к матрице эмбеддингов слов для выделения локальных n-граммных паттернов.
- Быстрее RNN, но хуже справлялись с глобальными контекстными зависимостями в длинных текстах.
-
Модели на основе механизма внимания (Attention) в архитектурах Encoder-Decoder:
- Ключевой прорыв — работа Bahdanau (2015) по выравнивающему вниманию (alignment) для машинного перевода.
- Декодер "заглядывал" в скрытые состояния энкодера, взвешивая их важность для генерации каждого следующего слова.
- Ограничение: Attention использовался как дополнение к RNN/CNN, а не как самостоятельный механизм.
Трансформер кардинально изменил парадигму, полностью отказавшись от рекуррентности и сверток в пользу самовнимания (self-attention), что позволило беспрецедентно параллелизовать обработку последовательностей и эффективно моделировать зависимости любой длины.