www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Тренировка ориентированного на цели чат-бота с глубоким обучением подкреплению - часть III

Дата публикации Dec 1, 2018

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

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

Этот учебник основан наТК-Bot, Код GitHub для этой серии можно найтиВот, Мы будем работать сstate_tracker.pyа такжеdb_query.py,

Вот схема, которой мы следуем из предыдущих двух частей:

Диалог потока одного раунда

Отслеживание состояния диалога

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

Важные типы действий

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

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

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

Только агент может отправитьсовпадение найденодействие для пользователя. Это означает, что когда ST получает действие агента, он находит билет, который работает с текущими информационными сообщениями, и заполняет информационные слоты этого действия всеми слотами из билета, в дополнение к самому фактическому идентификатору билета. Однако, если агент решил предпринять действие по обнаружению совпадения, но на самом деле не работает билет, то слоты информирования о действиях остаются пустыми, за исключением специального указания, что совпадения нет. Этот тип действия важен, так как агент ДОЛЖЕН в определенный момент эпизода выполнить действие, соответствующеесодержит билетэто соответствует ограничениям пользователя, чтобы преуспеть в эпизоде, как будет объяснено в следующей части.

Последнее замечание: агент может содержать только ОДИН слот в отличие от действия пользователя sim, которое может иметь несколько слотов.Единственныйисключениек этому действию найдено совпадение, так как оно может содержать все слоты заявки.

Пример найденного совпадения ниже.


Обновление истории государственного трекера

update_state_agent(self, agent_action)принимает в качестве входных данных действие агента и обновляет историю и текущие данные ST.update_state_user(self, user_action)принимает в качестве входных данных действие пользователя и также обновляет эти две переменные.

Метод сброса этого класса (вызывается в функции сброса вtrain.py) сбрасывает текущую информацию, историю, а также номер раунда, который указывает текущий раунд эпизода:

Обновление с действием пользователя

  1. Обновлять текущую информацию с помощью любых информационных слотов в действии
  2. Добавить действие в историю
  3. Увеличение номера раунда (конец текущего раунда)

Обновление с действием агента

Представьте себе, что в некоторых случаях действие агента является примитивной или незаполненной версией, а отслеживание состояния - заполнением любых информационных слотов информацией базы данных. Если действие агента является информированием, то к базе данных будет запрошено соответствующее значение, которое не противоречит текущему информированию. Если действие найдено совпадение, то база данных будет запрашивать соответствующий билет, который соответствует текущему информированию.Для всех остальных целей никаких запросов не требуется.Заметка:self.match_keyниже установлено'ticket'в конфигурации диалога.

Действия намерения‘inform’а также‘match_found’обрабатываются определенным образом

Обрабатывать действие намерения‘inform’

  1. Заполните информационный слот (изначально имеет значение‘PLACEHOLDER’) действия путем запроса базы данных, используя текущие данные в качестве ограничений
  2. Обновите текущую информацию с заполненным информационным полем

Обрабатывать действие намерения‘match_found’

  1. Получить список заявок из базы данных, в которой слоты каждого билета совпадают со слотами (оба ключа и значение) текущей информации, которые действуют как ограничения
  2. Если есть совпадающие заявки, тогда установите информационные слоты действия агента в слоты заявки из этого списка; Кроме того, создайте и установите значениеself.match_keyв информационных слотах действия агента к ID этого тикета
  3. Остальное множествоself.match_key = ‘no match available’
  4. Обновить значениеself.match_keyв текущем информирует с новым значением, найденным выше

Примеруспешный запрос на совпадение найденодействие:{'intent': 'match_found', 'inform_slots': {'ticket': 24L, 'moviename': 'zootopia', 'theater': 'carmike 16', 'city': 'washington'}, 'request_slots': {}}

Примернеудачный запрос на найденное совпадение:{'intent': 'match_found', 'inform_slots': {'ticket': ‘no match available’}, 'request_slots': {}}

Наконец, добавьте округленное число к действию агента и добавьте действие агента к истории.

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


Государственная подготовка

Наиболее важной задачей ST является предоставление агенту полезного состояния или представления истории текущего эпизода.get_state(self, done)берет готовый бул, который указывает, закончился ли эпизод после завершения этого раунда, и выводит массив с массивом фигур(state size,), Размер состояния не важен, поскольку он зависит только от того, сколько информации мы храним в этом штате. Но вы можете легко изменить его, если хотите удалить или добавить дополнительную информацию.

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

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


Система запросов

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

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

Краткое изложение публичных методов:

Получить результаты базы данных

get_db_results(constraints) -> dict: Называется вupdate_state_agent(self, agent_action)в ответ на действие агента с намерением‘match_found’, объяснил выше. Просматривает каждый элемент в базе данных и, если слоты элементов содержат все ключи ограничений, а также имеют соответствующие значения для этих слотов, то элемент добавляется в возвращаемый dict. Следовательно, он находит все совпадения в базе данных с учетом ограничений.

Например, скажем, база данных выглядела так:

{0: {'theater': 'regal 6', 'date': 'tonight', 'city': 'seattle'},1: {'date': 'tomorrow', 'city': 'seattle'},2: {'theater': 'regal 6', 'city': 'washington'}}

И ограничения были:{'theater': 'regal 6', 'city': 'seattle'}

Выход будет{0: {'theater': 'regal 6', 'date': 'tonight', 'city': 'seattle'}}потому что это был единственный элемент, который содержал все ключи ограничения и соответствовал всем его значениям

Заполнить слот Inform

fill_inform_slot(inform_slot_to_fill, current_inform_slots) -> dict: Называется вupdate_state_agent(self, agent_action)в ответ на действие с намерением‘inform’, объяснил выше. Во-первых, это вызываетget_db_results(current_informs)чтобы получить все совпадения базы данных. Тогда значенияmatches[inform_slot_to_fill]подсчитываются и возвращается наибольшее значение.

Например, скажем, это совпадения, возвращенные изget_db_results(constraints):

{2: {'theater': 'regal 6', 'date': 'tomorrow', 'moviename': 'zootopia'},45 : {'theater': 'amc 12', 'date': 'tomorrow'},67: {'theater': 'regal 6', 'date': 'yesterday'}}

Еслиinform_slot_to_fillбыл'theater'тогда этот метод вернется{'theater': 'regal 6'}Точно так же, еслиinform_slot_to_fillбыл'date'тогда результат будет{'date': 'tomorrow'}, Значение ключа, которое нас интересует, выбрано.

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

get_db_results_for_slots(current_informs) -> dict: Называется вget_state(self, done=false), Просматривает всю базу данных и подсчитывает все вхождения каждого слота(key, value)в текущем информирует и возвращает диктантkey: count для всех ключей; К тому же,'matching_all_constraints': # то, что хранит, сколько элементов базы данных соответствует всем текущим информационным слотам, является еще одним битом полезной информации в состоянии.

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

{0: {theater: regal 6, date: tonight, city: seattle},1: {date: tomorrow, city: seattle},2: {theater: regal 6, city: washington}}

Если текущая информация была:{'theater': 'regal 6', 'city': 'washington'}выход будет{'theater': 2, 'city': 1, 'matching_all_constraints': 1}потому что два элемента базы данных имеют‘theater’: ‘regal 6’один элемент базы данных имеет‘city': 'washington’и один элемент базы данных соответствует всем ограничениям (элемент 2)


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

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

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map