Как машины понимают язык? Взгляд на архитектуру, лежащую в основе понимания естественного языка

Машины быстро становятся все лучше и лучше в понимании нашего языка.

Персональные помощники, такие как Google Assistant, Siri и Alexa, могут эффективно понимать подсказки пользователя и выполнять любые инструкции, которые им были даны.

Google Translate, инструмент, позволяющий переводить с одного языка на другой, работает на основе методов глубокого обучения.

И самым впечатляющим из них является GPT-3 от Open AI, который показал невероятные результаты. Получив от пользователя любой текст, он выдает так называемое «завершение» этого текста. GPT-3 может «дополнять» тексты, чтобы написать свои собственные сценарии к фильмам, тексты песен, переводить с одного языка на другой, писать код и многое другое. Компания Google также недавно объявила о своем видении собственной аналогичной модели PaLM, которая, как утверждается, имеет в 3 раза больше параметров, чем GPT-3, что чрезвычайно интересно, поскольку перед нами открывается перспектива создания машины, способной создавать еще более человекоподобные тексты.

Но как все эти модели понимают то, что мы говорим? Существует довольно много различных подходов к пониманию языка, которые мы сегодня рассмотрим.

Кодировщики и декодировщики

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

Работа кодировщика, как следует из названия, заключается в том, чтобы встроить/кодировать входные данные пользователя в вектор, который передает его смысл.

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

Архитектура РНС «от последовательности к последовательности» (Seq2Seq)

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

В этой архитектуре и кодер, и декодер представляют собой модели LSTM, но могут использоваться и GRU.

Если вы не знаете, как работают RNN (какими являются LSTM и GRU), я рекомендую сначала немного изучить их, чтобы понять эту архитектуру.

Кодер

Сначала кодер считывает входную последовательность с шагом по времени (как это всегда делают RNN). Выходы этих LSTM/GRU отбрасываются, и сохраняется только конечное внутреннее состояние (состояния) (LSTM имеют 2 внутренних состояния, а GRU — только 1).

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

Декодер

Декодер, также представляющий собой модель LSTM/GRU, принимает вектор контекста в качестве своего начального скрытого состояния.

Затем ему подается начальная лексема и выводится лексема (начальная лексема по сути действует как триггер для вывода последовательности). Этот выведенный токен затем снова подается в качестве входа в декодер, который производит еще один токен. Этот процесс повторяется до тех пор, пока декодер не произведет стоп-токен, который сигнализирует декодеру, что ему больше не нужно производить никаких токенов. Все лексемы, полученные в результате этого процесса, образуют выходную последовательность.

Примечание: токен может быть словом или символом в выходной последовательности, но большинство моделей обычно производят выходную последовательность на уровне слов.

Если собрать кодировщик и декодировщик вместе, то вот как будет выглядеть вся система.

Хотя эта архитектура может давать хорошие результаты, ее зависимость от рекуррентных блоков означает, что ее обучение занимает много времени. Это связано с тем, что данные должны передаваться рекуррентным блокам последовательно, шаг за шагом. Другими словами, мы не можем параллельно обрабатывать данные так, как мы обучаем рекуррентные сети, а учитывая, что современные графические процессоры предназначены для параллельных вычислений, это кажется большим упущенным потенциалом. Именно здесь и приходят на помощь трансформеры.

Механизм внимания

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

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

Внимание было введено для решения этого ограничения моделей кодер-декодер.

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

Например, если мы возьмем предложение «Он из Германии, поэтому он говорит по-немецки».

Если бы мы хотели предсказать слово «немецкий» в этом предложении, нам, очевидно, пришлось бы уделить больше внимания слову «Германия», которое появилось раньше в предложении.

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

Механизм внимания, используемый в Трансформерах, однако, несколько иной…

Самовнимание

Самовнимание — это форма внимания, цель которой — определить, какой вес имеет каждая лексема в последовательности по отношению к другим лексемам в той же последовательности.

Например, возьмем предложение «Мальчик не хотел играть, потому что устал»…

Если мы посмотрим на слово «он», для нас очевидно, что оно относится к «мальчику». Однако для нейронной сети эта связь не столь однозначна. Однако самовнимание позволяет нейронной сети обнаружить такие отношения в последовательности.

Как это работает?

Цель самовнимания — дать каждой лексеме в последовательности список оценок, каждая из которых соответствует тому, насколько она связана с каждой лексемой в последовательности, в которой она находится.

Self-Attention принимает 3 матрицы: Запрос, Ключ и Значение.

Через матрицу каждому токену по сути дается вектор запроса, вектор ключа и вектор значения.

При оценке маркера берется его вектор запроса и сравнивается с ключевыми векторами всех остальных маркеров (оценки варьируются от 0 до 1). Вектор значения других маркеров (который представляет ценность самого маркера) берется и умножается на соответствующие баллы. Идея заключается в том, чтобы сохранить значения токенов, которые имеют значение, и стереть те токены, которые не имеют большого значения.

Вот как выглядит математика для этого…

softmax(QKTd)V=Zsoftmax(frac{Q otimes K^T}{sqrt{d}})V = Z

поэтомуftmax(dQKT)V=Z

Q — матрица запросов
K — матрица ключей
d — количество измерений (длина каждой строки в матрицах Q,K,V)
V — матрица значений
Z — выходная матрица оценок лексем.

Трансформаторы

Теперь, когда мы разобрались с вниманием, давайте рассмотрим трансформеры.

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

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

И кодер, и декодер состоят из модулей, которые могут складываться друг на друга столько раз, сколько им необходимо (показано символом «Nx» рядом с каждым модулем).

Позиционное кодирование

Вы также можете заметить, что в трансформаторах нет повторяющихся единиц, что является особенностью трансформаторов. Отсутствие рекуррентных блоков означает, что они могут обучаться гораздо быстрее, чем модели Seq2Seq RNN, поскольку это позволяет обрабатывать входные данные параллельно и не происходит обратного распространения во времени.

Однако означает ли отсутствие рекуррентных блоков, что мы не можем уловить позиционную/контекстуальную информацию? Нет!

Трансформаторы все еще способны улавливать позиционную информацию без использования рекуррентных блоков. Как показано на схеме, прежде чем входные последовательности попадают в кодер/декодер, они сначала встраиваются в вектор (поскольку нейронные сети работают с векторами, а не с самими словами), а затем позиционно кодируются.

Формула позиционного кодирования выглядит следующим образом…

первая формула применяется ко всем четным позициям входного вектора
вторая формула применяется ко всем нечетным позициям входного вектора.

Вам также может быть интересно, как кодер передает свое представление последовательности декодеру без использования RNN.

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

Генерация текста с помощью трансформаторов

Трансформеры генерируют тексты точно так же, как это делает модель Seq2Seq RNN.

Декодеру подается стартовый токен, который затем производит выход. Этот выход снова подается на вход декодера, и этот процесс повторяется до тех пор, пока не будет получен стоп-текст.

Классификация с помощью трансформаторов

Трансформеры предназначены не только для генерации текста.

Поскольку трансформаторы в конечном итоге создают свое собственное внутреннее «понимание» языка, мы можем использовать кодировщик для извлечения их языкового представления и использовать его для классификации текста!

Например, BERT — это модель трансформатора, которая состоит ТОЛЬКО из кодировщика, но может быть эффективно использована для таких вещей, как классификация настроений, ответы на вопросы и распознавание именованных сущностей.

Спасибо!

Надеюсь, вам понравилось узнать немного о том, как машины понимают язык. Это далеко не самое подробное объяснение того, как работают эти модели, но я надеюсь, что оно дает представление о том, что происходит под капотом.

Если вы заинтересованы в использовании трансформаторов в коде, посетите сайт

Оцените статью
Procodings.ru
Добавить комментарий