2021년에 참여했던 Ai Rush에서 배운것도 많고 좋은 경험이었다고 생각해서 2022년도에도 다시한번 지원하고 참여하게 되었습니다.
2021년 대회 후기가 궁금하다면 [후기] 2021 Naver Ai Rush 참가 후기를 참고해주세요.
대회 소개
대회 진행은 2021년과 똑같이 진행됐습니다. 다만 이번에는 본선이 7월부터 8월 말까지 진행되었습니다.
이전 대회에서 대학생이 시험기간과 겹친다는 피드백이 많았나봅니다. 덕분에 대학생인 저도 작년보다는 더 많은 시간을 Ai Rush에 사용할 수 있었습니다.
참가 수행비, 상금, 우승자 혜택도 모두 2021년과 동일했습니다.
작년과 유일한 차이점은 AI 기획 프로젝트 부분이 신설된것 입니다. AI 기획 프로젝트는 직접 참여해서 잘은 모르지만, 홈페이지 설명을 보면 어떠한 상황에 도움이 될 수 있는 AI 서비스 및 기능을 기획하는 대회인것 같습니다.
참가 지원
이번에도 작년과 같이 서류 심사, 코딩테스트를 진행하였습니다.
자소서 제출
작년에 참가하고 왜 다시 참가하게 되었는지 중심으로 적었습니다.
코딩테스트
난이도는 작년과 비슷하게 실버2~골드5 수준이었던것 같습니다. 파이썬을 이용해서 문제해결을 할 수 있는 코딩 실력이 되는지 정도만 판단하는것 같습니다.
대회 진행
1라운드
1라운드 선택 가능 과제는 총 4가지가 있었습니다.
- 포토클라우드개발 - 랜드마크 이미지 분류
- Image Vision - Face age prediction
- 대중교통개발 - 실시간 버스 도착 예정시간 예측
- Apollo Data Dev - 엉터리 문서 검츨
작년에 선택했던 버스 도착 예정시간 예측 과제가 이번에도 있더군요. 하지만 이미 작년에 해봤기때문에 3번 말고 4번을 선택했습니다.
과제 설명
4번 과제는 어절, 구, 절이 의미없이 뒤섞여 있는 문서를 판별하는 과제였습니다. 제공된 데이터는 글 본문과 라벨로 심플하게 구성되어 있었습니다. 본문 데이터는 최대 2000자 까지 제공되고, 라벨은 엉터리 문서는 0, 정상은 1입니다.
분석 및 학습
데이터 분석
가장 처음으로 보이는 특징은 라벨 개수가 정상 3:비정상 1로 불균형하게 구성되어 있는것 입니다.
작년 2021 대회 참여 경험으로 데이터가 불균형 하면 제대로된 학습이 어렵다는것을 알고있었고, 일단 언더샘플링으로 비율을 맞추고 진행하기로 결정했습니다.
1차 시도
첫 시도는 LSTM 알고리즘을 이용해서 분류해 보려고 했습니다.
모델 구성은 임베딩 레이어 + LSTM 레이어 + FC 레이어로 구성하였고, 마지막 레이어는 시그모이드 함수를 이용해 0 또는 1로 결과값이 나오도록 했습니다.
하지만 학습 결과는 좋지 않았습니다. 처음부터 학습하기에는 데이터의 개수가 너무 적다고 판단했고, 적은 데이터로 학습효과를 낼 수 있는 파인튜닝을 시도해보기로 결정합니다.
2차 시도
이번에는 사전학습된 모델로 파인튜닝을 시도해봤습니다. 모델은 ELECTRA 모델을 한국어로 사전학습한 koELECTRA를 사용했습니다.
transformer 라이브러리에서 제공하는 ElectraForSequenceClassification 클래스를 이용해서 모델을 구성했습니다. 토크나이저는 koelectra에서 제공하는 토크나이저를 그대로 사용했습니다.
학습 결과 단번에 다음 라운드 진출 순위권인 10위 안으로 들어오게 되었습니다.
3차 시도
이번에는 2차 시도 중 가장 성적이 좋았던 모델을 이용해 electra 부분은 freeze 시키고 classifier만 새로 구성하여 학습해 보았습니다.
ElectraForSequenceClassification의 classifier는 Linear + Dropout + Linear로 구성되어 있습니다.
이런 구성이 너무 간단하다고 생각해서 다양한 시도를 해봤습니다.
첫 시도는 층을 조절하는것 이었습니다. 층을 하나씩 늘리고, dropout의 비율을 조정하면서 시도해보며 2차시도보다 0.3~0.4 정도의 정확도 향상이 있었습니다. 하지만 0.91 정도가 되니 더이상 변화가 없었고, 새로운 classifier를 만들어야 했습니다.
두 번째 시도는 classifier를 CNN 레이어를 추가하여 학습을 진행했습니다. ELECTRA 모델에서 나오는 hidden state를 Conv2d 레이어에 넣고, 결과값을 FC 레이어에 넣어 분류하는 과정으로 진행했습니다. 그 결과 약 0.02가 소폭 오르며 최종 10위로 2라운드 진출에 성공하게 됩니다.
2라운드
2라운드 선택 가능 과제는 총 8가지가 있었습니다.
- G플레이스 AI개발 - 좋은 리뷰 사진 점수화 모델 개발
- 대중교통개발 - 실시간 버스 도착 예정 시간 예측 정확도 향상
- 포토클라우드개발 - 랜드마크 영역 및 정보 검출
- 미디어비전 - KBL 득점이벤트 풀영상 연동
- Document Intelligence - Long Document Summarization
- CLOVA ML X - 대규모 쇼핑 데이터를 활용한 일반적인 유저 임베딩 추출
- Apollo Data Dev - Unknown 문서 탐지
- Music AI - 플레이리스트의 수록곡 추론하기
1라운드때 NLP 과제를 이미 진행했기 때문에, 이번에는 8번 과제를 선택하였습니다.
과제 설명
8번 과제는 플레이리스트에 담긴 곡의 일부와 메타데이터를 이용해서 플레이리스트에 담긴 곡을 예측하는것이 과제 목표였습니다.
분석 및 학습
데이터 분석
과제 데이터를 보자마자 당황습니다. 지금까지는 csv로 구성된 데이터만 봤는데, 이번 데이터는 json으로 구성되어 있었습니다.
train data는 실제 플레이리스트 데이터가 있었고, 각 플레이리스트에 담긴 음악의 제목, 가수, 장르 등 메타데이터는 json 형식으로 제공되었습니다.
그때 당시에는 이런식으로 json으로 메타데이터가 제공되는게 익숙하지 않아서 데이터 EDA에 꽤나 애를 먹었습니다.
1차 시도
입력된 데이터를 바탕으로 데이터를 생성하는 방식은 오토인코더 알고리즘을 이용하여 수행된다는 사실을 알게되었습니다.
우선 아무런 전처리 없이 train data를 오토인코더 모델을 구성하여 학습시켰습니다. 그리고 결과는 베이스라인 점수보다 낮을 정도로 매우 처참했습니다.
2차 시도
이번에는 메타데이터를 활용하여 학습을 시도했습니다.
그런데 여기서부터 막혔습니다. 오토인코더 모델은 인코더와 디코더가 대칭인 형태로 구성된다고 봤었는데, 메타데이터를 넣으려고 하니 대칭으로 구성할 방법이 떠오르지 않았습니다.
그래서 이부분에서 정말 오랫동안 삽질했습니다.
그 과정에서 train data의 음악 정보를 장르, 노래 재목 등 메타데이터를 결합하여 하나의 코드로 만들어서 학습해 봤지만, 역시 결과는 좋지 않았습니다.
결국 2차시도는 15명 중 15등을 하는 꼴찌로 마무리하게 됩니다.
소감
좋았던점
-
이번에도 역시 배운것이 많았습니다.
이번 대회에서 처음으로 사전학습된 모델을 이용하여 파인튜닝을 제대로 해봤습니다. 개인 컴퓨터에는 LLM 모델을 돌릴 수 있는 GPU가 없었는데, 대회에 참여하면서 NSML 시스템으로 원없이 돌려봤습니다. -
풍부한 자원
Ai Rush는 GPU 서버로 NSML이라는 편리하고 풍부한 자원을 가진 시스템을 제공합니다. nsml 파이썬 패키지와 nsml cli를 이용해서 학습, 모델 제출을 수행하고, nsml 웹페이지를 통해 학습 로그와 자원 현황을 볼 수 있습니다. 그리고 사용 가능한 GPU가 nvidia v100으로, 인당 3개, 많으면 4~6개 입니다. 개인적으로 모델 학습할 땐 절대 사용해 볼 수 없는 GPU를 멀티로 운용하는 경험이 정말 특별했습니다.
아쉬운점
이번 대회에서 아쉬운 부분은 없었습니다. 2021년 대회의 아쉬운점중 하나인 대회 기간도 이번엔 방학에 진행되서 Ai Rush에 시간을 쏟을 수 있었습니다. 다만 개인적인 아쉬움은 마무리를 꼴찌로 한 것, 2024년 현재 글을 쓰면서 떠오르는 더 좋은 방법들을 그때는 몰라서 시도해보지 못한 부분이 아쉽습니다. 뭐가됐던 아쉬움은 개인적인 아쉬움이고, 대회 자체는 정말정말 많이 배우고 경험한 대회였습니다. 그래서 지인들에게 2023년에 Ai Rush 열리면 반드시 해보라고 추천했는데, 아쉽게도 2023년에는 대회가 열리지는 않더군요.. 이부분은 좀 아쉽습니다.