[NLP Project] 4. LSTM 모델 구축

2022. 11. 6. 00:27·Project/캡스톤디자인2
728x90
반응형

모델 구축에는 keras 함수를 이용하였다.

그리고 옵티마이저는 Adam

 

모델의 구성은 다음과 같다.

1. 입력을 실수 벡터로 임베딩

2. 양방향 LSTM 구성

3. Dense Layer를 통한 각 태그에 속할 확률을 예측

 

TimeDistributed는 상위 layer의 출력이 step에 따라 여러개로 출력되어 이를 적절하게 분배해주는 역할을 한다.

 

model.py

from keras.models import Sequential
from keras.layers import Dense, Embedding, LSTM, Bidirectional, TimeDistributed
from keras.optimizers import Adam

def modeling(vocab_size, max_len,tag_size):
    model = Sequential()
    model.add(Embedding(input_dim = vocab_size, output_dim= 128, input_length= max_len, mask_zero=True))
    model.add(Bidirectional(LSTM(256, return_sequences=True))) # unit= 256 
    model.add(TimeDistributed(Dense(tag_size,activation='softmax'))) # 최종 결과 (다중 분류이므로 소프트맥스 함수 사용)
    model.compile(loss= 'categorical_crossentropy',
                    optimizer= Adam(0.001), # 학습률
                    metrics=['accuracy'], 
                    ) # 모델 컴파일
    
    return model

main.py 에는 다음 코드를 추가한다.

학습 결과를 빠르게 보고싶어서 에포크는 3회만 진행하였다.

    model = modeling(vocab_size, max_len,tag_size) # 모델 로드

    model.fit(X_train,y_train, batch_size=128, epochs=3,validation_data=(X_test,y_test)) # 모델 학습

    model.save('test_model.h5') # 모델 저장

    model.evaluate(X_test,y_test) # 모델 평가

추후에 파라미터 조절을 하면서 성능을 향상시킬 것이다.

76%의 정확도를 보이는 것 같다.

 

모델도 이렇게 저장된 모습을 볼 수 있다.

main.py 전체코드

from data_load import file_load, tag_split
from tokenization import Token
from model import modeling
from tensorflow.keras.preprocessing.sequence import pad_sequences
from tensorflow.keras.utils import to_categorical
from keras.models import load_model
from sklearn.model_selection import train_test_split
import numpy as np




if __name__ == "__main__":
    file_path = "data/train_data.txt"
    tagged_sentences = file_load(file_path)
    sentences, ner_tags = tag_split(tagged_sentences)
    src_tokenizer, tar_tokenizer,tag_size,vocab_size= Token(sentences,ner_tags)

    # 데이터를 학습에 사용하기 위해 데이터를 배열로 변환
    X_train = src_tokenizer.texts_to_sequences(sentences)
    y_train = tar_tokenizer.texts_to_sequences(ner_tags)
    # 데이터의 길이를 동일한 길이로 맞추기 위해 패딩
    max_len = 70
    X_train = pad_sequences(X_train, padding= "post",maxlen=max_len)
    y_train = pad_sequences(y_train, padding= "post",maxlen=max_len)
    # 훈련, 실험 데이터 분리
    X_train, X_test, y_train, y_test = train_test_split(X_train,y_train,test_size=.2,random_state=111)

    y_train = to_categorical(y_train,num_classes=tag_size) # 카테고리 데이터를 인덱스로 변환 
    y_test = to_categorical(y_test,num_classes=tag_size) 

    model = modeling(vocab_size, max_len,tag_size) # 모델 로드

    model.fit(X_train,y_train, batch_size=128, epochs=3,validation_data=(X_test,y_test)) # 모델 학습

    model.save('test_model.h5') # 모델 저장

    model.evaluate(X_test,y_test) # 모델 평가
728x90
반응형

'Project > 캡스톤디자인2' 카테고리의 다른 글

[NLP Project] input 값을 넣어 개체명 인식하기 - 오류 해결  (0) 2022.11.07
[NLP Project] 성능 기록  (0) 2022.11.06
[NLP Project] 5. 정답 예측하기  (0) 2022.11.06
[NLP Project] 2. 토큰화 하기  (0) 2022.11.05
[NLP Project] 1. 데이터 로드하고 전처리하기  (0) 2022.11.05
'Project/캡스톤디자인2' 카테고리의 다른 글
  • [NLP Project] 성능 기록
  • [NLP Project] 5. 정답 예측하기
  • [NLP Project] 2. 토큰화 하기
  • [NLP Project] 1. 데이터 로드하고 전처리하기
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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    Python
    소수
    백준
    programmers
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
sillon
[NLP Project] 4. LSTM 모델 구축
상단으로

티스토리툴바