본문 바로가기

BLOG/딥러닝

LSTM을 이용한 자연어처리 (실습)

【5】RNN 기본 다지기 / 실습으로 익히는 순환신경망

LSTM을 이용한 자연어처리 (실습)

 

이번에는 RNN의 강점이라고 할 수 있는 자연어처리를 해보자

 

모델에 사용 할 데이터셋은 IMDB 데이터다.

IMDB 사이트에 등록된 리뷰를 긍정인지 부정인지를 분류하는 문제다.

 

from tensorflow.keras import models,layers,datasets

from tensorflow.keras.preprocessing.sequence import pad_sequences

 

텐서플로우 2.0 생략하고 자연어처리 실습에 사용될 패키지들이다.

 

(x_train,y_train),(x_test,y_test) = datasets.imdb.load_data(num_words=10000)

 

IMDB 데이터셋을 호출하는 코드다.

이번에는 num_words라는 매개변수를 사용했는데 이는 많이 사용되는 단어순으로 가져온다.

10000을 선언하면 많이 사용되는 단어 만 개를 가져온다는 뜻이다.

 

shape() 명령어를 찍어보면 데이터마다 길이가 다른 것은 알 수 있다.

그래서 패딩을 통해서 길이를 통일 시켜야 한다.

 

x_train = pad_sequences(x_train,maxlen=500)

 

pad_sequences(패딩 할 데이터, 최대길이)로 되있고 패딩 이후로 shape() 명령어를 하게 되면 최대길이로 전부 설정되어 있다.

최대 길이에서 부족한 데이터셋은 데이터를 0으로 채워서 맞춘다

 

model = models.Sequential()

model.add(layers.Embedding(10000,128))

model.add(layers.LSTM(64))

model.add(layers.Dense(1,activation='sigmoid'))

 

이번에는 모델을 작성해보자

새롭게 임베딩(Embedding)이라는 것이 추가된 것을 알 수 있다

단어와 글을 벡터화를 시키는 것이 임베딩이고 입력레이더 대신 사용한다.

Embedding(단어 갯수, 유닛수)로 설정한다.

 

IMDB가 분류 문제여서 뉴럴넷에 시그모이드 함수를 사용한다.

 

model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['acc'])

 

시그모이드 함수를 사용하면 자동으로 크로스엔트로피 로스함수가 사용된다.

옵티마이저는 아담을 사용한다.

 

바로 학습을 돌려보자

 

model.fit(x_train,y_train,epochs=1,verbose=1)

 

 

 


작성자 김강빈 kkb08190819@gmail.com / 이원재 ondslee0808@gmail.com