78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
from tensorflow.keras.models import load_model
|
|
import numpy as np
|
|
import pickle
|
|
from tensorflow.keras.preprocessing.sequence import pad_sequences
|
|
|
|
# Load Trained Model
|
|
model = load_model("lstm_multi_output_model.keras")
|
|
|
|
# Load Tokenizer
|
|
with open("tokenizer.pkl", "rb") as handle:
|
|
tokenizer = pickle.load(handle)
|
|
|
|
# Define max sequence length (should match training phase)
|
|
MAX_LENGTH = 100
|
|
|
|
# Mapping for question type labels
|
|
question_type_dict = {0: "Fill in the Blank", 1: "True/False", 2: "Multiple Choice"}
|
|
|
|
|
|
def predict_question_answer_type(context_text):
|
|
"""
|
|
Given a context (paragraph), predict a question, answer, and question type.
|
|
"""
|
|
# === Tokenize and Pad the Context === #
|
|
context_seq = tokenizer.texts_to_sequences([context_text])
|
|
context_padded = pad_sequences(
|
|
context_seq, maxlen=MAX_LENGTH, padding="post", truncating="post"
|
|
)
|
|
|
|
# === Create a Dummy Input for the Question Decoder === #
|
|
# Since our model is seq2seq, we initialize an empty decoder input
|
|
decoder_input_seq = np.zeros((1, MAX_LENGTH))
|
|
|
|
# === Predict Outputs === #
|
|
predicted_question_seq, predicted_answer_seq, predicted_type = model.predict(
|
|
[context_padded, decoder_input_seq]
|
|
)
|
|
|
|
# === Convert Predicted Sequences to Text === #
|
|
index_to_word = {v: k for k, v in tokenizer.word_index.items()}
|
|
|
|
# Convert predicted question
|
|
predicted_question = " ".join(
|
|
[
|
|
index_to_word[idx]
|
|
for idx in np.argmax(predicted_question_seq, axis=2)[0]
|
|
if idx in index_to_word
|
|
]
|
|
)
|
|
|
|
# Convert predicted answer
|
|
predicted_answer = " ".join(
|
|
[
|
|
index_to_word[idx]
|
|
for idx in np.argmax(predicted_answer_seq, axis=2)[0]
|
|
if idx in index_to_word
|
|
]
|
|
)
|
|
|
|
# Convert predicted question type (numerical label → text)
|
|
predicted_question_type = question_type_dict[np.argmax(predicted_type)]
|
|
|
|
return predicted_question, predicted_answer, predicted_question_type
|
|
|
|
|
|
# Sample Test Context
|
|
context_example = "Ki Hajar Dewantara adalah pelopor pendidikan di Indonesia dan pendiri Taman Siswa. Ia dikenal dengan semboyannya 'Ing Ngarsa Sung Tuladha, Ing Madya Mangun Karsa, Tut Wuri Handayani', yang menekankan peran guru dalam pendidikan."
|
|
|
|
# Run the prediction
|
|
predicted_question, predicted_answer, predicted_question_type = (
|
|
predict_question_answer_type(context_example)
|
|
)
|
|
|
|
# Print the Results
|
|
print(f"🔹 Predicted Question: {predicted_question}")
|
|
print(f"🔹 Predicted Answer: {predicted_answer}")
|
|
print(f"🔹 Predicted Question Type: {predicted_question_type}")
|