Авторы: Кай Чин Хуанг, Сарбо Рой, Райан Одзава, Джон Тран

Абстрактный

Виртуальные помощники становятся все большей и большей частью жизни. 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 в этой четверти?»
  • В настоящее время точность ответов измеряется процентом ответов на запросы и не измеряет, является ли возвращенный ответ правильным. весь набор данных и измерение того, есть ли ответ на вопрос

Спасибо за чтение, не стесняйтесь проверить исходный код!