Чат-боты сейчас очень распространены. Часто, когда вы заходите на веб-сайт компании, сбоку на странице появляется пузырь, указывающий на помощь по любым вопросам. Эти пузыри представляют собой разновидность чат-бота. Многие компании используют их в настоящее время, чтобы персонализировать обслуживание клиентов и улучшить качество обслуживания, которое они могут предоставить клиентам.

Но как работают эти чат-боты? Что именно они влекут за собой?

Эти чат-боты созданы на основе искусственного интеллекта, называемого обработкой естественного языка (NLP). Это использование наборов данных для обучения программы способностям отвечать на определенные наборы вопросов или вводимых данных.

Вот 6 основных шагов для программирования чат-бота:

1. Загрузите набор данных.

Первый шаг к программированию чат-бота - загрузка набора данных. Вот ссылка на набор данных, который я использовал: Chatbot Intents Dataset. Вы также можете редактировать набор данных, чтобы обеспечить любой вывод для любого ввода, который вы хотите.

from google.colab import files
uploaded = files.upload()
import json
with open('intents.json') as file:
intents = json.load(file, strict = False)
intents = intents['intents']
print("[", end = "")
for intent in intents:
print("{", end = "")
for key, value in intent.items():
print("{}: {},".format(key, value))
print("\b\b\n},")
print("\b\b]")

2. Импортировать библиотеки

Здесь вы будете импортировать библиотеки, также известные как различные пипсы, которые вам нужно будет использовать для выполнения определенных приложений в Google Colab или в любой другой среде Python, которую вы используете.

import tflearn
import random
import pickle
import numpy as np
import tensorflow as tf

3. Обработка естественного языка

Это тот раздел, где в игру вступает НЛП. НЛП - это ветвь ИИ, которая особенно анализирует человеческий язык и «переводит» его в код, чтобы его можно было использовать по-разному. Одним из особенно важных аспектов НЛП, который используется для программирования чат-бота, являются концепции стемминга и токенизации.

Стемминг - это концепция взятия слов и их упрощения, чтобы чат-бот мог легче понимать слова. Например, слово «любящий» можно упростить до «любовь» и иметь то же общее значение. Это важно для чат-ботов, потому что вводимые пользователем данные могут сильно различаться в зависимости от человека.

Токенизация - это концепция разделения и создания «токенов» из слов в предложении. Это помогает программе понять, какие слова предложения являются отдельными понятиями и как легко разделять слова в огромном наборе слов.

import nltk
nltk.download('all')
from nltk.stem.snowball import SnowballStemmer
stemmer = SnowballStemmer('english')
retrain_model = True
if retrain_model:
all_words = [] 
all_tags = [] 
intent_patterns = [] 
intent_tags = [] 
for intent in intents:
for pattern in intent['patterns']:
words = nltk.word_tokenize(pattern)
all_words.extend(words)
intent_patterns.append(words)
intent_tags.append(intent['tag'])
all_tags.append(intent['tag'])
all_words = [stemmer.stem(word.lower()) for word in all_words]
all_words = sorted(list(set(all_words)))
all_tags = sorted(all_tags)
x_train = []
y_train = []
y_empty = [0 for i in range(len(all_tags))]

for index, intent in enumerate(intent_patterns):
bag_of_words = []
intent_words = [stemmer.stem(word.lower()) for word in intent]
for word in all_words:
if word in intent_words:
bag_of_words.append(1)
else:
bag_of_words.append(0)
one_hot_encode_y = y_empty[:]
one_hot_encode_y[all_tags.index(intent_tags[index])] = 1
x_train.append(bag_of_words)
y_train.append(one_hot_encode_y)
x_train = np.array(x_train)
y_train = np.array(y_train)
with open('training_data.pickle', 'wb') as f:
pickle.dump((all_words, all_tags, x_train, y_train), f)
else:
with open('training_data.pickle', 'rb') as f:
all_words, all_tags, x_train, y_train = pickle.load(f)

4. Глубокое обучение

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

tf.reset_default_graph()
neural_net = tflearn.input_data(shape = [None, len(x_train[0])])
neural_net = tflearn.fully_connected(neural_net, 8)
neural_net = tflearn.fully_connected(neural_net, 8)
neural_net = tflearn.fully_connected(neural_net, len(y_train[0]), activation = 'softmax')
neural_net = tflearn.regression(neural_net)
model = tflearn.DNN(neural_net)
if retrain_model:
model.fit(x_train, y_train, n_epoch = 2000, batch_size = 8, show_metric = True)
model.save('model.tfl')
else:
model.load('./model.tfl')

5. Создайте чат-бота.

Здесь вы программируете выходные данные для того, что программа определила как выходные. В этом случае мы получим ответ только в том случае, если нейронная сеть будет более чем на 80% уверена в предполагаемом вводе. Обычно он выбирает результат случайным образом на основе предполагаемого ввода.

def text_to_bag(text, all_words):
bag_of_words = [0 for i in range(len(all_words))]
text_words = nltk.word_tokenize(text)
text_words = [stemmer.stem(word.lower()) for word in text_words]
for word in text_words:
if word in all_words:
bag_of_words[all_words.index(word)] = 1
return np.array(bag_of_words)
def chat():
#Starting message
print("Enter a message to talk to the bot [type quit to exit].")
context_state = None
default_responses = ['Sorry, Im not sure I know what you mean! You could try rephrasing that or saying something else!',
'You confuse me human. Lets talk about something else.',
'Im not sure what that means and I dont really care. Lets talk about something else',
'I dont understand that! Try rephrasing or saying something else.']
while True:
user_chat = str(input('You: '))
if user_chat.lower() == 'quit':
break
user_chat_bag = text_to_bag(user_chat, all_words)
response = model.predict([user_chat_bag])[0]
response_index = np.argmax(response)
response_tag = all_tags[response_index]
if response[response_index] > 0.8:
for intent in intents:
if intent['tag'] == response_tag:
if 'context_filter' not in intent or 'context_filter' in intent and intent['context_filter'] == context_state:
possible_responses = intent['responses']
if 'context_set' in intent:
context_state = intent['context_set']
else:
context_state = None
print(random.choice(possible_responses))
else:
print(random.choice(default_responses))
else:
print(random.choice(default_responses))

6. Болтаем!

Здесь вы можете начать разговор с чат-ботом! Вот пример одного из первых разговоров с моим чат-ботом. Чат-бот в данном случае особенно скуп, но основан на SkyNet от Терминатора. Это просто основано на наборе данных, который вы решите использовать. Чат-ботов можно запрограммировать для оказания помощи во многих отраслях, повышения качества обслуживания клиентов и многого другого!

Я основывал этот проект на: https://colab.research.google.com/drive/1X9xv5yyc4ESfWWaH8-htwJwQfkzKYYUx

Вот ссылка на мой git: https://github.com/alyssamgould/chatbot

Меня зовут Алисса Гулд, и я увлечен пересечением искусственного интеллекта и изучения второго языка!

Я рад использовать свои навыки, чтобы найти интересные возможности этим летом. Если у вас есть совет об интересных летних возможностях в НЛП, я хотел бы провести короткую 15-минутную беседу!

Не стесняйтесь обращаться ко мне по адресу [email protected], если у вас возникнут какие-либо вопросы!