Недавно я получил степень магистра компьютерных наук в Университете Стоуни-Брук. Я работал с лабораторией КОМПАС под руководством Проф. Майк Фердман . Я провел 2 прекрасных семестра, исследуя тему Эдди: агент, отвечающий на вопросы, основанный на знаниях. Этот пост проливает свет на то, что я узнал во время этого путешествия.

Этот пост является первой частью серии сообщений (Часть 2). Он предназначен для всех, кто интересуется обработкой естественного языка, особенно для тех, кто знает внутреннее устройство системы ответов на вопросы в открытой предметной области. Такая система часто является основным компонентом персональных помощников, таких как Siri, Cortana, Alexa и т. Д.

Какая цель?

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

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

Основные цели

  1. Обеспечьте точный ответ
    Мы ожидаем, что агент просканирует всю сеть и предоставит точный ответ на запрос пользователя, вместо того, чтобы выгружать набор результатов поиска.
  2. Отвечайте на контекстные / взаимосвязанные вопросы
    Такой агент должен уметь понимать контекст диалога и участвовать в серии взаимосвязанных вопросов и ответов в беседе с пользователем. Например, если пользователь спрашивает -
    i. Численность населения в Калифорнии?
    ii. Как там погода?
    Агент должен быть достаточно умен, чтобы понимать, что «там» относится к слову «Калифорния» в предыдущем вопросе.

Вторичные цели

  1. Понимание разнообразных запросов пользователей
    Естественный язык неоднозначен. Пользовательские запросы часто короткие и не имеют контекста. Более того, один и тот же запрос можно задать разными способами. Эдди должен уметь переформулировать запросы пользователей или запросить дополнительную информацию в случае сомнений.
  2. Отвечайте осмысленными человеческими предложениями
    Агент должен отвечать осмысленными предложениями, а не отдельными словами или чтением фраз из интернет-документов.
  3. Обеспечьте индивидуальный ответ
    Ответы, генерируемые таким диалоговым интерфейсом, должны быть персонализированы. Прежде чем ответить, он должен учитывать такие особенности личности пользователя, как возраст, пол, интересы и прошлые запросы. Таким образом, ответ агента на вопрос «Что такое рак?» для пятилетнего ребенка, интересующегося созвездиями, должен отличаться от ответа врача.

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

Чем Эдди отличается от существующих чат-ботов?

Существующие чат-боты

Существующие голосовые чат-боты можно разделить на 2 категории:

Боты, ориентированные на выполнение задач
Персональные цифровые помощники, такие как Alexa, Siri или Cortana, в первую очередь являются роботами, ориентированными на выполнение задач. Это боты с закрытым доменом, то есть они отвечают за выполнение определенных задач. Например, они могут легко записаться на прием в ресторан, посмотреть видео или забронировать Uber. Они могут вести ограниченный социальный чат, рассказывая вам анекдот или сознательно отвечая на несколько вопросов. Они также могут ответить на некоторые вопросы, связанные с поиском информации, найдя соответствующие документы в Интернете и прочитав их. Внутренне эти помощники моделируют социальный чат и поиск информации как две отдельные задачи среди тысяч других задач. Задавая вопрос, помощник сначала относит высказывание к одной из категорий задач. Это называется проблемой Классификация намерений и заполнение слотов и часто решается с помощью нейронных сетей. Как только задача идентифицирована, соответствующий API, связанный с задачей, выполняет работу.

Чат-боты в социальных сетях
Такие боты являются ботами с открытым доменом, т.е. они могут обсуждать любую тему в целом. Они бывают либо поисковыми, либо генеративными. Получив предложение пользователя и диалог, поисковые боты либо получают следующий ответ из репозитория, либо из графа знаний. Генеративные боты используют глубокие нейронные сети (обученные в существующих социальных чатах) для генерации ответов на пользовательский запрос. Типичные примеры чат-ботов - XiaoIce, Meena, Cleverbot.

Эдди

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

Существующие голосовые помощники часто дают стандартные ответы на многие вопросы, т.е. их точность очень низкая. Даже когда они находят ответы, их ответы основаны на размахе. Поскольку они только что прочитали документ из Википедии, их ответы не являются разговорным. Мы хотим, чтобы Эдди отвечал осмысленными человеческими предложениями. Более того, существующие помощники не могут отвечать на контекстные вопросы в разговоре. Мы хотим, чтобы Эдди сохранил контекст как минимум до 1 последней пары вопросов и ответов.

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

1. Каковы наиболее частые вопросы, связанные с этим вопросом?
2. По какой ссылке пользователь перешел, когда получил набор ссылок?
3. Какова личность пользователя, этническая принадлежность, местонахождение?

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

Цель 1 - дать точный ответ

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

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

Document Retriever

В качестве базы знаний мы используем индекс Википедии DrQA.

Для заданного вопроса Q и набора документов {d1, d2,… dn} найдите верхние K документов, которые могут содержать ответ на Q.

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

Читатель документов

При получении документов мы разбиваем каждый документ на абзацы, скажем, всего X абзацев. Для каждого абзаца мы теперь свели нашу задачу к стандартной задаче понимания прочитанного в НЛП.

Учитывая абзац P и вопрос Q, найдите в абзаце интервал, который с наибольшей вероятностью является ответом.

Диапазон в абзаце определяется двумя токенами из абзаца, начальным токеном и конечным токеном. Мы используем набор данных SQuAD v1.1 (понимание прочитанного на основе диапазона) для обучения нейронной модели поиску начальных и конечных токенов.

В частности, мы кодируем токены вопроса Q и абзаца P, используя вложения GloVe. Мы пропускаем представление вопроса и абзаца через трехуровневую модель biLSTM и используем внимание между вопросом и абзацем ( Стэнфордская модель внимательного читателя) , чтобы определить вероятность того, что каждый токен будет начальным / конечным токеном.

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

Чтобы подробно ознакомиться с архитектурой нашей нейронной модели, прочтите здесь. Не то чтобы сокурсники в лаборатории КОМПАС работали над созданием ускорителя LSTM. Они использовали мой код Stanford Attentive Reader (SAR) для тестирования своего ускорителя. Чтобы помочь им в их разработке, я провел подробный анализ параметров модели SAR, детали которого также можно найти по указанной выше ссылке.

Рейтинг ответов

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

Оценка ответа = max (Pr (начальный токен) x Pr (конечный токен))
DrQA использует диапазон, имеющий максимальную оценку, как лучший диапазон.

Однако мы обнаружили, что эти оценки ответов по абзацам несопоставимы. В настройках открытого домена большинство абзацев не содержат ответа. Существующая модель DrQA обучена на SQuAD v1.1, которая не содержит вопросов без ответа. Таким образом, модель не обучена производить низкие оценки достоверности для абзацев, не содержащих ответа. Чтобы исправить это, мы использовали подход, принятый Clark et al. при разработке Document QA. Мы изменили существующий DrQA, чтобы использовать общую нормализацию в целях обучения. В результате были получены хорошо откалиброванные баллы по всем абзацам.

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

Цель 2 - ответы на контекстные вопросы

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

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

Шаг 1 - Определение контекста

В разговорной проверке качества, основанной на понимании прочитанного, дается фиксированный абзац. Ответ на вопрос либо существует в данном абзаце, либо на вопрос нет ответа. Популярными примерами диалоговых наборов данных QA на основе RC являются QuAC и CoQA.

Учитывая абзац P и историю разговора (Q1, A1, Q2, A2,…), цель RC разговорного QA - ответить на n-й вопрос Qn, используя весь разговор история как контекст. Однако в открытом диалоге QA пользователь может переключаться между темами. Каждый вопрос может быть из совершенно другой области (скажем, от политики до спорта), что делает всю историю разговора неуместной.

Вышеупомянутую проблему можно решить, если у Эдди есть модуль «Идентификатор сеанса / Детектор темы». Модуль может обнаружить смену темы. Затем он может рассчитать количество ходов предыдущих пар QA, относящихся к теме, по которой задается текущий вопрос. Однако из-за нехватки времени мы пропустили модуль идентификатора сеанса в нашем исследовании. Мы сужаем наше исследование до создания тематической системы контроля качества открытого домена, т.е. мы заставляем пользователей всегда объявлять о начале нового разговора, заранее объявляя тему.

Наш подход - Тематический открытый домен QA

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

Шаг 2 - Выбор диалогового набора данных

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

Основные функции

  1. Поиск информации - наборы данных для понимания прочитанного по умолчанию являются поиском информации.
  2. Доступность темы - чтобы оценить Эдди во время вывода, нам нужно передать тему как контекст поисковику и читателю. Таким образом, в наборе данных должна быть доступна тема каждого разговора.
  3. Разговорный - набор данных должен содержать серию взаимосвязанных вопросов.
  4. Запросы, не зависящие от абзаца - в большинстве наборов данных вопросы основаны на заданном абзаце. Однако в реальном мире у вопрошающего нет абзаца. Таким образом, набор данных должен содержать реальные вопросы пользователей, задаваемые поисковым системам и машинам контроля качества, независимо от каких-либо абзацев. Такие запросы часто бывают неоднозначными и открытыми. Мы также хотим избегать наборов данных, в которых есть вопросы, созданные аннотаторами после просмотра отрывка.

Дополнительные функции

  1. Ответ в произвольной форме - набор данных должен содержать ответы на естественном языке. Он не должен быть основан на размахе. Например,
    Абзац: Баран пошел на рынок. Он купил молоко.
    Вопрос: Рама купил молоко?
    Ответ на интервал: он купил молоко.
    Естественный ответ : Да
    Ответ «Да» гораздо более похож на человека, чем ответ с помощью диапазона.
  2. Персонализированные ответы - Было бы неплохо получить ответы, основанные также на личностном контексте.

Результаты опроса набора данных

SQuAD 2.0 и MS MARCO не разговорные. Преимущество MS MARCO состоит в том, что он содержит реальные запросы пользователей Bing и ответы на них представлены в свободной форме. Однако они создают дополнительную проблему с ответами, разбросанными по нескольким отрывкам (Multi-Hop Reasoning), что выходит за рамки нашего исследования. CoQA и QuAC являются диалоговыми, но они не основаны на реальных запросах пользователей. Ни один из наборов данных не учитывал личность пользователя при ответе. Мы поняли, что не существует такого набора данных, который удовлетворял бы всем нашим требованиям. Таким образом, мы сузили область исследования, чтобы сосредоточиться на решении основных задач Эдди.

В сокращенных настройках QuAC был единственным набором данных, который удовлетворял 3 из 4 основных требований. Он не соответствовал критерию Независимые от абзацев запросы. Чтобы справиться с этим, мы используем обучающий набор набора данных QuAC, поскольку он предназначен для обучения нашего средства чтения документов. Но мы модифицируем набор проверки QuAC, удаляя все абзацы. Во время вывода мы проиндексировали все параграфы проверки QuAC в нашем указателе Википедии и просто задали вопросы Эдди (Retriever + Reader) без параграфов. Мы называем этот измененный набор данных Open Domain QuAC, аналогично Open Domain SQuAD.

Короткий эксперимент с CoQA

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

  1. Вопросы в CoQA часто бывают слишком короткими (Что? Где? Когда?), Чтобы ретривер мог дать значимые результаты. Средняя длина вопроса в QuAC составляет 6,5 токена, а средняя длина вопроса в CoQA - всего 5,5 токена.
  2. Вопросы в CoQA не были фактом и часто не имели никакого значения, когда задавались ретриверу независимо. Это может быть связано с тем, что спрашивающему в CoQA разрешено просматривать абзац, а затем задавать вопросы. С другой стороны, QuAC содержит абзацы из Википедии. Таким образом, эти вопросы более фактичны, они очень напоминают поиск информации пользователями при взаимодействии с голосовыми помощниками / Интернетом.

3. Другая причина его низкой точности была скрыта в нашем способе создания контекста. В эксперименте мы задавали все вопросы один за другим, используя предыдущие 2 вопроса в качестве контекста. Например, рассмотрим набор данных, содержащий всего 2 абзаца P1 (2 вопроса Q1 и Q2) и P2 (2 вопроса Q3 и Q4). Если мы удалим абзацы и зададим Эдди вопросы (Q1, Q2, Q3, Q4), мы закончим тем, что будем использовать Q1 и Q2 в качестве контекста для Q3. Таким образом, мы в конечном итоге предоставляем неверный контекст поисковику и читателю Эдди, поскольку Q1 и Q2 были полностью основаны на другом абзаце и, возможно, на другой теме.

Шаг 3 - Включение контекста

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

Добавление контекста к ретриверу

Наш инструмент для извлечения документов не является компонентом, основанным на машинном обучении. Таким образом, его не нужно обучать. Мы индексируем все абзацы в наборе данных для обучения и проверки QuAC в нашем индексе Википедии. Для построения индекса Википедии требовалась система со 120 ГБ оперативной памяти. Мы проводим несколько экспериментов с ретривером, передавая ретриверу пары темы и QA в качестве контекста.

Мы заметили, что передача темы резко повысила точность поиска с 11,37% до 64,44%. Точно так же передача всех предыдущих пар контроля качества вместе с темой в качестве контекста повысила точность поиска с 11,37% до 66,24%. Мы также измеряем время, затрачиваемое ретривером на возврат результатов по всем вопросам проверочных наборов. Меньше всего времени уходит, когда мы просто передаем тему как контекст.

Добавление контекста для читателя

Учитывая вопрос Q, абзац P, тему T и историю разговора {Q1, A1, Q2, A2,…}, наша цель - найти ответ A.

Для достижения этой цели мы модифицируем входные данные для модели Stanford Attentive Reader (SAR) в QuAC, передавая контекстный вопрос. Контекстный вопрос - это объединение исходного вопроса и контекста (тема и предыдущая пара QA). Он имеет следующую структуру -
‹Topic› ‹Q1› ‹A1› ‹Q2› ‹A2›… ‹Q›

Мы переобучаем модель SAR с новыми входами на графическом процессоре K40 в течение 26 часов.
Подробности адаптации DrQA к QuAC можно увидеть здесь.

Результаты оценки по набору данных проверки QuAC
Точность точного совпадения - 29,61
Точность F1 - 45,87

Резюме - Эдди Пайплайн

Оценка трубопровода

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

В разговорной обстановке открытого домена Эдди имеет точность совпадения 3,03%. DrQA имеет общую точность совпадения 30% в открытом домене SQuAD. Однако DrQA не может обрабатывать взаимосвязанные вопросы, т. Е. Не разговорный. Хотя точность нашего конвейера невысока, мы считаем, что он может выступать в качестве основы для построения диалоговой системы с открытым доменом.

В двух словах …

Насколько нам известно, Эдди - одна из первых попыток ответить на вопросы в открытой беседе. Мы построили сквозной конвейер, который может дать точные ответы на ряд взаимосвязанных вопросов пользователей. Мы также предлагаем модифицированный набор данных - Open Domain QuAC и оцениваем наш конвейер. Мы анализируем причины низкой точности нашего конвейера в Части 2 этой серии.