Когда кто-то спрашивает вас: «Как работает чат-бот?» Обычно люди думают о какой-то сложной модели обучения от последовательности к последовательности, которая действительно понимает вопрос и формирует ответ. Но что, если я скажу вам, что вам не нужны знания о глубоких нейронных сетях для создания чат-бота. Вы можете просто создать чат-бота, используя базовые алгоритмы машинного обучения, такие как Классификация текста и Сходство текста.

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

Шаг 1

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

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

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

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

Шаг 2

Визуализация данных. Когда у вас есть данные в Jupyter Notebook, первое, что вы делаете, это то, что понимаете, какой тип данных у вас есть. В нашем случае мы имеем дело с текстом, поэтому мы интуитивно хотели бы знать, какие слова наиболее часто используются в наших вопросах. Для этого мы будем использовать:

  • Сначала загрузите данные в свой блокнот и начните изучать его
  • WordCloud

  • Постройте график частот слов с помощью функции счетчика

Шаг 3

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

  • Удаление знаков препинания. Давайте удалим знаки препинания, потому что в моих данных они не передают никакого значения.
  • Удаление стоп-слов. Давайте удалим стоп-слова, потому что эти слова обычно поддерживают основные слова и сами по себе не передают много информации в предложении.
  • Обработка отрицания. Мы изменим отрицательные слова, такие как «нет», «не имел», «не делал» и т. д., добавив к ним следующее слово и добавив перед ними «не». Например, «Ты мне не нравишься» заменено на «Ты мне не нравишься». Это важно, потому что, когда мы будем токенизировать (разделять слова) как функции, слова «не» и «подобное» будут обрабатываться по-разному, но теперь токенизация будет рассматривать «not_like» как одно слово.
  • Предварительная обработка на основе POS. Обычно мы видели, что существительные, прилагательные, наречия и глаголы, присутствующие в предложении, обычно обозначают важные ключевые термины в предложении, такие как подлежащее, действие или интенсивность действия. Таким образом, на этапе предварительной обработки мы сохраняем только существительные, глаголы, прилагательные и наречия и удаляем слова, принадлежащие другой части речи.

Шаг 4

Подготовьте данные для модели. У нас есть данные в формате предложения, где каждое предложение содержит разное количество слов. Но входные данные для любой модели должны быть постоянными, поэтому мы будем преобразовывать наши данные предложений в данные Bag of Words. Вы можете узнать больше о Bag of Word здесь.

Существует еще одно вложение слов, известное как Tf-idf (частота термина, обратная частота термина), которое может дать лучшую предсказуемость, чем встраивание пакета слов, потому что оно придает больший вес важным словам и меньшее значение обычным словам. Подробнее про Tf-Idf можно прочитать здесь.

Scikit Learn поставляется с замечательной функцией Pipeline. Таким образом, конвейер становится сетью между вашими алгоритмами. Вам просто нужно сказать ему, какой алгоритм будет выполняться после какого в серии. Он автоматически создает конвейер для вас, поэтому вам не нужно вручную принимать выходные данные из каждой модели и вводить их в другую.

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

  • Логистическая регрессия
  • Полиномиальный наивный байесовский классификатор
  • Decisson Tree

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

Модель схожести текста. Итак, как мы можем найти в обучающем наборе вопрос, наиболее похожий на мой входной вопрос. После применения Tf-idf к вопросу; мой вопрос был перенесен в одномерный массив, как и все другие вопросы в обучающем наборе. Итак, как мы можем сравнить сходство между двумя массивами? Мы берем скалярное произведение между двумя массивами, это дает нам меру сходства между двумя массивами. Точно так же мы найдем скалярный продукт между входным массивом вопросов и всеми другими массивами вопросов в обучающем наборе. Произведение с наибольшими точками ответит нам на самые похожие вопросы.

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

Шаг 5

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

Шаг 6

Итак, как только вы закончите со своей моделью. Как узнать, насколько хорошо работает ваша модель? Для классификатора предсказуемость модели проверяется путем создания матрицы путаницы, а затем мы, наконец, вычисляем f-оценку модели. Матрица путаницы - это не что иное, как перекрестная таблица между вашими предсказанными классами и вашими фактическими классами. Это выглядит как простая таблица, но есть несколько оценок предсказуемости, которые можно вычислить из нее, поэтому это очень эффективная таблица. Вы можете рассчитать несколько оценок в реальном времени: Accuracy, Precisson, Recall, Specificity, F-score и т. Д., Которые можно использовать для проверки предсказуемости созданной вами модели.

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

Но в реальном мире чат-боты не всегда могут дать одинаковый ответ на похожие вопросы. То, что вы только что видели, - это лишь первый шаг к тому, что делает чат-бот; классифицируйте свой вопрос, чтобы понять, какой тип ответа ожидает пользователь. Следующий шаг, который делает чат-бот, - это в основном понимать намерение и сущность вашего вопроса, таким образом используя его для генерации ответа. Обязательно ознакомьтесь со второй частью этой статьи, где я расскажу о том, как улучшить текущую версию ChatBot.

Вы можете получить код здесь, GitHub.