LearnRun
[KT AIVLE 3기] 10주차 후기 - 4차 미니 프로젝트 본문
◈ Contents

본 게시글은 AIVLE 기자단 활동의 일환으로 작성되었습니다.
4차 미니 프로젝트 (언어지능 / 분류)

AIVLE 내의 1:1 문의 데이터가 주어집니다.
그 문의 내용의 유형을 분류해내는 미션입니다.
Text Classification 미션.
캐글 경합으로 순위를 다투게 됩니다.
Kaggle Competition : 1:1 문의 내용 분류하기

과제
- AIVLE 내의 1:1 문의 데이터를 바탕으로, 데이터를 바탕으로 시험 데이터에 대한 분류를 예측합니다.
- 평가 기준은 micro F1 score로, 클래스별 F1 score의 가중평균을 계산, 1에 가까울 수록 성능이 좋음을 의미합니다.
나의 진행
데이터 전처리
● 특수문자의 제거
- 특수문자는 텍스트 데이터에서 자주 등장하지 않거나 중요한 의미를 가지지 않는 경우가 많습니다.
- 특수문자로는 쉼표, 마침표, 물음표, 느낌표, 괄호, 대시 등, 영어/숫자/한글이 아닌 경우 배제했습니다.
- 텍스트 데이터를 1차적으로 깔끔하게 정리하고자 사용했습니다.
● 불용어의 제거
- 텍스트에서 자주 등장하지만 분류 모델에는 유용한 정보를 제공하지 않는 단어를 제거합니다.
- "더", "그", "이", "저"와 같은 한국어 불용어는 제거하면 모델이 중요한 정보에 더 집중할 수 있습니다.
- 텍스트의 크기를 줄이고 모델의 학습 성능을 향상하고자 사용했습니다.
● 공백 수 조정
- 위의 전처리 과정을 거치며, 삭제/수정이 일어나고 이에 따라 공백이 추가 발생합니다.
- 단어와 단어 사이를 구분하는 역할을 하지만, 여러 개로 나타나거나 불규칙하게 배치되어 있을 수 있습니다.
- 불규칙한 공백을 조정, 텍스트를 균일하게 만들고 모델이 이해하기 쉽도록 만들었습니다.
● 영어 및 한글 내용의 분리
- 언어적 특성과 문법이 다르기 때문에, 텍스트 데이터에 포함된 여러 언어를 개별적으로 처리해봤습니다.
위의 네 항목을 적절히 조합하여, 여러 경우의 수를 시도했습니다.
손실함수 설정
● Asymmetric Loss
- 분류 데이터들이 균등하게 분포되어 있지 않아 채택하였다.
- 이러한 불균형을 고려하여 다른 클래스 간에 서로 다른 가중치를 적용하는 방법을 제공합니다.
- P에 대한 손실과 N에 대한 손실을 다르게 설정하여, 높은 정확도로 예측하도록 유도합니다.
● Focal Loss
- 분류 데이터들이 균등하게 분포되어 있지 않아 채택하였다.
- 일반적으로 객체 검출 등에 사용하나, 텍스트 분류의 불균형 클래스 분포에 대해 손실함수로 활용될 수 있습니다.
- 주로 클래스 간의 불균형을 해결하고, 모델이 어려운 샘플에 더 집중하도록 도와줍니다.
- 쉬운 샘플에 대한 가중치를 낮추고 어려운 샘플에 대한 가중치를 높이는 방식으로 작동합니다.
- 어시메트릭과 달리, 부정에 대한 손실을 지정하지 않습니다.
한국어 형태소 분석기
● Okt
- KoNLPy 라이브러리에 포함된 한국어 형태소 분석기 중 하나
- 구 트위터 형태소 분석기의 파이썬 버전으로 쉽게 사용할 수 있으며 다양한 자연어 처리 작업에 적합합니다.
- Mecab과 kkma의 중간 정도의 시간이 소요되었습니다.
● kkma
- KoNLPy 라이브러리의 한국어 형태소 분석기 중 하나
- 정확한 형태소 분석 결과를 제공하며 다양한 자연어 처리 작업에 활용됩니다.
- 단, 속도가 굉장히 느립니다.
● Mecab
- 빨라서 사용했는데 성능이 구렸습니다. 얼추 경향성만 보는 용도로 사용했습니다.
모델
● Kobert
- BERT모델의 한국어 버전입니다.
- 자연어 처리 작업에서 뛰어난 결과를 내며, 한국어에 적용하기 위해 사전 학습된 모델로, 전이학습이 가능합니다.
● Koelectra
- ELECTRA 아키텍처를 기반으로 한 한국어 자연어 처리 모델입니다.
- GAN을 자연어 처리에 적용한 모델로, 효율적인 학습과 뛰어난 성능을 제공합니다.
결과
- 팀 내에선 내가 1등으로 마무리했습니다. 하지만 전체 팀 순위는 중위에 머물러 아쉬웠습니다.
- EDA 등, 데이터 전처리에 대해 좀 더 적극적으로 고려했어야 했습니다.
- 전처리에 대한 개선 고민 없이, 손실함수나 모델, 형태소 분석기에 집중한 것이 아쉽습니다.
- 검증 없이 이것 저것 써보려는 태도가 시간을 너무 잡아먹었습니다.
(손실함수*모델*전처리 경우의 수를 다 따지면 너무 많은 시도를 해야하니까요. 반성합니다.)
타 팀의 사례
문법 교정
- 한국어 맞춤법/문법 검사기를 한번 거친 것이 인상적이었습니다.
번역
- 파파고를 통해 영어 또한 모두 한글로 번역하여 사용한 팀도 있었습니다. 멋집니다.
EDA
- 데이터를 조사하고 분석하여 데이터의 특성을 파악하는 과정
- 데이터를 시각화하고 기초 통계를 사용하여 데이터의 패턴, 분포, 이상치 등을 파악
AUTO-ML
- 데이터 전처리도 자동, 모델선택도 자동, 튜닝도 자동입니다.
- 시드넘버만 좋은 것을 찾으면 다 잘 돌아가는 무적의 치트키입니다.
- 그러나 이는 결국 천하제일 시드찾기대회가 됩니다.
(에이블 측에 좀 금지시켜달라고 말해야됩니다.. 이거.. 학습의도랑 안맞지 않나 하는... 금지 안해주면 저도 쓸겁니다..)
룰 위반
- 주어진 데이터를 활용하는 것이 아닌, 타 문의 데이터를 임의로 가져와 학습한 팀이 있었다. (이는 데이터 증강이 아니다.)
- GPT를 이용해 문의데이터를 임의로 추가한 팀도 있었다. 이 또한 전혀 타당한 방식이 아니다.
- 그럼에도 따로 코멘트나 주의문구는 없었고, 점수 카운팅 또한 그냥 진행되었다.
마치며...
전날 공부한다고 밤 새고 출발.. 당일 점심도 입에 못대고 빡세게 했습니다.
그럼에도 성적이 좋지 않아 마음이 아프네요.
끽해야 1점 모자란 것이라고 한다면 할 말은 없지만, 이게 어떤 나비효과를 부를지는 아무도 모르니까요.
현타도 오긴 하는데, 또 이걸 동기로 삼아야겠죠?
제가 못난 탓에 팀원들도 점수 못 얻은 것 같아서 마음이 저릿저릿하네요.
다음 미니 프로젝트는 뭔가 보여드리겠습니다..
(칼을 갈며)