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

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

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

Основной элемент чат-бота

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

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

Намерение классифицирует намерение конечного пользователя для одного хода разговора. Для каждого агента вы определяете множество намерений, где ваши объединенные намерения могут обрабатывать полный диалог. Когда конечный пользователь пишет или говорит что-то, называемое выражением конечного пользователя, Dialogflow сопоставляет выражение конечного пользователя с наилучшими намерениями в вашем агенте. Соответствие намерениям также называется классификацией намерений.

А термин «сущность» относится к ключевым словам или жаргону ввода конечного пользователя. Общая концепция сущности состоит из типа сущности, сущности и синонима. Как снова цитируется Dialogflow, пример сущности:

Если овощ является типом сущности, вы можете определить следующие три записи сущности:

- морковь

- зеленый лук, зеленый лук

— болгарский перец, сладкий перец

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

Как разработать чат-бота

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

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

Например, чтобы обучить намерение «остановить сервер», нам нужны обучающие данные, подобные следующим:

- остановить сервер

- выключить сервер

- выключить сервер

- отключить сервер

- закрыть сервер

- убить сервер

- остановить сервер

- закрыть сервер

- деактивировать сервер

Мы знаем, что классификация НЛП не является точной на 100%. То, как мы повышаем точность сопоставления намерений, заключается в предоставлении все более и более разнообразных обучающих данных. Во многих случаях это делается интуитивно. В приведенном выше примере мы можем увеличить размер обучающих данных, изменив термин «сервер» на «система», «машина», «процесс» или «ящик». И когда мы узнаем, что количества обучающих данных достаточно? Применяется общий метод машинного обучения. Разделим весь набор данных на обучающую и тестовую выборки. Затем мы используем обучающий набор для обучения чат-бота и тестовый набор для оценки его производительности.

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

Трудно разработать хорошего чат-бота

Давайте еще раз взглянем на нашу остановку сопоставления намерений сервера. Мы должны предоставить довольно много подсказок, чтобы обучить даже такое простое намерение. Представьте, что мы собираемся расширить наши службы, чтобы приостановить работу сервера и отключить сервер. Мы не только утроим объем обучающих данных, но, пожалуйста, обратите внимание на тонкую разницу между тремя намерениями: «Приостановить сервер» означает, что он больше не будет обслуживать новые запросы, но по-прежнему будет удерживать все ресурсы; «Остановить сервер» означает, что он освободит ЦП и память; «Снести сервер» означает, что он навсегда уничтожит сервер. Трудно составить длинный список подсказок, чтобы научить чат-бота различать эти три намерения. Вот почему общая мудрость дизайна чат-бота такова:

Не устанавливайте слишком много намерений.

С одной стороны, слишком много намерений делают чат-бот нестабильным; с другой стороны, ограничение количества намерений означает, что мы должны ограничить объем услуг нашего чат-бота.

Извлечение сущностей также является проблемой. Как уже упоминалось, сущность должна быть четко определена, иначе чат-бот не сможет ее понять. Если мы попросим чат-бота «проверить еженедельную стоимость сервера X234, выключите его». Чат-бот будет очень сбит с толку. Потому что в чат-боте каждое приглашение должно быть классифицировано только как имеющее одно намерение, а не несколько, и чат-бот не может решить, какой сервер отключить, потому что слово не может быть преобразовано в действительное имя сервера.

Управление контекстом — еще одна проблема. Потому что буквально чат-бот ничего не знает о контексте. Разработчик должен явно указать намерения в диалоге.

Например, рассмотрим, что мы разрабатываем чат-бот для бронирования авиабилетов. Мы достаточно умны, чтобы понимать, что разговор не всегда упорядочен. Мы сделали намерение ветвления, которое позволяет пользователю изменять даты начала и окончания во время разговора. Мы должны проанализировать полученную информацию и отправить ее в виде контекстных параметров или параметров сеанса, чтобы намерение даты начала/окончания изменения могло понять, что обсуждалось. Что, если мы решим создать новое намерение и позволить пользователю изменить как намерение, так и пункт назначения? Итак, мы должны использовать тот же шаблон в новом намерении, иначе информация будет быстро потеряна.

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

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

Чем может помочь GPT

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

Предварительно обученная означает, что модель была обучена на основе огромного набора данных. В отличие от традиционных моделей НЛП, которые требуют тонкой настройки с учетом предметной области, последняя версия GPT-3 демонстрирует, что языковая модель, обученная на достаточном количестве данных, может решать задачи НЛП, с которыми она никогда не сталкивалась. То есть GPT-3 изучает модель как общее решение для многих последующих задач без тонкой настройки. Другими словами, модели GPT более интеллектуальны, чем старые модели. Как следствие, обучение моделей GPT обходится дорого. GPT-3 имеет 175 миллиардов параметров, и для его обучения потребуется 355 лет и 4 600 000 долларов — даже с самым дешевым облаком графических процессоров на рынке.

Несмотря на то, что название ChatGPT известно большинству людей, на самом деле это улучшенная версия GPT-3, вышедшая в 2020 году. В дальнейшем обсуждении я буду использовать GPT-3 и ChatGPT взаимозаменяемо, потому что они очень похожи.

Улучшенное создание намерений

За каждым чат-ботом стоят модели NLP, не такие мощные, как GPT. Процесс подготовки данных для намеренного обучения действительно является тонкой настройкой модели в соответствии с требованиями проекта. Революционная и мощная модель GPT-3 лучше понимает естественный язык. Определить намерение пользователя намного проще с помощью GPT. Проведем эксперимент:

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

Лучшее разрешение объектов

В качестве второго эксперимента зададим GPT еще один вопрос:

На самом деле GPT может сказать, что Билл эквивалентен Уильяму, и знает, что «он» и «его» относятся к одному и тому же человеку. Это невозможно для традиционного чат-бота!

Лучшее понимание контекста

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

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

Низкий технический барьер

Несмотря на то, что GPT является мощным движком, создать приложение на его основе невероятно просто. Традиционная разработка НЛП требует от разработчиков глубокого понимания множества конкретных алгоритмов и библиотек, сред и конвейеров, обработки данных и обучения моделей и так далее. Взаимодействие с GPT происходит только через один API, и способ его работы очень похож на диалог: пользователь предоставляет подсказку, а затем GPT отвечает завершением.

А что, если результат не такой, как хочет пользователь? Что ж, бывает. Но способ скручивания результата немного отличается. Поскольку GPT — это такая сложная модель, которая уже способна очень хорошо понимать языковые нюансы, разработчику не нужно обучать модель понимать язык. Хитрость, чтобы получить лучший ответ, — угадайте, что — переформулировать ваш вопрос!

Я считаю, что сниженный технический барьер делает диалоговый ИИ следующего поколения на основе GPT более доступным для многих компаний и, кто знает, даже для частных лиц. Много лет назад людям приходилось покупать собственный физический сервер, IP-адрес и доменное имя, когда они хотели настроить новый веб-сайт. У них также должна была быть квалифицированная команда для разработки HTML, Javascript и других внутренних компонентов. Технический барьер для создания веб-сайта становился все ниже. И теперь создать сайт не составит больших хлопот даже подростку. Та же история происходит сегодня с разговорным ИИ.

Заключение

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