Chapter 09. 텍스트를 위한 인공 신경망
학습목표
- 텍스트와 시계열 데이터 같은 순차 데이터에 잘 맞는 순환 신경망의 개념과 구성 요소에 대해 배움.
- 케라스 API로 기본적인 순환 신경망에서 고급 순환 신경망을 만들어 영화 감상평을 분류하는 작업에 적용해 봄.
- 순환 신경망에서 발생하는 문제점과 이를 극복하기 위한 해결책을 살펴봄.
Chapter 09. 텍스트를 위한 인공 신경망 - 1) 순차 데이터와 순환 신경망
순차 데이터의 특징을 알고 순환 신경망의 개념을 학습.
키워드로 끝내는 핵심 포인트
- 순차 데이터는 텍스트나 시계열 데이터와 같이 순서에 의미가 있는 데이터. 대표적인 순차 데이터로는 글, 대화, 일자별 날씨, 일자별 판매 실적 등을 예로 들 수 있음.
- 순환 신경망은 순차 데이터에 잘 맞는 인공 신경망의 한 종류. 순차 데이터를 처리하기 위해 고안된 순환층을 1개 이상 사용한 신경망을 순환 신경망이라고 부름.
- 순환 신경망에서는 종종 순환층을 셀이라 부름. 일반적인 인공 신경망과 마찬가지로 하나의 셀은 여러 개의 뉴런으로 구성
- 순환 신경망에서는 셀의 출력을 특별히 은닉 상태라고 부름. 은닉 상태는 다음 층으로 전달될 뿐만 아니라 셀이 다음 타임스텝의 데이터를 처리할 때 재사용됨.
순환 신경망으로 순환 데이터 처리
- 이번 절에서 순차 데이터와 순환 신경망을 소개했음. 먼저 순차 데이터의 특징을 예를 들어 소개했고 순환 신경망의 개념과 주요 구성 요소를 소개했음. 여기에는 순환층, 셀, 은닉 상태 등이 포함됨.
- 순환층은 순서를 가진 데이터를 처리하기 위해 밀집 신경망이나 합성곱 신경망과는 계산하는 방식이 다름. 은닉층의 출력을 다음 층으로만 보내지 않고 다음 순서에 다시 재사용하는 순환 구조로 되어 있음.
- 하지만 거시적인 구조는 다른 신경망과 크게 다르지 않음. 입력에 가중치를 곱하고 절편을 더한 다음 활성화 함수를 통과시켜 다음 층으로 전달하는 것임. 다만 순환층은 이전 타임스텝의 출력을 입력으로 함께 사용함. 또 마지막 타임스텝의 출력만 다음 층으로 전달.
- 다음 절에서는 텐서플로와 케라스를 사용해 순차 데이터와 순환 신경망을 직접 만들어 영화 감상평을 긍정과 부정으로 분류해 보겠음.
Chapter 09. 텍스트를 위한 인공 신경망 - 2) 순환 신경망으로 IMDB 리뷰 분류하기
텐서플로를 사용해 순환 신경망을 만들어 영화 리뷰 데이터셋에 적용해서 리뷰를 긍정과 부정으로 분류
- 자연어 처리 : 컴퓨터를 사용해 인간의 언어를 처리하는 분야 (음성 인식, 기계 번역, 감성 분석 등)
- 말뭉치 : 자연어 처리 분야에서의 훈련 데이터
- 어휘 사전: 훈련 세트에서 고유한 단어를 뽑아 만든 목록을 어휘 사전이라고 말함. 예를 들어 테스트 세트 안에 어휘 사전에 없는 단어가 있다면 2로 변환하여 신경망 모델에 주입.
- 한글 문장이 토큰을 분리하는 방법?!
- 한글은 조사가 발달되어 있기 때문에 공백으로 나누는 것만으로는 부족함. 일반적으로 한글은 형태소 분석을 통해 토큰을 만듬. 안타깝지만 한글의 형태소 분석은 이 책의 범위를 넘어섬. KoNLPy를 사용한 한글의 형태소 분석에 관심이 있다면 "파이썬 라이브러리를 활용한 머신러닝" 7장 참고
파이썬 라이브러리를 활용한 머신러닝 - 교보문고
사이킷런 핵심 개발자가 쓴 머신러닝과 데이터 과학 실무서 | 실제 문제에 대한 해법을 찾는 머신러닝 기술자를 위한 본격 머신러닝 입문서 이 책은 머신러닝 알고리즘을 밑바닥부터 만드는 법
www.kyobobook.co.kr
키워드로 끝내는 핵심 포인트
- 말뭉치는 자연어 처리에서 사용하는 텍스트 데이터의 모음, 즉 훈련 데이터셋을 일컬음.
- 토큰은 텍스트에서 공백으로 구분되는 문자열을 말함. 종종 소문자로 변환하고 구둣점은 삭제.
- 원-핫 인코딩은 어떤 클래스에 해당하는 원소만 1이고 나머지는 모두 0인 벡터. 정수로 변환된 토큰을 원-핫 인코딩으로 변환하려면 어휘 사전 크기의 벡터가 만들어짐.
- 단어 임베딩은 정수로 변환된 토큰을 비교적 작은 크기의 실수 밀집 벡터로 변환함. 이런 밀집 벡터는 단어 사이의 관계를 표현할 수 있기 때문에 자연어 처리에서 좋은 성능을 발휘함.
- TensorFlow
- pad-sequences() : 시퀀스 길이를 맞추기 위해 패딩을 추가, 이 함수는 (샘플 개수, 타임스텝 개수) 크기의 2차원 배열을 기대함.
- to_categorical() : 정수 시퀀스를 원-핫 인코딩으로 변환. 토큰을 원-핫 인코딩하거나 타깃값을 원-핫 인코딩할 때 사용.
- SimpleRNN : 케라스의 기본 순환층 클래스
- Embedding : 단어 임베딩을 위한 클래스
케라스 API로 순환 신경망 구현
- 1절에서 배웠던 순환 신경망의 개념을 실제 모델을 만들어 보면서 구체화해 보았음. 텐서플로와 케라스는 완전 연결 신경망, 합성곱 신경망뿐만 아니라 다양한 순환층 클래스를 제공하기 때문에 손쉽게 순환 신경망을 만들 수 있음.
- 이 절에서는 순환 신경망의 MNIST 데이터셋으로 생각할 수 있는 유명한 IMDB 리뷰 데이터셋을 사용했음. 이 작업은 리뷰의 감상평을 긍정과 부정으로 분류하는 이진 분류 작업임.
- 두 가지 모델을 훈련해 보았음. 먼저 입력 데이터를 원-핫 인코딩으로 변환하여 순환층에 직접 주입하는 방법을 사용했음. 두 번째는 정수 시퀀스를 그대로 사용하기 위해 모델 처음에 Embedding 층을 추가했음. 단어 임베딩은 단어마다 실수로 이루어진 밀집 벡터를 학습하기 때문에 단어를 풍부하게 표현할 수 있음.
- 다음 절에서는 더 복잡한 문제에 적용할 수 있는 고급 순환층을 배우고 같은 문제에 적용하여 결과를 비교해 보겠음.
- 전체 소스 코드
9-2.ipynb
Run, share, and edit Python notebooks
colab.research.google.com
Chapter 09. 텍스트를 위한 인공 신경망 - 3) LSTM과 GRU 셀
순환 신경망에서 빼놓을 수 없는 핵심 기술인 LSTM과 GRU 셀을 사용한 모델을 만들어 봄.
키워드로 끝내는 핵심 포인트
- LSTM 셀은 타임스텝이 긴 데이터를 효과적으로 학습하기 위해 고안된 순환층. 입력 게이트, 삭제 게이트, 출력 게이트 역할을 하는 작은 셀이 포함되어 있음.
- LSTM 셀은 은닉 상태 외에 셀 상태를 출력함. 셀 상태는 다음 층으로 전달되지 않으며 현재 셀에서만 순환됨.
- GRU 셀은 LSTM 셀의 간소화 버전으로 생각할 수 있지만 LSTM 셀에 못지않는 성능을 냄.
- TensorFlow
- LSTM은 LSTM 셀을 사용한 순환층 클래스.
- GRU는 GRU 셀을 사용한 순환층 클래스
LSTM과 GRU 셀로 훈련
- 이 절에서는 순환 신경망에서 가장 인기 있는 LSTM과 GRU 셀에 대해 배웠음. 또 순환층에 드롭아웃을 적용해 보았고 2개의 순환층을 쌓는 방법에 대해 알아보았음
- 이제 가장 좋았던 2개의 순환층을 쌓은 모델을 다시 로드하여 테스트 세트에 대한 성능을 확인해 보겠음. 먼저 테스트 세트를 훈련 세트와 동일한 방식으로 변환. 그 다음 load_model() 함수를 사용해 best-2rnn-model.h5 파일을 읽고 evaluate() 메서드로 테스트 세트에서 성능을 계산함.
- 전체 소스 코드
9-3.ipynb
Run, share, and edit Python notebooks
colab.research.google.com
예제 파일
GitHub - rickiepark/hg-mldl: <혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다.
<혼자 공부하는 머신러닝+딥러닝>의 코드 저장소입니다. Contribute to rickiepark/hg-mldl development by creating an account on GitHub.
github.com
'딥러닝' 카테고리의 다른 글
[딥러닝] 혼자 공부하는 머신러닝 + 딥러닝 | Chapter 08. 이미지를 위한 인공 신경망 | (0) | 2022.05.18 |
---|---|
[딥러닝] Hugging Face (0) | 2022.05.18 |
[딥러닝] 혼자 공부하는 머신러닝 + 딥러닝 | Chapter 07. 딥러닝을 시작합니다 | (0) | 2022.05.18 |
[딥러닝] 딥러닝 학습 향상을 위한 고려 사항들 (0) | 2022.04.19 |
[WikiDocs] PyTorch로 시작하는 딥 러닝 입문 (0) | 2022.04.18 |