[NLP Project] input 값을 넣어 개체명 인식하기 - 오류 해결

2022. 11. 7. 23:44·Project/캡스톤디자인2
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
'Project/캡스톤디자인2' 카테고리의 다른 글
  • [NLP Project] F1 Score
  • [NLP Project] LSTM + self-attention
  • [NLP Project] 성능 기록
  • [NLP Project] 5. 정답 예측하기
sillon
sillon
꾸준해지려고 합니다..
    반응형
  • sillon
    sillon coding
    sillon
  • 전체
    오늘
    어제
    • menu (614)
      • notice (2)
      • python (68)
        • 자료구조 & 알고리즘 (23)
        • 라이브러리 (19)
        • 기초 (8)
        • 자동화 (14)
        • 보안 (1)
      • coding test - python (301)
        • Programmers (166)
        • 백준 (76)
        • Code Tree (22)
        • 기본기 문제 (37)
      • coding test - C++ (5)
        • Programmers (4)
        • 백준 (1)
        • 기본기문제 (0)
      • 공부정리 (5)
        • 신호처리 시스템 (0)
        • Deep learnig & Machine lear.. (41)
        • Data Science (18)
        • Computer Vision (17)
        • NLP (40)
        • Dacon (2)
        • 모두를 위한 딥러닝 (강의 정리) (4)
        • 모두의 딥러닝 (교재 정리) (9)
        • 통계 (2)
      • HCI (23)
        • Haptics (7)
        • Graphics (11)
        • Arduino (4)
      • Project (21)
        • Web Project (1)
        • App Project (1)
        • Paper Project (1)
        • 캡스톤디자인2 (17)
        • etc (1)
      • OS (10)
        • Ubuntu (9)
        • Rasberry pi (1)
      • App & Web (9)
        • Android (7)
        • javascript (2)
      • C++ (5)
        • 기초 (5)
      • Cloud & SERVER (8)
        • Git (2)
        • Docker (1)
        • DB (4)
      • Paper (7)
        • NLP Paper review (6)
      • 데이터 분석 (0)
        • GIS (0)
      • daily (2)
        • 대학원 준비 (0)
      • 영어공부 (6)
        • job interview (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    소수
    programmers
    백준
    Python
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[NLP Project] input 값을 넣어 개체명 인식하기 - 오류 해결
상단으로

티스토리툴바