58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
import json
|
|
import numpy as np
|
|
import pickle
|
|
|
|
from keras.models import load_model
|
|
from keras.preprocessing.sequence import pad_sequences
|
|
|
|
|
|
model = load_model("multi_task_lstm_ner_srl_model_tf.keras")
|
|
|
|
with open("word2idx.pkl", "rb") as f:
|
|
word2idx = pickle.load(f)
|
|
|
|
with open("tag2idx_ner.pkl", "rb") as f:
|
|
tag2idx_ner = pickle.load(f)
|
|
|
|
with open("tag2idx_srl.pkl", "rb") as f:
|
|
tag2idx_srl = pickle.load(f)
|
|
|
|
|
|
idx2tag_ner = {i: t for t, i in tag2idx_ner.items()}
|
|
idx2tag_srl = {i: t for t, i in tag2idx_srl.items()}
|
|
|
|
|
|
max = 50
|
|
|
|
|
|
def predict_sentence(sentence):
|
|
tokens = sentence.strip().lower().split()
|
|
print(tokens)
|
|
|
|
x = [word2idx.get(w.lower(), word2idx["UNK"]) for w in tokens]
|
|
x = pad_sequences([x], maxlen=50, padding="post", value=word2idx["PAD"])
|
|
|
|
preds = model.predict(x)
|
|
pred_labels_ner = np.argmax(preds[0], axis=-1)[0]
|
|
pred_labels_srl = np.argmax(preds[1], axis=-1)[0]
|
|
|
|
result = {
|
|
"tokens": tokens,
|
|
"labels_ner": [
|
|
idx2tag_ner[int(label)] for label in pred_labels_ner[: len(tokens)]
|
|
],
|
|
"labels_srl": [
|
|
idx2tag_srl[int(label)] for label in pred_labels_srl[: len(tokens)]
|
|
],
|
|
}
|
|
|
|
return result
|
|
|
|
|
|
if __name__ == "__main__":
|
|
try:
|
|
sentence = "sore ini aku pergi ke indonesia"
|
|
print(predict_sentence(sentence))
|
|
except KeyboardInterrupt:
|
|
print("\n\nSelesai.")
|