Введение

В блоге рассматривается дизайн диалогового ИИ. Разговорный ИИ — это тип чат-бота, способный вести неформальные беседы с пользователем.

Существует три типа чат-ботов:

i.) Вопрос-Ответ- Бот отвечает на вопрос пользователя, ссылаясь на абзац.

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

iii)На основе блок-схемы. Это тип чат-бота, в котором бот должен отслеживать контекст диалогов. Напр.- бронирование.

Бизнес-проблема

Чат-боты или другие диалоговые ИИ — это новые тенденции в мире глубокого обучения. Уже существует множество чат-ботов, основанных на правилах, которым не нужны нейронные сети, но они не обеспечивают персонализированный опыт. Чат-бот, созданный в рамках этого тематического исследования, обучен корпусному набору данных диалогов о фильмах Корнелла, а язык — «АНГЛИЙСКИЙ». Это задача моделирования последовательностей, когда пользователь вводит вопрос, а бот должен давать ответы. Корпус содержит коллекцию разговоров, извлеченных из необработанных сценариев фильмов, чат-боту было бы удобнее отвечать на вымышленные вопросы или общие вопросы.

Использование машинного обучения/глубокого обучения

Это задача последовательности к последовательности, где одна последовательность представляет собой диалог из фильма, который подается на кодировщик, в то время как соответствующий ответ или следующий ответ на этот диалог формирует другую последовательность, ожидаемую в качестве вывода декодер. Это задача классификации только там, где мы должны предсказать последовательность на конце декодера. Выход — это вероятность появления определенного результата на стороне декодера при заданной входной последовательности для кодировщика P(y1y2y3|x1x2x3), где мы должны предсказать последовательность y1y2y3 заданной последовательности. x1x2x3 в кодировщик.

ПОКАЗАТЕЛИ ЭФФЕКТИВНОСТИ

  1. Поскольку это задача классификации, в которой мы должны предсказать вывод последовательности на конце декодера, учитывая последовательность для кодировщика, модифицированная разреженная категориальная кросс-энтропия, которая не будет учитывать потери для дополненных нулей.
  2. оценка BLEU.

Источник данных

Этот корпус содержит большую, богатую метаданными коллекцию вымышленных разговоров, извлеченных из необработанных сценариев фильмов. Происходит 220 579 разговоров между10 292 парами киногероев с участием 9 035 персонажей из617 фильмов в общей сложности 304 713 высказываний. Метаданные набора данных включают жанры, год выпуска, рейтинг IMDB, количество голосов IMDB, пол (для 3774 символов) и позицию в титрах фильмов (3321 символ).

ИСТОЧНИКhttps://www.cs.cornell.edu/~cristian/Cornell_Movie-Dialogs_Corpus.html

Существующие подходы

1. Простая модель кодировщик-декодер

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

2. Модель кодера-декодера с вниманием

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

3. Трансформатор

Преобразователь представляет собой современную модель обработки естественного языка (NLP), которая, в отличие от двух вышеупомянутых подходов, не использует ось временного шага, вместо этого она имеет концепцию позиционные кодировки. Что делает Transformer лучшим, так это уровень самоконтроля с вниманием к нескольким головкам в кодере и декодере, который обеспечивает более богатое представление любого входного вектора по отношению ко всем другим входным векторам в последовательности.

Улучшения

Я пробовал многоуровневую модель как простого кодировщика-декодера, так и с механизмом внимания, с двунаправленными и многоуровневымислоями LSTM. Предварительно обученные векторы Glove и векторы Fast text были протестированы в качестве весов внедрения для входных данных, и модель оценки BLEU, использующая векторы Fast text в качестве весов внедрения в слое внедрения, лучше, чем модели, использующие векторы Glove.

Исследовательский анализ данных

Данные касаются диалогов, которыми обмениваются персонажи в разных фильмах разных жанров. Итак, в файле movie_lines.txt, представленном в наборе данных, упоминаются персонажи, разговаривающие в диалогах, первый персонаж в каждой строке текстовых файлов movie_lines.txt классифицируется как «вопросы», а ответ, который он получает с другого конца, классифицируется как « ответы». Таким образом, у нас есть пара 221616 вопросов-ответов.

Как видно из рисунка 1, количество слов, встречающихся в вопросах, в основном находится в диапазоне 2–25 со средним значением около 10, хотя есть некоторые последовательности, в которых количество слов более 100.

Давайте посмотрим на процентили

На рисунках 2 и 3 видно, что 99,9 % последовательностей в вопросах содержат менее 107 слов, а последовательность максимальной длины содержит 313 слов.

В ответах мы также можем заметить, что большинство последовательностей содержат слова в диапазоне от 2 до 25, в то время как есть определенные последовательности, в которых количество встречающихся слов превышает 100.

Давайте посмотрим на процентили

На рисунках 5 и 6 видно, что 99,9% последовательностей в ответах содержат менее 113 слов, а последовательность максимальной длины содержит 556 слов.

Давайте посмотрим, какие слова чаще всего встречаются в вопросах.

Из рисунков 7 и 8 видно, что слова «сотовый», «простолюдин», «жлоб» чаще всего встречаются как в вопросах, так и в ответах. Некоторые слова, такие как «на колени», «heelot», чаще встречаются в вопросах, а такие слова, как «тысячелетие», «сводный брат», чаще встречаются в ответах.

Предварительная обработка/очистка данных

Нам нужно извлечь данные из двух разных текстовых файлов «movie_conversations.txt» и «movie_lines.txt».

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

movie_lines.txt — содержит фактический диалог идентификатора предложения и человека, который его высказал.

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

Приведенный выше фрагмент извлекает точные строки, выраженные символами, используя идентификаторы строк, присутствующие в списке Conversation_IDs, возвращаемом методом line_id_collections(path).

Используя две вышеупомянутые функции, мы можем извлечь пары вопросов и ответов.

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

Приведенный выше фрагмент кода расторгает все контрактные формы.

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

Решение для первого разреза

Порядок выполнения будет следующим:

  1. Извлечение данных с помощью функций «line_id_collections(path)» и «movie_line_collections(path)» и формирование пар вопрос-ответ.
  2. Предварительная обработка данных, включая расширение сокращенных слов и избавление от знаков препинания, специальных символов, тегов HTML (если есть), завершающего пробела. Преобразование последовательности в нижний регистр является обязательным.
  3. После предварительной обработки нам нужно избавиться от всех последовательностей как в вопросах, так и в ответах, содержащих более 23 слов, так как они будут рассматриваться как выбросы.
  4. Во-первых, нам нужно создать токенизатор, а затем разметить каждое предложение и добавить токен START и END, чтобы отметить начало и конец предложения. Затем отфильтруйте предложение, длина которого превышает максимальную длину последовательности, или дополните последовательность до максимальной длины.
  5. Затем мы должны внедрить входные предложения, используя слой внедрения, и мы будем использовать предварительно обученные векторы, такие как GLOVE, FAST TEXT, в качестве весов внедрения. Мы также можем случайным образом инициализировать веса встраивания и позволить им обучаться.
  6. Далее, после подготовки данных, мы будем экспериментировать с различными моделями, такими как базовая модель (простой одноуровневый уровень кодировщика-декодера), многослойная модель кодировщика-декодера, многослойная модель кодировщика-декодера с механизмом внимания и модель преобразователя с нуля.
  7. Мы будем использовать оценку BLEU в качестве параметра для сравнения всех моделей, и та из моделей, которая даст наилучший результат, станет окончательной моделью для развертывания.

Объяснение моделей/кодов

1. Базовая модель

Базовая модель представляет собой простую одноуровневую модель кодировщик-декодер без какого-либо механизма внимания. Модель также не была настроена по гиперпараметрам. У нас есть 3 модели (без какой-либо предварительной подготовки встроенных весов, с использованием векторов перчаток в качестве встроенных весов и векторов быстрого текста в качестве встроенных весов.

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

В базовой модели мы будем использовать единицы LSTM в качестве элементарной ячейки для каждого временного шага, и мы будем инициализировать скрытые состояния и состояния ячеек нулями (мы будем инициализировать случайным образом во всех других моделях). Два важных компонента класса Encoder — Embedding Layer и LSTM Layer. __init__ — это конструкция класса, которая инициализирует все уровни переменных. Класс наследуется от TensorFlow.Keras.layers.Layer.

Приведенный выше фрагмент кода представляет собой структуру класса декодера для базовой модели. Этот класс также наследуется от Tensorflow.Keras.layers.Layer и использует скрытое состояние и состояния ячеек, переданные с последнего временного шага кодировщика. Это также имеет Embedded Layer и LSTM Layer в качестве важных компонентов. Обратите внимание, что здесь мы используем только один уровень LSTM в фреймворках, следовательно, это одноуровневая структура.

Теперь, когда у нас есть как кодировщик, так и структура декодера, нам нужна модель, инкапсулирующая их.

Модель инкапсулирует две платформы в одну. Во-первых, она генерирует вектор контекста с помощью Encoder([encoder_hidden_state, cell_hidden_state]) и передает векторы контекста в декодер для прогнозирования токенов.

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

Приведенный выше фрагмент кода указывает на подход жадного прогнозирования поиска. Первоначальный ввод декодера — ‹start›, а затем следующий ввод декодера будет токеном, соответствующим наибольшей вероятности на уровне softmax вывода. Наибольшее значение выбирается с помощью функции ‘Argmax’.

Обучение (без предварительно обученных векторов)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,4557177182974472.

Обучение (с использованием векторов GLOVE)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,44143796600025415.

Обучение (с использованием векторов FAST TEXT)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,43628651833633214.

Наблюдение

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

2. Стекированная модель кодера-декодера

Эта архитектура похожа на базовую модель с добавлением двунаправленного и дополнительного уровня LSTM Layer в Encoder-Decoder.

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

Вышеупомянутые два уровня упоминаются в структуре кодировщика модели, и это единственная поправка. Таким образом, в двунаправленном режиме каждый вход поступает в две единичные ячейки (LSTM), а вывод объединяется.

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

Обучение (без предварительно обученных векторов)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,3794070412018715.

Обучение (с использованием векторов GLOVE)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,38977031068362455.

Обучение (с использованием векторов FAST TEXT)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,43537953077731867.

Наблюдение

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

3. Многоуровневая модель кодера-декодера с механизмом внимания

Проблема с предыдущей моделью заключалась в том, что вектор контекста мог уловить больше сущности входных данных, встречающихся на более поздних временных шагах, чем входные данные, возникающие на ранних временных шагах. Может быть вероятность того, что вывод на любом временном шаге (скажем, t = t) может зависеть от ввода на временном шаге (t = 0), но из-за ограничений вектора контекста это было бы невозможно, вот где механизм внимания приходит на помощь.

Механизм внимания направлен на усиление определенного сегмента входных данных для каждого временного шага и затухание остальных входных данных.

На приведенном выше рисунке показан механизм внимания. Оценки внимания рассчитываются с использованием скрытых состояний кодировщика и предыдущего скрытого состояния декодера. «aij» — это количество внимания, которое i-й ввод должен уделить j-му вводу, а «eij» — это оценка внимания. Внимание для i-го ввода вычисляется путем взятия softmax баллов внимания для i-го ввода по всем вводам.

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

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

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

Обучение (базовое внимание к точечному произведению и использование предварительно обученных векторов)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,36770404745531654.

Обучение (мультипликативное внимание и использование предварительно обученных векторов)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,38021249193544576.

Обучение (аддитивное внимание и использование предварительно обученных векторов)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,3864459398290385.

Обучение (базовое внимание к точечному произведению и использование GLOVE Vectors)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,33210343809668563.

Обучение (мультипликативное внимание и использование векторов GLOVE)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,3643019492345212.

Обучение (аддитивное внимание и использование векторов GLOVE)

СИНИЙ СЧЕТ

Усредненная оценка BLEU по 1000 точкам данных проверки составляет 0,34044292578752594.

Обучение (базовое внимание к точечному произведению и использование векторов FAST TEXT)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,42598427633387304.

Обучение (мультипликативное внимание и использование векторов FAST TEXT)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,34342730279126676.

Обучение (аддитивное внимание и использование векторов FAST TEXT)

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,4711586280315582.

Наблюдение

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

4. Трансформеры

Трансформатор — это современная модель, используемая в моделировании последовательностей, но она немного отличается от традиционных подходов кодировщика-декодера, поскольку не имеет понятия временных шагов. Он использует 'positionalcoding', чтобы выяснить сходство между входными векторами. Другим фактором, который делает трансформеры превосходящими, является концепция самовнимания нескольких головок, которая генерирует векторы контекста для каждого входного вектора с учетом воздействия на него всех других входных векторов.

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

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

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

Слои с несколькими заголовками для самостоятельного внимания используются для создания более полных интерпретаций входных векторов и захвата их зависимостей друг от друга. Он принимает четыре переменные: "запрос", "ключ", "значение", "маска". Они проходят через линейные (плотные) слои и разбиваются на несколько головок. Класс вычисляет softmax скалярного произведения масштабированного запроса и ключа, а результат умножается на значение.

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

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

Обучение

СИНИЙ СЧЕТ

Усредненный балл BLEU по 1000 точкам данных проверки составляет 0,6780326604128989.

Наблюдение

Конечно, Transformer является победителем среди всех моделей, использованных для этого тематического исследования, и он превосходит с огромным отрывом, в то время как его обучаемые параметры также меньше или равны моделям Encoder-Decoder Attention.

Сравнение моделей

+-----------------+-------------------+------------------+----------
| Model           | Segments          | Parameters      | BLEU SCORE |
+-----------------+-------------------+------------------+----------
| Baseline        | No pretrained     | total-5,301,336  | 0.478      |
| Model           | embedding         | train-5,301,336  |            |
|                 +-------------------+------------------+----------
|                 | GLOVE Vector      | total-5,301,336  | 0.459      |
|                 | pretrained        | train-3,301,336  |            |
|                 +-------------------+------------------+----------
|                 | FAST TEXT Vector  | total-9,711,336  | 0.443      |
|                 | pretrained        | train-3,710,736  |            |
+-----------------+-------------------+------------------+----------
| Stacked         | No pretrained     | total-30,760,876 | 0.404      |
| Encoder-Decoder | embedding         | train-30,760,876 |            |
|                 +-------------------+------------------+----------
|                 | GLOVE Vector      | total-12,791,385 | 0.389      |
|                 | pretrained        | train-11,791,285 |            |
|                 +-------------------+------------------+----------
|                 | FAST TEXT Vector  | total-17,610,985 | 0.435      |
|                 | pretrained        | train-14,610,685 |            |
+-----------------+-------------------+------------------+----------
| Stacked         | dot-              | total-29,539,601 | 0.367      |
| Encoder-Decoder | no pretrained     | train-29,539,601 |            |
| With Attention  +-------------------+------------------+----------
|                 | Multiplicative-   | total-29,802,257 | 0.380      |
|                 | no pretrained     | train-29,802,257 |            |
|                 +-------------------+------------------+----------
|                 | Additive-         | total-29,802,770 | 0.386      |
|                 | no pretrained     | train-29,802,770 |            |
|                 +-------------------+------------------+----------
|                 | dot-              | total-19,611,225 | 0.332      |
|                 | GLOVE Vectors     | train-17,611,025 |            |
|                 +-------------------+------------------+----------
|                 | Multiplicative-   | total-19,873,881 | 0.364      |
|                 | GLOVE Vectors     | train-17,873,681 |            |
|                 +-------------------+------------------+----------
|                 | Additive-         | total-19,874,394 | 0.340      |
|                 | GLOVE Vectors     | train-17,874,194 |            |
|                 +-------------------+------------------+----------
|                 | dot-              | total-24,430,825 | 0.425      |
|                 | FAST TEXT Vectors | train-18,430,225 |            |
|                 +-------------------+------------------+----------
|                 | Multiplicative-   | total-24,693,481 | 0.343      |
|                 | FAST TEXT Vectors | train-18,692,881 |            |
|                 +-------------------+------------------+-----------
|                 | Additive-         | total-24,693,994 | 0.471      |
|                 | FAST TEXT Vectors | train-18,693,394 |            |
+-----------------+-------------------+------------------+----------
| Transformer     | No Pretrained     | total-19,959,810 | 0.678      |
|                 |                   | train-19,959,810 |            |
+-----------------+-------------------+------------------+----------

Результат

Будущая сфера

Метод прогнозирования, используемый для всех моделей, — алгоритм "Жадный поиск". В будущем моделировании мы можем использовать «Поиск луча», который вместо того, чтобы брать максимальное значение softmax в выходных данных, выбирает k лучших значений на каждом временном шаге. . Экспериментально доказано, что «Поиск луча» дает лучшие результаты.

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

ССЫЛКИ

  1. https://www.kaggle.com/yening2000/chatbot-nlp-1#Evaluate-and-predict
  2. https://www.aozata.com/machine-learning-tutorial-chatbot
  3. https://github.com/Currie32/Chatbot-from-Movie-Dialogue
  4. https://jalammar.github.io/illustrated-transformer
  5. https://www.appliedaicourse.com/
  6. https://blog.tensorflow.org/2019/05/transformer-chatbot-tutorial-with-tensorflow-2.html

Спасибо, что прочитали!

Подробнее о коде см. в моем ссылке на репозиторий GitHub ниже:



Профиль LinkedIn: https://www.linkedin.com/in/sameer-kumar-549299155/