데이터분석 공부/DSBA 4기
순환 신경망(Recurrent Neural Network, RNN)
이삼오
2024. 4. 22. 17:41
Embedding
- Embedding 층은 수많은 단어 또는 데이터를 벡터 형태로 표현할 수 있기 때문에 텍스트 분류를 위해 사용하는 가장 기본에 해당하는 츨
- 사전 학습 모델을 불러와 사용할 수 있음
- 토큰, 토큰화, 텍스트 분류에 해당하는 기본적 용어를 알고 사용해보자
- 토큰 (Token)
- 문법적으로 더 이상 나눌 수 없는 언어 요소
- 이를 수행하는 작업을 토큰화(Tokenizer)라고 함
- 텍스트 데이터를 신경망에 입력하기 위해서 일반적으로 토큰화 작업을 수행하고 정의된 토큰에 고유 인덱스를 부여한 뒤 인코딩을 통해 적절한 형태로 바꿔주는 전처리 작업 과정을 거치게 됨
- 원핫 인코딩, 이진 인코딩
- 워드 임베딩(Word Embedding)
토큰화 작업 수행하기
- tensorflow.keras.preprocessing.text 모듈에서 이를 위한 함수를 제공
Tokenizer() 함수를 사용하여 토큰화 작업 수행
- 사전을 손쉽게 만들어주는 함수
- 사전의 규칙을 지정해줘야 함
- oov_token : 데이터에 나타나지 않은 단어를 전달된 단어로 교체. 잘 사용되지 않는 단어를 '기타'로 처리
- fit_on_texts() 함수를 통해 데이터에 적용하고 texts_to_sequence() 함수로 변환
- sequences_to_matrix 함수를 사용하면 이진 형태로 인코딩된 결과를 얻을 수 있음
희소 행렬(Sparse Matrix)
- 존재하는 단어의 인덱스를 제외하고 전부 0으로 표현
- 고차원이며 단어의 유사성(Similarity)를 표현할 수 없음
- 행렬의 고차원으로 인해 불필요한 계산이 추가되며 차원의 저주를 야기한다
- 원핫인코딩과 같다
밀집 행렬(Dense Matrix)
- 각 단어의 관계를 실수로 표현. 저차원에 해당
- 데이터를 기반으로 조정해 유사한 의미를 가지는 단어는 비슷한 공간에 표현(매핑)됨
- tfidf와 유사
데이터를 동일한 길이로 맞추기
- 데이터의 길이가 전부 동일하도록 조정
- pad_sequences() 함수를 사용
- 지정해준 길이보다 짧은 경우 0으로 채워넣음 -> zero padding
- 긴 경우는 잘라냄
Embedding층을 사용해서 모델 구성
- 모델의 첫 번째 층으로만 사용할 수 있으며 주로 순환 신경망과 연결하여 사용함
- input_dim 학습 데이터에서 사용한 단어의 개수
- output_dim 임베딩 벡터 크기
- input_length 인자는 순환 신경망과 연결할 경우엔 사용하지 않음
모델 학습 및 평가하기
- validation_split 인자 사용
- 학습 데이터의 끝에서 해당 비율만큼 떼어내 검증 데이터셋으로 활용
- 무작위로 20% 비율만큼 뽑아오는 것이 아니라 단순하게 끝에서 떼어낸다는 점을 주의
RNN (순환 신경망)
- 임베딩 층은 데이터의 표현을 학습하여 데이터 사전을 구축하는 것으로 쉽게 이해할 수 있음
- 유사 단어를 비슷한 공간에 매핑할 수 있지만 시퀀스 데이터의 중요한 특성인 순서와 맥락을 고려하지 않음
- Dense vs Conv 차이를 떠올려보자
- 순환 신경망은 완전연결층&컨볼루션 신경망의 반대되는 개념으로 설명할 수 있음
- 완전연결층, 컨볼루션 신경망은 피드 포워드 네트워크(feed-forward network)
- 출력값이 오직 마지막 층인 출력층을 향함
- 순환 신경망은 출력값이 출력층을 향하면서도 동시에 현재층의 다음 값으로 사용
- 모든 뉴런이 현재 상태를 계산하기 위해서 이전 상태(이전에 들어온 값)을 활용함
- X는 입력, T는 현재 시점
- A의 결과는 다시 A로 들어가서 루프를 만들어 주게 되는데요. 때문에 현재의 상태(state)가 그 다음 상태(state)에 영향을 미치게 됩니다