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

Contextual Embeddings: ELMo

2018 год. Команда AI2. Одна идея: слово 'bank' должно иметь разный вектор в 'river bank' и 'bank account'. Word2Vec даёт один вектор на слово - навсегда, независимо от предложения. ELMo (Embeddings from Language Models) генерирует столько представлений, сколько контекстов. Word2Vec обучается в 100 раз быстрее и занимает в 20 раз меньше памяти - но ELMo выигрывает на большинстве NLP-бенчмарков 2018 года. Глубина контекста важнее скорости.

  • **Grammarly**: контекстуальная коррекция - 'I need to bank on this plan' и 'meet at the bank' требуют понимания смысла слова в контексте
  • **Information Extraction**: автоматическое извлечение именованных сущностей из юридических и медицинских документов, где одно слово имеет разные роли в зависимости от окружения
  • **Question Answering**: SQuAD-benchmark - ELMo поднял F1 с 81.1 до 85.8, добавление ELMo поверх существующей модели без изменения архитектуры
  • **AllenNLP**: библиотека AI2 построена вокруг ELMo как default feature extractor для всех NLP пайплайнов

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

  • Статические эмбеддинги: word2vec, GloVe и их ограничения
  • Рекуррентные сети: RNN и LSTM, обработка последовательностей
  • Идея многозначности: одно слово может иметь разные значения
  • Word Embeddings: Word2Vec, GloVe
  • RNN и LSTM

Matthew Peters и AI2, 2018

В феврале 2018 года Matthew Peters с коллегами из Allen Institute for AI опубликовал статью 'Deep contextualized word representations'. Идея существовала в зачаточном виде раньше - context2vec (2016) пробовал использовать bidirectional LSTM для контекстных представлений, но не масштабировался. AI2 взял большую модель (2 слоя BiLSTM с 4096 hidden units, обученную на 1B Words benchmark), добавил character CNN на входе и послойное взвешивание - и получил ELMo. При публикации модель улучшила SOTA сразу на 6 задачах, что стало беспрецедентным. Best Paper Award на NAACL 2018. Через 9 месяцев Google опубликовал BERT, взяв идею контекстных представлений и заменив BiLSTM на Transformer с Masked LM.

BiLSTM-архитектура ELMo

2018 год. Команда AI2 (Allen Institute for AI). Одна идея: слово 'bank' должно иметь разный вектор в 'river bank' и 'bank account'. Word2Vec даёт один вектор на слово - навсегда. ELMo (Embeddings from Language Models, Peters et al.) генерирует столько представлений, сколько контекстов. Архитектура: двунаправленный LSTM с L=2 слоями. Два языковых модели работают параллельно - прямой (слева направо) и обратный (справа налево). Их скрытые состояния конкатенируются на каждом уровне.

**Character-level CNN на входе** - ключевое решение ELMo. Word2Vec не знает слово 'uncharacteristically'. ELMo разбивает его на символы, прогоняет через свёрточную сеть с фильтрами разных размеров (2-7 символов), получает вектор для любого слова. OOV проблема исчезает архитектурно. SpaCy использует аналогичный BiLSTM подход в своих `en_core_web_lg` моделях.

Почему ELMo использует character-level CNN вместо word lookup table как Word2Vec?

Контекстуализация: разные слои - разная лингвистика

Центральная идея ELMo: не брать один финальный вектор, а взвешенно комбинировать **все слои** BiLSTM. Нижние слои LSTM кодируют синтаксис - части речи, зависимости. Верхние слои - семантику, смысл в контексте. Для каждой NLP-задачи оптимальный вес слоёв разный. ELMo вводит обучаемые скалярные веса s_j и масштабирующий параметр gamma: `ELMo = gamma * sum_j(softmax(s)_j * h_j)`. Веса s_j обучаются при fine-tuning под конкретную задачу.

Эксперименты Peters et al. показали конкретное разделение: нижний LSTM слой ELMo лучше коррелирует с POS-тегами (синтаксис), верхний - с WSD (word sense disambiguation, семантика). NER, где важны оба аспекта, получает максимальную пользу от взвешенной комбинации всех слоёв.

Почему для задачи NER взвешенная комбинация всех слоёв ELMo лучше, чем использование только финального слоя?

Языковая модель как сигнал пре-обучения

ELMo обучается на задаче **предсказания следующего слова**: максимизировать P(w_t | w_1, ..., w_{t-1}) для прямого LSTM и P(w_t | w_{t+1}, ..., w_N) для обратного. Зачем предсказание слов учит синтаксис и семантику? Потому что правильное предсказание требует понимания обоих. 'The doctor told the nurses that ___ would be...': чтобы предсказать 'she' или 'he', нужно отследить referent через синтаксическое дерево. Perplexity = exp(-mean_log_prob) - метрика языковой модели. ELMo достиг perplexity ~39 на 1B Words benchmark.

GPT использует тот же forward LM objective (left-to-right), но с Transformer вместо LSTM. BERT заменил causal LM на **Masked LM** (MLM) - предсказать случайно скрытые 15% токенов по двустороннему контексту. Это позволило BERT обучаться с настоящей двусторонностью, а не двумя раздельными однонаправленными моделями как в ELMo.

Почему обучение на задаче предсказания следующего слова заставляет модель изучать синтаксис и семантику?

Transfer Learning через ELMo: заморозить и подключить

ELMo улучшил state-of-the-art сразу на **6 NLP-задачах** при публикации (SQuAD, SNLI, SRL, coreference, NER, SST-5). Рекорд держался 6 месяцев - до BERT. Схема использования: обученный BiLSTM замораживается полностью. Для каждой задачи добавляется только небольшой task-specific head (пара слоёв). ELMo используется как **feature extractor** - генерирует контекстные эмбеддинги, которые подаются в downstream модель. До ELMo каждая NLP-модель обучалась с нуля - это требовало больших датасетов для каждой задачи отдельно.

**ELMo не fine-tunable в классическом смысле** - веса BiLSTM всегда заморожены. Обучаются только: scalar layer weights (s_j), gamma, и task-specific head. BERT исправил это: весь Transformer fine-tunable end-to-end. Именно это дало BERT дополнительный прирост - 8-15% на большинстве задач относительно ELMo. Hugging Face `pipeline()` абстрагирует весь этот процесс: `pipeline('ner')` внутри загружает модель и запускает inference одной строкой.

ELMo устарел и не используется после появления BERT

ELMo как архитектурный паттерн (BiLSTM feature extractor) жив в production: SpaCy, AllenNLP, многоязычные системы где BERT слишком тяжел. Главное - концептуальный вклад ELMo в понимание того, что контекст необходим для хороших представлений

BERT требует GPU и ~100-400ms на inference. ELMo на CPU обрабатывает текст за 10-30ms. Для систем с миллионами запросов в день это решающий фактор

В чём ключевое ограничение ELMo по сравнению с BERT в контексте transfer learning?

Ключевые идеи

  • **BiLSTM + Character CNN**: forward и backward LM обрабатывают каждый токен с обеих сторон; character CNN решает OOV архитектурно
  • **Послойное взвешивание**: разные слои кодируют синтаксис (нижние) и семантику (верхние); обучаемые scalar weights подбирают смесь под задачу
  • **LM как пре-обучение**: предсказание следующего слова заставляет модель строить лингвистически богатые внутренние представления
  • **Feature extractor паттерн**: веса BiLSTM заморожены - ELMo дал NLP transfer learning до BERT; BERT добавил полный fine-tuning

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

ELMo объединяет идеи из sequence modeling, языкового моделирования и transfer learning

  • Word Embeddings: Word2Vec, GloVe — ELMo решает главное ограничение статических эмбеддингов - один вектор вне зависимости от контекста
  • RNN, LSTM, GRU — BiLSTM - архитектурная основа ELMo; понимание gating механизмов объясняет, что хранится в скрытых состояниях
  • Метрики и оценка моделей — Perplexity - основная метрика языковой модели; F1 и Accuracy используются для оценки downstream задач NER, QA

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

  • Почему ELMo замораживает веса BiLSTM при fine-tuning на downstream задачах - какой риск возникнет при полном обучении BiLSTM на маленьком датасете?
  • Нижние слои ELMo кодируют синтаксис, верхние - семантику. Как это согласуется с тем, как LSTM обрабатывает последовательность слева направо?
  • ELMo улучшил SOTA на 6 задачах одновременно. Что это говорит об общей природе лингвистических знаний, необходимых для разных NLP-задач?

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

  • nlp-04 — ELMo - прямой ответ на ограничения статических эмбеддингов Word2Vec/GloVe
  • dl-05 — BiLSTM - архитектура, лежащая в основе ELMo
  • nlp-06 — ELMo напрямую подготовил концепции, которые BERT использовал с masked LM
  • dl-01
Contextual Embeddings: ELMo

0

1

Войти