You are on page 1of 15

Kumoh National Institute of Technology

딥러닝 (Deep Learning)


RNN 과 자연어 처리

컴퓨터공학과 황준하
Contents

1. RNN 과 자연어 처리

2. LSTM 을 이용한 로이터 뉴스 카테고리 분류

3. LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류

2/14
RNN 과 자연어 처리
1. RNN 과 자연어 처리

RNN 과 자연어 처리
 RNN ( 순환 신경망 )
◦ x 값 : 순서가 중요하다면 ( 예 , 시계열 데이터 )
 이전 입력의 결과 ( 상태 ) 가 다음 입력값의 출력에 영향을 줌
 RNN 사용 가능
 자연어 처리
◦ x 값 : 단어들의 집합  FCNN 적용
◦ x 값 : 단어들의 순서 중요  RNN 적용 자연스러움
 언어 분류 : “ 훌륭한 작품이다”  긍정
 언어 모델 : “ 나는 오늘 학교에” 다음에 나오는 단어는 ?
 언어 번역 : “ 나는 학교에 간다”  “ I go to school”
 적용 예
◦ LSTM 을 이용한 로이터 뉴스 카테고리 분류
◦ LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류 3/14
RNN 과 자연어 처리
2. LSTM 을 이용한 로이터 뉴스 카테고리 분류

로이터 뉴스 카테고리 분류 : 문제 이해
 문장의 의미를 파악하기 위해서는 문장을 범주로 분류하는
과정이 필요
 문장의 범주를 분류하기 위해서는 문장을 구성하는 모든
단어들에 대한 종합적인 이해가 필요함
 데이터 예

4/14
RNN 과 자연어 처리
2. LSTM 을 이용한 로이터 뉴스 카테고리 분류

문제 정의
 로이터 뉴스 기사 데이터셋
◦ x : 11,258 개 뉴스 기사
◦ y : 46 개 카테고리
 전처리된 데이터셋
from keras.datasets import reuters

(X_train, Y_train), (X_test, Y_test) =


reuters.load_data(num_words=1000, test_split=0.2)

◦ 학습 데이터 : 80% num_words : 빈도수 상위 1000 개 단어만 사용 .


reuters 데이터는 빈도수 1 위 단어가 1 로 , 2 위
◦ 검증 데이터 : 20% 단어가 2 로 인덱싱되어 있음 .
따라서 단어 인덱스 1~999 까지만 사용 .
임베딩 시 (999+1(0 은 패딩 )) 이 사용되어 1000
이됨
5/14
RNN 과 자연어 처리
2. LSTM 을 이용한 로이터 뉴스 카테고리 분류

데이터 확인
category = np.max(y_train) + 1 # 최대값이 3 이라면 0, 1, 2,
3 => 4 개
print(category, " 카테고리 ")
print(len(x_train), " 학습용 뉴스 기사 ")
print(len(x_test), " 테스트용 뉴스 기사 ")
print(x_train[0])
print(len(x_train[0])) # 각 예제마다 단어의 길이가 다른
상태입
46 카테고리
print(len(x_train[1]))
8982 학습용 뉴스 기사
2246 테스트용 뉴스 기사
[1, 2, 2, 8, 43, 10, 447, 5, 25, 207, 270, 5, 2, 111, 16, 369,
186, 90, 67, 7, 89, 5, 19, 102, 6, 19, 124, 15, 90, 67, 84, 22,
482, 26, 7, 48, 4, 49, 8, 864, 39, 209, 154, 6, 151, 6, 83, 11,
15, 22, 155, 11, 15, 7, 48, 9, 2, 2, 504, 6, 258, 6, 272, 11, 15,
22, 134, 44, 11, 15, 16, 8, 197, 2, 90, 67, 52, 29, 209, 30, 32,
132, 6, 109, 15, 17, 12]
87
56 6/14
RNN 과 자연어 처리
2. LSTM 을 이용한 로이터 뉴스 카테고리 분류

데이터 전처리
 x : 각 예제의 단어 길이 통일 : padding
◦ max_len=100 : 100 보다 긴 경우 나머지 버림
 y : one-hot 인코딩
x_train = pad_sequences(X_train, maxlen=100)
x_test = pad_sequences(X_test, maxlen=100)
y_train = keras.utils.to_categorical(Y_train)
y_test = keras.utils.to_categorical(Y_test)
print(x_train.shape) (8982, 100)
[ 0 0 0 0 0 0 0 0 0 0 0 0 0 1 2
print(x_train[0]) 2 8 43
10 447 5 25 207 270 5 2 111 16 369 186 90 67 7
print(y_train.shape) 89 5 19
print(y_train[0]) 102 6 19 124 15 90 67 84 22 482 26 7 48 4 49
8 864 39
209 154 6 151 6 83 11 15 22 155 11 15 7 48 9
2 2 504
6 258 6 272 11 15 22 134 44 11 15 16 8 197 2
90 67 52
29 209 30 32 132 6 109 15 17 12] 7/14
RNN 과 자연어 처리 (8982, 46)
2. LSTM 을 이용한 로이터 뉴스 카테고리 분류

모델 정의
 Embedding 레이어
◦ word_size(1000)  100 개 실수로 표현
 RNN LSTM 레이어
◦ 128 개 unit
inputs = keras.Input(shape=(100,))
x = layers.Embedding(1000, 100, input_length=100)
(inputs)
x = layers.LSTM(128)(x)
outputs = layers.Dense(46, activation="softmax")
(x)
model = keras.Model(inputs=inputs,
outputs=outputs)

8/14
RNN 과 자연어 처리
2. LSTM 을 이용한 로이터 뉴스 카테고리 분류

LSTM 을 이용한 로이터 뉴스 카테고리 분류


 프로그램
◦ 09_2_1_LSTM 을 이용한 로이터 뉴스 카테고리 분류 .ipynb
 20epochs

9/14
RNN 과 자연어 처리
3. LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류

영화 리뷰 분류 : 문제 이해
 영화 리뷰에 대한 긍정과 부정 분류
 인터넷 영화 데이터베이스 (IMDB) 사용
◦ 영화 관련 정보와 출연진 정보 , 개봉 정소 , 영화 후기 , 평점에
이르기까지 폭넓은 데이터 저장
◦ 데이터셋
 학습 데이터 25,000 개 , 검증 데이터 25,000 개
 x 값 영화 후기 텍스트 ( 단어 나열 ) : 빈도수가 높은 단어 1, 2, ...
 y 값 2 개 : 긍정 (1), 부정 (0)
◦ 전처리된 데이터셋
from keras.datasets import imdb

(X_train, Y_train), (X_test, Y_test) =


imdb.load_data(num_words=5000)
10/14
RNN 과 자연어 처리
3. LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류

모델 정의
 프로그램
◦ 09_2_2_LSTM 과 CNN 의 조합으로 영화 리뷰 분류 .ipynb
inputs = keras.Input(shape=(500,))
x = layers.Embedding(5000, 100, input_length=500)(inputs)
x = layers.Dropout(0.5)(x)
x = layers.Conv1D(64, 5, padding="valid", activation="relu",
strides=1)(x)
# padding=“valid”(no 패딩 ) 디폴트값 , strides=1 디폴트값
x = layers.MaxPooling1D(pool_size=4)(x)
x = layers.LSTM(55)(x)
outputs = layers.Dense(1, activation="sigmoid")(x)
model = keras.Model(inputs=inputs, outputs=outputs)
Conv1D : 64 개의 커널 사용 , 커널 크기 5  동작 방식 ?
MaxPooling1D : 크기 4  동작 방식 ?

11/14
RNN 과 자연어 처리
3. LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류

Conv1D 기초
 padding=“valid”(no padding) 인 경우
◦ [1, 4, 3, 2]  [4, 6]

12/14
RNN 과 자연어 처리
3. LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류

Embedding 이후의 Conv1D 동작 방식


 한 예제의 단어 개수가 5 개 , 한 단어의 embedding
결과 길이가 3 이라면 , 커널 개수가 5 라면 : 5 회 반복 수행
1.7 ... ... ... ...
◦ Conv1D 의 커널 크기가 2 라면
... ... ... ... ...
결론 : 가중치 개수 = 커널크기 (2) *
w11 w21 w31
단어임베딩길이 (3) * 커널개수...(5) ...
+ 커널개수
... ... ...
커널 (bias,5)
w12 w22 w32 ... ... ... ... ...

적용

배우들의 0.2 0.4 0.1


0.1 0.7 0.9 1.7
연기가 0.7 0.6 0.2
시 0.9 ... ... ...
간 자연스럽고 ... ... ... + +
축 0.4 ... ... ...
몰입도가 ... ... ...
0.6 ... ... ...
최고다 ... ... ...
13/14
RNN 과 자연어 처리
3. LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류

MaxPooling1D
 pool_size 가 2 인 경우
◦ [1, 4, 3, 2]  [4, 3]

14/14
RNN 과 자연어 처리
연습 문제

네이버 영화 리뷰 감성 분석 ( 긍정 / 부정 )
 데이터 : 네이버 영화 리뷰 전처리 후 데이터
◦ 원본 : https://github.com/e9t/nsmc/
◦ 제공 데이터 : 전처리 후 데이터
 학습 데이터 : preprocessed_ratings_train.csv
 열 : preprocessed_document, label
 preprcessed_document : 리뷰 내용
 label : 1( 긍정 ), 0( 부정 )
 145393 개
 검증 데이터 : preprocessed_ratings_test.csv
 48852 개
 실험 1 : LSTM 을 적용할 때와 적용하지 않을 때의 검증 데이터에
대한 accuracy 를 비교 분석하라 .
 실험 2 : Conv1D 레이어와 MaxPooling1D 레이어를 적용할
때와 적용하지 않을 때의 검증 데이터에 대한 accuracy 를 비교
15/14
RNN 과 자연어 처리

You might also like