취업/KT AIVLE SCHOOL

[11주차] 미니프로젝트 4차

__Lucie__ 2022. 11. 17. 19:23
1~2일차 4차 개인 미니프로젝트
3~4일차 4차 팀 미니프로젝트

"스팸문자분류" 프로젝트

전 주에 nlp(자연어처리)를 배우고 나서, 한 주간 미니 프로젝트로 스팸 문자를 분류하는 프로젝트를 진행했다.

스팸인지 아닌지 분류하는 문제였고, 텍스트 데이터를 vectorize 해서 학습시켜야 했다.

 

개별 & 팀 미니 프로젝트

1, 2일차는 혼자서 데이터 분석, 전처리, 모델링, 성능 분석의 과정을 거치며 문제를 해결했다.

나는 전처리로 크게 NaN 값 제거, label을 수치형으로 변환을 했고,

train, test split 후

vectorization을 진행했다. (n-gram, sequence 둘 다 시도)

모델로는 GaussianNB, LSTM, Conv1D 를 사용했는데, 

NLP 에서 BERT 모델이 좋다고 들어서 사용하려다가 결국은 실패했다. (개발 환경에 돌리기에는 무거웠음 + 시간 부족)

2일 차에 kaggle competition을 했는데 만족스럽지 못한 순위를 받았다. ㅠㅠ

 

팀 별 과제를 3명이서 수행했던 것이 기억에 남는데,

오히려 인원이 적으니까 의견 조율이 쉬웠던 것 같다.

서로 했던 작업과 성능을 공유하고 가장 높은 성능이 나왔던 방법을 토대로 ppt를 작성해 제출했다.

우리 팀은 '불용어 처리'와 '토큰화' (이렇게 놓고 보니 둘 다 전처리에 해당) 에 집중했는데,

명사로 토큰화 / 형태소로 토큰화 하여 성능 비교

불용어를 계속 추가하며 성능 비교를 통해 => 형태소로 토큰화 + 불용어 처리하는 방법이 가장 성능이 잘 나옴을 알 수 있었다.

(불용어 처리와 토큰화는, 하기 전보다 후가 훨씬 성능이 잘 나왔다.)

모델은 Bidirectional LSTM을 사용했다.

 

 

또한, 우리 팀과 개인 과제 외에도

다들 어떻게 했길래 성능이 잘 나올까 발표를 열심히 들었다.

 

상위권에 있던 대부분의 분들이 데이터 클리닝 작업을 열심히 하셨다.

  • 숫자제거
  • 구두점 제거
  • 겹치는 문장 제거
  • 빈칸만있는 거 제거
  • 지속적 문장 제거
  • 모든 문장이 스페이스바로 이뤄진거 제거

위의 클리닝 작업과,

 

다양한 라이브러리 활용

띄어 쓰기를 넣는 'pykospacing' (데이터가 한글로 주어졌다),

학습 데이터 증강 'koEDA' (한국어 EDA 수행 라이브러리),

이 외에도 Komooran, kkm, Hannanum, OKT (이 프로젝트의 경우 OKT가 적합하다고 했다.)

 

또한 모델로는 

  • 사전학습 모델 사용
  • MultinomialNB (나이브 베이즈)
  • koBERT
  • koGPT2 : SKT에서 만든 것, GPT-2기반, 한국어 성능 한계 개선 ⇒ 자원의 한계로 인해 1분 만에 세션이 종료되었었음
  • 앙상블모델 - bagging classifier
  • catboost : 범주형 데이터가 많을 때 좋다고 함.
  • 릿지 회귀 : 일반적으로 영향을 거의 미치지 않는 특성에 대해서 가중치를 0으로
    • 띄어쓰기를 반영했을 때 성능이 더 좋아졌음.

이런 모델들을 사용했다.

BERT 모델보다 koBERT 모델이 성능이 더 잘나왔다고 한다.

 

 

 

데이터 분류/예측 모델링을 할 때마다 드는 생각은

그 데이터에 맞게끔 가설을 세우고 (가령, 이 문제에서 공백은 의미가 없을 것이다, 불용어를 설정하고 그 단어들을 빼면 성능이 잘 나올 것이다 등등) 

그 가설에 맞게 데이터 전처리를 적절히 하는 것이 중요하다고 느낀다.

+ 다양한 모델 사용 후 가장 적절한 모델을 반영

 

나는 모델에만 집중한 나머지 데이터 전처리에 소홀했었는데,

데이터 분석과 전처리를 앞으로 꼼꼼하게 잘 해야겠다.