관리 메뉴

솜씨좋은장씨

DACON 금융문자분석 공모전 - 도전 2일차 본문

DACON/KB 금융문자 분석 경진대회

DACON 금융문자분석 공모전 - 도전 2일차

솜씨좋은장씨 2019. 12. 15. 06:49
728x90
반응형

1. 아이디어

형태소 분석기를 Okt에서 Mecab으로 바꾸어 토큰화 한 후 모델을 학습시켜 결과 확인

 

 

 

Mecab을 활용하여 토큰화하니 문자데이터의 최대 길이가 666으로 증가하였습니다.

from keras.layers import Embedding, Dense, LSTM
from keras.models import Sequential
from keras.preprocessing.sequence import pad_sequences

max_len = 666 # 전체 데이터의 길이를 666로 맞춘다

X_train = pad_sequences(X_train, maxlen=max_len)
X_test = pad_sequences(X_test, maxlen=max_len)

 

모델링

첫번째 시도해본 모델 (Google Colab -TPU)

학습데이터 토큰화 시 형태소 분석기를 Okt에서 mecab으로 pad_sequence의 길이를 666으로 수정하여 만든 모델입니다.

model = Sequential()
model.add(Embedding(max_words, 100))
model.add(LSTM(128))
model.add(Dense(2, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=5, batch_size=32, validation_split=0.1)
epoch5batch_size32
optimizeradamvalidation_split0.1

 

 

epoch 4이후에 validation loss가 올라가고 validation accuracy가 떨어지는 것을 보니 epoch 4 이후에 오버피팅 되는 것 같았습니다.

 

첫번째 시도 결과

 

 

 

 

두번째 시도해본 모델 (Google Colab -TPU)

앞서 epoch가 4에서 오버피팅이 진행되는 것 같아 epoch만 5에서 4로 바꾸어 model을 만들어 보았습니다.

model = Sequential()
model.add(Embedding(max_words, 100))
model.add(LSTM(128))
model.add(Dense(2, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=4, batch_size=32, validation_split=0.1)
epoch4batch_size32
optimizeradamvalidation_split0.1

 

 

epoch만 4로 바꾸었으니 4번째에서 최적의 결과가 나올거라고 생각했지만 생각과는 조금 다르게 학습이 진행되었습니다.

 

두번째 시도 결과

 

 

 

세번째 시도해본 모델 (Google Colab -GPU)

마지막은 지금까지의 모델 중에 가장 성능이 좋게 평가된 TPU로 학습시켰던 가장 첫번째 모델을 TPU에서 GPU로 환경만 변화시켜서 학습을 시켜보았습니다.

model = Sequential()
model.add(Embedding(max_words, 100))
model.add(LSTM(128))
model.add(Dense(2, activation='sigmoid'))

model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history = model.fit(X_train, y_train, epochs=5, batch_size=32, validation_split=0.1)
epoch5batch_size32
optimizeradamvalidation_split0.1

 

 

어떤 이유인지는 모르겠으나 TPU로 학습시켰을때보다 1 epoch당 소요되는 시간이 더 짧게 소요되었습니다.

 

 

 

세번째 시도 결과

 

 

도전 2일차 결과

 

 

순위점수epoch / batchoptimizerval_splittrain_data특수문자제거colab형태소분석기
10.972629735 / 32adam0.1
2
30.968734225 / 32adam0.1model_kb_dacon01_trainset.csvXGPUOkt
40.965490885 / 32rmspropXmodel_kb_dacon01_trainset.csvXTPUOkt
50.96089065 / 32adamXmodel_kb_dacon01_trainset.csvXTPUOkt
60.951970545 / 32adam0.1model_kb_dacon01_trainset.csvXTPUMecab 

랭킹 등수 갱신은 실패하였습니다.

 

앞으로의 계획

train_data 속 ( )와 같은 특수문자를 제거하고 학습을 시켜보려 합니다.

train_data의 정상문자의 데이터를 더 추가해서 학습시켜 보려합니다.

학습 시 마다 다르게 학습되는 이유를 파악해보고자 합니다.

 

Comments