|
import json |
|
import numpy as np |
|
from keras.saving import load_model |
|
from keras.preprocessing.text import Tokenizer |
|
from keras_self_attention import SeqSelfAttention |
|
from model_settings import * |
|
|
|
|
|
with open("dataset.json", "r") as f: |
|
dset = json.load(f) |
|
|
|
tokenizer = Tokenizer() |
|
tokenizer.fit_on_texts(list(dset.keys())) |
|
|
|
model = load_model("chatbot.keras", custom_objects={"SeqSelfAttention": SeqSelfAttention}) |
|
|
|
def find_line_number(array): |
|
return sorted(zip(list(array), [x for x in range(len(array))]), key=lambda x:x[0], reverse=True)[0][1] |
|
|
|
def generate(text): |
|
tokens = list(tokenizer.texts_to_sequences([text,])[0]) |
|
tokens = (tokens+[0,]*inp_len)[:inp_len] |
|
prediction = model.predict(np.array([tokens,]))[0] |
|
line = find_line_number(prediction) |
|
return list(dset.values())[line] |
|
|
|
if __name__ == "__main__": |
|
while True: |
|
inp = input("User: ") |
|
print(f"Bot: {generate(inp)}") |
|
|