К сожалению, прототип ноутбука так и не стал полностью пригодным для использования.
Но команда IPython продолжала работать, и в 2007 году они сделали еще одну попытку внедрения системы типа ноутбуков.
К октябрю 2010 года появился прототип веб-ноутбука, и в 2011 года этот прототип был реализован.
И наконец, в 2014 году проект Jupyter был запущен как отдельный проект от проекта IPython.
И IPython – теперь одно из ядер Jupyter.
И теперь появилось новое поколение ноутбуков Jupyter, которые называются JupyterLab.
Теперь, как возникла эта идея ноутбуков.
Концепция ноутбука, который содержит обычный текст и расчеты и графику, была не новой.
Фернандо Перес был активным пользователем ноутбуков Mathematica, которые были созданы в качестве графического интерфейса в 1988 году Теодором Греем, основателем компании Wolfram Research – частная компания, занимающаяся производством математического программного обеспечения. Её основным продуктом является среда технических расчётов Mathematica.
И сочетание этой идеи ноутбуков с технологией AJAX веб-приложений, которая не требует от пользователей обновления веб страницы каждый раз, когда изменяются ее данные, дало старт разработке ноутбуков Jupyter.
Для установки Jupyter на свой компьютер, рекомендуется установить Анаконду, которая установит Python, Jupyter Notebook и другие часто используемые пакеты для научных вычислений и обработки данных.
Anaconda – это бесплатный дистрибутив языков программирования Python и R для научных вычислений с открытым исходным кодом, где пакетами управляет инструмент conda, а не pip.
Как альтернатива, вы можете установить только Jupyter с помощью инструмента pip.
И после установки, вы можете запустить Jupyter на своем компьютере с помощью команды jupyter notebook.
Эта команда запустит сервер ноутбука и откроет веб страницу интерфейса Jupyter по адресу http://localhost:8888/.
И здесь вы увидите Панель управления записными книжками.
Закрытие браузера или его вкладки не приведет к закрытию приложения Jupyter Notebook.
Чтобы полностью закрыть приложение, необходимо закрыть соответствующий терминал, где вы запустили Jupyter.
Так как приложение Jupyter Notebook – это сервер, который отображается в вашем браузере по адресу http://localhost:8888.
И закрытие браузера не приведет к выключению сервера.
Вы можете снова открыть адрес, и приложение Jupyter Notebook будет отображено заново.
Вы можете запустить много копий приложения Jupyter Notebook, и они будут отображаться по адресу localhost только с разными портами.
И так как с помощью одного приложения Jupyter Notebook вы уже можете открывать множество записных книжек, не рекомендуется запускать несколько копий приложения Jupyter Notebook.
Во вкладке Files веб страницы Jupyter показываются все ваши файлы, во вкладке Running показываются все процессы ноутбуков, а третья вкладка Clusters предоставляется параллельной вычислительной средой IPython.
Чтобы создать новый ноутбук, нужно нажать на кнопку New во вкладке «Файлы».
И здесь вы можете создать обычный текстовый файл, папку и терминал.
Также вы можете создать ноутбук на Python 3.
Начнем сначала с создания обычного текстового файла.
Когда он откроется, вы увидите, что это похоже на любой другой текстовый редактор.
Здесь вы можете указать язык программирования, на котором вы пишете.
Также, вы можете сохранить, переименовать или загрузить файл или создать новый файл.
Вы также можете создавать папки, чтобы организовать ваши документы.
Для этого нажмите Folder в меню New, и у вас появится новая папка.
Далее вы сможете переименовать эту папку.
Что касается терминала, терминал предназначен для поддержки сеансов интерактивного терминала на основе веб браузера.
И этот терминал работает так же, как терминал операционной системы или приложение cmd.
Если же вы хотите запустить свой ноутбук, вернитесь в главное меню и выберите опцию Python 3 в меню New.
Здесь вы увидите строку меню, панель инструментов и пустую ячейку кода.
И в этой ячейке кода вы можете сразу начать с импорта необходимых библиотек для вашего кода.
После этого вы можете добавлять, удалять или редактировать ячейки кода, вставляя пояснительный текст и заголовки.
После создания ноутбука, вы можете использовать меню «Файл», чтобы загрузить свою записную книжку в виде HTML, PDF, и так далее.
Вместо настольной версии, вы можете использовать среду Skills Network Labs от IBM.
Здесь вы можете открыть JupyterLab – среду, которая позволяет создавать и редактировать блокноты Jupyter.
Когда вы откроете JupyterLab, вы увидите, что с левой стороны у вас есть каталог с файлами, где вы можете отслеживать все ваши файлы, а с правой стороны – экран запуска.
С помощью этого запуска вы можете создавать новые записные книжки Jupyter с Python 3, Scala или R.
Давайте создадим записную книжку с Python 3.
Ноутбуки Jupyter состоят исключительно из ячеек.
Сейчас в этой записной книжке, есть только одна ячейка.
Давайте напишем что-нибудь внутри ячейки, например, 1 + 1, а затем на клавиатуре нажмем Shift + Enter.
В результате выполнится код с использованием Python, который вернет два.
Далее мы можем создать еще больше ячеек, нажав кнопку «Плюс» вверху, и написать больше кода.
Например, установив X равным целому числу, и распечатать вывод X в ячейке ниже.
И все эти ячейки являются так называемыми ячейками кода, которые позволяют запускать код с использованием интерпретатора, в данном случае Python 3.
Но как мы можем добавить заголовки или текст в нашу записную книжку?
Для этого нужно преобразовать тип ячейки из кода в ячейку markdown, щелкнув на ячейке, и выбрав markdown в меню.
И теперь, если вы введете что-то вроде «один плюс один» в эту ячейку и попытаетесь запустить ее с помощью Shift + Enter, она будет преобразована непосредственно в текст.
И чтобы отредактировать ячейку снова, просто дважды щелкните по ячейке.
markdown – это разметка, с помощью которой вы можете стилизовать ваш текст.
Например, вы можете создавать заголовки, используя символ решетки и пробел, за которым следует некоторый текст, такой как «Мой заголовок».
Есть и другие способы стилизовать ваш текст.
И здесь показаны несколько примеров.
В ячейках markdown вы также можете использовать HTML.
Например, если вы хотите встроить изображение.
В JupyterLab вы можете импортировать данные, например в виде CSV-файла, и использовать их в блокноте Jupyter.
Чтобы импортировать данные, вы можете просто перетащить файл данных прямо в каталог файлов с левой стороны.
После завершения загрузки он будет отображаться в каталоге.
И это не обязательно должен быть файл CSV, это может быть файл любого типа.
Вы также можете создавать различные папки для организации всех ваших файлов.
И вы можете дважды щелкнуть файл, чтобы открыть предварительный просмотр его содержимого.
Для обработки данных файла CSV в Python нам нужно использовать функцию чтения CSV библиотеки pandas.
Поэтому сначала импортируем панду.
Затем вы можете прочитать файл, используя путь к файлу CSV.
Теперь, вы можете распечатать первые пять строк файла CSV.
Создание чат-ботов без программирования
Для создания чат-бота, здесь мы будем использовать службу 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 файла.