Чкт-бот на python
Условие:
Решение:
Лабораторная работа: Создание чат-бота на Python
Цель работы: Целью данной лабораторной работы является создание простого чат-бота на языке программирования Python. Чат-бот будет способен отвечать на заданные вопросы пользователя и предоставлять информацию на основе заранее заданных правил.
Используемые инструменты: Для создания чат-бота на Python мы будем использовать следующие инструменты:
- Python 3.x
- Библиотека Natural Language Toolkit (NLTK)
Шаги выполнения:
Шаг 1: Установка необходимых инструментов
- Установите Python 3.x с официального сайта Python (https://www.python.org/downloads/).
- Установите библиотеку NLTK, выполнив команду
pip install nltk
в командной строке.
Шаг 2: Подготовка данных
- Создайте текстовый файл "intents.json", в котором будут содержаться правила для чат-бота.
- В файле "intents.json" определите различные интенты (намерения) и их соответствующие ответы. Например:
{
"intents": [
{
"tag": "приветствие",
"patterns": ["Привет", "Здравствуйте", "Добрый день"],
"responses": ["Привет!", "Здравствуйте!", "Добрый день!"]
},
{
"tag": "погода",
"patterns": ["Какая погода сегодня?", "Какая погода в Москве?"],
"responses": ["Сегодня погода отличная!", "В Москве сейчас +20 градусов."]
},
...
]
}
- В файле "intents.json" можно добавить любое количество интентов и задать различные вопросы и ответы для каждого интента.
Шаг 3: Создание чат-бота
- Создайте новый файл "chatbot.py" и импортируйте необходимые модули:
import nltk
import json
import random
from nltk.stem import WordNetLemmatizer
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Activation, Dropout
from tensorflow.keras.optimizers import SGD
- Загрузите файл "intents.json" и преобразуйте его в структуру данных Python:
with open('intents.json') as file:
data = json.load(file)
- Создайте функцию для предварительной обработки текста:
def preprocess_text(text):
# Разделение текста на отдельные слова
words = nltk.word_tokenize(text)
# Приведение слов к нормальной форме
lemmatizer = WordNetLemmatizer()
words = [lemmatizer.lemmatize(word.lower()) for word in words]
return words
- Создайте функцию для создания тренировочных данных:
def create_training_data():
training_data = []
for intent in data['intents']:
for pattern in intent['patterns']:
words = preprocess_text(pattern)
training_data.append((words, intent['tag']))
random.shuffle(training_data)
return training_data
- Создайте функцию для создания модели нейронной сети:
def create_model(input_shape, output_shape):
model = Sequential()
model.add(Dense(128, input_shape=input_shape, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(output_shape, activation='softmax'))
return model
- Создайте функцию для обучения модели:
def train_model():
training_data = create_training_data()
words = []
tags = []
for pattern, tag in training_data:
words.extend(pattern)
tags.append(tag)
words = sorted(list(set(words)))
tags = sorted(list(set(tags)))
X_train = []
y_train = []
for pattern, tag in training_data:
bag = [1 if word in pattern else 0 for word in words]
X_train.append(bag)
label = tags.index(tag)
y_train.append(label)
X_train = np.array(X_train)
y_train = np.array(y_train)
model = create_model((len(X_train[0]),), len(tags))
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=200, batch_size=5, verbose=1)
model.save('chatbot_model.h5')
print("Модель обучена и сохранена.")
- Создайте функцию для получения ответа от чат-бота:
def get_response(text):
model = load_model('chatbot_model.h5')
words = preprocess_text(text)
bag = [1 if word in words else 0 for word in words]
bag = np.array(bag)
bag = bag.reshape(1, len(bag))
prediction = model.predict(bag)[0]
threshold = 0.5
result = [[i, p] for i, p in enumerate(prediction) if p > threshold]
result.sort(key=lambda x: x[1], reverse=True)
response = ""
if result:
tag = tags[result[0][0]]
for intent in data['intents']:
if intent['tag'] == tag:
response = random.choice(intent['responses'])
else:
response = "Извините, я не понимаю ваш вопрос."
return response
- Добавьте код для обучения модели и сохранения ее в файл "chatbot_model.h5":
train_model()
- Добавьте код для получения вопроса от пользователя и вывода ответа чат-бота:
while True:
user_input = input("Вы: ")
response = get_response(user_input)
print("Чат-бот: " + response)
Шаг 4: Запуск чат-бота
- Сохраните все изменения в файлах "chatbot.py" и "intents.json".
- Запустите файл "chatbot.py" в командной строке.
- Введите вопрос или фразу для чат-бота и наблюдайте его ответы.
Вывод: В результате выполнения данной лабораторной работы мы создали простого чат-бота на языке программирования Python. Чат-бот способен отвечать на заданные вопросы пользователя и предоставлять информацию на основе заранее заданных правил. Для создания чат-бота мы использовали библиотеку Natural Language Toolkit (NLTK) и модель нейронной сети.