NLP 경진대회 회고

2024. 12. 2. 17:24Upstage AI Lab

프로젝트 진행 기간 (11월 11일 - 11월 29일)

프로젝트 주제

주제 : 주어진 일상 대화를 바탕으로 요약문 생성하기

목표 : Rouge-1, Rouge-2, Rouge-l 점수 최적화

최소2턴, 최대 60턴으로 대화가 구성되어 있습니다. 대화(*dialogue)를 보고 이에 대한 요약(*summary) 를 예측하는 것이 최종 목표

 

학습시 사용한 데이터

  • train : 12457
  • dev : 499
  • test : 250
  • hidden-test : 249
  • fname : 대화 고유번호 입니다. 중복되는 번호가 없습니다.
  • dialogue : 최소 2명에서 최대 7명이 등장하여 나누는 대화 내용입니다. 각각의 발화자를 구분하기 위해#Person”N”#: 을 사용하며, 발화자의 대화가 끝나면 \n 으로 구분합니다. 이 구분자를 기준으로 하여 대화에 몇 명의 사람이 등장하는지 확인해보는 부분은 EDA 에서 다루고 있습니다.
  • summary : 해당 대화를 바탕으로 작성된 요약문입니다.

팀 개발 문화

Wandb를 처음으로 사용해봤음.

Baseline을 기반으로 개발하는 팀, 새로운 실험 방법으로 개발하는 팀으로 나누어서 진행함.

 

진행 과정

Baseline 코드를 봤다. KoBart모델로 주어진 목표를 수행하게 되어있었다.

우선 무엇보다도 EDA를 먼저 진행하고 학습을 진행했었어야 하는데 그러지 못했다.

 

다른 분들은 KoBART를 주요한 모델로 설정하고 Solar-pro 모델이나 Openai의 GPT-4o등을 이용해서 데이터 증강을 시도하셨다.

 

먼저 나는 토크나이저를 바꾸고 싶었다. 하지만 토크나이저를 바꾸면 모델도 바꿔야 한다는 것을 얼마지나지 알았고, 그러기에는 맞는 모델과 토크나이저를 찾기에는 시간이 걸리겠다는 생각을 했다. 그래서... 모델만 바꾸기로 하고 이전 대회 검색하다가 T5모델로 한동안 시도를 했다.

 

대회를 진행하면서 원격 서버를 이용했는데 기본적으로 메모리가 24GB 정도 제공이 되었다.

 

google에서 나온 T5모델말고 한국전자기술연구원(KETI)에서 변형한 T5 모델 keti-air/ke-t5-base을 사용해서 학습을 진행했다.

그런데 OOM이슈 등 크고 작은 이슈가 터져서 결국... T5모델은 실패하고 대회 마감까지 시간이 얼마남지 않아서 Baseline code에 나와있는 것을 그대로 활용했다.

 

다른 팀원들이 데이터 증강을 한다고 했고, 그러면 학습의 epoch을 늘리고 더 많이 학습하면 어떨까 생각을 하다가 기존에 학습된 모델을 그대로 불러와서 재학습 시킬 생각을 했다.

 

여기까지는 나쁘지 않았다... 그런데 optuna를 활용해서 하이퍼파라미터 최적화를 시도할 생각도 같이 했다.

그래서 모델 재학습과 optuna를 활용한 하이퍼파라미터 최적화를 시도했다.

급해서 실험 막 설계하고 코드 막 짜서 돌린... 대회가 끝나고서 무언가 잘못 되었음을 직감한...

 

암튼 그렇게 마지막 실험까지 실패했다.

 

그나마 팀 전체에서는 기존 baseline code에 LLM을 이용해서 데이터 증강을 한 것이 점수가 아주 약간 올라서 그걸로 최종 재출을 했다.

결과

Public(왼) Private(오)

 

Public 기준 5등, Private 기준 6등

결과는 그렇게 좋지 못했다...

 

이번 대회는 삽질을 많이 했다...

왜 그랬을까는 troubleshooting 참고...

troubleshooting

간단히 말하면 기본이 없었다...

기본...

1. EDA를 진행하지 않았다.

현업에서 EDA는 기본이라고 하셨다. 그런데 EDA를 진행하지 않고 Baseline code만 믿고 그냥 바로 실험 진행한게 가장 큰 문제이다.

더 크게 봤을땐 데이터 전처리 분야를 잘 하지 않았다는 거지...

 

EDA, 결측치 확인 안했다.

 

2. 코드 흐름에 대한 전반적인 이해 부족

LLM을 이용해서 대회를 진행한다. 그러다보면 어느순간 코드 전체에 대한 흐름 인식 없이 그저 복붙하는 나를 발견하게 된다.

어떻게든 프롬프트 엔지니어링을 통해 괜찮을 만한 코드 뽑아내고 그 코드로 실험을 진행하고 오류가 발생하면 그 오류 다시 복붙해서 LLM이 풀도록 만들어서 코드 고치고... 이건 앞으로 대회 진행하면서 심각한 문제중 하나다.

 

뭐 핑계를 대보자면 강의는 밀렸지, 대회는 진행해야 하지, 강의는 밀렸기에 복습할 시간은 없지... 그럼 당연히 LLM으로 갈 수 밖에 없다.

그래도 이번 대회까지 밀린 강의는 끝이다. 다음 대회로 IR하는데 더 이상 강의 진도가 밀리지 않았다.

다음 대회만큼은! 똑바로 해보자. LLM의존도를 줄여보자는 거다.

 

잠깐 여담을 해보자면 24년은 부트캠프를 통해 공부해야 할 방향성과 목적지를 탐색하는데 도움을 얻었다. 간단히 말하면 지도를 얻은 샘이지... 25년은 지도를 들고 실제로 탐험할 시간일거다. 배운 내용들 혼자서 다시 복습하고, 공부하고 그렇게 하는거다.

 

우리 학교에서 가르쳐주는 내용들은 트랜드에 맞지 않다. NLP task에서만 봐고 고전 ML관점을 통해서 NLP를 처리하는 것을 가르쳐주지만 DL을 이용한 NLP 처리방법은 알려주지 않는다.

 

3. 체계적인 실험 관리부족

저번보다는 괜찮다. Wandb, MLflow 그 어느것 하나도 잘 사용할 줄 몰랐는데 그나마 Wandb를 쫌 사용해봤다.

차근차근 길러가보자.

 

4. 하드웨어 지식부족

지금까지 진행한 그 어떤 대회보다 메모리가 절대적으로 부족했다. 이런 걸 처리하기 위해서 QLoRA등 여러 방법이 있다는 것을 알았는데 이것도 멘토링 받다가 알게된거라 체계적으로 사용하지 못했다. 학교에는 이런거 안 알려주는데... 이쪽도 내년에 공부해봐야 할 분야로 보인다.

마무리하며 + 교훈

대회를 진행하면서 어떤 태도로 모델을 만들고 일 처리를 해야 하는지 배우고 있다.

지금 나에게 부족한 것은

 

1. EDA를 진행하며 귀찮음과 의미없다고 생각되는 지루함을 이겨낼 능력

2. 코드를 한 줄 한 줄 보며 남들에게 코드 구성과 코드에 사용된 지식을 체계적으로 설명할 수 있는 능력

3. 가설을 명확하게 세우고 체계적인 실험관리를 하는 능력

4. 제한된 환경에서 목표를 달성하기 위한 하드웨어적인 지식

 

위 4가지가 부족하다.

 

1번은 대회를 진행하면서 EDA를 해봐야 느는거고, 2번은 공부할 때 이해를 하고 넘어가는 집요함, 3번은 시간이 느려도 하나를 끝까지 해보는 능력, 4번은 추가 공부가 필요하다. 1, 3번은 대회를 진행하면서 배울 수 있고 2번은 공부할 때부터 잘 해야 한다. 4번은 부캠하는 동안은 조금씩 배워서 진행하는데 25년에는 좀 공부할 필요가 있다.

진로적 방향성

당장 내년에 뭐를 해야하고, 어디에 있어야 할지를 알겠지만 내후년에는 모르겠다.

솔직히 지금하고 있는 AI 공부도 적성에 맞는지 잘 모르겠다.

하지만 일단 뭐든 진심으로 해봐야 하고, 못해도 알고 있는 범위에서 최선을 다하고 그 끝에가서 결과를 봐야하지 않을까.

 

지금은 최선을 다해 가야할 시기다.

'Upstage AI Lab' 카테고리의 다른 글

Data Centric AI 학습 회고  (5) 2024.12.15
LM to LLM 학습 일지 + Kaggle 연말 행사 회고  (4) 2024.12.09
CV 경진대회 회고  (1) 2024.11.10
Pytorch, DL 공부  (3) 2024.11.09
MLOps Project 회고  (5) 2024.10.12