[딥러닝 스터디] 케라스(Keras) 실습
다음의 책을 공부하며 정리한 내용입니다.
딥러닝 라이브러리 케라스의 사용법을 익히고 실제 RNN모델을 설계해본다. 케라스는 딥러닝을 도와주는 파이썬 라이브러리이다.
케라스 훑어보기
전처리 도구
keras.preprocessing.text.Tokenizer()
: 토큰화, 정수 인코딩에 사용
- 사용 예시
1 | keras.preprocessing.text.Tokenizer(num_words=None, filters='!"#$%&()*+,-./:;<=>?@[\\]^_`{|}~\t\n', lower=True, split=' ', char_level=False, oov_token=None, document_count=0) |
- 모든 문장부호/구두점 삭제
- 공백 기준 토큰화
- 0은 reserved idx로 어떤 단어에도 부여되지 않는다.
각 Argument의 의미는 아래와 같다.
num_words
: Integer. 사용할 단어집합의 최대 크기 지정. Num_words - 1 words will be kept.filters
: String. 텍스트에서 걸러낼 문자집합. 걸러내는 기본값은 모든 문장부호(punctuations), 탭, 개행이다.( ‘ 제외)lower
: Boolean. 텍스트를 소문자로 변환할지 여부split
: String. 단어 분리에 사용할 seperator.char_level
: Boolean. True인 경우 모든 글자가 토큰으로 간주된다(Char RNN)oov_token
: 값을 주게 되면, 해당 값은 단어집합에 없는 단어를 대체할 word_index가 된다.
pad_sequence()
: 각 샘플(= 각 문장)은 길이가 다르다. 모델의 입력으로 동일한 크기의 샘플을 넣기 위해, 모든 샘플의 길이를 동일하게 맞춰준다.
- 정해준 길이보다 길이가 긴 샘플은 일부를 자른다
- 정해준 길이보다 길이가 짧은 샘플은 값을 0으로 채워준다.
해당 함수는 num_samples 길이의 시퀀스 리스트를 (num_samples, num_timesteps)
의 2차원 텐서로 변환한다.
1 | keras.preprocessing.sequence.pad_sequences(sequences, maxlen=None, dtype='int32', padding='pre', truncating='pre', value=0.0) |
각 Argument의 의미는 아래와 같다
sequences
: List of lists. 예를들어 [[1, 2, 3], [3, 4, 5, 6], [7, 8]]. 각각의 element는 시퀀스이다.maxlen
: Int. 시퀀스들 중 최대길이. 주어지지 않으면 자동으로 가장 긴 시퀀스 길이가 사용된다.padding
: String. 어느위치에 패딩할 것인지 정한다. 시퀀스 앞 or 뒤? pre나 post를 넣어준다.truncating
: String. 시퀀스 길이가 maxlen보다 길 경우 어느 위치에서 자를 것인지 정한다. 마찬가지로 pre나 post를 넣어준다.
반환 자료형은 다음과 같다.
- x : Numpy array =>
(len(sequences), maxlen)
워드 임베딩
Embedding()
: 텍스트 내의 positive integers들을 밀집벡터의 형태로 변환한다. 임베딩 과정을 통해 만들어진 밀집벡터를 임베딩 벡터라고 부르기도 한다.
eg. [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]]
임베딩 벡터는 랜덤값에서 시작하여 인공신경망의 가중치가 학습됨에 따라 값이 학습되게 된다.
모델의 첫번째 층 레이어로만 사용할 수 있다.
1 | keras.layers.Embedding(input_dim, output_dim, embeddings_initializer='uniform', embeddings_regularizer=None, activity_regularizer=None, embeddings_constraint=None, mask_zero=False, input_length=None) |
글자 단위 RNN(Char RNN)
: 입출력의 단위가 글자인 RNN을 케라스로 구현하여 언어모델의 훈련/테스트 과정을 이해한다.