Лингвистика + статистика = NLP

от автора

Как-то так получилось, что я NLP-инженер, который закончил Московский государственный лингвистический университет. Мне нравится ковыряться в коде и мозгах нейросетей, при этом я стараюсь не забывать, на каком фундаменте выросла трендовая ныне область под названием Natural Language Processing (NLP).

Поэтому захотелось собрать в одной статье беглый обзор истории компьютерной лингвистики — от первых теорий и грамматик Хомского до появления рекуррентных сетей и механизма внимания. Думаю, стоит остановиться ровно перед эпохой трансформеров, потому что это отдельная, глубокая и достойная собственного рассказа тема. 

Эпоха правил и символизма (1950-е – начало 1990-х)

Представьте себе 1950 год. Компьютеры огромны, как шкафы, и умны, как… ну, как шкафы. При этом амбиции человечества безграничны: мы уже мечтаем о машинном переводе, который поможет нам понимать секретные документы и научные статьи на других языках без необходимости 5 лет рыдать над трактатами по теории перевода (привет МГЛУ). Это было время, когда учёные искренне верили, что язык — это просто очень сложная, но всё же математически описываемая система. Если написать достаточно правил, рассуждали они, машина заговорит.

Лингвистический фундамент: Фердинанд де Соссюр и Ноам Хомский

Чтобы написать правила для машины, нужно сначала понять, как устроен сам язык. Здесь на сцену выходят тяжеловесы теоретической лингвистики.

Фердинанд де Соссюр. Швейцарский лингвист, который в начале XX века заложил основы структурализма. Его ключевая идея: язык — это система знаков. Каждый знак — это двусторонняя сущность, состоящая из «означающего» (звуковой или графической формы) и «означаемого» (понятия). Эта идея — отправная точка для любой формализации. Если язык — это система, значит, в ней должны быть правила. Если есть правила, их можно записать в код!

Ноам Хомский. Если Соссюр описал систему, то Хомский, американский лингвист и философ, произвел революцию в 1950-х, предложив генеративную (порождающую) лингвистику. Его главная мысль: язык отличает способность порождать бесконечное число новых, грамматически правильных предложений по конечному набору правил. 

  • Синтаксические структуры: он ввел понятие фразовой структуры (Phrase Structure Grammar), где предложение разбирается на составляющие (именные группы, глагольные группы). Это привело к появлению деревьев синтаксического разбора, которые стали основой для компьютерного анализа текста.

  • Контекстно-свободная грамматика (CFG): Хомский создал знаменитую иерархию формальных грамматик. Для NLP критически важны контекстно-свободные грамматики, которые лежат в основе большинства ранних парсеров. Правило CFG выглядит просто: S → NP VP (Предложение состоит из Именной Группы и Глагольной Группы). Это именно тот набор инструкций, который программисты могли превратить в работающий код.

Именно эти теории породили надежду: дайте нам достаточно мощный компьютер и армию лингвистов, и мы опишем язык с точностью до последнего исключения!

Ключевые задачи: машинный перевод и первые чат-боты

1954: Джорджтаунский эксперимент. Событие, с которого всё завертелось. Программа из шести правил перевела 60 предложений с русского на английский. Учёные ликовали, предрекая решение проблемы машинного перевода через 3-5 лет. (Спойлер: не угадали, но зато началась гонка!).

1966: ELIZA — первый чат-бот. Джозеф Вейценбаум из MIT создал ELIZA, названную в честь Элизы Дулиттл из «Пигмалиона» — девушки, которую учили правильной речи. ELIZA пародировала психотерапевта, используя простые шаблоны:

Пользователь: «Все мужчины одинаковы».
ELIZA: «В каком смысле одинаковы?»

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

1968-1970: SHRDLU. Терри Виноград пошёл дальше, создав SHRDLU. Это была система для управления виртуальным миром из кубиков, которая «понимала» команды: «Возьми большой красный куб и поставь его на маленький синий». SHRDLU использовала синтаксический анализ и семантику для действий в ограниченном мире.

Несмотря на успехи, исследователи понимали, что живой язык — это не грамматика из учебника, а настоящий хаос. Например, английская фраза «Time flies like an arrow» («Время летит как стрела») может быть дословно переведена и как «Временные мухи любят стрелу». Слова совпадают? Совпадают. Какие претензии?

К началу 1990-х пришли к заключению, что писать бесконечные правила не вариант, и нужно было что-то принципиально новое. Здесь в историю с ноги врывается статистика со словами «Подержите моё пиво».

Эпоха вероятности и данных (1990-е — 2010-е)

С ростом вычислительных мощностей и появлением интернета (который внезапно оказался бесконечным источником текстового мусора и золота) на сцену выходят статистические методы. Подход меняется радикально: вместо того чтобы учить машину своду лингвистических законов, ей дают миллион книг и говорят: «Смотри, после слова «красная» в 99% случаев идёт существительное. Запомни это и не выпендривайся».

Лингвистический фундамент: Снова Хомский, но под другим углом

Ирония судьбы: сам Ноам Хомский был ярым противником статистических методов, утверждая, что вероятность предложения «Бесцветные зелёные идеи яростно спят» не равна нулю, но и не делает его осмысленным. Однако его формальные структуры оказались идеальной базой для роста всякого рода статистических концепций. Например, Вероятностная контекстно-свободная грамматика (PCFG) — это та же CFG, но к каждому правилу добавляется вероятность его применения. S → NP VP — хорошо, но с какой вероятностью NP будет местоимением, а с какой — сложной именной группой из пяти слов? Ответ дают не философские размышления, а тупо подсчет частот в корпусе текстов.

Ключевые задачи:

Разметка частей речи (POS-tagging)

Первая задача, которую статистика решила блестяще: как отличить существительное «стали» от глагола «стали»? Ведь для компьютера это просто одинаковые буквы. Здесь на помощь пришли Скрытые Марковские Модели (HMM) — изящный способ описать последовательности, где мы видим слова (наблюдаемые), но не видим их «скрытых» грамматических ролей.

Модель перебирает все возможные последовательности тегов T для данной последовательности слов w. Она ищет такую комбинацию, чтобы были максимальны:

  • P(w_i | mid t_i) — эмиссионная вероятность: вероятность увидеть слово w_i, если мы точно знаем, что его часть речи t_i (например, слово «печь» с вероятностью 99.9% будет существительным, а не глаголом в повелительном наклонении).

  • P(t_i | mid t_{i-1}) — переходная вероятность: вероятность встретить тег t_i после тега t_{i-1} (после прилагательного чаще идёт существительное, чем предлог, а после предлога — почти всегда существительное или местоимение).

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

Как превратить «Войну и мир» в столбики чисел
Чтобы статистика вообще могла работать с текстом, его нужно превратить в понятные ей числа. Первым делом придумали модель «Мешок слов» (Bag of Words) — представление текста как набора слов без учёта порядка и грамматики. Если у вас два текста: «Кот ест мышь» и «Мышь ест сыр», то мешки слов будут выглядеть так: {"кот":1, "ест":1, "мышь":1} и {"мышь":1, "ест":1, "сыр":1}. Грубо? Да. Работает? Ещё как, особенно для поиска и кластеризации.

Однако просто считать слова недостаточно: глагол «ест» есть в обоих документах, это скучно и неинформативно. А вот «кот» и «сыр» — это то, что делает документы уникальными. Так родился TF-IDF (Term Frequency — Inverse Document Frequency) — статистическая мера, которая показывает, насколько слово важно для конкретного документа, но при этом редко встречается во всей остальной коллекции.

Если слово «нейтрон» встречается в статье о ядерной физике часто (TF велико), но в коллекции из миллиона кулинарных блогов — всего в паре мест (DF мало), то его вес взлетает до небес. Таким образом мы не просто считает вхождения того или иного слова в документ, а дополнительно взвешиваем его значимость относительно всего корпуса.

N-граммы: Мешок слов полностью игнорирует порядок, превращая «собака кусать человек» и «человек кусать собака» в одинаковые векторы, что, согласитесь, для криминальной хроники критично. N-граммы — это попытка вернуть тексту хотя бы память о соседях. Последовательности из N слов: униграммы (N=1) — просто слова, биграммы (N=2) — пары «машинное обучение», «очень вкусный», триграммы (N=3) — догадайтесь сами что. Такой подход позволил алгоритмам начать различать контексты. (ну хотя бы минимально в ± одно слово)

Извлечение именованных сущностей (NER)
Задача — найти в тексте имена, организации и даты — требовала большего ума, чем HMM. Золотым стандартом стали Условные Случайные Поля (CRF). В отличие от HMM, которая является генеративной моделью (пытается представить, как «рождаются» слова), CRF — модель дискриминативная. Она не гадает на кофейной гуще, а напрямую учится предсказывать метку для слова, опираясь на множество признаков: само слово, соседние слова, их части речи. CRF научили компьютеры не путать город Вашингтон с президентом Вашингтоном в 95% случаев.

Статистический машинный перевод (SMT)
Апофеоз эпохи. Модели IBM (1-5), разработанные в 90-х годах, стали прорывом. IBM Model 1 училась выравнивать слова в параллельных текстах с помощью EM-алгоритма (Expectation-Maximization). Без единого правила о грамматике или склонении, просто сопоставляя миллионы предложений на английском и французском, модель «понимала», что «house» чаще всего переводится как ‘maison’, а ‘the’ — как ‘le’ или ‘la’. Это было чистое статистическое колдовство, доказавшее, что количество данных иногда переходит в качество понимания.

Эпоха нейронных сетей (2010-е…)

К началу 2010-х годов статистические методы уперлись в свой логический потолок. Модели вроде HMM и CRF прекрасно работали с вероятностями и локальным контекстом, но они были «близоруки» и не улавливали долгие смысловые связи в длинных предложениях или абзацах. Надо было придумать подход, который не просто считает частоты, а учится строить внутреннее, «векторное» представление смысла.

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

1. CNN (Сверточные нейронные сети)

CNN пришли из компьютерного зрения, но в NLP их приспособили для поиска ключевых фраз. Модель скользит по тексту небольшим «окном» (например, 3-5 слов) и вычисляет, насколько «сигнал» в этом окне похож на заранее выученный шаблон (например, «очень плохой» или «совершенно потрясающий»). CNN отлично подходят для задач классификации тональности или определения тем, где важно быстро найти семантические маркеры.

2. RNN (Рекуррентные нейронные сети)

Главная проблема языка — порядокRNN стали первой архитектурой, которая обрабатывает текст последовательно, слово за словом, сохраняя в скрытом состоянии h_t память обо всем прочитанном ранее. Каждый новый шаг обновляет «контекстную память», позволяя модели учитывать историю. Однако у простых RNN обнаружилась «амнезия» — они забывали начало длинного предложения.

3. LSTM (Долгая краткосрочная память) и GRU

Чтобы победить «амнезию» RNN, изобрели LSTM — сети с хитрым механизмом «ворот» (забыть, запомнить, выдать). Позже появились GRU — упрощенная, но не менее эффективная версия LSTM. Именно эти архитектуры стали основой для первых качественных систем машинного перевода и генерации текста.

4. Seq2Seq и Attention

В 2014 году появилась архитектура Sequence-to-Sequence (Seq2Seq) : один RNN (энкодер) сжимал исходное предложение в вектор смысла, а другой RNN (декодер) разворачивал его в перевод. Проблема была в том, что вектор-«бутылочное горлышко» не справлялся с длинными предложениями.

Спасением стал механизм Attention (Внимание) . Вместо того чтобы передавать один фиксированный вектор, декодер на каждом шаге «подсматривал» во все скрытые состояния энкодера и решал, на какие слова оригинала сейчас важнее всего обратить внимание. Это позволило моделям перевода (например, Google Translate до 2016-2017 гг.) работать с длинными текстами почти как человек — выхватывая главное и не теряя нить.

…вышло всё равно объёмнее, чем планировалось…

Если обобщить, то современные языковые модели стоят на плечах лингвистики и статистики, а NLP прошёл довольно большой путь от идеи скурпулёзного описания каждого правила и исключения до решения уточнять и совершенствовать алгоритмы, параллельно скармливая им петабайты сырых данных. Сейчас не обязательно быть лингвистом, чтобы заниматься машинной обработкой языка. При этом стоит помнить золотое правило «garbage in — garbage out», и если вы не понимаете свои данные, их структуру и назначение, то рискуете сесть в лужу.

ссылка на оригинал статьи https://habr.com/ru/articles/1040930/