brunch

You can make anything
by writing

C.S.Lewis

by 호영 Oct 17. 2023

캐글에서 살펴본 RAG 트렌드 살펴보기 (2)

상위 1%와 상위 2.8%의 차이

이전 글에서는 최근 캐글에서 LLM 대회 내용과 1등 솔루션을 확인했었습니다. 대회 끝나고 1등 이외에 금메달(Top 10 + int(전체 참가 팀*0.0015) 이내)에 있는 사람들 포함하여 상위권의 솔루션을 전부 읽어보고 어디에 에너지를 많이 쏟았는지 공통점을 발견했습니다. 이번 글에서는 그 insight를 공유하고자 합니다. 



5. 상위권 사람들의 문제 접근 방식

1등과 조금씩 다르지만 상위권에 있는 사람들이 집중한 3가지 영역인 "데이터, 검색, 모델"을 중점적으로 살펴보겠습니다.


[데이터]

일반적으로 참여한 사람들은 wikipedia dump 데이터를 활용했습니다. 크게 전처리를 하지 않았거나 다른 사람이 전처리한 데이터를 활용했었습니다.

하지만 상위권 사람들은 길고 매우 큰 wikipedia 데이터에 대해서 parsing은 기본이고, 여러 가지 단위의 window size, slide size, chunk를 최적화시켰습니다. 즉, Knowledge로 활용할 자신만의 데이터 셋을 구축한 것이 포인트였습니다.


10th place 솔루션. llm을 사용하지 않고 위키데이터에 검색 후보들에 대해 집중했고, DeBERTa로도 충분히 좋은 성과를 얻을 수 있었다고 한다.

데이터에 대해 버전관리하고, 참조할 데이터들을 어떻게 context를 구성할 지에 집중한 사람들이 많았습니다. wikipedia 데이터 크기가 큰 편에 속하는데, 이를 처리하는데 많은 시간이 소요되지만 모든 금메달 사람들은 모델이 참고하는 knowledge part에 집중을 많이 했습니다.


[검색 모델과 인덱싱 영역]

검색 파이프라인은 다양하게 소개가 되었습니다. 크게 3가지로 나눌 수 있고 이를 hybrid로 접근한 사람들이 존재했습니다. 


BM25(Elastic Search, Lucene)

TF-IDF(sklearn, RAPIDS)

Dense Vector Index(bge, gte, e5 등 임베딩 모델) 


Semantic search가 압도적으로 힘을 발휘하진 않았습니다. 오히려 TF-IDF로 검색하는 방법이 뛰어났었고 제가 참여했을 때에도 여기서 재미를 보았습니다. 제 개인적인 생각으로 MTEB에 있는 임베딩 모델들은 open-domain에 치우쳐저 있었기 때문에 이번 대회에서 domain-specific(STEM)한 document에 큰 힘을 쓰지 못한 것 같았습니다. 

그리고 L2나 Inner Product 뿐만 아니라 다양한 ANN 방법을 사용했었습니다. 하지만 검색해서 context로 활용할 데이터가 제일 중요하기 때문에 데이터 핸들링에 공수를 들이지 않았다면, 좋은 검색 모델을 사용하더라도 큰 성과를 못 얻는다는 것이 핵심인 것 같습니다.  


[모델 영역]

이전 글에서 소개했던 Open book Technique와 DeBERTa(0.3B) 앙상블로도 충분히 4등까지 올라갈 수 있다는 사실이 밝혀졌습니다. 이번 대회에서는 BERT 계열과 GPT 계열 모델들에 대해 크게 양분되어 문제를 푼 부분이 인상적이었습니다. 아래 그림은 NLP에서 활용할 수 있는 방법을 총 동원한 것 같은, BERT 계열(QA 부분)과 GPT 계열(Playpus, Xwin 부분) 그리고 Reranker까지 Training 시킨 3등 솔루션 Diagram입니다.


3등 솔루션, 더 놀라운 건 협업 없이 조용히 포기하지 않고 이걸 혼자 했다는 점이다. 


요약하자면 

위 그림처럼 Production 수준급의 RAG Pipeline을 구축

참조하기 위한 wikipedia 데이터를 커스텀(chunk, stride, sentence 구축, parsing 등) 하는데 에너지 7할 이상을 쏟아부었음

제한된 하드웨어(RAM 13GB, GPU 16GB)에서 5~60M 개 구절들을 검색하기 위한 코드와 메모리 최적화



6. Kaggle의 순기능

Kaggle 대회를 끈기 있게 참여해 보신 분들은 느낄 테지만 대회 중후반까지 여러 사람들이 솔루션을 공유하고 점점 develop을 시키고 discussion에서는 수많은 아이디어가 나옵니다. 하나의 문제를 푸는데 많은 사람들이 깊게 생각하면서 집단 지성으로 문제를 푸는 부분에서 많은 아이디어를 배울 수 있습니다. 또한 대회가 끝나고 많은 사람들이 솔루션을 공유하는 부분도 Kaggle의 최고의 순기능입니다. (저도 이 글을 쓰면서도 정리를 하면서 공부를 하게 되네요!)




7. 정작 중요한 나의 대회 결과

저는 Kaggle에서 참여하는 대회를 편식이 상당히 심한 편인데, 제가 생각하는 우선순위는 다음과 같습니다.

개인적으로 시간 투자 대비 성장폭이 큰, 단기간에 많이 배울 수 있는 대회여야 한다. 

특히 내가 하고 있는 일에 적용할 수 있으면 매우 좋다.

NLP 관련 대회이면서 1~5회 정도 제출해 보고 아이디어가 떠오르고 많은 시간을 투자해도 괜찮을 것 같은 대회여야 한다. 

위 2개 조건이 맞는다면 본격적으로 GPU가 있는 사람들을 찾아 팀 구성하고 참여한다.


저와 같이 참여한 팀원들은 대회 중반인 8월 말 즈음에 참여를 했고, 목표는 항상 높게 금메달(top 10 + 전체 참가 팀수 * 0.015% 등 이내)을 겨냥하지만 은메달(상위 5% 이내)을 받았고 76/2662등으로 마감을 했습니다. 


Public LB 대비 7등 정도 감소, 은메달권에서 보면 80~140 계단 오른 팀들이 존재했었다.


저희 팀 솔루션과 lesson learned points는 여기 discussion에 작성했습니다. 상위 1%와 저희 팀이 진행한 솔루션의 큰 차이점은 검색 모델에 집중하고 데이터에 집중을 상대적으로 많이 못했다는 점입니다. MTEB에 있는 임베딩 모델 top 10 이내에 있는 모델과 인덱싱들은 다 사용해 본 것 같습니다. 또한 대회 진행할 때에는 우리도 나름 데이터에 공수 많이 들인 것 같은데..라고 생각했지만 최상위권이 얼마나 노력했는지에 대한 대목을 알 수 있었습니다. 결국 AI는 매년 느끼지만 "데이터 싸움"입니다. 


내 솔루션, wiki data를 STEM에 가까운 데이터도 줄이고 다양한 retrieval을 사용하고 앙상블을 적용했었다. 최상위권 솔루션에 비해 단순하고 귀여운 것이 포인트다.




8. 아쉬웠던 점 & 마무리

대회를 진행하면서 아쉬웠던 부분을 복기하고자 합니다. 다음 대회에서는 사고의 유연성을 더하기 위해 이 글을 기록하는 것도 하나의 목적이기도 합니다. 


[정신적으로 지쳤었던 부분]

대회 3주 정도 남아있을 때에는 27등까지 찍었었지만 그 시간은 길게 가지 못하고 조급했던 것 같습니다. 추석 연휴를 전부 반납하고 기간 내에 점수를 계속 넘기려고 했으나 아이디어를 내는 족족 점수를 못 넘기고 팀 전체가 스트레스를 받았던 기억이 납니다. 우리 논리는 맞는 것 같은데, 무조건 오를 것 같은데 라고 생각했던 아이디어들은 Public LB에서는 떨어졌었습니다. (지금 대회 끝나고 Public LB에선 떨어지고, Private LB에서는 올라간 노트북들을 보니 머리가 뜨거워지네요)


[기술적인 부분 & 의사결정하는 부분]

저희 팀 또한 NLG와 LLM 계열 모델도 머릿속에 후보군에 있었습니다. 하지만 대회를 진행하면서 NLU 계열 모델로도 충분히 상위권에 있으니 오히려 이 방법이 해답일지도 맞을지도?라는 생각을 했습니다. 이 방법을 기준으로 밀고 갔던 게 긍정적으로 생각하면 우직하게 밀고 나가서 은메달을 달성한 성과를 얻은 것일 수 있습니다. 하지만 냉정하게 보면 매몰비용 오류에 빠진 부분이 존재하고 유연한 사고를 하지 못했던 것이 아쉬웠습니다.


또한 최종 제출(kaggle에서 최종 제출본을 2개 선택할 수 있다)을 선택하는 부분에 있어서도 더 좋은 모델을 가지고 있었지만 shake-up(Public LB와 Private LB 차이)이 이렇게 심할 줄은 몰랐습니다. (이것보다 더 shake up이 심한 대회가 kaggle에는 많이 존재한다. 항상 overfitting과 싸워야 한다.)


선택을 잘못하면 떨어지고, 선택을 잘하면 올라간다. 금메달을 유지하다 놓친 팀들 또한 존재한다. 


팀 내부적으로는 최고 48등까지 올라갈 수 있었을 텐데 최종 2개 선택을 잘못해서 조금 아쉬웠습니다. 그래도 몰입한 대회마다 메달을 얻게 된 것에 감사합니다. 또한 2달 가까이 고생한 팀원들도 이 자릴 빌려 감사합니다. 이전 글에 수상했던 AI 해커톤 대회 끝나자마자 같이 했던 팀원은 더 고생했네요 ㅎㅎ 


대회 끝나고 나니, 2024년에 여유 있을 때 재미있는 대회 참가해서 금메달을 따보고 싶은 소망이 생겼습니다. 이 글을 읽는 캐글러 분들도 다른 대회에서 좋은 성과를 거두시면 좋겠습니다. 긴 글 읽어주셔서 감사합니다 :)



Reference

1. https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307

2. https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446693

3. https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446248

4. https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446307

5. https://www.kaggle.com/competitions/kaggle-llm-science-exam/discussion/446358


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari