Что такое seq2seq модель? Примеры задач.

Seq2Seq (Sequence-to-Sequence) — это архитектура нейронной сети, предназначенная для преобразования одной последовательности в другую. Она особенно эффективна при работе с задачами, где вход и выход имеют переменную длину. В основе seq2seq-моделей чаще всего лежат рекуррентные нейронные сети (RNN), такие как LSTM или GRU, однако в более современных системах используются архитектуры на базе attention и Transformer.

Архитектура Seq2Seq

Стандартная seq2seq-модель состоит из двух основных компонентов:

1. Encoder (кодировщик)

Кодировщик обрабатывает входную последовательность и преобразует её в скрытое представление фиксированной размерности (вектор состояния). Обычно это RNN, LSTM или GRU, которая поэтапно считывает входные токены и обновляет своё внутреннее состояние.

Пример:

Input: \["je", "suis", "fatigué"\]  \[вектор состояния h\]

2. Decoder (декодировщик)

Декодер получает вектор состояния от кодировщика и генерирует выходную последовательность по одному токену за раз. На каждом шаге он принимает текущее скрытое состояние и предыдущий сгенерированный токен, и на его основе предсказывает следующий токен.

Output: \["I", "am", "tired"\]

Attention-механизм в Seq2Seq

Базовая архитектура seq2seq страдает при обработке длинных последовательностей, так как сжатие всей входной информации в один вектор (контекст) приводит к потере информации. Это решается с помощью механизма внимания (attention), предложенного в работе Bahdanau et al. (2014).

Суть attention: на каждом шаге декодирования модель «внимательно» смотрит на релевантные части входной последовательности, вычисляя веса внимания к каждому входному токену. Это позволяет более эффективно передавать информацию от энкодера к декодеру.

В уравнениях attention:

  • score = alignment(h_t, s_i)

  • attention_weights = softmax(score)

  • context_vector = sum(attention_weights * encoder_outputs)

Основные этапы обучения Seq2Seq

  1. Подготовка данных: пары вход-выход, например, ("je suis fatigué" → "I am tired").

  2. Tokenization и padding: преобразование слов в индексы, выравнивание по длине.

  3. Векторизация: one-hot или embeddings (например, Word2Vec, FastText).

  4. Обучение модели: минимизация потерь между предсказанным выходом и истинным.

  5. Inference (предсказание): генерация выходной последовательности на практике.

Примеры задач, решаемых с помощью Seq2Seq

1. Машинный перевод

Самая классическая задача, где seq2seq впервые стал популярен — автоматический перевод текста между языками.
Пример: "How are you?" → "Comment ça va ?"

2. Генерация описаний изображений (Image Captioning)

Изображение передаётся в энкодер (обычно CNN, например ResNet), а текст генерируется с помощью декодера (LSTM).
Пример: "Изображение кота" → "A cat is sitting on the bed"

3. Резюмирование текста (Text Summarization)

Seq2seq используется для генерации краткого пересказа длинного текста.
Пример: "В статье говорится о том, как..." → "Статья описывает..."

4. Диалоговые системы и чат-боты

Ответ на реплику генерируется как последовательность.
Пример:
Input: "Привет, как дела?"
Output: "Всё хорошо, спасибо!"

5. Преобразование синтаксических структур

Анализ и преобразование выражений, например, логических формул или программного кода.

6. Speech-to-text

Звуковой сигнал (последовательность фреймов) переводится в текст. Здесь энкодером может выступать CNN+RNN, декодером — текстовая RNN.

7. Text-to-Speech (TTS)

Наоборот: текстовая последовательность превращается в звуковую. Пример: Tacotron (использует seq2seq).

Варианты архитектур

A. Vanilla Seq2Seq (без attention)

  • Простой, но неэффективен на длинных последовательностях.

  • Контекст = последний hidden state энкодера.

B. Seq2Seq с attention

  • Улучшенная производительность.

  • Возможность фокусироваться на разных частях входа.

C. Transformer-based Seq2Seq

  • Полностью без RNN, только attention.

  • Быстрее и лучше масштабируется.

  • Пример: модель BART, T5, GPT в режиме генерации.

Популярные библиотеки и фреймворки

  • TensorFlow/Keras: tf.keras.layers.LSTM, Attention, TextVectorization

  • PyTorch: собственные имплементации RNN/GRU/LSTM + torch.nn.Transformer

  • Hugging Face Transformers: для трансформеров (T5, BART, MarianMT, mBART и др.)

  • OpenNMT, Fairseq: фреймворки для обучения seq2seq и трансформерных моделей.

Подходы к инференсу

Greedy decoding

  • Выбирается наиболее вероятный токен на каждом шаге.

  • Быстро, но может терять глобальный контекст.

Beam Search

  • Хранит топ-N лучших последовательностей на каждом шаге.

  • Более точное, но медленнее.

Sampling (temperature, top-k, top-p)

  • Позволяет вводить случайность.

  • Используется в генеративных моделях.

Seq2Seq-модели стали краеугольным камнем многих приложений NLP до появления трансформеров и до сих пор активно используются, особенно в задачах, где важна структура последовательности и контекст на уровне токенов.