Post

RAG 스터디 ⓪ — 이 블로그를 검색하는 RAG를 직접 만들며 공부하기: 로드맵

RAG 스터디 ⓪ — 이 블로그를 검색하는 RAG를 직접 만들며 공부하기: 로드맵

예전에 RAG 기본 개념 튜토리얼을 쓴 적이 있습니다. LangChain으로 문서를 쪼개고, 임베딩하고, 벡터 DB에 넣고, LLM에 붙이는 표준 파이프라인이었습니다. 코드는 20줄이면 돌아갑니다. 그런데 돌아가는 것과 잘 되는지 아는 것은 다른 문제입니다.

이 스터디 시리즈는 질문 하나에서 출발합니다.

RAG의 각 부품을 바꾸면 검색과 답변이 실제로 얼마나 달라지는가?

그래서 이번에는 라이브러리 기본값을 그대로 쓰지 않고, 부품을 하나씩 직접 만들고 바꿔 가며 숫자로 확인하겠습니다. 이 블로그의 다른 시리즈(UMUD, RSNA 무릎)에서 계속 배운 것이 “점수를 올리기 전에 잣대부터 만든다”였는데, RAG도 같은 방식으로 공부합니다.

1. 실험 대상: 이 블로그

검색 대상(corpus)은 이 블로그의 글 전체입니다. 2026년 11월 기준 41편이고, 주제가 꽤 섞여 있습니다.

  • PET 원리 9편, PET 재구성 실험 4편 (물리·영상재구성)
  • UMUD 초음파 대회 15편, RSNA 무릎 5편 등 (Kaggle 실험 기록)
  • 오개념 탐지 3편, RAG 튜토리얼 1편 (LLM)

이 corpus를 고른 이유는 세 가지입니다.

  1. 내용을 제가 압니다. 검색이 틀렸을 때 왜 틀렸는지 바로 판단할 수 있습니다.
  2. 한국어와 영어 전문용어가 섞여 있습니다. “사이노그램/sinogram”, “근막/fascia”처럼 실제 한국어 기술 문서에서 생기는 문제가 그대로 나옵니다.
  3. 비슷한 글이 많습니다. UMUD만 15편이라 “어느 편이 정답인지” 가리는 일이 쉽지 않습니다. 쉬운 벤치마크로는 차이가 보이지 않는 부품도 여기서는 차이가 날 수 있습니다.

2. 로드맵

편주제질문
①평가셋과 BM25 기준선임베딩 없이 키워드만으로 얼마나 찾나? 한국어 토큰화는 어떻게?
②Dense 검색다국어 임베딩 모델은 BM25를 이기나? 어디서 이기고 어디서 지나?
③Chunking문서 단위 대신 문단 단위로 찾으면? 크기와 overlap은 얼마나 중요한가?
④Hybrid와 RerankerBM25+Dense를 섞으면(RRF)? Cross-encoder로 다시 순위를 매기면?
⑤생성과 답변 평가찾은 문서로 답을 만들 때 출처를 지키는가? faithfulness를 어떻게 재나?
⑥질의 개선Query rewriting, HyDE, multi-query는 실제로 도움이 되나?
⑦의료 문서에 적용논문·가이드라인처럼 긴 전문 문서에서 무엇이 달라지나?

각 편은 같은 규칙을 따릅니다.

  • 바꾸는 것은 한 번에 하나. 나머지는 앞 편의 가장 좋은 설정으로 고정합니다.
  • 같은 평가셋. ①에서 만든 질문 30개(이후 늘릴 예정)로 계속 잽니다.
  • 차이가 잡음보다 큰지 확인. 질문이 30개면 질문 하나가 3.3%p입니다. 작은 차이를 결론으로 쓰지 않습니다.

3. 평가 지표 미리 보기

검색 단계는 아래 세 지표로 봅니다.

  • Recall@k: 정답 문서가 상위 k개 안에 들어간 질문의 비율. RAG에서는 상위 k개를 LLM에 넘기므로 이 값이 사실상 “LLM이 정답을 볼 기회”입니다.
  • MRR (Mean Reciprocal Rank): 정답이 r등이면 1/r점. 1등이면 1, 2등이면 0.5. 순위가 얼마나 앞에 있는지를 봅니다.
  • 실패 사례 목록: 숫자만 보지 않고 틀린 질문을 직접 읽습니다. 대부분의 배움은 여기서 나옵니다.

생성 단계(⑤편 이후)는 정답 일치보다 “답이 검색된 문서에 근거하는가”를 먼저 봅니다.

4. 다음 편

①편에서는 평가용 질문 30개를 만들고, BM25를 직접 구현해서 기준선을 잽니다. 한국어에서 조사(“보정은”, “CT로”) 때문에 키워드 검색이 깨지는 문제와, 이를 글자 bigram으로 우회했을 때 얼마나 나아지는지가 주제입니다.

This post is licensed under CC BY 4.0 by the author.