관리 메뉴

솜씨좋은장씨

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

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

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

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

가장 먼저 Okt 형태소 분석기를 활용하여 토큰화 시

stem항목을 True에서 False로 바꾸어 만든 학습데이터셋으로 학습을 시켜 보았습니다.

from tqdm import tqdm
X_train = []
for i in range(len(train_data['clear_text2'])):
  temp_X = []
  temp_X = okt.morphs(train_data['clear_text2'].iloc[i], stem=False) # 토큰화
  temp_X = [word for word in temp_X if not word in stopwords] # 불용어 제거
  X_train.append(temp_X)

 

 

첫번째 제출 모델 (Google Colab -TPU)

model4 = Sequential()
model4.add(Embedding(max_words, 100))
model4.add(LSTM(128))
model4.add(Dense(2, activation='sigmoid'))
 
model4.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history4 = model4.fit(X_train, y_train, epochs=3, batch_size=32, validation_split=0.1)
epoch3batch_size32
optimizeradamvalidation_split0.1

첫번째 제출 결과

 

 

생각보다 좋지 못한 결과에 조금 아쉬웠습니다.

 

이번에는 토큰화를 할 때 불용어제거 이후에

단어의 길이가 2이상인 단어만 남겨둔 학습데이터를 가지고 학습시켜 보았습니다.

Okt에서 stem은 다시 True로 바꾸었습니다.

from tqdm import tqdm
X_train = []
for i in range(len(train_data['clear_text2'])):
  temp_X = []
  temp_X = okt.morphs(train_data['clear_text2'].iloc[i], stem=True) # 토큰화
  temp_X = [word for word in temp_X if not word in stopwords] # 불용어 제거
  temp_X = [word for word in temp_X if len(word) > 1]
  X_train.append(temp_X)

 

 

두번째 제출 모델 (Google Colab -TPU)

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

model3.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history3 = model3.fit(X_train, y_train, epochs=2, batch_size=32, validation_split=0.1)
epoch2batch_size32
optimizeradamvalidation_split0.1

 

 

두번째 제출 결과

결과는!!!!!!!!!!

 

 

드디어! 이전의 최고 기록을 경신했습니다!!!

 

 

그리고 드디어! Private Ranking에 도전할 수 있는 20위권으로 들어왔습니다!!!

 

하지만 아직 만족하기에는 이른것 같습니다.

 

최소 5위 안에는 들어야 안정적으로 Private Ranking도전을 갈 것으로 생각되어 1월 12일이되는 그날까지

 

매일 매일 계속 도전할 생각입니다.

 

 

이번에는 형태소 분석기만 Okt에서 Mecab으로 변경하여 학습데이터를 만들고 학습시켜 보았습니다.

from tqdm import tqdm
mecab = Mecab()
X_train2 = []
for i in tqdm(range(len(train_data['clear_text2']))):
  temp_X = []
  temp_X = mecab.morphs(train_data2['clear_text2'].iloc[i]) # 토큰화
  temp_X = [word for word in temp_X if not word in stopwords] # 불용어 제거
  temp_X = [word for word in temp_X if len(word) > 1]
  X_train2.append(temp_X)

 

 

세번째 제출 모델 (Google Colab -TPU)

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

model11.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])
history11 = model11.fit(X_train2, y_train2, epochs=1, batch_size=32, validation_split=0.1)
epoch2batch_size32
optimizeradamvalidation_split0.1

 

 

세번째 모델 제출 결과

 

 

아직까지는 Mecab이 속도면에서는 우월하게 빠르지만 Score는 계속 낮게 나오고 있습니다.

 

Private Ranking은 시간도 본다던데 슬슬 걱정이 되고 있습니다.

 

순위점수epoch / batchoptimizerval_splittrain_data특수문자제거colab
10.9822791022 / 32adam0.1model_kb_dacon02_trainset.csvOTPUOkt14
20.9745792432 / 32adam0.1model_kb_dacon02_trainset.csvOTPUOkt8
30.9729803652 / 32adam0.1model_kb_dacon02_trainset.csvOTPUMecab9
40.9728506313 / 32adam0.1model_kb_dacon02_trainset.csvOTPUOkt13
50.972629735 / 32adam0.1
6
70.9720301542 / 32adam0.1model_kb_dacon02_trainset.csvOTPUOkt10
80.968734225 / 32adam0.1model_kb_dacon01_trainset.csvXGPUOkt6
9
100.965490885 / 32rmspropXmodel_kb_dacon01_trainset.csvXTPUOkt2
110.96089065 / 32adamXmodel_kb_dacon01_trainset.csvXTPUOkt3
12
130.951970545 / 32adam0.1model_kb_dacon01_trainset.csvXTPUMecab 5
14
150.7013884993 / 32adamXmodel_kb_dacon01_trainset.csXGPUELMo7

 

 

Comments