느리지만 꾸준히, 코딩

과학 지식 질의 IR 경진대회 본문

프로그래밍/AI

과학 지식 질의 IR 경진대회

slowin 2025. 4. 25. 20:02

1. 서론

이번 Information Retrieval(이하 IR) 대회는 “질문과 이전 대화 히스토리를 보고 최적의 문서를 찾아 답변을 생성”하는 과제를 해결하는 과정이었습니다. 2025-04-16 부터 2025-04-22 까지 단 1주일​이라는 짧은 기간 동안 빠르게 가설을 세우고, 실험을 반복하며, 점차 성능을 끌어올렸습니다. 최종적으로는 0.8833이라는 만족스러운 점수에 도달했고, 그 과정에서 검색 · 분류 · 재랭킹 전반에 걸친 노하우를 축적했습니다.


2. 대회 목표 & 범위

구분 내용

궁극적 목표 다양한 질의 유형(과학 지식 질문 vs 일반 질문)에 대해 정확하고 빠른 문서 검색 파이프라인 구축
제한 사항 1. 과학 · 지식 질문에만 문서 검색 적용2. 그 외 질문은 문서 검색 X
평가지표 대회 측에서 제공한 전용 스코어(정확도 + 정성 평가 혼합)
기간 2025-04-16 ~ 2025-04-22 (7 일)

3. 실험 연대기

실험 핵심 전략 주요 변화 점수

1  Function Call 기반 검색 슬라이드 정보를 함수 호출로 직접 꺼내 쓰도록 시도 0.3197
2  한글 쿼리 + 간단 분류기 영문 대신 한글 쿼리로 전환, 질문을 과학/비과학으로 분류 0.7424
3  문서 기반 분류기 Fine-tuning Gemma-3-4B를 미세조정하여 질문–문서 적합성 분류 0.7848
4  문서 Chunking 긴 문서를 문단 단위로 쪼개어 Recall ↑
5 Re-Ranker 도입 BM25 top-k → Cross-Encoder 재랭킹
6  임베딩 모델 교체 jinaai/jina-embeddings-v3 적용, 하이브리드 검색 0.8833
7  질문 증강 ReAct 스타일 키워드 보강

 


4. 단계별 회고

4.1 실험 1 — Function Call

“문서에 정답이 있는데 함수 호출이 안 일어난다?”

  • 문제: LLM이 함수 호출 트리거 토큰을 학습하지 못함 → 정답 포함해도 call 불청.
  • 교훈: 구조화 출력 제어(토큰 강제, tool description) 없이는 LLM이 일관되게 행동하지 않는다.

4.2 실험 2 — 한글 쿼리 & 라이트 분류기

  • 쿼리를 Korean BM25로 변환
  • 간단한 키워드 규칙으로 “과학 질문”만 검색 적용.
    에러 케이스: “피라미드 높이는?” → 비과학으로 잘못 분류.

4.3 실험 3 — 문서 기반 분류기 Fine-tuning

  • Gemma-3-4B 파인 튜닝.
  • Prompt 설계: “질문 Q 와 문서 D 가 있을 때, 답이 D 안에 있나?” → 분류
  • Fine-tune 효과 검증.

4.4 실험 4 ~ 5 — Chunking & Re-Ranking

  • 긴 PDF → 한글문장 분류 Chunking 후 성능 향상
  • Cross-Encoder로 top-10 재랭킹 → Precision 눈에 띄게 개선.
  • 다만 latency ↑ 

 

4.6 실험 6 — Embedding 교체

  • 기존 모델의 한국어 표현력 한계 인지 →jina-embeddings-v3(multilingual, 1024-dim)로 전환
  • 최종 0.8833 달성

4.7 실험 7 — 질문 증강

  • ReAct 프롬프트로 “질문 분해 + 연관 키워드” 생성하여 검색 다양화
  • 점수 개선은 미미

 

4.8 최종 구조


5. 활용 정리

범주 선택/구현 내용 이유

Retrieval BM25 (elasticsearch) + Chroma 전통 vs 임베딩 결합 효과
Embedding jina-embeddings-v3  한국어 다국어 성능 우수
Re-Rank cross-encoder/ms-marco-MiniLM-L-6-v2 경량 + 빠른 추론
Prompt Eng. Tool Calling  일관된 함수 호출
     

6. 결과 & 성과

  • Public Score: 0.8833 
  • RAG 파이프라인 구축 경험: 검색-분류-재랭킹
  • 한국어 IR에서 Chunking + 멀티랭 임베딩 조합의 실효성 확인.

7. 아쉬움 & 배운 점

  1. 데이터 스케일링
    • Fine-tune 데이터가 제한적이어서 Overfitting 위험 ⟶ knowledge distillation 시도 못함.
  2. Latency–Quality Trade-off
    • Re-Ranker depth 조정이 어려웠음. Elastic Search score cutoff 자동화 필요.
  3. Tool Calling 안정화
    • System prompt 설계가 성능만큼 중요. 함수 호출 실패확률 존재

8. 다음 단계

  • Dense Retriever 학습: Korean ColBERT or Contriever-KR로 BM25 대체.
  • Adaptive Chunking: 문서 구조 분석(heading, list) 기반 가변 chunk.
  • Re-Ranker Distil: larger cross-encoder knowledge → Tiny-BERT distillation.
  • RAG 강화: Retrieval-Aware Generation(RAG-Fusion)로 answer faithfulness 향상.

9. 결론

짧은 기간이었지만, 실험적 탐구 → 원인 분석 → 전략 수정을 일일 사이클로 빠르게 반복하며 의미 있는 성과를 냈습니다. 특히 IR에서 하이브리드 검색 + 임베딩 모델 교체가 미치는 성능 개선을 경험했고, “검색 품질은 전처리(쿼리 · 문서)와 후처리(재랭킹)” 라는 교훈을 얻었습니다. 이번 경험을 바탕으로 더 깊이 있는 RAG 시스템을 설계해 보고자 합니다.

'프로그래밍 > AI' 카테고리의 다른 글

LangChain 기반 부트캠프 RAG봇 프로젝트 수행 후기  (0) 2025.04.10
업스테이지 NLP 경진대회  (0) 2025.03.26
업스테이지 CV 경진대회 정리  (0) 2025.03.02
tensor: dim 이해하기  (0) 2025.02.11
역전파  (0) 2025.02.10