Машинное обучение и Искусственный Интеллект

Тимур Машнин, 2022

Эта книга будет интересна всем, кто хочет научиться применять Python 3 при разработке в области искусственного интеллекта и машинного обучения.С этой книгой Вы познакомитесь с основными терминами и понятиями ИИ, такими как машинное обучение, глубокое обучение и нейронные сети.Научитесь создавать чат-ботов с использованием IBM Watson на платформе Watson Assistant.Узнаете как можно использовать искусственный интеллект IBM Watson для своих собственных разработок.На реальных примерах познакомитесь с такими алгоритмами машинного обучения, как регрессия, классификация и кластеризация.Познакомитесь с глубоким машинным обучением и научитесь создавать нейронные сети с Keras и TensorFlow.

Оглавление

* * *

Приведённый ознакомительный фрагмент книги Машинное обучение и Искусственный Интеллект предоставлен нашим книжным партнёром — компанией ЛитРес.

Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других

Создание чат-ботов без программирования

Для создания чат-бота, здесь мы будем использовать службу Watson Assistant, размещенную на платформе IBM Cloud.

И для начала, вам нужно зарегистрироваться в IBM Cloud.

После успешного входа, вы увидите панель управления.

Вверху, в поиске, наберите Watson Assistant и перейдите на страницу Watson Assistant.

Здесь вы можете изменить регион / местоположение для оптимальной производительности.

Далее выберете план Lite, и нажмите кнопку «Создать» внизу, чтобы создать свой экземпляр сервиса.

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

Нажмите кнопку «Запустить инструмент» для доступа к веб-приложению, которое позволит вам создавать чат-ботов.

Вы попадете на страницу веб-приложения.

Нажмите на меню «Навыки» Skills в верхней части страницы.

Здесь мы будем учить нашего чат-бота общаться.

Для быстрого доступа, добавьте эту страницу в закладки.

Здесь мы будем создавать чат-бота для вымышленной сети цветочных магазинов.

Чатбота, который предоставляет информацию и помощь потенциальным клиентам.

Затем мы развернем его на сайте WordPress.

Теперь, давайте выясним, что такое чат-боты и как они могут помочь нам.

Позвонив в службу поддержки, мы можем услышать сообщение — «Ваш звонок может быть записан».

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

В этом примере с техподдержкой, как правило мы имеем дело с простыми вопросами, которые требуют простых ответов.

Но сама техподдержка не очень хорошо масштабируется.

Если у вас дела идут хорошо, у вас будет все больше клиентов, которым нужна ваша помощь.

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

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

Чатботы не предназначены для полной замены людей.

Но они могут помочь ответить на большое количество простых вопросов клиентов.

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

И доступны 24/7 дней в году, в отличие от работников.

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

Это оставляет персоналу отеля больше времени и энергии для решения более сложных задач.

Теперь, что такое чатбот?

Это программный агент, способный общаться с пользователями с помощью интерфейса чата.

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

Когда пользователь отвечает, чат-бот анализирует ввод и определяет намерение пользователя.

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

Хорошие чат-боты могут поддерживать это общение естественным образом.

Они заставляют пользователя чувствовать, что его понимают и помогают.

Они создают связь с пользователем, не притворяясь человеком.

И наиболее распространенные чат-боты — это текстовые чат-боты.

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

Тем не менее, вы можете общаться с некоторыми чат-ботами с помощью голоса.

Это виртуальные помощники, такие как Apple Siri.

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

Это intents, намерения, entities, сущности, и, наконец, диалог.

И когда вы создаете чат-бота в Watson Assistant, первое, что вы делаете, это создаете Навык диалога dialog Skill, который будет содержать эти три компонента.

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

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

Другими словами, они фиксируют намерение или цель пользователя.

Например, мы могли бы определить намерение #greetings и обучить Уотсона, как выглядит приветствие.

Мы могли бы предоставить Привет, Доброе утро, и так далее.

Хорошей практикой является предоставление как минимум 5 примеров для каждого намерения, чтобы полностью обучить Уотсона этому намерению.

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

Например, если бы пользователь сказал: «Алоха», Уотсон определил бы, что это приветствие, похожее на то, которому мы его обучали.

Именно здесь действительно задействуются возможности искусственного интеллекта Уотсона.

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

Теперь, давайте рассмотрим предметно-ориентированное намерение, а не простое намерение в чате.

Пользователи могут захотеть узнать о часах работы, и мы могли бы определить намерение #hours_info.

И обратите внимание, что имя намерения не может содержать пробелов.

Поэтому мы используем подчеркивание вместо пробела.

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

«До какого времени вы открыты?», «В какие часы вы работаете?», «Вы открыты по субботам?» и так далее.

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

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

Теперь, когда пользователь спросит: «Когда открыт ваш магазин в Торонто?» Уотсон распознает намерение #hours_info, хотя, опять же, этот конкретный вопрос не был частью наших примеров.

Уотсон достаточно умен, чтобы понять, чего хочет пользователь.

И примеры намерений можно вводить вручную в Watson Assistant, но их также можно импортировать из файлов CSV.

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

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

Теперь создадим навык диалога, который будет содержать намерения (наряду с сущностями и самим диалогом).

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

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

Поэтому нажмем кнопку «Создать навык».

Здесь вы сможете добавить навык диалога.

Вам будет предложено ввести имя и необязательное описание.

Введите навык Цветочный магазин.

Вы также можете увидеть вкладки «Использовать пример навыков» и даже импортировать навыки из файлов JSON во вкладке «Импорт навыков».

Далее нажмите кнопку «Создать», чтобы создать навык для чат-бота.

После создания навыка вы окажетесь в разделе намерения этого навыка.

Здесь вы можете добавить намерения несколькими способами.

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

В разделе «Интенты» диалогового навыка нажмем кнопку «Добавить намерение».

Здесь вы сможете определить имя и описание намерения.

Определим намерение #greetings.

Вы можете оставить описание пустым, а затем нажать кнопку «Создать намерение».

Здесь вам будет предложено создать несколько пользовательских примеров, чтобы обучить Уотсона приветствию.

Введите hello, затем нажмите Добавить пример.

И повторите эту процедуру для других примеров приветствия, таких как hi, hey, good morning, good afternoon, и так далее, добавляя по одному пример за раз.

Здесь вы можете редактировать примеры и удалять их.

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

Добавьте намерения #thank_you и #goodbyes по крайней мере с 5 примерами каждое.

Для #thank_you, вы можете использовать такие примеры, как thank you, thanks, thx, cheers, и appreciate it.

Для #goodbyes, вы можете ввести good bye, bye, see you, c ya, и talk to you soon.

И чтобы проверить наши намерения, нажмите кнопку Try it в правом верхнем углу.

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

Мы еще не предоставили ответы (мы сделаем это в модуле «Диалог»), но мы можем использовать панель для проверки классификации наших намерений.

Попробуйте вводить фразы в панели.

Например, попробуйте Hola и Aloha.

Хотя они специфичны для определенных языков, они достаточно распространены, чтобы быть опознанными Уотсоном в качестве приветствия.

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

Это добавит ваш ввод в качестве примера для намерения, например, #greetings, продолжая обучение Уотсона.

Если вы снова проверите то же самое высказывание, Уотсон на этот раз правильно распознает намерение.

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

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

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

И IBM предоставляет некоторые готовые намерения, которые могут иметь отношение к вашему чат-боту.

Чтобы увидеть их, нажмите Content Catalog.

Выберите одну категорию, например, Банковское дело.

А затем нажмите кнопку Добавить к навыку.

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

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

И вы можете пробовать его в панели Try it.

Здесь вы можете пометить намерения и нажать кнопку Удалить, чтобы удалить ненужные намерения.

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

Нажмите кнопку «Экспорт», чтобы загрузить CSV-файл, содержащий наши намерения и примеры.

Откройте этот файл, чтобы посмотреть, как он выглядит.

И так же, как мы экспортировали наши намерения в файл CSV, мы можем сделать наоборот и импортировать намерения из файла CSV.

Загрузите файл CSV, который прилагается к лекции.

Нажмите значок «Импортировать намерения» рядом с кнопкой «Создать намерение».

Выберите файл в появившемся окне и нажмите на кнопку «Импорт».

В результате вы импортируете два новых намерения и их примеры для обучения Уотсона.

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

Как мы уже выяснили, намерения описывают цель пользователя.

А сущности позволяют нам фиксировать определенные значения в высказывании пользователя.

Например, без определения сущностей, вопросы «когда открыт ваш магазин в Торонто?» и «Когда открыт ваш магазин в Ванкувере?» — неразличимы для чат-бота.

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

Поэтому мы можем создать сущность местоположения.

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

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

Одно значение для каждого местоположения магазина.

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

Например, представьте, что наш магазин в Торонто расположен на авеню Уорден.

И клиенты могут спросить о часах работы нашего магазина в Торонто или на авеню Уорден.

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

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

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

Как и намерения, мы также можем импортировать сущности из CSV файла.

Помимо ввода сущностей вручную и импорта из CSV файла, существует также третий способ добавления сущностей в чат-бот.

Есть предопределенные системные сущности, которые вы можете добавлять для чатбота.

@sys-currency позволяет нам определять упоминания валют в пользовательском вводе.

@sys-date определяет даты.

Например, пользователь сказать «следующий понедельник», а @sys-date позволит нам зафиксировать эту часть информации в качестве фактической конкретной даты.

@sys-person позволяет нам обнаруживать имена людей.

Теперь, давайте создадим сущности @location для нашего чатбота.

Откроем вкладку Entities и нажмем кнопку Create entity.

Введем имя сущности @location.

И нажмем Create entity.

Далее мы будем вводить значения сущностей и возможные синонимы.

А затем нажимать кнопку Add value.

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

Близлежащие небольшие города также могут выступать в качестве синонимов.

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

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

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

Также вы можете нажать кнопку Показать рекомендации, чтобы выбрать синонимы из списка, предоставленного Watson.

И в конце используйте панель Try it, чтобы проверить эти значения сущностей.

Попробуйте ввести вопросы.

What are your hours of operation in Montreal.

Where is your Montreal strore located

Теперь мы можем распознать цель и города, соответствующие нашим магазинам.

Но что произойдет, если пользователь введет вопрос для Сиэтла или для Мумбаи, где у нас нет магазина?

Вы заметите, что, так как у нас нет значения сущности для Сиэтла или Мумбаи, ни один из них не будет выбран в качестве значения сущности.

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

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

И это можно легко достичь с помощью системных объектов.

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

И среди них, существует объект @sys-location, который будет определять для нас местоположение и будет обрабатывать любой город (или штат, страну и т. д.).

И теоретически нам даже не нужна наша сущность @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 в самом вверху, приветствующий пользователя.

У этого узла есть специальное условие приветствия, которое выполняется только в начале разговора с пользователем.

Размещая его наверху, мы гарантируем, что что этот узел выполняется до любого другого узла.

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

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

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

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

Теперь, давайте создадим диалог для нашего чат-бота.

Откроем вкладку Диалог навыка.

И нажмем кнопку Create Dialog.

И здесь у нас уже есть два узла Welcome и Anything else.

Открыв панель Try it мы сразу увидим приветствие.

Открыв узел Welcome, мы можем изменить это приветствие.

Теперь, если мы ответим «Привет», Уотсон правильно распознал намерение #greetings, но у него нет нужного узла для обработки приветствий, поэтому выполнился резервный узел Anything else.

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

Причина этого заключается в том, что узел Anything else по умолчанию имеет три варианта ответа.

Это сделано, чтобы чатбот выглядел умнее.

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

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

Давайте добавим четвертый вариант к узлу Anything else со следующим текстом: «Похоже, мы сегодня друг друга не понимаем». Хотели бы вы вместо этого поговорить с человеческом? Если это так, пожалуйста, свяжитесь с нами по телефону или напишите нам по адресу support\@example.org.

Знак \ перед @ необходим для отображения специального символа собака.

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

Если бы этот режим был случайным, мы могли бы обострить ситуацию уже в первый раз.

У нас есть три намерения для чата: #greetings, #thank_you и #goodbyes.

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

И здесь у нас есть несколько возможных стратегий.

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

Это самый распространенный и простой подход.

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

Мы будем использовать простой подход.

И мы создадим папку для чата, нажав на три вертикальные точки на узле Welcom, и выбрав команду Add folder.

Далее нажмем на три вертикальные точки на созданной папке и выберем команду Add node to folder.

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

Стоит отметить, что вы можете сделать условие узла сложным.

Например, вы можете использовать оператор OR или AND, чтобы составить сложное условие из нескольких намерений.

Например, #greetings OR #goodbyes.

И для каждого узла, мы введем несколько ответов пользователю.

Например, «Привет. Чем я могу вам помочь?», «Здравствуйте. Как я могу помочь вам?», и так далее.

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

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

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

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

Теперь, вы можете попробовать панель Try it.

Тоже самое сделайте для других узлов.

Для узла #thank_you. введите что-то вроде:

Пожалуйста, дайте мне знать, если вам нужно что-нибудь еще.

С удовольствием.

Нет проблем. Дайте мне знать, если есть что-то еще, с чем я могу помочь.

Для узла #goodbyes.

Приятно с вами поговорить.

Хорошего дня.

Прощай.

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

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

И мы начнем с создания узла для запроса часов работы.

На узле Welcom нажмем на три вертикальные точки и выберем команду Add node below, которая создаст пустой узел ниже первого узла в диалоге.

Здесь введем имя узла и укажем намерение #hours_info в качестве условия узла.

Это обеспечит выполнение этого узла, когда пользователь запросит часы работы магазина.

В качестве ответа введите:

Наши часы работы указаны на нашей странице.

И обратите внимание, что здесь используется HTML-код в ответе.

Затем перейдите в панель Try it и проверьте, работает ли узел, спросив:

When is your Vancouver store open?

Когда ваш магазин в Ванкувере открыт?

Теперь, мы можем улучшить этот ответ, рассмотрев три возможных сценария.

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

Это классический вариант использования дочерних узлов.

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

Поэтому удалим ответ из нашего узла «Часы работы», щелкнув значок удалить.

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

Так как мы позволим дочерним узлам решать, каков правильный ответ.

Далее на узле «Часы работы», нажмем «Добавить дочерний узел».

Это создает первый дочерний узел.

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

Мы назовем этот узел Наши места.

И мы установим условие @location с оператором any для выполнения этого узла.

Это означает, что для пользовательского ввода будут выполняться два условия: намерение #hours_info и ввод будет содержать сущность @location.

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

Для этого мы нажмем вверху Customize.

И

включим

Multiple responses

и

нажмем

Apply.

Теперь у нас есть возможность прикрепить условие к каждому ответу.

Здесь мы создадим серию ответов, по одному для каждого города.

Например, для условия @location: Toronto наш ответ будет —

Наш магазин в Торонто открыт с понедельника по субботу с 9 утра до 18.00, кроме выходных.

Стоит отметить, что, если часы работы одинаковые для всех местоположений, мы могли бы просто включить @location в наш ответ.

Например, наш магазин @location открыт с понедельника по субботу с 9 до 18 часов, кроме выходных.

Это автоматически выведет обнаруженное значение сущности обратно пользователю в ответе.

Теперь, создадим дочерний узел «Нет такого местоположения».

Это случай, когда пользователь указывает город, но у нас нет магазина в этом городе.

Здесь укажем сущность @sys-location с оператором any в качестве условия для этого узла.

В качестве ответа введем —

К сожалению, у нас нет магазина в @sys-location. На сегодняшний день у нас есть магазины в Торонто, Монреале, Калгари и Ванкувере.

И обратите внимание, что @sys-location будет вставлять местоположения, однако этот узел никогда не будет выполняться для наших собственных местоположений, так как он идет после узла Our Locations.

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

Теперь, создадим дочерний узел «Расположение не указано» для обработки случая, когда пользователь не указал местоположение.

И установим условие для этого узла true.

И так как условие для этого узла имеет значение true, этот узел будет выполнен автоматически если не будут выполнены два других узла.

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

И здесь нам нужен общий ответ, поэтому наш ответ будет —

Наши часы работы перечислены на нашей странице.

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

Для этого откроем родительский узел, и в разделе And finally изменим Ожидание ввода пользователя на пропустить ввод пользователя.

Это передаст выполнение дочерним узлам, которые мы только что создали.

Теперь, откроем панель Try it и попробуем вводы:

Какие у вас часы работы в Торонто?

Какие часы работы в Калгари?

Какие часы работы в Сиэтле?

Какие у вас часы работы?

И вы должны увидеть правильный ответ для каждого из этих вводов.

Теперь нам нужно обработать запросы адреса местоположения.

Для этого мы продублируем часы работы и в новых родительских и дочерних узлах для обработки адреса запроса потребуется изменить условие на #location_info вместо #hours_info и изменить ответы с часов работы на адреса.

Например, Our Toronto store is located at 123 Warden Avenue.

Our store locations are listed on our site on the <a href="https://example.org/stores">stores page</a>.

Попробуйте ввести в панели Try it —

hello

where are you stores located?

what are your hours of operations in Montreal?

thank you

bye

Технически говоря, нам не нужны дочерние узлы для обработки сценариев, которые мы реализовали.

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

Однако здесь мы увидели, как работать с дочерними узлами.

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

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

Таким образом, мы создали простой, но работающий чатбот.

Проблема в том, что в настоящее время он доступен только в панели Try it после входа в систему.

И нам нужно развернуть нашего чат-бота где-нибудь на сайте.

В панели IBM Watson Assistant есть вкладка помощников Assistants.

И на самом деле, помощник — это и есть чатбот, который может иметь один или несколько навыков Skill.

И мы разработали навык, который позволяет чат-боту понимать и отвечать пользователю.

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

Это позволит развернуть чат-бот по различным каналам, включая сайты WordPress, Facebook Messenger, и так далее.

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

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

Но для начала мы создадим помощника и свяжем его с навыком.

Для этого нажмем кнопку «Create assistant».

Здесь вы введете имя (например, Florence Chatbot), необязательное описание и укажите, хотите ли вы ссылку для предварительного просмотра.

И нажмите кнопку Create assistant, чтобы создать помощника.

Здесь вы добавите навык диалога к помощнику, которого вы только что создали.

Нажмем «Добавить навык диалога» и затем выберем «Добавить существующий навык».

Затем выберем навык «Цветочный магазин», нажав на него.

Теперь, помощник Florence Chatbot связан с навыком цветочного магазина.

И ваш помощник чат-бота теперь готов к развертыванию.

Вы можете открыть предварительный просмотр, нажав кнопку «Просмотр ссылки» в разделе «Интеграции».

Откроется страница, содержащая ссылку.

И нажмите на эту ссылку, чтобы увидеть своего чат-бота в действии.

С помощью этой ссылки можно опробовать ваш чат-бот.

И имейте в виду, что каждый раз, когда кто-то отправляет сообщение в чат-бот, выполняется один вызов API, и он учитывается в бесплатной квоте 10 000 вызовов API в месяц.

Конец ознакомительного фрагмента.

Оглавление

* * *

Приведённый ознакомительный фрагмент книги Машинное обучение и Искусственный Интеллект предоставлен нашим книжным партнёром — компанией ЛитРес.

Купить и скачать полную версию книги в форматах FB2, ePub, MOBI, TXT, HTML, RTF и других

Смотрите также

а б в г д е ё ж з и й к л м н о п р с т у ф х ц ч ш щ э ю я