IT Study/ML & DL

[DL/NLP] RNN 실습 (with. nsmc data)

짹짹체유 2023. 12. 23. 23:00

 

0. 세팅 및 데이터 셋 확인

!pip install korpora
from Korpora import Korpora

 

Korpora 라이브러리를 활용해 데이터셋을 가져온다

Korpora 는 연구 목적으로 공유된 말뭉치들을 손쉽게 다운로드, 사용할 수 있는 기능을 제공해,

Korpora 라이브러리 내에 다양한 말뭉치 데이터들이 있다

그 중에서 Naver 영화 리뷰 말뭉치인 nsmc 데이터를 활용할 것이다

 

  • 데이터 셋 구성
nsmc_corpus = Korpora.load('nsmc')

train_data = list(nsmc_corpus.train.texts)[:3000]
test_data = list(nsmc_corpus.train.texts)[:1000]

train_label = np.array(list(nsmc_corpus.train.labels)[:3000])
test_label = np.array(list(nsmc_corpus.train.labels)[:1000])
  • load 함수를 통해서 nsmc 말뭉치를 가져온다
  • 훈련 데이터는 3000개, 학습 데이터는 1000개로 세팅한다

1. 데이터 전처리

  • 문장 토큰화 및 인코딩
import numpy as np

def tokenize_sentence(sentences):
  return np.array([tokenizer.encode(text, max_length=80, padding='max_length', truncation=True) for text in sentences])
  • text에 있는 문장을 하나씩 가져와서 단어들로 토큰화 및 인코딩을 진행한다
  • max_length: 최대 길이를 설정
  • padding: 최대길이 만큼
  • truncation=True: 

 

train_sequences = tokenize_sentence(train_data)
test_sequences = tokenize_sentence(test_data)

  • 토큰화 및 인코딩 후에는 최대 길이로 지정한 80의 길이를 갖는 벡터로 변한 것을 확인할 수 있다
  • 인코딩을 진행한 배열의 길이가 80보다 짧다면 모두 0으로 채운다

 


2. 모델 구성

import tensorflow as tf

rnn = tf.keras.Sequential([
    tf.keras.layers.Embedding(input_dim = tokenizer.vocab_size,
                              output_dim=64,
                              input_length=80), # input layer
    tf.keras.layers.SimpleRNN(32),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

rnn.compile(
    loss='binary_crossentropy',
    optimizer = 'adam',
    metrics=['accuracy']
)

 

  • 입력층의 input 길이는 토큰화 시에 지정한 최대 길이로 한다
  • SimpleRNN layer로 층을 구성
  • 출력값은 0 또는 1의 하나의 값이기 때문에 출력층의 node는 1로 설정한다
  • 이진분류이기 때문에 손실함수는 'binary_crossentropy'를 사용한다
  • 옵티마이저는 adam으로, 성능평가 지표는 accuracy로 한다

 


3. 모델 학습

rnn.fit(
    train_sequences,
    train_label,
    epochs=5,
    validation_data=(test_sequences, test_label)
)
  • fit 함수로 학습한다
  • epochs은 5로 주어 전체 데이터를 5번 사용해서 학습하도록 한다

  • 손실함수 값은 0.42가 가장 낮게, 정확도 값은 0.83이 가장 높게 나왔다

 

 

 

반응형