-
(Kaggle) chaii - Hindi and Tamil Question Answering 대회 43등 후기Kaggle 2021. 11. 24. 11:29
대회 진행 및 솔루션
11월 초, 3번째 부스트캠프 ai tech 내부 대회인 odqa가 끝났다. 이 대회를 마치고 남는 GPU 자원을 어떻게 활용하면 좋을지 팀원들과 상의하다가 비슷한 QA 대회인 kaggle의 chaii - Hindi and Tamil Question Answering 대회에 참여해보기로 하였다.
부스트캠프의 odqa 대회는 한국어를 이용했고, retrieval을 거쳤던 반면에 캐글의 chaii 대회는 인도의 힌디어와 타밀어를 이용하고, retrieval 없이 바로 reader만을 활용한다는 것이 두 대회의 큰 차이점이었다. 한국어 대회에 참여할 때는 각종 전처리와 후처리를 시도했었고, 이를 통해 성능 향상을 경험했었는데 이번엔 글자 자체를 이해하지 못하니 이는 과감히 포기해야 했었다.
또한 언어의 장벽 이외에도 가장 큰 문제가 남은 시간이었는데, 우리는 대회 마감 정확히 7일 전에 부랴부랴 팀 merge를 하며 대회에 참여했기 때문이었다. 심지어 당시 부스트캠프에서 진행했던 dataset 제작 task와 이력서 작성, 최종 프로젝트 기획 등이 맞물려 캐글 대회에 집중하기 어려운 상황이었다.
그렇기에 우리 팀에게 가능했던 전략은 부족한 시간을 아이디어와 GPU로 메꾸는 것이었다. 그런데, 공유되어있는 Best Score 노트북을 보니 2가지 방법으로 학습을 진행한 후 각각 2개의 fold와 3개의 fold를 추출하여 soft voting 앙상블을 하는 것이 이상하다고 여겼다. 보통 10개의 fold를 모두 사용하는 것이 표본이 많아 성능 향상에 도움이 될 것이었기 때문이다. 그래서 같은 방법으로 10개의 fold를 train한 후 제출하였는데, 오히려 Public LB score는 0.792에서 0.772로 하락하였다.
난 이 결과가 오히려 흥미로웠다. 이미 대회 막바지이고 공유된 notebook이 vote를 많이 받는 가장 쉬운 방법은 공유된 notebook 중 가장 높은 Public LB를 기록하는 것이기에, 이 점수가 Public LB를 높이는 5개의 fold 조합으로만 이루어진게 아닐까? 하는 의구심을 품은 것이다. 즉, 대회 종료 직전까지 Public LB 기준 동메달권이었던 0.792라는 Best score는 Public LB에 overfit 되었다는 결론을 내린 것이다.
이 가정을 거친 이후엔 간단했다. 답은 일반화였다. 그리고 가장 쉬운 일반화는 앙상블임을 그간의 대회를 거치며 배웠기 때문에, Public LB는 낮아졌지만 위의 10개의 fold를 모두 사용하기로 하였고, 9만개라는 큰 숫자의 추가 squad 2.0 번역 데이터를 이용해 학습한 2개의 fold를 앙상블 재료로 추가하였다. 이렇게 12개의 fold를 soft voting하여 제출할 수 있었다.
이번 대회도 다른 대회들처럼 최종 제출본을 2개 고를 수 있었는데, 남은 한 개의 제출은 무엇으로 할까 고민을 하다가 혹시나 공유된 notebook이 Private LB에서도 잘 동작할 경우를 대비하기로 했다. 따라서 위의 12개의 fold와 공유된 5개의 fold, 총 17개의 fold를 soft voting하여 제출하였다. 이 제출이 팀의 마지막 1번 남은 제출이었는데 이렇게 많은 fold를 넣어본 것은 처음이라 허용된 5시간 안에 inference가 돌아가길 빌어야했다. 다행히 성공적으로 제출이 되었고, 예상대로 공유된 5개를 넣지 않는 것이 Private에서 더 점수가 높아졌다.
결국 private에서 392등이 올라 43등으로 대회를 마감할 수 있었다.
아래 링크는 대회의 discussion 게시판에 업로드한 우리 팀의 솔루션이다. 혹시 여유가 되신다면 Upvote도 눌러주시면 감사하겠습니다..!
https://www.kaggle.com/c/chaii-hindi-and-tamil-question-answering/discussion/288419
좋았던 점
1. 앙상블의 위력을 눈으로 확인할 수 있는 대회였다. 부스트캠프 대회에 참여할 때도 매번 K-fold와 앙상블의 위력을 경험했지만, 앙상블만으로 은메달까지 얻은 경험은 처음이라 사실 조금은 당황스럽기도 했다.
2. Private LB를 보는 눈이 조금은 생긴 것 같아 기쁘다. 어떤 대회를 진행하든 cv score와 Public LB score 사이에서 갈등하기 마련인데, 결국 이 둘을 이용해 Private LB를 유추해내는 것이 중요하다. Private LB는 매번 결과론적인 이야기 같지만, 그간 대회들을 경험해보고 Shake up들을 겪어보며 이를 파악할 수 있게 된 것 같다.
3. 팀원들과 화목하게 즐기는 마음으로 대회에 임한 점이 좋았다. 사실 나를 포함한 팀원 모두 할 일이 너무 많아 대회에 집중을 잘 하진 못했는데, 오히려 숨 쉴 틈을 이 대회에서 찾은 것 같다. 그만큼 모두 이 대회를 즐기고 있었고, 운 좋게 결과까지 따라주었던 것 같다.
아쉬웠던 점
1. 우리 팀은 xlm-roberta 단일 모델만 사용했는데 Muril 이라는 인도어를 위한 모델이 Private에서 좋은 성능을 보였고, 대부분의 팀들이 이 두 모델을 앙상블해 좋은 결과를 얻었음을 대회가 끝나고 확인할 수 있었다. 심지어 3등은 Muril 단일 모델을 사용했다..! 이 모델을 사용해보지 않은 점이 아쉽다.
2. 다양한 실험을 진행해보거나 모델 구조를 바꾸어보지 못한 것이 아쉽다. 다음 대회는 시간이 여유로울 때, 부스트캠프 대회에서 그러했듯 다양한 시도를 하며 임해야겠다.
마치며
무엇보다도 함께 고생해준 우리 팀, 성호형과 다영이 누나에게 감사하다는 말을 전하고 싶다. 혼자였다면 이렇게 좋은 결과는 꿈도 꾸지 못했을 것이다!!!
그리고 이번 대회에서 은메달을 따게 되며 금1, 은1, 동1의 색깔별 메달을 하나씩 가지게 되었다. 이제 은메달 1개를 추가하면 Competition Master가 될 수 있다는 사실이 꿈만 같다. 다른 대회에 열심히 참여해 2022년이 가기 전에 꼭 Master를 달성하고 싶다!
그리고 제 블로그를 방문해주신 감사한 분들 중 캐글 대회를 망설이시는 분이 계시다면 꼭 용기 내어 참여해보시면 좋겠다. 생각보다 어렵지 않고, 수상 또한 멀리 있지 않을 것이라 힘주어 말씀드리고 싶다!!