기타/파이토치 서포터즈

[파이토치 서포터즈] 순환신경망과 LSTM을 활용한 문장 분류 실습

notty 2024. 2. 5. 22:56
728x90

파이토치를 활용하여 임베딩 학습 and 모델 학습하기

 

순환신경망 (Recurrent Neural Network, RNN)

: 연속적인(sequencial) 데이터를 처리하는데 적합한 구조

  • 현시점의 데이터가 이전까지에 영향을 받는 경우(독립적이지 않은 경우) 효과적으로 작동
  • 문장 역시 시퀀스데이터임 -> 이전까지 단어들의 의미와 패턴을 고려하여 다음에 올 단어를 유추할 수 있음

모델 구조

  • ht, 은닉상태 : 각 시점마다 은닉상태의 형태를 다음 셀로 전달하여 다은 셀은 입력과 은닉상태를 계산한다
  • ot, 출력
  • xt, 입력
  • cell, 셀 : 입력을 받아 은닉상태와 계산하여 출력하는 노드

입력-출력 구조

  • 일대다 구조 (One-to-Many) : 하나의 입력 시ㅁ퀀스에 대해 여러개의 출력값을 가진다
    • 출력 시퉌스의 길이를 미리 알고 있어야 한다
    • 예시) 이미지 캡셔닝 : 이미지를 입력하면 출력으로 문장이 각 셀별 단어 단위로 출력된다
  • 다대일 구조 (Many-to-One) : 여러개의 입력 시퀀스에 대해 하나의 출력값을 생성
    • 예시) 문장 분류, 감정분석 등 : 문장의 단어단위로 입력하면 해당 문장이 어느 분류에 속하는지 출력
  • 다대다 구조 (Many-to-Many) : 입력, 출력 시퀀스가 여러개인 경우
    • 예시) 문장 번역
    • 시퀀스-시퀀스 구조 (seq2seq) : 인코더(encoder)-디코더(decoder)

순환신경망의 종류

  • 양방향 순환신경망(Bidirectional Recurrent Neural Network, BiRNN)
    • 기존 RNN은 이전의 히든상태를 고려해서 결과를 출력하지만 양방향 순환 신경망은 ht-1, ht+1 모두를 고려
    • 예시 ) 두 단어 사이에 들어갈 단어 찾기
  • 다중 순환 신경망(Stacked Recurrent Neural Network) : 층이 많은 RNN
    • 층이 깊어질수록 복잡한 패턴 학습 가능

양방향 다층신경망 실습

pytorch 기반

input_size : 입력 크기

output_size : 출력 크기

num_layers : 층의 수 (단층 순환 신경망의 경우 num_layers = 1)

non_linearity : 활성함수 (tanh or relu)

batch_first : 배치 크기를 우선으로 사용할지 if True, [배치크기, 시퀀스 길이, 입력 특성 크기] else [시퀀스 길이, 배치 크기, 입력 특성 크기]

bidirectional : 양발향을 사용할건지 if True 양방향 else 단방향

 

LSTM (Long Short Term Memory)

: 메모리 셀, 게이트라는 구조를 도입

  • RNN의 장기 의존성 문제, 기울기 소실/폭주 발생 문제를 해결

  • 망각게이트: 장단기 메모리에서 이전 셀 상태에서 어떠한 정보를 삭제할지 결정하는 역할
  • 입력 게이트 : 새로운 정보를 어떤 부분에 추가할지 결정하는 역할
  • 출력 게이트 : 셀 상태의 정보 중 어떤 부분을 출력할지 결정하는 역할

LSTM 문장분류 실습 - pytorch로 구현

: 문장 긍정 부정 분류 모델

 

데이터셋 : Korpora 의 데이터셋 사용

 

데이터 전처리 : okt 토크나이저 사용, 단어사전 구축, <pad>와 <unk>을 스페셜 토큰으로 추가 

* <pad> : 시퀀스의 길이를 맟춰주기 위함

  <unk> : OOV

 

정수 인코딩 및 패딩

  • 인코딩 : 나눈 토큰들을 정수화하여 컴퓨터가 사용할 수 있도록 (<pad> : 0, <unk> : 1)
  • 패딩 : 입력시퀀스의 길이가 동일해야하기 때문에 길이를 맞춰주는 용도

 

데이터 로더 : 파이토치 텐서 형태로 데이터를 변환

TensorDataset클래스는 파이토치 텐서 형태를 입력값으로 받는다. 

 

하이퍼 파라미터 설정  

hidden_dim, 은닉상태 크기 : 64

embedding_dim, 임베딩벡터 크기 : 128

n_layers, 층 : 2

optim.RMSprop, RMSprop 옵티마이저 사용, learning rate = 0.001

 

모델 학습 및 테스트

학습 결과 :

검증셋 loss변화 : 0.0488 -> 0.3923 => loss감소

검증셋 accuracy변화 : 0.76 -> 0.82 => accuracy 증가

 

 

https://product.kyobobook.co.kr/detail/S000209621433

 

파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 윤대희 - 교보문고

파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습 | 트랜스포머는 딥러닝 분야에서 성능이 우수한 모델로 현대 인공지능 분야의 핵심 기술입니다. 트랜스포머와 비전 트랜스

product.kyobobook.co.kr

 

728x90
반응형