-->
popup

Исследование чат-бота на основе нейронной сети трансформер

Исследование производительности чат-бота на основе нейронной сети трансформер для машинного перевода

Введение

Для переводов на данный момент наиболее распространены чат-боты, которые используют нейронные сети на сопоставлении данных. Такой под- ход сильно ограничивает скорость и достоверность перевода. Для решения данной проблемы разрабатываются глубокие нейронные сети, способные обучаться на меньшем количестве данных, путём выстраивания логики ис- пользования элементов языка

Строение нейронной сети трансформер

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

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

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

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

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

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

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

Чтобы компенсировать дополнительную сложность, размер выходного вектора делится на количество головок. В классическом трансформаторе используют размер входных данных 512 и 8 голов, что дает векторное представление 64. Таким образом, у модели есть несколько независимых способов для понимания ввода. 

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

Многоголовым внимание позволяет каждый раз по-разному обращать внимание на разные части последовательности. Практически это означает:

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

Многоголовое внимание позволяет модели совместно воспринимать информацию из разных подпространств представления в разных позициях. С одной головой внимания усреднение препятствует этому. 

Чтобы обработать предложение, необходимы 3 шага:

1) вложения слов входного предложения вычисляются одновременно;

2) к каждому встраиванию применяется позиционное кодирование, в результате чего получаются векторы слов, которые также включают позиционную информацию;

3) векторы слов передаются в первый блок кодировщика.

Каждый блок состоит из следующих слоев в том же порядке:

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

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

  •  выходная последовательность подается полностью и вычисляются вложения слов;
  •  применяется позиционное кодирование;
  •  векторы передаются в первый блок декодера.

Каждый блок декодера включает в себя:

  •  маскированный слой самоконтроля с несколькими головками;
  •  уровень нормализации, за которым следует остаточное соединение; 
  • новый уровень внимания с несколькими головками;
  • второй уровень нормализации и остаточное соединение;
  •  линейный слой и третье остаточное соединение.

Блок декодера примет вид, как показано на рисунке 1.

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

 

 

Рассмотрим подробней слой самовнимание. Именно здесь декодер обрабатывает закодированное представление. Матрица внимания, сгенерированная кодером, передается на другой уровень внимания вместе с результатом предыдущего блока внимания.

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

Функциональная схема и алгоритм разрабатываемого чат-бота

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

Алгоритм обучения нейронной сети представлен на рисунке 3. Задаются настройки для трансформера и количество эпох, после чего проверяется, имеется ли собственная выборка. Если её нет, она создаётся для сохранения прогресса обучения в дальнейшем. После обучения модели высчитываются потери информации, с помощью которых оптимизируют модель. Когда модель закончит обучение, конечный перевод будет записан в файл.

Выбор операционной системы, языков программирования и средств разработки

Для реализации нейронной сети был выбран язык Python, поскольку он имеет большое количество новейших библиотек для машинного перевода, а также содержит инструменты для расчётов операций с векторами. Кроме того, язык Python по большей части не требователен к операционным системам, средствам разработки и имеет поддержку со многими языками программирования. Для увеличения продуктивности системы, взаимодействие с базой данных, работой API, генерация ответов при помощи нейронной сети реализовано на языке C#. Для данных языков была выбрана среда Visual Studio 2022, поскольку именно она позволяет полностью воспользоваться преимуществами Python и C#. Хоть языки и среда были выбраны для реализации кроссплатформенного приложения, предпочтения были отданы операционной системе Microsoft Windows 10, поскольку она лучше всего взаимодействует со средой для C# – Visual Studio.

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

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

Алгоритм BLEU оценивает качество перевода по шкале от 0 до 100 на основании сравнения человеческого перевода и машинного перевода и поиска общих фрагментов. Основная идея состоит в том, что чем больше совпадений, тем лучше перевод.