mirror of
https://github.com/metafy-social/python-scripts.git
synced 2025-01-31 05:33:44 +00:00
Merge pull request #39 from metafy-social/revert-37-chatbot
Revert "Add Chatbot AI project"
This commit is contained in:
commit
f9e6243216
|
@ -1,40 +0,0 @@
|
||||||
|
|
||||||
# Chatbot AI 🤖
|
|
||||||
|
|
||||||
This project contains an AI powered chatbot that you can interact with for both fun and to learn about how these technologies work.
|
|
||||||
|
|
||||||
## Tech Stack
|
|
||||||
|
|
||||||
* Python 3.9
|
|
||||||
* Tensorflow
|
|
||||||
* Keras
|
|
||||||
* nltk
|
|
||||||
* numpy
|
|
||||||
|
|
||||||
## How to setup the project
|
|
||||||
|
|
||||||
* Clone this repo
|
|
||||||
|
|
||||||
```bash
|
|
||||||
git clone https://github.com/metafy-social/daily-python-scripts.git
|
|
||||||
```
|
|
||||||
|
|
||||||
* Move to the project folder
|
|
||||||
```bash
|
|
||||||
cd '.\scripts\Chatbot AI\'
|
|
||||||
```
|
|
||||||
|
|
||||||
* Install dependencies
|
|
||||||
```bash
|
|
||||||
pip install -r requirements.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
* Run the python script `chatbot.py`
|
|
||||||
|
|
||||||
|
|
||||||
## Screenshots of the project
|
|
||||||
|
|
||||||
|
|
||||||
![screenshot 1](https://user-images.githubusercontent.com/61963664/193405239-5403c601-2c5b-4443-b463-1452e72cbb20.PNG)
|
|
||||||
|
|
||||||
![screenshot 2](https://user-images.githubusercontent.com/61963664/193405262-5b05c68b-994c-4b04-ba77-df878d3f42c8.PNG)
|
|
|
@ -1,61 +0,0 @@
|
||||||
import random
|
|
||||||
import json
|
|
||||||
import pickle
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
import nltk
|
|
||||||
from nltk.stem import WordNetLemmatizer
|
|
||||||
|
|
||||||
from tensorflow import keras
|
|
||||||
from keras.models import load_model
|
|
||||||
|
|
||||||
lemmatizer = WordNetLemmatizer()
|
|
||||||
intents = json.loads(open('intents.json').read())
|
|
||||||
|
|
||||||
words = pickle.load(open('words.pkl', 'rb'))
|
|
||||||
classes = pickle.load(open('classes.pkl', 'rb'))
|
|
||||||
model = load_model('chatbot_model.h5')
|
|
||||||
|
|
||||||
def clean_up_sentence(sentence):
|
|
||||||
sentence_words = nltk.word_tokenize(sentence)
|
|
||||||
sentence_words = [lemmatizer.lemmatize(word) for word in sentence_words]
|
|
||||||
return sentence_words
|
|
||||||
|
|
||||||
|
|
||||||
def bag_of_words(sentence):
|
|
||||||
sentence_words = clean_up_sentence(sentence)
|
|
||||||
bag = [0] * len(words)
|
|
||||||
for w in sentence_words:
|
|
||||||
for i, word in enumerate(words):
|
|
||||||
if word == w:
|
|
||||||
bag[i] = 1
|
|
||||||
return np.array(bag)
|
|
||||||
|
|
||||||
def predict_class(sentence):
|
|
||||||
bow = bag_of_words(sentence)
|
|
||||||
res = model.predict(np.array([bow]), verbose=0)[0]
|
|
||||||
ERROR_THRESHOLD = 0.25
|
|
||||||
results = [[i, r] for i, r in enumerate(res) if r > ERROR_THRESHOLD]
|
|
||||||
|
|
||||||
results.sort(key=lambda x: x[1], reverse=True)
|
|
||||||
return_list = []
|
|
||||||
for r in results:
|
|
||||||
return_list.append({'intent': classes[r[0]], 'probability': str(r[1])})
|
|
||||||
return return_list
|
|
||||||
|
|
||||||
def get_response(intents_list, intents_json):
|
|
||||||
tag = intents_list[0]['intent']
|
|
||||||
list_of_intents = intents_json['intents']
|
|
||||||
for i in list_of_intents:
|
|
||||||
if i['tag'] == tag:
|
|
||||||
result = random.choice(i['responses'])
|
|
||||||
break
|
|
||||||
return result
|
|
||||||
|
|
||||||
print("Welcome to Metafy-Social Chatbot, let's start chatting!")
|
|
||||||
|
|
||||||
while True:
|
|
||||||
message = input("\n>")
|
|
||||||
ints = predict_class(message)
|
|
||||||
res = get_response(ints, intents)
|
|
||||||
print(f'Chatbot: {res}')
|
|
Binary file not shown.
Binary file not shown.
|
@ -1,25 +0,0 @@
|
||||||
{"intents": [
|
|
||||||
{"tag": "greetings",
|
|
||||||
"patterns": ["hello", "hey", "hi", "good day", "greetings", "what's up?", "how is it going?"],
|
|
||||||
"responses": ["Hello!", "Hey!", "What can i do for you?"]
|
|
||||||
},
|
|
||||||
{"tag": "goodbye",
|
|
||||||
"patterns": ["cya", "See you later", "Goodbye", "I am leaving", "Have a Good day", "bye", "cao", "see ya"],
|
|
||||||
"responses": ["Sad to see you go :(", "Talk to you later", "Goodbye!"]
|
|
||||||
},
|
|
||||||
{"tag": "age",
|
|
||||||
"patterns": ["how old", "how old are you?", "what is your age?", "age"],
|
|
||||||
"responses": ["I am immortal", "I do not age", "you guess", "I'm too shy >.<"]
|
|
||||||
},
|
|
||||||
{"tag": "name",
|
|
||||||
"patterns": ["What is your name?", "What should i call you?", "what's your name?", "who are you?", "Can you tell me your name ?"],
|
|
||||||
"responses": ["I am metafy-social AI", "I am metafy-social Chatbot"]
|
|
||||||
},
|
|
||||||
{"tag": "hours",
|
|
||||||
"patterns": ["when are you guys open?", "hours open?", "Are you open today?", "Are you open"],
|
|
||||||
"responses": ["24/7", "We are open 24/7", "We are always open"]
|
|
||||||
},
|
|
||||||
{"tag": "learn",
|
|
||||||
"patterns": ["What are good resources to learn python?", "Where can i learn python programming", "Where to learn python?", "How to learn python?", "Where can i study python?", "Study?"],
|
|
||||||
"responses": ["You can learn python at our repository 'https://github.com/metafy-social/daily-python-scripts'"]}
|
|
||||||
]}
|
|
|
@ -1,4 +0,0 @@
|
||||||
keras==2.9.0
|
|
||||||
nltk==3.7
|
|
||||||
numpy==1.20.3
|
|
||||||
tensorflow==2.9.1
|
|
|
@ -1,76 +0,0 @@
|
||||||
import random
|
|
||||||
import json
|
|
||||||
import pickle
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
import nltk
|
|
||||||
nltk.download('punkt')
|
|
||||||
nltk.download('wordnet')
|
|
||||||
nltk.download('omw-1.4')
|
|
||||||
from nltk.stem import WordNetLemmatizer
|
|
||||||
|
|
||||||
from tensorflow import keras
|
|
||||||
from keras.models import Sequential
|
|
||||||
from keras.layers import Dense, Activation, Dropout
|
|
||||||
from keras.optimizers import SGD
|
|
||||||
|
|
||||||
lemmatizer = WordNetLemmatizer()
|
|
||||||
|
|
||||||
intents = json.loads(open('intents.json').read())
|
|
||||||
|
|
||||||
words = []
|
|
||||||
classes = []
|
|
||||||
documents = []
|
|
||||||
ignore_letters = ['?', '!', '.', ',']
|
|
||||||
|
|
||||||
for intent in intents['intents']:
|
|
||||||
for pattern in intent['patterns']:
|
|
||||||
word_list = nltk.word_tokenize(pattern)
|
|
||||||
words.extend(word_list)
|
|
||||||
documents.append((word_list, intent['tag']))
|
|
||||||
if intent['tag'] not in classes:
|
|
||||||
classes.append(intent['tag'])
|
|
||||||
|
|
||||||
# print(documents)
|
|
||||||
|
|
||||||
words = [lemmatizer.lemmatize(word) for word in words if word not in ignore_letters]
|
|
||||||
words = sorted(set(words))
|
|
||||||
|
|
||||||
classes = sorted(set(classes))
|
|
||||||
|
|
||||||
pickle.dump(words, open('words.pkl', 'wb'))
|
|
||||||
pickle.dump(classes, open('classes.pkl', 'wb'))
|
|
||||||
|
|
||||||
training = []
|
|
||||||
output_empty = [0] * len(classes)
|
|
||||||
|
|
||||||
for document in documents:
|
|
||||||
bag = []
|
|
||||||
word_patterns = document[0]
|
|
||||||
word_patterns = [lemmatizer.lemmatize(word.lower()) for word in word_patterns]
|
|
||||||
for word in words:
|
|
||||||
bag.append(1) if word in word_patterns else bag.append(0)
|
|
||||||
|
|
||||||
output_row = list(output_empty)
|
|
||||||
output_row[classes.index(document[1])] = 1
|
|
||||||
training.append([bag, output_row])
|
|
||||||
|
|
||||||
random.shuffle(training)
|
|
||||||
training = np.array(training)
|
|
||||||
|
|
||||||
train_x = list(training[:, 0])
|
|
||||||
train_y = list(training[:, 1])
|
|
||||||
|
|
||||||
model = Sequential()
|
|
||||||
model.add(Dense(128, input_shape=(len(train_x[0]),), activation='relu'))
|
|
||||||
model.add(Dropout(0.5))
|
|
||||||
model.add(Dense(64, activation='relu'))
|
|
||||||
model.add(Dropout(0.5))
|
|
||||||
model.add(Dense(len(train_y[0]), activation='softmax'))
|
|
||||||
|
|
||||||
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
|
|
||||||
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])
|
|
||||||
|
|
||||||
hist = model.fit(np.array(train_x), np.array(train_y), epochs=200, batch_size=5, verbose=1)
|
|
||||||
model.save('chatbot_model.h5', hist)
|
|
||||||
print('Done')
|
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user