Professional Documents
Culture Documents
09 - 2 - RNN과 자연어 처리
09 - 2 - RNN과 자연어 처리
컴퓨터공학과 황준하
Contents
1. RNN 과 자연어 처리
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
데이터 확인
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 을 이용한 로이터 뉴스 카테고리 분류
9/14
RNN 과 자연어 처리
3. LSTM 과 CNN 의 조합을 이용한 영화 리뷰 분류
영화 리뷰 분류 : 문제 이해
영화 리뷰에 대한 긍정과 부정 분류
인터넷 영화 데이터베이스 (IMDB) 사용
◦ 영화 관련 정보와 출연진 정보 , 개봉 정소 , 영화 후기 , 평점에
이르기까지 폭넓은 데이터 저장
◦ 데이터셋
학습 데이터 25,000 개 , 검증 데이터 25,000 개
x 값 영화 후기 텍스트 ( 단어 나열 ) : 빈도수가 높은 단어 1, 2, ...
y 값 2 개 : 긍정 (1), 부정 (0)
◦ 전처리된 데이터셋
from keras.datasets import imdb
모델 정의
프로그램
◦ 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 의 조합을 이용한 영화 리뷰 분류
적용
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 과 자연어 처리