[자연어처리] 댓글 데이터 전처리 (2) 에서 이어서 갑시다.
임포트 해주고,
from tensorflow.keras.layers import Embedding, Dense, LSTM
from tensorflow.keras.models import Sequential
from tensorflow.keras.models import load_model
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
학습시키는데...
embedding_dim = 100
hidden_units = 128
model = Sequential()
model.add(Embedding(total_cnt, embedding_dim))
model.add(LSTM(hidden_units))
model.add(Dense(1, activation='sigmoid'))
es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=4)
mc = ModelCheckpoint('best_model.h5', monitor='val_acc', mode='max', verbose=1, save_best_only=True)
model.compile(optimizer='rmsprop', loss='binary_crossentropy', metrics=['acc'])
history = model.fit(df_train, y_train, epochs=15, callbacks=[es, mc], batch_size=64, validation_split=0.2)
아 이건 진짜 어렵네. 일단 책에 있는 코드 그대로 사용하고, 테스트 해보자.
보니까 Epoch 9 에 조금 일찍 끝났다는 것 같은데..
감성 분석 코드를 적어보면,
def sentiment_predict(new_sentence):
new_sentence = re.sub(r'[^ㄱ-ㅎㅏ-ㅣ가-힣 ]','', new_sentence)
new_sentence = okt.morphs(new_sentence, stem=True) # 토큰화
new_sentence = [word for word in new_sentence if not word in stopwords] # 불용어 제거
encoded = tokenizer.texts_to_sequences([new_sentence]) # 정수 인코딩
pad_new = pad_sequences(encoded, maxlen = max_len) # 패딩
score = float(loaded_model.predict(pad_new)) # 예측
if(score > 0.5):
print("{:.2f}% 확률로 긍정적인 댓글입니다.\n".format(score * 100))
else:
print("{:.2f}% 확률로 부정적인 댓글입니다.\n".format((1 - score) * 100))
테스트를 해보면...
52퍼가 아니라 거의 한 90퍼는 나와야할텐데..
사실 따지고 보면 라벨링한 댓글의 갯수가 400개 밖에 안 되서 어쩔수가 없긴 하다. 다시 라벨링을 해야겠다.
'캡스톤 > 자연어처리' 카테고리의 다른 글
[자연어처리] 댓글 데이터 전처리 (2) (0) | 2022.04.05 |
---|---|
[자연어처리] No module named 'konlpy' 에러 (0) | 2022.04.05 |
[자연어처리] 댓글 데이터 전처리 (1) (0) | 2022.04.04 |
[자연어처리] 댓글 데이터 엑셀에 저장하기 (0) | 2022.04.03 |
[자연어처리] 유튜브 API 를 사용해 영상 댓글 데이터 가져오기 (0) | 2022.04.03 |