| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Interface
- receiver
- 타입
- Pointer
- keyword
- 패스트캠퍼스업스테이지에이아이랩
- UpstageAILab
- golang slice remove
- method
- golang interface
- golang slice
- golang
- slice
- scope
- 상수
- 패스트캠퍼스AI부트캠프
- 함수
- 국비지원
- 변수
- 패스트캠퍼스업스테이지부트캠프
- 스코프
- struct
- receiver method
- array
- 업스테이지패스트캠퍼스
- 메서드
- 패스트캠퍼스
- package
- golang pointer
- golang array
Archives
- Today
- Total
느리지만 꾸준히
과학 지식 질의 IR 경진대회 본문
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. 아쉬움 & 배운 점
- 데이터 스케일링
- Fine-tune 데이터가 제한적이어서 Overfitting 위험 ⟶ knowledge distillation 시도 못함.
- Latency–Quality Trade-off
- Re-Ranker depth 조정이 어려웠음. Elastic Search score cutoff 자동화 필요.
- 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' 카테고리의 다른 글
| 기업연계 - 고객센터 Agent 프로젝트 (2) | 2025.06.09 |
|---|---|
| 이상탐지(Anomaly Detection) (0) | 2025.05.02 |
| LangChain 기반 부트캠프 RAG봇 프로젝트 수행 후기 (0) | 2025.04.10 |
| 업스테이지 NLP 경진대회 (0) | 2025.03.26 |
| 업스테이지 CV 경진대회 정리 (0) | 2025.03.02 |