관리 메뉴

솜씨좋은장씨

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

Kaggle/Real or Not? NLP with Disaster Tweets

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

솜씨좋은장씨 2020. 3. 18. 02:46
728x90
반응형

Kaggle 20회차!

이제 최종 23일까지 약 5일밖에 남지않았습니다.

0.10000의 점의 점수를 얻은 분들은 도대체 어떤 분들인지 빨리 대회가 끝나고 수상자들의 코드가 공개되었으면 하는 바램입니다.

 

오늘은 지금까지 제출했던 것들 중 가장 결과가 좋았던 9회차에 사용했던 버트모델에

새로운 방법의 데이터 전처리 방식을 사용하여 결과를 도출하고 제출해 보았습니다.

 

전처리 방식은

 

NLP-disaster-tweets-1

Explore and run machine learning code with Kaggle Notebooks | Using data from multiple data sources

www.kaggle.com

위의 링크에서 여러 이상한 단어들을 원래의 단어로 잘 바꾸어주는 parse_tweet이라는 함수를 가져와 사용하여

he's -> he is / fromåÊwounds -> from wounds 와 같이 바꾸어 주기

=> 이모티콘 제거

=> 링크 제거

=> 약어를 다시 풀어주기

=> 신이름 god로 통일하기

=> \n, \t제거하기

=> 특수문자 제거하기

=> 숫자제거하기

=> 세번이상 반복되는 알파벳은 해당 알파벳을 한번만 사용하도록 바꾸어주기

=> nltk의 TreebankWordTokenizer로 토큰화

=> 토큰화한 단어중 길이가 3이상인 단어만 남겨두기

=> 불용어처리

=> lemmatizing

=> ' '.join(word_list)를 통해 다시 문장으로 만들기

 

이렇게 만들어진 데이터를 가지고 지난 9회차 때의 임베딩/모델링 방식을 그대로 사용하여 제출해보았습니다.

 

첫번째 제출

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_model = get_bert_finetuning_model(model)
history = bert_model.fit(train_x, train_y_new, epochs=2, batch_size=16, verbose = 1, validation_split=0.05, shuffle=True)

결과

 

두번째 제출

sess2 = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess2.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess2.run(init)

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

결과

 

세번째 제출

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)

결과

 

네번째 제출

sess2 = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess2.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess2.run(init)

bert_model4 = get_bert_finetuning_model(model)
history2 = bert_model4.fit(train_x, train_y_new, epochs=5, batch_size=32, verbose = 1, validation_split=0.05, shuffle=True)

결과

 

다섯번째 제출

sess2 = K.get_session()
uninitialized_variables = set([i.decode('ascii') for i in sess2.run(tf.report_uninitialized_variables())])
init = tf.variables_initializer([v for v in tf.global_variables() if v.name.split(':')[0] in uninitialized_variables])
sess2.run(init)

bert_model6 = get_bert_finetuning_model(model)
history6 = bert_model6.fit(train_x, train_y_new, epochs=10, batch_size=32, verbose = 1, validation_split=0.05, shuffle=True)

결과

Comments