네이버 영화 리뷰 분석을 위한 딥러닝 모델 생성하기

gosu·2023년 10월 27일
0
post-thumbnail

1. 데이터 준비

  • 먼저 깃허브에서 데이터를 다운로드합니다.
!git clone https://github.com/e9t/nsmc.git  

2. 데이터 전처리

  • 결측치 제거
  • 리뷰 내용이 비어있는 행을 제거합니다.
train_data = pd.read_table('/content/nsmc/ratings_train.txt')
test_data = pd.read_table('/content/nsmc/ratings_test.txt')
train_data = train_data.dropna(how = 'any')
test_data = test_data.dropna(how = 'any')
  • 텍스트 정제
  • 한글과 공백을 제외하고 모든 문자를 제거합니다.
train_data['document'] = train_data['document'].str.replace("[^ㄱ-ㅎㅏ-ㅣ가-힣 ]","")

3. 토큰화 및 불용어 제거

  • KoNLPy와 Okt 형태소 분석기를 사용하여 텍스트를 형태소로 분리하고, 불용어를 제거합니다.
import konlpy 
from konlpy.tag import Okt 

X_train = []
okt = Okt()
stopwords=['의','가','이','은','들','는','좀','잘','걍','과','도','를','으로','자','에','와','한','하다']

for sentence in train_data['document']:
    temp_X = okt.morphs(sentence, stem = True)
    temp_X = [word for word in temp_X if not word in stopwords]
    X_train.append(temp_X)

4. 텍스트를 숫자로 변환

  • Keras의 Tokenizer를 사용하여 텍스트를 숫자로 변환합니다.
from tensorflow.keras.preprocessing.text import Tokenizer

tokenizer = Tokenizer(num_words = 35000)
tokenizer.fit_on_texts(X_train)
X_train = tokenizer.texts_to_sequences(X_train)

5. 리뷰 길이 조정

  • 모든 리뷰의 길이를 동일하게 30으로 맞춥니다.
from tensorflow.keras.preprocessing.sequence import pad_sequences

X_train = pad_sequences(X_train, maxlen= 30)

6. 모델 구성 및 훈련

  • Embedding, LSTM, Dense 레이어로 구성된 모델을 생성하고 훈련시킵니다.
  • Embedding : 정수인코딩 된 결과를 의미단위로 재해석합니다.
    - 비슷한 의미를 갖는 값들은 비슷한 숫자로 재배열합니다.
    • ※주의※ 가장 첫번째 층에서 사용해야 합니다.
from tensorflow.keras import Sequential
from tensorflow.keras.layers import Embedding, Dense, LSTM

model = Sequential()
model.add(Embedding(35000, 100 , input_length = 30))
model.add(LSTM(128))
model.add(Dense(1, activation = 'sigmoid'))

model.compile(
    loss='binary_crossentropy',
    optimizer = 'rmsprop',
    metrics = ['accuracy']
)

model.fit(X_train, y_train, epochs = 10, batch_size = 60, validation_split = 0.2)

7. 모델 저장

  • 훈련이 완료된 모델을 'naver_review_analysis.h5' 파일로 저장합니다.
model.save('naver_review_analysis.h5')
profile
개발자 블로그 ^0^

0개의 댓글