관리 메뉴

솜씨좋은장씨

[Kaggle DAY24]Real or Not? NLP with Disaster Tweets! 본문

Kaggle/Real or Not? NLP with Disaster Tweets

[Kaggle DAY24]Real or Not? NLP with Disaster Tweets!

솜씨좋은장씨 2020. 3. 22. 20:37
728x90
반응형

Kaggle 도전 24회차!

이제 정말 대회 종료까지 얼마 남지 않았습니다.

지난 23일동안 정말 다양한 데이터 전처리 방법과

LSTM, Bi-LSTM, CNN, CNN-LSTM, RNN, GRU, BERT등 정말 다양한 모델을 사용하여 결과를 도출하여 보았을때

BERT로 도출한 결과가 가장 좋았습니다.

 

남은 2일은 BERT를 활용하여 결과를 내고 최종 제출 파일을 선택하기로 하였습니다.

그리고 1.0000의 Public Score를 갖고 있는 사람들중에 일부는 test 데이터의 정답 라벨을 다운로드 받아

그 데이터를 제출한 것을 알게되었고 정말 많이 실망하게 되었습니다.

이것을 알고 검색해보던 중 지난 다른 대회에서도 이런 cheating이 있었고 상금까지 받아가 기사에 났던 적이 있는 것도 알게되었고

어떤 기업에서 텍스트 분류서비스를 제공하는 서비스를 활용하여 가볍게 Public Score를 0.83 이상 가져가는 것도 보았습니다.

 

과연 Private Score가 어떻게 책정될지 궁금하기도하지만

어차피 1,000등 밖이라 현재보다 더 좋은 모델을 만드는 것을 목표로 하기로 했습니다.

 

데이터 전처리는 23회차와 동일하게 진행하였습니다.

 

그리고 대회가 AutoML 5팀만을 수상자를 가리고 나머지는 앞으로 정해진 end 일자 없이 계속 진행된다는 것을 오늘 알았습니다.

정말... 바보같지만 그래도 열정을 가지고 할 수 있었던 것 같습니다.

뭔가 허탈하지만 아직 목표로했던 1.0000이 아니기에 계속 시간날때마다 해보려합니다.

그리고 AutoML을 적용해보신분이 0.9의 점수를 얻었다고하니 꼭 해보아야할 것 같습니다.

 

첫번째 제출

def get_bert_finetuning_model(model):
  inputs = model.inputs[:2]
  dense = model.layers[-3].output


  outputs = keras.layers.Dense(2, activation='sigmoid',kernel_initializer=keras.initializers.TruncatedNormal(stddev=0.02),
                              name = 'real_output')(dense)



  bert_model = keras.models.Model(inputs, outputs)
  bert_model.compile(
      optimizer=RAdam(learning_rate=5e-6, weight_decay=0.0025),
      loss='binary_crossentropy',
      metrics=['accuracy'])
  
  return bert_model
sess = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess.run(init)

bert_model2 = get_bert_finetuning_model(model)
history = bert_model2.fit(train_x, train_y_new, epochs=3, batch_size=32, verbose = 1, validation_split=0.2, shuffle=True)

preds = bert_model2.predict(test_set)
predict_labels = np.argmax(preds, axis=1)
for i in range(len(predict_labels)):
  predict_labels[i] = predict_labels[i]

ids = list(test['id'])

submission_dic = {"id":ids, "target":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("kaggle_day24.csv", index=False)

결과

 

두번째 제출

def get_bert_finetuning_model(model):
  inputs = model.inputs[:2]
  dense = model.layers[-3].output


  outputs = keras.layers.Dense(2, activation='sigmoid',kernel_initializer=keras.initializers.TruncatedNormal(stddev=0.02),
                              name = 'real_output')(dense)



  bert_model = keras.models.Model(inputs, outputs)
  bert_model.compile(
      optimizer=RAdam(learning_rate=0.00001, weight_decay=0.0025),
      loss='binary_crossentropy',
      metrics=['accuracy'])
  
  return bert_model
sess = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess.run(init)

bert_model2 = get_bert_finetuning_model(model)
history = bert_model2.fit(train_x, train_y_new, epochs=2, batch_size=32, verbose = 1, validation_split=0.05, shuffle=True)

preds = bert_model2.predict(test_set)
predict_labels = np.argmax(preds, axis=1)
for i in range(len(predict_labels)):
  predict_labels[i] = predict_labels[i]

ids = list(test['id'])

submission_dic = {"id":ids, "target":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("kaggle_day24_2.csv", index=False)

결과

 

세번째 제출

def get_bert_finetuning_model(model):
  inputs = model.inputs[:2]
  dense = model.layers[-3].output


  outputs = keras.layers.Dense(2, activation='sigmoid',kernel_initializer=keras.initializers.TruncatedNormal(stddev=0.02),
                              name = 'real_output')(dense)



  bert_model = keras.models.Model(inputs, outputs)
  bert_model.compile(
      optimizer=RAdam(learning_rate=6e-6, weight_decay=0.0025),
      loss='binary_crossentropy',
      metrics=['accuracy'])
  
  return bert_model
sess = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess.run(init)

bert_model3 = get_bert_finetuning_model(model)
history = bert_model3.fit(train_x, train_y_new, epochs=2, batch_size=32, verbose = 1, validation_split=0.05, shuffle=True)

preds = bert_model3.predict(test_set)
predict_labels = np.argmax(preds, axis=1)
for i in range(len(predict_labels)):
  predict_labels[i] = predict_labels[i]

ids = list(test['id'])

submission_dic = {"id":ids, "target":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("kaggle_day24_3_2.csv", index=False)

결과

 

네번째 제출

def get_bert_finetuning_model(model):
  inputs = model.inputs[:2]
  dense = model.layers[-3].output


  outputs = keras.layers.Dense(2, activation='sigmoid',kernel_initializer=keras.initializers.TruncatedNormal(stddev=0.02),
                              name = 'real_output')(dense)



  bert_model = keras.models.Model(inputs, outputs)
  bert_model.compile(
      optimizer=RAdam(learning_rate=0.00001, weight_decay=0.0025),
      loss='binary_crossentropy',
      metrics=['accuracy'])
  
  return bert_model
sess = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess.run(init)
bert_model3 = get_bert_finetuning_model(model) 
history2 = bert_model3.fit(train_x, train_y_new, epochs=3, batch_size=32, verbose = 1, validation_split=0.05, shuffle=True)

preds = bert_model3.predict(test_set)
predict_labels = np.argmax(preds, axis=1)
for i in range(len(predict_labels)):
  predict_labels[i] = predict_labels[i]

ids = list(test['id'])

submission_dic = {"id":ids, "target":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("kaggle_day24_4_3.csv", index=False) #6e-6

결과

 

다섯번째 제출

def get_bert_finetuning_model(model):
  inputs = model.inputs[:2]
  dense = model.layers[-3].output


  outputs = keras.layers.Dense(2, activation='sigmoid',kernel_initializer=keras.initializers.TruncatedNormal(stddev=0.02),
                              name = 'real_output')(dense)



  bert_model = keras.models.Model(inputs, outputs)
  bert_model.compile(
      optimizer=RAdam(learning_rate=6e-6, weight_decay=0.0025),
      loss='binary_crossentropy',
      metrics=['accuracy'])
  
  return bert_model
from keras.callbacks import ModelCheckpoint
sess = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess.run(init)
bert_model3 = get_bert_finetuning_model(model) 
history2 = bert_model3.fit(train_x, train_y_new2, epochs=2, batch_size=32, verbose = 1, validation_split=0.05, shuffle=True)

preds = bert_model3.predict(test_set)
predict_labels = np.argmax(preds, axis=1)
for i in range(len(predict_labels)):
  predict_labels[i] = predict_labels[i]

ids = list(test['id'])

submission_dic = {"id":ids, "target":predict_labels}
submission_df = pd.DataFrame(submission_dic)
submission_df.to_csv("kaggle_day24_5_1.csv", index=False) #6e-6

결과

Comments