본문 바로가기

딥러닝프로젝트/댓글감성분석

Bert로 학습해보기

기간:20년5월21일 ~6월 16일

 

※예전에 진행했던 프로젝트를 지금에서야 정리해서 올립니다.

 

 

안녕하세요 ~!. 굉장히 오랜만에 글을 작성하네요 

 

코로나19덕에 학기가 굉장히 루즈하고 늦게 끝나서 집중하지 못했습니다. 이제부터는 블로그에 좀더 집중 할수 있도록 하겠습니다.

 

Bert를 학습시키는 과정은 아래와 같은 과정을 거쳐서 진행합니다.

 

Tpu를 사용할 것인가?

Yes: GCs에 데이터를업로드해야만한다.

No:구글드라이브에 업로드한다.

 

Pretraining_dataGoogleCloud에 업로드해준다

 

Vocab을 만들어준다

1.     lovitwordpiece 코드참조

2.     구글 센텐스피스 라이브러리참조

데이터 전처리

Tf.record타입으로변환

Pre_training모델을 만들어준다.

우선 Bert를 학습하기 앞서 Bert에 들어갈 VocabList를 따로 만들어야합니다.

FineTuning을 해준다.

run_classifier.py  파일을 이용해서 기존에 학습햇던 pre_training의 checkpoint를 가지고 진행한다.

 

 

 

Google Cloud에 올려서 진행하지 않고 Colab에서 진행하기로 하였기 때문에 , Tpu에 올려서 하는 과정은 생략하였습니다.

 

https://github.com/google/sentencepiece

 

google/sentencepiece

Unsupervised text tokenizer for Neural Network-based text generation. - google/sentencepiece

github.com

저희는 Bert에 들어갈 VocabList를 따로 만들기 위해서 sentecepiece라는 라이브러리를 사용하기로 했습니다.

 

우선 악플을 약 100만개정도 모았습니다. 여러 블로그에서 100만개 혹은 천만개를 모아서 진행한다는 글을 보아서 저희도 그렇게 해보도록 하기로 했습니다.

 

직접 여러개의 Tokenization라이브러리를 사용해보았습니다.  유명한 라이브러리를 거의 다 사용해보았는데 , sentecepiece로 학습시킨 라이브러리가 제일 성능이 좋게 나온다고 평가했습니다.

 

아마도 , 댓글의 특성상 신조어가 많기 때문에 기존에 학습된 라이브러리로는 신조어를 커버하기 어렵기 때문이라고

생각이 들었습니다.

 

그 뿐만 아니라, sentencepiece 는 WordPieceEmbedding 방식을 이용해서 Tokenziation을 한것도 큰 이유입니다.

WPM방식은 OutofWord, 즉 사전에 등록되지 않는 단어에 강점을 보이는 방식이기 때문에 , 사전에 등록되지 않는 단어가 많은 신조어 방식에 강점을 보인것이라 추측하고 있습니다.

 

 

이번에 보여드릴 내용은 Bert로 실제로 어떻게 학습하는지를 다루겠습니다.

 

https://github.com/google-research/bert

 

google-research/bert

TensorFlow code and pre-trained models for BERT. Contribute to google-research/bert development by creating an account on GitHub.

github.com

 

Bert 라이버리는 위의 사이트에서 받아주시면 됩니다.

 

 

이제 남은 과정은 데이터 전처리, pre_training모델 만들기 ,fine_tuning을 하는 것입니다.

 

우선 데이터 전처리에는 create_pretraining_data.py파일이 사용되었습니다.

위와 같이 파일을 실행시켜 주면 됩니다.

 

pre_training모델 만들기 에는 run_pretrainig.py라은 파일이 사용되었습니다.

fine_tuning에는 run_classifier.py라는 파일이 사용되었습니다.

실제로 Test를 해본 결과 이러한 결과가 나오게 되었습니다.

 

이 모델의성능은 악플중 악플이라고 예측을 하는것이 중요한데 상당히 저조한 성능이 나왔습니다.

이 모델의 내부 학습방법이나 , 예측방법에 대해 공부가 덜 되었고 , 그저 google에 있는 사이트의내용을 보고따라해서 데이터를 어떻게 구성해야할지 몰랐습니다.

데이터를 그저 주관적인 기준에 의해서 정제한 결과가 이렇게 된것이 아닌가라고 추측하고 있습니다.