File size: 3,708 Bytes
42e3a78 33f2b11 42e3a78 33f2b11 42e3a78 33f2b11 42e3a78 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 |
import json
import random
import torch
from model import NeuralNet
from nltk_utils import bag_of_words, tokenize
from spell_check import correct_typos
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
with open("intents.json") as json_data:
intents = json.load(json_data)
FILE = "data.pth"
data = torch.load(FILE)
input_size = data["input_size"]
hidden_size = data["hidden_size"]
output_size = data["output_size"]
all_words = data["all_words"]
tags = data["tags"]
model_state = data["model_state"]
model = NeuralNet(input_size, hidden_size, output_size).to(device)
model.load_state_dict(model_state)
model.eval()
bot_name = "BGPT"
# print(
# "Hello, I am B-BOT, personal ChatBOT of Mr. Bibek. Let's chat! (type 'quit' or 'q' to exit)" # NoQA
# )
def generate_tag(sentence):
# sentence = input("You: ")
sentence = correct_typos(sentence)
# print(sentence)
if sentence.lower() == "quit" or sentence.lower() == "q":
# Needs to quit
pass
sentence = tokenize(sentence)
X = bag_of_words(sentence, all_words)
X = X.reshape(1, X.shape[0])
X = torch.from_numpy(X).to(device)
output = model(X)
_, predicted = torch.max(output, dim=1)
tag = tags[predicted.item()]
return tag
def generate_response(sentence):
# sentence = input("You: ")
sentence = correct_typos(sentence)
# print(sentence)
if sentence.lower() == "quit" or sentence.lower() == "q":
# Needs to quit
pass
sentence = tokenize(sentence)
X = bag_of_words(sentence, all_words)
X = X.reshape(1, X.shape[0])
X = torch.from_numpy(X).to(device)
output = model(X)
_, predicted = torch.max(output, dim=1)
tag = tags[predicted.item()]
probs = torch.softmax(output, dim=1)
prob = probs[0][predicted.item()]
if prob.item() > 0.8:
for intent in intents["intents"]:
if tag == intent["tag"]:
return f"{bot_name}: {random.choice(intent['responses'])}"
else:
return (
f"{bot_name}: Sorry, I didn't understand... Can you be more "
"specific on your question? You can ask about Bibek's skillset, "
"experiences, portfolio, education, achievements "
"and KAIST activities."
"These are some sample questions: "
"(I) Tell me about Bibek,\n"
"(II) What skills does he have?,\n"
"(III) What work experience does Bibek have?,\n"
"(IV) What is Bibek's educational background?,\n"
"(V) What awards has he won?,\n"
"(VI) What projects has he completed? &\n"
"(VII) How can I contact Bibek?"
)
# while True:
# # sentence = "do you use credit cards?"
# sentence = input("You: ")
# if sentence.lower() == "quit" or sentence.lower() == "q":
# break
# sentence = tokenize(sentence)
# X = bag_of_words(sentence, all_words)
# X = X.reshape(1, X.shape[0])
# X = torch.from_numpy(X).to(device)
# output = model(X)
# _, predicted = torch.max(output, dim=1)
# tag = tags[predicted.item()]
# probs = torch.softmax(output, dim=1)
# prob = probs[0][predicted.item()]
# if prob.item() > 0.8:
# for intent in intents["intents"]:
# if tag == intent["tag"]:
# print(f"{bot_name}: {random.choice(intent['responses'])}")
# else:
# print(
# f"{bot_name}: Sorry, I do not understand... Can you be more "
# "specific on your question? You can ask about Bibek's skillset, "
# "experiences, portfolio, education, achievements "
# "and KAIST activities."
# )
|