모델 학습에서 중요한 것이 결과로 나온 accuracy와 각 epoch을 수행하면서 변동되는 accuracy의 추이이다. 결과는 훈련이 완료되면 print
가 되도록 설정해놓고 terminal에서 파악하기 용이했지만, 그 추이는 시각화 그래프가 없으면 한계가 있어서 TensorBoard라는 툴을 사용하였다.
이렇게 추이를 확인할 수 있다. 위 주황색은 실훈련 모델에 대한 정확도이고, 아래 파란색은 테스트 모델에 대한 정확도이다. 지금 이 테스트 모델의 정확도를 끌어 올려야 한다. Dataset을 변경하고 hyperparameters를 조금씩 변경해보아도 0.4xx~0.5에서 변하지를 않는다.
from tensorflow.keras.models import load_model
# ...
# 기존 모델 불러오기
model = load_model('rnn_model.h5')
# 모델 컴파일 (알고리즘:adam, 손실함수:categorical_crossentropy, 평가지표:accuracy)
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
# 학습 (반복횟수:1000, 한번에 처리할 데이터 샘플:32)
model.fit(X_train, y_train, epochs=1000, batch_size=32, validation_data=(X_test, y_test), # epochs: 조정 대상
callbacks=[custom_early_stopping, lr_scheduler_callback, tensorboard_callback], verbose=1)
# ...
# 모델 저장하기
model.save('rnn_model.h5')
문제 상황: 문장 학습 모델의 accuracy가 0.4xx~0.5에서 머물러 있는 이슈
계속 우리가 생성한, 즉 정규화되지 않은 dataset에 대해서만 모델 학습을 진행하였고, 그러므로 모델이 정상 작동하는 모델인지에 대한 확신이 없는 상황
우리가 아무리 몇천개 ~ 몇만개의 dataset을 모델에게 학습시킨다고 해도 현재 모델은 한국어가 학습되어 있는 모델이 아닌 말그대로 아무것도 학습되어 있는 모델이 아니기 때문에 문장이 살짝만 바뀐다고 해도 그 문장이 학습된 문장과 벡터값이 유사한 문장인지 파악하지 못할 것이다.
주제가 의료 계열이고, 우리가 원하는 dataset은 환자의 증상을 바탕으로 1) 이를 기록한 증상 보고서 문장이고 2) 이 문장을 바탕으로 한 중증도 레벨 데이터인데, 이런 정보는 개인정보여서 우리가 쉽게 찾을 수 없는 dataset이다. 따라서, 우리는 ChatGPT를 이용해서 우리가 환자 증상에 대한 키워드를 던져주면 관련 보고서 형식의 여러 문장을 생성해주고 각 문장들에 대해 ktas 기반으로 중증도 판단을 해달라고 하였고 관련 데이터를 천여개 정도 뽑아내었다. 그러나, 이 dataset이 과연 정규화가 되어있는건지 판단하기 어렵다.