728x90
지난번 게시글에 학습한 모델을 바탕으로 새로운 input값을 넣어 개채명을 인식해보겠습니다.
지난번 코드와 출력결과는 아래와 같습니다.
input_predict.py
from keras.preprocessing.text import text_to_word_sequence
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.models import load_model
import numpy as np
def tokenize(samples):
tokenizer = Tokenizer()
tokenizer.fit_on_texts(samples)
return tokenizer
def input_predict(sentence,input_tokenizer):
# 예측
idx2word = input_tokenizer.index_word
idx2ner = {'-': 1, 'cvl_b': 2, 'num_b': 3, 'per_b': 4, 'org_b': 5, 'dat_b': 6, 'loc_b': 7, 'trm_b': 8, 'evt_b': 9, 'num_i': 10, 'dat_i': 11, 'anm_b': 12, 'evt_i': 13, 'per_i': 14, 'org_i': 15, 'afw_b': 16, 'cvl_i': 17, 'trm_i': 18, 'tim_b': 19, 'fld_b': 20, 'afw_i': 21, 'tim_i': 22, 'plt_b': 23, 'mat_b': 24, 'loc_i': 25, 'anm_i': 26, 'fld_i': 27, 'mat_i': 28, 'plt_i': 29}
idx2ner = {v:k for k,v in idx2ner.items()} # 딕셔너리 뒤집기
y_predicted = model.predict(np.array(ipt_to_vec))
y_predicted = np.argmax(y_predicted, axis = -1) # 가장 높은 확률을 추출 (예측값)
print("{:15}||{}".format("단어","예측값"))
print("-"*34)
for w, pred in zip(sentence, y_predicted[0]):
print("{:17}|{}".format(w,idx2ner[pred].upper()))
if __name__ == "__main__":
input = "1839년 바그너는 괴테의 파우스트을 처음 읽고 그 내용에 마음이 끌려 이를 소재로 해서 하나의 교향곡을 쓰려는 뜻을 갖는다."
sentence = text_to_word_sequence(input)
input_tokenizer = tokenize(sentence)
ipt_to_vec = input_tokenizer.texts_to_sequences(sentence)
ipt_to_vec = pad_sequences(ipt_to_vec,padding='post',maxlen=70)
model = load_model('models/test_model.h5')
input_predict(sentence,input_tokenizer)
단어 ||예측값
----------------------------------
1839년 |-
바그너는 |-
괴테의 |-
파우스트을 |-
처음 |-
읽고 |-
그 |-
내용에 |-
마음이 |-
끌려 |-
이를 |-
소재로 |-
해서 |-
하나의 |-
교향곡을 |-
쓰려는 |-
뜻을 |-
갖는다 |-
지난번 코드에서 수정할 부분은 다음과 같습니다.
문제는 토큰화하는 과정이었습니다...
토큰화 과정에서 해당 리스트 전체가 토큰화 되지 않았었습니다 ㅠ
그래서 ipt_to_vec 변수에서 sentence 를 한번 더 대괄호 쳐주어야했습니다
ipt_to_vec = input_tokenizer.texts_to_sequences([sentence])
그러고나서 예측값이 잘 나왔습니다...
교향곡을 이라는 단어에 왜 NUM 태그가 붙었을까요..
하나씩 밀린거 아니면 성능이 매우 떨어져서 그런 것 같습니다.
728x90
'Project > 캡스톤디자인2' 카테고리의 다른 글
[NLP Project] F1 Score (0) | 2022.11.08 |
---|---|
[NLP Project] LSTM + self-attention (0) | 2022.11.08 |
[NLP Project] 성능 기록 (0) | 2022.11.06 |
[NLP Project] 5. 정답 예측하기 (0) | 2022.11.06 |
[NLP Project] 4. LSTM 모델 구축 (0) | 2022.11.06 |