| 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(responses_file, "r") as f: |
| lines = [x.rstrip("\n") for x in f.readlines()] |
|
|
| tokenizer = Tokenizer() |
| tokenizer.fit_on_texts(lines) |
|
|
| 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, verbose=1): |
| tokens = list(tokenizer.texts_to_sequences([text,])[0]) |
| tokens = (tokens+[0,]*inp_len)[:inp_len] |
| prediction = model.predict(np.array([tokens,]), verbose=verbose)[0] |
| line = find_line_number(prediction) |
| return lines[line] |
|
|
| if __name__ == "__main__": |
| while True: |
| inp = input("User: ") |
| print(f"Bot: {generate(inp)}") |
|
|