Авторы: Кай Чин Хуанг, Сарбо Рой, Райан Одзава, Джон Тран
Абстрактный
Виртуальные помощники становятся все большей и большей частью жизни. VA — это программы, которые могут помочь нам найти информацию быстро и более естественным образом. Эти помощники, возможно, прошли долгий путь с момента появления первого поколения коммерческих виртуальных машин, но теперь они почти вездесущи. Эти системы теперь дают маршруты проезда, звонят людям с важной информацией, находят важные пункты назначения и предметы, обычно отвечают на вопросы (Alexa, Siri, Google, Cortana и т. д.) и обрабатывают звонки в службу технической поддержки.
Это будет интеллектуальный помощник, который знает все об отделах Cal Poly Statistics и Computer Science. Это чат-бот, который может отвечать на вопросы, введенные текстом (который можно легко расширить до голоса). Это вопросы о занятиях, предложениях, инструкторах, в основном обо всем, на что можно ответить с этого веб-сайта: https://schedules.calpoly.edu на осенний квартал 2021 года (должен быть в VPN)
Архитектура программного обеспечения
На высоком уровне наш чат-бот Calpass состоит из следующих элементов:
- Интерфейс командной строки, который получает запросы от пользователя и возвращает соответствующий ответ.
- Классификатор дерева решений, который классифицирует запрос по 5 классам: Профессор, Курс, Здание, Другое, Конец
- Конвейер извлечения на основе правил для запроса к базе данных соответствующей информации из секретного запроса.
- Агент веб-скрейпинга, который хранит данные в базе данных в оперативной памяти.
Наша стратегия в этом проекте заключалась в создании высокомодульных компонентов, которые можно было бы оптимизировать для своих целей независимо от взаимодействия с другими компонентами. В результате разделение труда и склеивание деталей было тривиальным делом.
Хотя наш модульный подход допускал эффективное разделение труда, по-прежнему оставалось много уровней группового принятия решений, которые необходимо было выполнить, в основном с участием тех частей проекта, которые требовали ручного труда, таких как
Анализ обучающих данных
- Определение того, какие классы данных могут быть кластеризованы как
- Агрегирование данных из групп и выбор стандартизированного формата
Извлечение объекта из запроса
- Определение того, какие ключевые слова будут сопоставлены с конкретным поиском в базе данных
Определение архитектуры системы
- Как получить данные, как обучить модель, каков рабочий процесс для конвейера прогнозирования
Подробная архитектура модели:
Архитектура модели:
- Пакетный классификатор дерева решений
- Ues DecisionTreeClassifier — максимальная глубина 22
- Всего 25 деревьев
Предварительная обработка запросов
- Векторизатор TfIdf, диапазон энграмм (1,3)
- Английский стеммер NLTK
- Токенизатор слов NLTK
- Удалить слова, которые не относятся к типу POS: существительное, глагол, определитель Wh (кто, что, когда, где, почему)
- Удалить слова длиной менее 2 символов
- Удалить стоп-слова NLTK
Сигналы:
При включенном флаге «-show_signals» любой или все следующие сигналы могут предшествовать ответу чат-бота.
- Типы: описывает тип ответа, Профессор/Курс/Здание: нормальный ответ; Неизвестно: чат-бот не смог определить тип вопроса; Конец: Конец разговора
- Ошибка: сообщение об ошибке
- Цель: предполагаемая тема (преподаватель/курс/здание) ответа.
Конвейер извлечения сущностей:
- Конвейер запускается после того, как запрос классифицируется по модели дерева решений
- Текст запроса нормализован, все строчные, лемматизация, удаление знаков препинания, удаление стоп-слов
- Применяется соответствующая логика класса запроса. Логика представляет собой сопоставление ключевых слов, присутствующих в запросах, с соответствующими данными внутри базы данных (кадр данных pandas).
Пакеты и инструменты:
Весь проект написан на Python 3
Агент парсинга веб-страниц:
- Пакет запросов для получения данных HTML с веб-сайта расписания Cal Poly,
- Пакет BeautifulSoup4 для извлечения соответствующей информации из HTML-данных расписания Cal Poly
- Пакет Pandas для сохранения извлеченных данных в виде кадра данных, служит псевдобазой данных
Интерфейс командной строки
- Щелкните пакет для создания оболочек и функций командной строки.
Конвейер извлечения сущностей
- Пакет Difflib для алгоритма подобия сопоставления гештальт-образцов
Классификатор запросов машинного обучения
- Scikit Learn: векторизатор Tfidf, разделение тестов поезда, метрики, классификатор KNNeighbor, RandomForest, GaussianProcessClassifier
- NLTK: английский Stemmer, теги POS
- Matplotlib: построение метрик для модели
Тестирование и результаты:
Агент парсинга веб-страниц
- Вручную просматривая веб-страницы и проверяя, правильно ли данные извлекаются внутри кадра данных pandas
Интерфейс командной строки
- Ручное тестирование выбранных вручную запросов и проверка правильности вывода
Классификатор запросов машинного обучения
- Создал поезд, тестовый набор из нашего нормализованного набора данных
- Лучшие результаты тестирования различных моделей
Конвейер извлечения сущностей
- Разделенный набор данных на сегменты по классу запроса
- Для каждого класса запустили соответствующую логику извлечения запросов и рассчитали процент запросов, которые вернули ответ.
- Ответы на 75% запросов профессора
- Ответы на 68% запросов курса
- Ответы на 64% запросов о строительстве
Проблемы/слабые стороны:
- Сеансы пользователей не реализованы
- Точность классификации запроса на профессора/здание/курс только 48%
- Логика извлечения сущностей для соответствующего класса спроектирована вручную и не масштабируется с количеством классов.
- Не может дать ответы на «нестандартные» запросы: Пример: «Кто преподает PL в этой четверти?»
- В настоящее время точность ответов измеряется процентом ответов на запросы и не измеряет, является ли возвращенный ответ правильным. весь набор данных и измерение того, есть ли ответ на вопрос
Спасибо за чтение, не стесняйтесь проверить исходный код!