Машинное обучение и Искусственный Интеллект
Шрифт:
И мы можем структурировать нашего чат-бота для предоставления общего, информативного ответа, если не указано распознанное местоположение.
Но если мы хотим обнаружить все местоположения, чтобы предоставить более персонализированный ответ (например, «К сожалению, у нас нет магазина в Сиэтле …»), нам потребуется сущность, которая включает в себя список всех крупных городов.
И это можно легко достичь с помощью системных объектов.
Системные объекты позволяют легко обнаруживать общие специфические фрагменты информации, такие как даты, время, числа, валюты и т. д.
И
И теоретически нам даже не нужна наша сущность @location, мы могли бы просто использовать @sys-location.
Хотя здесь есть два ограничения:
Вы не можете определять синонимы для городов, обнаруженных с помощью @sys-location.
И нечеткое сопоставление в настоящее время недоступно для сущности @sys-location.
Чтобы добавить сущность @sys-location, нажмите «Системные сущности» в разделе «Сущности» вашего навыка.
И включите @sys-location.
Теперь, попробуйте ввести вопрос hours for Toronto.
Вы заметите, что обнаружены сущности @sys-location и @location.
Импорт и экспорт сущностей с помощью файлов CSV работает очень похоже на намерения.
Когда вы выбираете одну или несколько сущностей, отметив флажки рядом с ними, вам будет предложено экспортировать их в CSV файл.
Кроме того, вы можете импортировать сущности, нажав кнопку «Импортировать» рядом с «Create entity».
Загрузите файл CSV с двумя новыми сущностями, который прилагается к лекции.
И импортируйте его.
После успешной загрузки и импорта сущностей вы должны увидеть их в списке.
Теперь, давайте, наконец, рассмотрим третий компонент диалогового навыка.
А именно сам диалог.
Компонент диалога позволяет нам выдавать ответ пользователю на основе его намерения и специфики его запроса, которую мы определяем с помощью сущности.
Наш чат-бот может обнаруживать и классифицировать вводимые пользователем данные, но он еще пока не может ответить пользователю.
Например, когда пользователь приветствует нас, мы можем захотеть ответить «Привет! Могу я чем-нибудь помочь?".
То же самое верно и для более сложных запросов.
Мы должны использовать точно настроенную классификацию, которую нам дают намерения и сущности, чтобы обеспечить надлежащий и точный ответ пользователю.
Диалог – это дерево узлов, и каждый узел обычно обрабатывает один конкретный сценарий.
Например, здесь у нас есть три узла.
Первый узел – это Welcome, который обрабатывает приглашение чатбота.
Другими
словами, наше приветствие при первом появлении пользователя.Затем у нас есть узел Greetings для ответа на приветствие пользователя.
И, наконец, у нас есть специальный резервный узел, который будет уведомлять пользователя о том, что чатбот не совсем уверен в том, что спрашивает пользователь.
Welcome и Anything else – это два узла по умолчанию, созданные для вас при первом создании диалога для вашего чат-бота.
Любой узел, который вы определите, будет находиться между этими двумя узлами.
Каждому такому узлу дается имя.
Далее у нас есть условие, которое определяет, когда узел должен быть запущен.
В этом примере, узел будет запущен, если в пользовательском вводе обнаружено намерение #greetings.
Условие может быть как простым, так и сложным логическим выражением.
В большинстве случаев это условие будет проверять намерение, сущность или их комбинацию.
Затем у нас есть блок ответа, где мы указываем, что ответить пользователю.
В этом случае просто: «Привет. Чем я могу вам помочь?»
Этот блок ответа имеет много вариантов.
Ответ может быть изображением или некоторыми параметрами, которые может выбрать пользователь.
Мы можем предоставить несколько вариантов ответа, а затем решить, следует ли их выдавать по порядку при каждом запуске этого узла, или случайным образом из списка, который мы предоставляем.
Мы даже можем прикрепить условие к каждому отдельному ответу в пределах одного и того же узла.
Наконец, мы можем указать, что происходит после того, как мы выдали ответ.
Как правило, мы просто ждем, когда пользователь скажет что-то еще, и это действие по умолчанию.
Однако доступны и другие параметры, в том числе возможность перехода к другим узлам в диалоге.
Запуск узлов выполняется сверху вниз в диалоге.
Поэтому, когда пользователь отправляет свое высказывание, будет оцениваться на выполнение первый узел.
Если условие не выполнено, мы перейдем ко второму узлу.
Если и этот узел не соответствует критериям, мы рассмотрим третий узел и так далее.
И мы остановимся на первом узле, условие которого соответствует пользовательскому вводу.
Вот почему так важно, чтобы резервный узел Anything else находился в самом низу дерева узлов.
Этот узел имеет специальное условие, которое всегда выполняется, даже если все узлы над ним не выполняются.
Это гарантирует, что у нас всегда есть ответ для пользователя, например: «Я не понимаю, не могли бы вы перефразировать?».
По этой же причине у нас есть узел Welcome в самом вверху, приветствующий пользователя.
У этого узла есть специальное условие приветствия, которое выполняется только в начале разговора с пользователем.
Размещая его наверху, мы гарантируем, что что этот узел выполняется до любого другого узла.
И тот факт, что условие выполняется только один раз, гарантирует, что мы не будем приветствовать пользователя каждый раз, при его вводе.
Узлы также могут иметь дочерние узлы, и в сложных чат-ботах бывают ситуации, когда использование этой функции позволяет нам создать более детализированный чат-бот.