Обработка естественного языка

Sequence-to-Sequence и Attention

Предварительные знания

  • Word embeddings: dense-векторы как вход энкодера
  • Sequence labeling и обработка последовательностей (из NER) - понимание токен-уровневых представлений
  • Word Embeddings: Word2Vec, GloVe
  • Named Entity Recognition

От seq2seq к attention

В 2014 году Илья Суцкевер, Ориол Виньялс и Куок Ле из Google опубликовали 'Sequence to Sequence Learning with Neural Networks': две LSTM-сети, энкодер сжимал входное предложение в один вектор фиксированной длины, декодер разворачивал из него выход. Это работало для перевода, но один вектор был узким горлышком для длинных предложений. В том же 2014 году Дмитрий Бахданау, Кёнхён Чо и Йошуа Бенжио в 'Neural Machine Translation by Jointly Learning to Align and Translate' добавили attention: декодер на каждом шаге мог 'смотреть' на все скрытые состояния энкодера, а не на один вектор. В 2015 Минь-Тхан Луонг с коллегами в Стэнфорде предложил более простые и быстрые варианты attention (global/local, dot/general). Эта линия работ напрямую привела к Transformer (2017) и принципу 'attention is all you need'. Идея attention из 2014 года - прямой предок self-attention в Transformer и всех современных LLM

Машинный перевод 2013 года: системы на основе фраз, сотни ручных признаков, тысячи правил. Машинный перевод 2014 года: Bahdanau публикует seq2seq + attention - и качество за один год прыгает на уровень нескольких предыдущих лет. Encoder-Decoder с Attention - это архитектурный принцип, из которого вырос весь современный NLP.

  • **Google Translate (2016):** GNMT - первая production seq2seq с attention, заменила phrase-based SMT
  • **Summarization (BART, PEGASUS):** encoder читает документ, decoder генерирует краткое изложение
  • **Speech Recognition (Listen, Attend and Spell):** encoder обрабатывает аудио, decoder генерирует текст с attention по фреймам

Encoder-Decoder архитектура

Перевод предложения «The cat sat on the mat» на русский требует прочитать всё предложение целиком, «понять» его смысл, и только потом генерировать русские слова - в другом порядке и с другой длиной. Один RNN не справляется с этим: он должен одновременно читать и писать. **Encoder-Decoder** разделяет задачу: encoder читает весь input и сжимает в вектор, decoder разворачивает этот вектор в output.

Encoder - BiLSTM (или стек LSTM), который на каждом шаге обновляет hidden state. Финальный hidden state передаётся decoder как начальное состояние. Decoder генерирует токены autoregressive: каждый следующий токен зависит от предыдущего.

**Bottleneck problem:** для предложений > 30 слов фиксированный context vector теряет ранние токены. Именно это привело к изобретению Attention (Bahdanau, 2014) - декодер обращается ко всем encoder hidden states, а не только к последнему.

Почему Encoder-Decoder без attention плохо работает для длинных предложений?

Attention Mechanism: Bahdanau vs Luong

Решение bottleneck - позволить decoder смотреть на **все** encoder hidden states при генерации каждого токена, и для каждого токена вычислять, какие encoder состояния важнее. Это и есть attention: вместо одного context vector - взвешенная сумма всех encoder states, веса меняются на каждом шаге декодера.

**Alignment matrix** - побочный продукт attention: показывает, на какие input-токены смотрела модель при генерации каждого output-токена. Для перевода это почти идеальная карта выравнивания слов без supervision.

В чём ключевое структурное отличие Bahdanau от Luong attention?

Beam Search декодирование

Decoder на каждом шаге выдаёт распределение по словарю. Greedy decoding берёт максимум - быстро, но часто даёт субоптимальный результат: локально лучший токен может вести к плохой фразе. **Beam Search** сохраняет k лучших частичных последовательностей (beams) и на каждом шаге расширяет каждый beam, оставляя снова k лучших - по суммарному log-probability.

**Length penalty** необходима: без неё beam search всегда предпочитает короткие последовательности (меньше слагаемых в сумме log-prob). В OPUS-MT и Fairseq стандарт - `length_penalty=1.0`, в Google NMT исторически 0.6-0.9.

Beam Search с beam_width=1 эквивалентен:

Teacher Forcing и exposure bias

Decoder на каждом шаге принимает предыдущий токен как input. При обучении есть выбор: подавать **собственный предсказанный токен** или **правильный токен из ground truth**. Второй вариант - это **Teacher Forcing**: учитель (ground truth) принудительно показывает правильный предыдущий токен, не давая ошибкам накапливаться. Это ускоряет сходимость в 3-5 раз.

Но Teacher Forcing создаёт **exposure bias**: при обучении модель видела только правильные токены, при inference - только свои предсказания (которые иногда ошибочны). Одна ошибка на inference тянет следующие токены в неверном направлении - модель не обучалась «выкарабкиваться» из ошибок. Это gap между train-distribution и inference-distribution.

**Scheduled Sampling** (Bengio et al., 2015) - прагматичный фикс exposure bias: постепенно снижать teacher_forcing_ratio по мере обучения. Не идеально теоретически, но работает на практике. Transformer с cross-entropy loss тоже страдает exposure bias - там используют Minimum Risk Training или reinforcement (REINFORCE) для fine-tuning.

Teacher Forcing - всегда лучше, надо использовать ratio=1.0 всегда

Teacher Forcing ускоряет обучение, но создаёт exposure bias. Scheduled Sampling (постепенное снижение ratio) даёт лучшее качество на inference

При ratio=1.0 модель никогда не учится восстанавливаться после ошибок - при inference любая ошибка декодера сбивает всю остальную генерацию

Exposure bias в seq2seq моделях означает:

Seq2Seq и Attention: ключевые идеи

  • Encoder сжимает input в hidden states, Decoder разворачивает их в output - разделение «чтения» и «записи»
  • Bottleneck проблема: один context vector не вмещает длинные последовательности - решение: Attention
  • Bahdanau (additive, s_{t-1}) vs Luong (multiplicative, s_t) - оба дают alignment matrix как побочный продукт
  • Beam Search сохраняет k лучших кандидатов, length penalty компенсирует bias к коротким последовательностям
  • Teacher Forcing ускоряет обучение, но создаёт exposure bias; Scheduled Sampling - компромисс

Связанные темы

Seq2Seq с Attention - прямой предок Transformer и современных LLM.

  • Transformer архитектура — Масштабирует идею attention: убирает RNN, делает attention основой всего
  • Рекуррентные сети (LSTM, GRU) — Encoder и Decoder в базовом seq2seq - это LSTM/GRU
  • Машинный перевод и BLEU — Seq2Seq - стандартная архитектура NMT, BLEU - метрика качества перевода

Вопросы для размышления

  • Alignment matrix в Bahdanau attention интерпретируется как «на какое входное слово смотрит декодер». Насколько эта интерпретация точна и где она может вводить в заблуждение?
  • Transformer заменил RNN в seq2seq. Какие свойства RNN encoder-decoder при этом были потеряны, и имеет ли это значение на практике?
  • Exposure bias существует и в Transformer (cross-entropy training). Почему RLHF частично решает эту проблему?

Связанные уроки

  • nlp-11 — Seq2Seq с вниманием - стандартная архитектура машинного перевода
  • nlp-12 — Self-attention в трансформерах обобщает внимание seq2seq
  • ml-30-rnn-lstm — Энкодер и декодер - рекуррентные стеки LSTM/GRU
  • ml-31-transformers — Идея внимания масштабировалась в архитектуру Transformer
  • la-02-dot-product — Оценки внимания - скалярные произведения запроса и ключей
  • dl-01
Sequence-to-Sequence и Attention

0

1

Войти