Создаем чат-бот в Python с помощью nltk |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-11-20 20:00
?
Чат-бот — это искусственный интеллект, который может имитировать разговор с пользователем на естественном языке через мессенджеры, веб-сайты, мобильные приложения, телефон и т.д. Чат-боты можно использовать в различных отраслях и для разных задач. Мы напишем простой чат-бот, используя библиотеку nltk (набор инструментов обработки естественного языка, Natural Language Toolkit). Это ведущая платформа создания программ на Python для работы с данными на “человеческом” языке. Импортируем необходимые библиотеки: Импортируем набор данных в блок данных pandas: Данные выше содержат 1592 единицы и две колонки контекста, который может быть логически выведен в виде запроса, а текстовый ответ является ответом на этот запрос. Если открыть набор данных в Excel, видно, что в нем существуют нулевые значения; также мы можем обнаружить, что данные расположены в различных кластерах, то есть за вопросами одного типа в одном месте следуют вопросы аналогичного типа. Нулевые значения передаются для того же типа вопросов, ответ на которые может быть почти одинаковым и в подобной группе вопросов; ответ дается на первый вопрос, остальные остаются с нулевым значением. Таким образом, мы можем использовать ffill(), возвращающий значение предыдущего ответа вместо нуля, как показано ниже: По шагам: Давайте рассмотрим подробнее первый шаг — нормализацию текста — где мы преобразуем данные в нижний регистр, затем удаляем специальные символы и выполняем лемматизацию. Давайте создадим функцию, которая преобразует данный текст в нижний регистр и удалит специальные символы и числа. Мы видим, что текст чист. Токенизация слов — это процесс преобразования обычных текстовых строк в список токенов. Функция pos_tag возвращает части речи каждого токена, таким образом функция-лемматизатор определяет части речи токена и преобразует токен в корневое слово, как показано ниже: Теперь создадим функцию, выполняющую все перечисленные выше шаги: Давайте проверим функцию, применив ее к набору данных: Функция работает хорошо. Следующий шаг — извлечение признаков слов. Это представление текста, где у слов, имеющих схожее значение, схожее представление. У нас есть две модели для этого процесса: bag of words (bow) и tf-idf. Использование bow: BOW — это представление текста, которое описывает частотность слов в документе. Предположим, ваш словарь содержит слова {Playing, is, love}, и мы хотим векторизовать текст “Playing football is love”. У нас получится следующий вектор: (1, 0, 1, 1). В строке 0 набора данных bow помечает 1 все присутствующие в тексте слова, а остальные 0. Стоп-слова — это чрезвычайно распространенные слова, которые, имеют низкое значение для соответствия целям пользователя, следовательно, они полностью исключаются из словаря. Ниже заданные заранее стоп-слова: Давайте рассмотрим пример и попробуем получить ответ на запрос: Выше мы задали вопрос ‘Will you help me and tell me about yourself more’, выполнили нормализацию текста и затем применили bow к вопросу. Теперь, чтобы получить соответствующий ответ, найдем косинусное сходство между вопросом и ответом и лемматизированным текстом. Косинусное сходство: Косинусное сходство — это мера сходства между двумя векторами. Оно представляет значение, которое вычисляется путем деления скалярного произведения на произведение норм между двумя векторами. Косинусное сходство a и b — это скалярное произведение a и b, поделённое на |a| * |b|. В индексе 194 мы получили наивысшее сходство с запросом. Давайте напечатаем текст в этой позиции и посмотрим, связан он с вопросом или нет. Смотрите, модель работает очень хорошо :) Использование tf-idf: tf — частотность терма, term frequency—частотность слова в текущем документе, а idf — обратная частотность документа, inverse document frequency —подсчет того, насколько редко слово встречается в документе. Здесь документ представляет собой текст, например, строку 0 или 1 и т.д., где документы ссылаются на все строки в наборе данных. Выше значения, полученные с использованием tf-idf. Теперь использования косинусного сходства позволяет найти ответ, полученный с помощью tf-idf. В индексе 4 у нас есть наиболее схожий текст, имеющий отношение к нашему вопросу. Давайте посмотрим на ответ на вопрос: Используя tf-idf, мы получили другой ответ, который тоже хорошо подходит к вопросу. Давайте создадим функцию, которая возвращает ответ на запрос, используя tf-idf. Это очень просто — нам нужно объединить все темы, которые были выше в этой статье: Давайте посмотрим на некоторые ответы на разные запросы. Прекрасно, модель отвечает очень хорошо. Заключение Таким же образом можно написать бот, используя bow. Все, что нужно сделать, — это следовать трем шагам: нормализация текста, объединение слов и косинусное сходство. Собранная нами модель не использует искусственный интеллект, но, тем не менее, отвечает весьма хорошо. Полный код можно найти здесь GitHub. Читайте также:
Перевод статьи Bhargava Sai Reddy P: A Chatbot in Python using nltk Источник: m.vk.com Комментарии: |
|