[11주차] 미니프로젝트 4차
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 모델이 성능이 더 잘나왔다고 한다.
데이터 분류/예측 모델링을 할 때마다 드는 생각은
그 데이터에 맞게끔 가설을 세우고 (가령, 이 문제에서 공백은 의미가 없을 것이다, 불용어를 설정하고 그 단어들을 빼면 성능이 잘 나올 것이다 등등)
그 가설에 맞게 데이터 전처리를 적절히 하는 것이 중요하다고 느낀다.
+ 다양한 모델 사용 후 가장 적절한 모델을 반영
나는 모델에만 집중한 나머지 데이터 전처리에 소홀했었는데,
데이터 분석과 전처리를 앞으로 꼼꼼하게 잘 해야겠다.