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')