От правил к трансформерам: как NLP научилась понимать контекст
Краткая история обработки естественного языка: системы на правилах, N-граммы, марковские модели, векторы слов, RNN, внимание, трансформеры и большие языковые модели на их основе.
Компьютеры работают с нулями и единицами, так что вполне естественно задаться вопросом, как машина в итоге справляется с английским, греческим, хинди и множеством других человеческих языков. Чат-боты, голосовые ассистенты, переводчики и рекомендательные системы стали частью повседневной жизни. Они отвечают на вопросы, переводят, предлагают помощь и даже пишут ответы, звучащие по-человечески. Мы можем говорить с машинами обычным языком, а не только кодом или фиксированными командами. Область, которая за этим стоит, называется обработкой естественного языка, или NLP.
Что такое NLP
NLP — раздел искусственного интеллекта, машинного обучения и компьютерной лингвистики. Его цель — дать компьютерам возможность обрабатывать, анализировать, понимать и порождать человеческий язык. Работа началась примерно в 1950-х с ранних исследований машинного перевода и вычислительных подходов к языку, и с тех пор область прошла через несколько крупных этапов.
Популярное определение в одну строку гласит, что NLP превращает человеческий язык в форму, с которой может работать компьютер. Отчасти это верно, но с важной оговоркой: сделать язык читаемым для компьютера — не то же самое, что его понять. Перевод предложения в двоичный код не даёт машине никакого знания о его смысле.
Возьмём «Thank you». Совсем простую машину на правилах можно настроить так:
IF input = "Thank you"
THEN response = "You're welcome"
ELSE search for another rule
Для небольшого числа заранее заданных ситуаций это работает. А теперь представьте, что нужно написать правила для каждого предложения, которое только может произнести человек. Это было бы медленно, запутанно и нереалистично, потому что человеческий язык намного богаче любого набора готовых фраз.
Почему язык труден для машин
Человек, понимая предложение, не смотрит на слова по отдельности. Возьмём английское «She saw a bat». Речь о животном (летучей мыши) или о спортивном инвентаре (бите)? Решает только контекст.
Системе, работающей с языком, приходится иметь дело со словами, фразами, порядком слов, грамматикой, частями речи, структурой предложения, контекстом, смыслом, связями между словами, неоднозначностью, намерением, местоимениями и отсылками, а также с разными языками и диалектами. Люди усваивают всё это естественно в детстве: постоянно слышат речь, наблюдают за ситуациями, разговаривают с другими, замечают закономерности и связывают слова с опытом. Машина так язык не осваивает, поэтому исследователи создали вычислительные методы, которые представляют язык и извлекают из него закономерности.
1. NLP на правилах и эвристиках
Одним из ранних подходов был NLP на правилах. Программисты и лингвисты вручную прописывали, как обрабатывать язык, вместо того чтобы система училась на больших данных. В арсенале были словари, грамматические правила, сопоставление с шаблонами, регулярные выражения, синтаксические правила и простые условия if-else. Пара примеров:
IF sentence contains "hello"
THEN classify it as a greeting
IF word ends with "ing"
THEN it may represent a verb
Такие системы годились для узких, чётко очерченных задач, но язык полон исключений. «He is going to the bank» указывает на банк, а «He sat beside the river bank» — на берег реки. Фиксированному правилу трудно различить эти случаи без достаточного контекста. Это ограничение подтолкнуло исследователей к методам, которые извлекают языковые закономерности из данных, а не полагаются целиком на правила, написанные вручную.
2. Статистический NLP и машинное обучение
Следующими стали статистические методы и машинное обучение. Вместо того чтобы явно кодировать каждое языковое правило, исследователи брали большие собрания текстов — корпуса — и извлекали из них статистические закономерности. Рецепт такой: дать машине примеры, позволить ей найти закономерности и затем использовать их для предсказаний.
Это похоже на то, как люди учат язык. Никто не заучивает все возможные предложения. Закономерности усваиваются постепенно. «She is eating food» звучит естественно, а «Food eating is she» в стандартном английском звучит странно. Машина точно так же может узнать, что определённые слова и конструкции обычно встречаются вместе.
N-граммные модели
Один из ключевых статистических подходов — N-граммная модель, которая предсказывает слово по предшествующим словам. Для «She is going to » вероятные продолжения — school, college, market и work. Модель вычисляет вероятности по закономерностям в обучающих данных. Биграмма смотрит на два слова, триграмма — на три:
I am
am going
going to
to school
Затем она может выучить вероятности вроде таких:
P(school | going to)
Это не значит, что машина понимает слово «school» так же, как человек. Она выучила статистическую связь между словами.
3. Марковские модели и моделирование последовательностей
Ещё одна идея статистического NLP — марковское допущение: следующее состояние или слово можно предсказать по ограниченному объёму предыдущей информации.
Word 1 → Word 2 → Word 3 → Word 4
Вместо того чтобы учитывать всю историю, модель в основном смотрит на последние слова. Так появились марковские модели, скрытые марковские модели (HMM) и N-граммные языковые модели. HMM стали особенно важны для разметки частей речи, распознавания речи, распознавания именованных сущностей и разметки последовательностей. Возьмём такое предложение:
Sonal is learning NLP.
POS-теггер может разметить его так:
Sonal → Proper Noun
is → Verb
learning → Verb
NLP → Noun
Модель учится вероятности каждого тега по окружающим словам.
4. От слов к числам
Оставалась более глубокая проблема. Машина не может выполнять математические операции над такими словами:
king
queen
man
woman
Язык нужно было представить математически, и так появились векторные представления. Слово превращается в числовой вектор:
king → [0.21, 0.73, -0.12, ...]
queen → [0.24, 0.71, -0.10, ...]
Векторы позволяют алгоритмам машинного обучения работать с языком математически, и этот подход вырос в эмбеддинги слов. Известный пример — Word2Vec, который показал, что слова, встречающиеся в похожих контекстах, получают похожие векторы. Это был настоящий сдвиг: вместо того чтобы вручную задавать смысл каждого слова, модель может сама выучить полезные представления из языковых данных.
5. Приход нейросетей
По мере роста вычислительных мощностей и объёмов данных исследователи начали применять нейронные сети к NLP. Эти сети автоматически извлекают из данных полезные представления и закономерности, что снизило зависимость от вручную спроектированных статистических признаков. Основными архитектурами были сети прямого распространения, рекуррентные нейросети (RNN), сети долгой краткосрочной памяти (LSTM) и управляемые рекуррентные блоки (GRU).
RNN хорошо подходили для задачи, потому что язык последователен. Они читают предложение шаг за шагом, сохраняя информацию о предыдущих словах:
I → am → learning → NLP
LSTM и GRU создали, чтобы справляться с длинными зависимостями лучше, чем базовые RNN.
6. Проблема контекста
Контекст часто простирается гораздо дальше нескольких последних слов. В «Sonal went to the restaurant because she was hungry» модель должна связать «she» с «Sonal». А когда кубок не помещается в чемодан, потому что «it is too big», то кто из них «it»? Чтобы разрешить такие связи, нужно обращать внимание на разные части предложения.
Внимание
Эта потребность привела к одному из важнейших достижений современного NLP. Механизм внимания позволяет модели решать, какие части входных данных важнее всего при обработке конкретного слова, присваивая разным словам разные веса, а не относясь ко всем предыдущим словам одинаково. В «The cat sat on the mat because it was tired» для обработки «it» нужно понять, какое из предыдущих слов к нему относится, и внимание даёт способ выучить такие связи.
7. Трансформеры
В 2017 году статья «Attention Is All You Need» представила архитектуру Transformer. Она изменила NLP, потому что улавливает связи между словами через внимание и не зависит от пошаговой рекуррентности, как RNN. Общая схема выглядит так:
Input Text
↓
Tokenization
↓
Token Embeddings
↓
Positional Information
↓
Self-Attention
↓
Transformer Layers
↓
Contextual Representation
↓
Prediction / Generation
Центральная идея — self-attention. Каждый токен смотрит на остальные токены последовательности и оценивает, насколько сильно они с ним связаны, что позволяет моделям улавливать связи в гораздо более длинных контекстах.
8. От трансформеров к большим языковым моделям
Трансформеры стали фундаментом многих современных NLP-систем. Такие модели, как BERT, GPT и T5, а также множество других на базе трансформеров, демонстрировали всё более сильные языковые способности. Имея огромные датасеты, большие нейросети и много вычислительных ресурсов, они выучивают гигантское количество языковых закономерностей — так и появились большие языковые модели (LLM).
LLM не просто хранит список заготовленных ответов. В ходе обучения она извлекает статистические и семантические закономерности из огромных объёмов текста. Получив «The capital of India is...», она может предсказать «New Delhi». Получив вопрос, она может сгенерировать последовательность токенов, которая складывается в уместный ответ.
9. От сопоставления слов к пониманию контекста
Эволюцию легко увидеть на одной схеме:
Rule-Based NLP
↓
Statistical NLP
↓
Machine Learning
↓
Word Representations
↓
Neural Networks
↓
RNN / LSTM / GRU
↓
Attention
↓
Transformers
↓
Large Language Models
Так что история NLP — это не просто человеческий язык, переведённый в двоичный код. Путь ведёт от правил, написанных вручную, к статистическим закономерностям, затем к векторам, выученным представлениям, контекстно-зависимым моделям, вниманию и, наконец, к масштабным языковым моделям. Современные системы по-прежнему не понимают язык в точности так, как люди. Но они выучивают очень сложные закономерности и применяют их на практике: переводят, резюмируют, отвечают на вопросы, классифицируют тексты, извлекают информацию, работают с речью и генерируют текст. Всё это — попытка навести мост между человеческим языком и машинными вычислениями, и путь от простых правил к моделям с миллиардами выученных параметров — один из самых увлекательных в AI.