1. Описание данных

Данные, которые мы выбрали для обучения, — это набор данных Cafe Chabot от Kaggle. Наборы данных состоят из 3 различных поднаборов данных, а именно «Item_to_id.csv», «conversationo.csv» и «food.csv». Однако в этом проекте мы уделяем особое внимание файлу «conversationo.csv» для обучения модели отступов в чат-боте. Набор данных содержит 925 разговоров вопросов и ответов о заказе еды, из которых 170 вопросов и 121 ответ уникальны.

Пакет nltk в python использовался для очистки набора данных. Прежде чем мы начнем процесс очистки данных, мы удаляем все столбцы nan и пустые столбцы в наборе данных при загрузке данных. Затем мы удаляем стоп-слова и знаки препинания из текстов и, наконец, выполняем поиск корней и перевод слов в нижний регистр для последних шагов процесса очистки данных. Мы выполняем Bag of Words для этапов разработки функций, чтобы преобразовать текстовые данные в числовые.

2. Модель классификации

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

Мы используем модель глубокой нейронной сети (DNN) для точной обработки входного пользовательского запроса для получения наиболее подходящего ответа.

На рисунке 2 показаны параметры нашей трехслойной модели глубокой нейронной сети. Первый слой нашей нейронной сети состоит из 128 нейронов. Входная форма первого слоя равна 160, что является значением train_X.shape[1]. Второй слой — это скрытый слой, состоящий из 64 нейронов. Для этих двух слоев используется функция активации relu. Для предотвращения проблемы переобучения использовался один из методов регуляризации — отсев. Это метод, при котором во время обучения игнорируются случайно выбранные нейроны. Они «выпадают» случайным образом. Это означает, что их вклад в активацию нижестоящих нейронов временно снимается. В нашей модели два слоя отсева развернуты за первым слоем и вторым слоем. Коэффициент выпадения установлен равным 0,5 на двух слоях. Наконец, функция активации Softmax используется для выходного слоя, который состоит из 21 нейрона, соответствующего 21 классу намерений. Основным преимуществом использования Softmax является диапазон выходных вероятностей, поскольку он помогает сопоставить ненормализованный вывод с распределением вероятностей завышенных выходных классов. Диапазон находится в пределах от 0 до 1, а сумма всех вероятностей будет равна единице.

Для настройки процесса обучения мы используем метод компиляции. мы устанавливаем оптимизатор, функцию потерь и метрики. Во-первых, в нашей модели используется оптимизатор ADAM. Адам представляет собой алгоритм градиентной оптимизации первого порядка стохастических целевых функций. Это метод адаптивной скорости обучения, что означает, что он вычисляет индивидуальные скорости обучения для разных параметров. Во-вторых, категориальная кросс-энтропийная потеря использовалась в качестве функции потерь в нашей модели нейронной сети. Он измеряет производительность модели классификации, результатом которой является значение вероятности от 0 до 1. Эта потеря увеличивается по мере того, как прогнозируемая вероятность отличается от фактической метки. Наконец, чтобы оценить производительность нашей модели, мы рассмотрели две метрики: потери и точность.

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

3. Точность и потери

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

4. Оценка

Точность нашей модели глубокой нейронной сети (DNN) на обучающем и тестовом наборах составляет 0,96.

5. Реализация чат-бота

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

6. Разверните модель на Heroku

Я связываю свой репозиторий GitHub со своей учетной записью Heroku для развертывания Coffee ChatBot. Во-вторых, были созданы требования.txt, nltk.txt и runtime.txt. Эти текстовые файлы содержат пакеты Python, корпуса nltk и версию Python, необходимые для выполнения приложения.

7. Заключение

Для нашей системы чат-ботов для кофе мы реализуем Bag of words для обработки данных нашего диалога. Затем мы применяем DNN для обучения классификации. В результате DNN имеет высокую точность 0,96. Наконец, мы внедряем и тестируем чат-бота с помощью ряда вопросов, чтобы проверить, дает ли чат-бот разумные ответы на наши вопросы. Отличие нашего проекта от других заключается в том, что мы не использовали заранее определенные метки для анализа данных, вместо этого мы использовали кластеризацию для создания тегов в соответствии с содержимым до методов классификации. Для нашего будущего улучшения мы проанализируем проблему нечеткого ввода и соответствующим образом настроим нашего чат-бота, чтобы сделать результат чат-бота более точным. В целом результат удовлетворительный, благодаря реализации проекта мы многому научились и получили удовольствие от всего времени.