Примечание: все файлы кода будут доступны по адресу: https://github.com/ashwinhprasad/Chatbot-GoingMerry
Going Merry - чат-бот, который я создал для набора пиратов. Это помогает в вербовке пиратов по всему миру. это ответ на простые вопросы пользователя о процессе найма, предварительных требованиях и т. д. Эту же модель можно использовать для создания чат-ботов для любой организации.
Введение
Чат-бот - это программное приложение, используемое для ведения текстового общения в чате. В этом сообщении блога я покажу, как создать простого чат-бота с tenorflow 2 для вашей организации.
Подготовка набора данных
однажды набор данных построен. половина работы уже сделана. то, как мы структурируем набор данных, является главным в чат-боте. Я использовал файл json для создания набора данных.
Файлы json похожи на словари в Python. вы можете хранить в файлах json так же, как в словарях на Python
Ввод. Это именно те сообщения, которые пользователь будет отправлять боту.
теги: теги используются для категоризации входных данных и сопоставления их с определенным типом ответа.
ответы: как только мы сопоставили ввод с соответствующим тегом, мы можем выбрать один из ответов, который будет возвращен пользователю.
В основном так структурирован набор данных для чат-бота.
Часть машинного обучения:
- Импорт библиотек
#importing the libraries import tensorflow as tf import numpy as np import pandas as pd import json import nltk from tensorflow.keras.preprocessing.text import Tokenizer from tensorflow.keras.layers import Input, Embedding, LSTM , Dense,GlobalMaxPooling1D,Flatten from tensorflow.keras.models import Model import matplotlib.pyplot as plt
2. Импорт данных
#importing the dataset with open('content.json') as content: data1 = json.load(content) #getting all the data to lists tags = [] inputs = [] responses={} for intent in data1['intents']: responses[intent['tag']]=intent['responses'] for lines in intent['input']: inputs.append(lines) tags.append(intent['tag']) #converting to dataframe data = pd.DataFrame({"inputs":inputs, "tags":tags}) print(data)
вывод:
Данные хранятся в файле json, который можно импортировать и использовать в качестве фрейма данных pandas. Эти данные были созданы мной вручную. следовательно, он не такой уж и большой.
все мы знаем, что глубокое обучение требует больших объемов данных. но здесь дело обстоит не так. Я использовал архитектуру нейронной сети, достаточно мощную, чтобы обрабатывать этот небольшой объем данных.
3. Предварительная обработка данных
#removing punctuations import string data['inputs'] = data['inputs'].apply(lambda wrd:[ltrs.lower() for ltrs in wrd if ltrs not in string.punctuation]) data['inputs'] = data['inputs'].apply(lambda wrd: ''.join(wrd)) #tokenize the data from tensorflow.keras.preprocessing.text import Tokenizer tokenizer = Tokenizer(num_words=2000) tokenizer.fit_on_texts(data['inputs']) train = tokenizer.texts_to_sequences(data['inputs']) #apply padding from tensorflow.keras.preprocessing.sequence import pad_sequences x_train = pad_sequences(train) #encoding the outputs from sklearn.preprocessing import LabelEncoder le = LabelEncoder() y_train = le.fit_transform(data['tags'])
Токенизатор Tensorflow присваивает уникальный токен каждому отдельному слову. и заполнение выполняется, чтобы все данные имели одинаковую длину, чтобы отправить их на уровень RNN. целевые переменные также кодируются в десятичные значения.
4. Длина ввода, длина вывода и словарь
#input length input_shape = x_train.shape[1] print(input_shape) #define vocabulary vocabulary = len(tokenizer.word_index) print("number of unique words : ",vocabulary) #output length output_length = le.classes_.shape[0] print("output length: ",output_length) output number of unique words : 96 output length: 8
длина ввода и длина вывода очевидны. они предназначены для входной и выходной формы нейронной сети. размер словаря предназначен для слоя внедрения для создания уникальных векторных представлений для каждого слова
5. Нейронная сеть
#creating the model i = Input(shape=(input_shape,)) x = Embedding(vocabulary+1,10)(i) x = LSTM(10,return_sequences=True)(x) x = Flatten()(x) x = Dense(output_length,activation="softmax")(x) model = Model(i,x) #compiling the model model.compile(loss="sparse_categorical_crossentropy",optimizer='adam',metrics=['accuracy']) #training the model train = model.fit(x_train,y_train,epochs=200)
Сеть состоит из слоя внедрения, который является одним из самых мощных инструментов в области обработки естественного языка. выходы слоя внедрения - это вход повторного слоя с логическим элементом lstm. затем вывод сглаживается и используется обычный плотный слой с функцией активации softmax.
Основная часть - это слой встраивания, который дает соответствующий вектор для каждого слова в наборе данных.
6. Анализ модели
Модель получила идеальную точность 100%.
7. Тестирование
#chatting import random while True: texts_p = [] prediction_input = input('You : ') #removing punctuation and converting to lowercase prediction_input = [letters.lower() for letters in prediction_input if letters not in string.punctuation] prediction_input = ''.join(prediction_input) texts_p.append(prediction_input) #tokenizing and padding prediction_input = tokenizer.texts_to_sequences(texts_p) prediction_input = np.array(prediction_input).reshape(-1) prediction_input = pad_sequences([prediction_input],input_shape) #getting output from model output = model.predict(prediction_input) output = output.argmax() #finding the right tag and predicting response_tag = le.inverse_transform([output])[0] print("Going Merry : ",random.choice(responses[response_tag])) if response_tag == "goodbye": break
вывод:
You : hi there Going Merry : welcome aboard, how may I help you ? You : how do i join the pirates ? Going Merry : you need to contact the nearest straw hats center once you have completed the pre-requisites You : what are the pre requisites ? Going Merry : you gotta master the art of swordfight or master Cooking and become a furious cook or you have to be the best navigator in the entire world or you need to be as strong and intelligent as god usop You : alright , who are you ? Going Merry : Going Merry at your service You : how are you doing ? Going Merry : Yeah , am fine You : nice , thanks for the response Going Merry : Okay, Bye
Вот и все для создания чат-бота
О компании Going Merry
Going Merry - это корабль из манги One Piece, которая вращается вокруг истории группы пиратов. Веселое плавание - это, без сомнения, удивительный корабль. Но оно прошло.
Чтобы узнать больше о веселье: https://onepiece.fandom.com/wiki/Going_Merry
Вывод
Итак, это чат-бот, который я создал с помощью tensorflow2, используя возможности матрицы встраивания. Этот же метод можно использовать для создания чат-ботов для любого типа организации, но не для общей.