중간 점검: RAG · 검색
RAG · 검색 트랙 전체를 복습하는 14문제(개념 7 · 계산 7)와 풀이
먼저 알아야 할 것
다루는 내용
RAG·검색 트랙의 중간 점검 문제입니다. BM25와 TF-IDF, 바이 · 크로스 인코더, DPR · ColBERT · Contriever, IVF · PQ · HNSW 계산, RRF · 검색 지표 계산, HyDE, 실패 지점 진단, REALM · RAG · FiD · RETRO의 검색 결합 방식, Self-RAG · CRAG · RAPTOR · GraphRAG 선택까지 14문제를 풀이와 복습 링크로 정리합니다.
해설
중간 점검: RAG · 검색
RAG·검색 트랙 전체를 복습하는 점검 문제 14개입니다. 검색 기초(TF-IDF · BM25 · 평가 지표)부터 밀집 검색(SBERT · DPR · ColBERT · Contriever), 벡터 인덱스(IVF · PQ · HNSW), RAG 파이프라인(청킹 · RRF · 리랭킹 · 쿼리 재작성), 평가(Ragas · 실패 지점), 연구 흐름(REALM · FiD · RETRO · Self-RAG · CRAG · RAPTOR · GraphRAG)까지 다룹니다. 계산 문제는 직접 풀어 본 뒤 풀이와 맞춰 보세요. 풀이 아래의 '다시 볼 곳' 링크로 약한 부분을 복습하면 됩니다.
| 항목 | 내용 |
|---|---|
| 범위 | 이 트랙의 수업 · 논문 해설 전체(137, 52~66, 187~190) |
| 트랙 · 수준 | RAG·검색 · 중급 |
| 문제 구성 | 개념 7문제 · 계산 7문제(손계산 값은 파이썬으로 검산) |
| 권장 방법 | 답을 먼저 적고 풀이를 확인. 맞힌 개수보다 "왜 틀렸나"를 기록 |
들어가기 전에
- 이 트랙의 마지막 수업 RAG 평가와 고급 패턴 까지 읽었다고 가정합니다.
- 계산 문제에는 로그 · 역수 계산이 나옵니다. 계산기를 써도 됩니다.
한눈에 보기
- 키워드 검색과 밀집 검색의 차이, 그리고 둘을 합치는 이유를 설명할 수 있는지 점검합니다.
- 벡터 인덱스의 손잡이(nprobe · PQ 코드 크기 · ef)를 숫자로 다룰 수 있는지 점검합니다.
- RAG 파이프라인의 실패를 증상으로 진단할 수 있는지 점검합니다.
- 연구 흐름 속 대표 모델이 검색을 어디에 끼워 넣었는지 구분할 수 있는지 점검합니다.
문제와 풀이
1. BM25가 TF-IDF보다 나은 점 (개념)
같은 단어가 문서에 1번 나올 때와 20번 나올 때, TF-IDF와 BM25의 점수는 어떻게 다르게 움직이나요? BM25의 파라미터는 무엇을 조절하나요?
- 풀이: 단순 TF-IDF는 등장 횟수가 늘수록 점수가 계속 커지지만, BM25는 때문에 등장 횟수 효과가 점점 포화되어(늘어나는 폭이 줄어) 한 단어를 반복해 채운 문서가 과하게 유리해지지 않습니다. 는 문서 길이 정규화의 세기로, 긴 문서일수록 단어가 우연히 많이 나오는 효과를 얼마나 깎을지 정합니다( 이면 길이 무시).
- 다시 볼 곳: 검색의 기초
2. 바이 인코더와 크로스 인코더 (개념)
문장 1만 개 중 가장 비슷한 쌍을 찾을 때 BERT 크로스 인코더와 SBERT 바이 인코더의 비용 차이를 Sentence-BERT 논문 수치로 말하고, 그 차이가 생기는 구조적 이유를 설명하세요.
- 풀이: 논문은 BERT 크로스 인코더로 약 5천만 번(49,995,000번) 추론, V100으로 약 65시간이 걸리지만 SBERT로는 임베딩 1만 개 계산에 약 5초면 된다고 보고했습니다. 크로스 인코더는 두 문장을 함께 넣어야 해서 쌍마다 모델을 다시 돌려야 하고, 바이 인코더는 문장마다 벡터를 한 번만 만들어 두고 내적만 하면 되기 때문입니다. 그래서 실무에서는 바이 인코더로 후보를 넓게 찾고, 크로스 인코더로 상위 후보만 다시 줄 세웁니다.
- 다시 볼 곳: Sentence-BERT · RAG 파이프라인 설계
3. DPR의 배치 내 음성 예 (개념 · 계산)
DPR 학습에서 배치 크기가 이고 배치 내 음성 예(in-batch negatives)를 쓰면, 질문 하나당 양성 · 음성 문단은 각각 몇 개인가요? DPR이 BM25와 비교해 보고한 결과는?
- 풀이: 자기 짝 문단 1개가 양성, 같은 배치 다른 질문들의 양성 문단 개가 음성입니다. 추가 계산 없이 음성 예를 얻는 효율적인 방법입니다. DPR은 top-20 문단 검색 정확도에서 강력한 Lucene BM25 시스템보다 절대 9~19%p 높았다고 보고했습니다.
- 다시 볼 곳: DPR
4. ColBERT의 MaxSim (계산)
질의 토큰 2개, 문서 토큰 3개의 유사도 행렬이 아래와 같을 때 ColBERT식 점수를 구하세요. ColBERTv2가 이 방식의 어떤 약점을 줄였나요?
| 문서 t1 | 문서 t2 | 문서 t3 | |
|---|---|---|---|
| 질의 q1 | 0.2 | 0.9 | 0.1 |
| 질의 q2 | 0.5 | 0.4 | 0.7 |
- 풀이: 질의 토큰마다 문서 토큰과의 최댓값을 골라(MaxSim) 더합니다. 입니다. 문서를 벡터 하나가 아니라 토큰마다 벡터로 저장하므로 인덱스 크기가 크게 늘어나는 것이 약점이고, ColBERTv2는 잔차 압축과 잡음 제거 지도 학습으로 품질을 높이면서 저장 공간을 6~10배 줄였다고 보고했습니다.
- 다시 볼 곳: ColBERT · ColBERTv2
5. 라벨 없이 학습한 검색기 (개념)
Contriever는 어떤 방식으로 학습했고, 어떤 결과를 보였나요? 이것이 실무에서 갖는 의미는?
- 풀이: 사람이 만든 질문-문단 쌍 없이 대조 학습(contrastive learning)으로 학습한 비지도 밀집 검색기입니다. BEIR 벤치마크 대부분에서 Recall@100이 BM25와 견줄 만하다고 보고했습니다. 라벨 데이터가 없는 새 분야에서도 밀집 검색을 출발점으로 쓸 수 있다는 의미이고, 동시에 "BM25를 넘기가 쉽지 않다"는 것도 보여 줍니다.
- 다시 볼 곳: Contriever
6. IVF 거리 계산 횟수 (계산)
문서 개, 군집 개, nprobe 일 때 목록 크기가 고르다고 가정한 거리 계산 횟수는? 전수 검색의 몇 분의 1인가요?
- 풀이: 번입니다. 전수 검색 번의 400분의 1입니다. nprobe를 늘리면 재현율이 오르고 계산이 늘어납니다.
- 다시 볼 곳: 벡터 검색과 근사 최근접 이웃
7. PQ 압축률 (계산)
384차원 float32 임베딩을 부분 벡터 48개, 부분마다 코드북 256개(1바이트)인 PQ로 저장하면 벡터당 몇 바이트이고 몇 배 줄었나요? 대가는 무엇인가요?
- 풀이: 원래 바이트, PQ 코드는 48바이트이므로 32배 줄었습니다. 대가는 거리 해상도 손실로, 가까운 문서들끼리 순서가 뒤섞일 수 있습니다. 그래서 PQ로 후보를 추린 뒤 원래 벡터로 다시 정렬하기도 합니다.
- 다시 볼 곳: 벡터 검색과 근사 최근접 이웃
8. HNSW 손잡이 (개념)
HNSW에서 검색 품질이 부족할 때 먼저 바꿔 볼 파라미터와 그 대가, 메모리가 부족할 때 줄일 파라미터는?
- 풀이: 검색 때 후보 목록 크기
ef를 늘리면 재현율이 오르고 속도가 느려집니다(인덱스를 다시 만들 필요 없음). 메모리는 연결 수 에 비례하므로 메모리가 부족하면 을 줄이는데, 높은 재현율 · 고차원 데이터에서는 품질이 떨어질 수 있습니다. HNSW 논문은 의 합리적 범위를 5~48로 제시합니다. - 다시 볼 곳: 벡터 검색과 근사 최근접 이웃
9. RRF 계산 (계산)
BM25 목록 [P, Q, R], 벡터 목록 [R, P, S] 를 RRF로 합친 순서를 구하세요.
- 풀이: P , R , Q , S . 순서는 P, R, Q, S 입니다. 두 목록 모두에 나온 P와 R이 앞서고, 그중 평균 순위가 더 높은 P가 1위입니다.
- 다시 볼 곳: RAG 파이프라인 설계 · 작은 RAG 만들기
10. 검색 지표 (계산)
질문 5개에서 정답 문서의 첫 등장 순위가 1, 2, 못 찾음, 4, 1위입니다(상위 10개까지 확인). recall@1, recall@3, MRR은? 또 상위 3개 관련 여부가 (관련, 아님, 관련)이고 관련 문서가 2개면 nDCG@3은?
- 풀이: recall@1 , recall@3 , MRR 입니다. nDCG@3은 DCG , IDCG 이므로 입니다.
- 다시 볼 곳: 검색의 기초 · RAG 평가와 고급 패턴
11. HyDE와 쿼리 재작성 (개념)
HyDE가 "틀린 내용이 섞일 수 있는 가상 문서"로 검색하는데도 잘 작동하는 이유를 논문 설명대로 말하고, 일반적인 쿼리 재작성과의 차이를 말하세요.
- 풀이: 가상 문서를 다시 인코더(Contriever)로 임베딩하는 과정이 일종의 병목(dense bottleneck)으로 작용해 잘못된 세부 내용을 걸러 내고, 답 문서와 비슷한 모양 의 벡터로 검색하게 된다고 설명합니다. 논문은 HyDE가 비지도 밀집 검색기 Contriever를 크게 앞선다고 보고했습니다. 일반 쿼리 재작성은 검색용 질문 을 고쳐 쓰고, HyDE는 답처럼 생긴 문서 를 만들어 그 임베딩으로 찾는다는 점이 다릅니다.
- 다시 볼 곳: HyDE · RAG 파이프라인 설계
12. 증상으로 진단하기 (개념)
다음 세 증상은 각각 7가지 실패 지점 중 어디에 해당하고, 무엇부터 확인하나요? (가) 정답 문서가 상위 50에는 있는데 LLM에 넘기는 상위 5에는 없다. (나) 정답 청크가 프롬프트에 들어갔는데 답이 틀렸다. 문맥에 비슷한 수치가 여러 개 섞여 있었다. (다) 사내 자료에 없는 질문에 그럴듯한 답을 지어냈다.
- 풀이: (가) FP2(상위 순위에서 빠짐) — 리랭커 도입 · 하이브리드 검색 · 넘기는 개수 조정. (나) FP4(추출 실패) — 잡음 · 모순 정보가 원인이므로 문맥 관련성(필요 없는 문장 비율)을 재고 청크를 정리하거나 리랭킹으로 줄입니다. (다) FP1(내용 없음) — "자료에 없으면 없다고 답하라" 지시와, 자료에 없는 질문을 넣은 거절 평가를 추가합니다.
- 다시 볼 곳: RAG 평가와 고급 패턴
13. 검색을 어디에 끼웠나 (개념)
REALM, RAG(Lewis 외), Fusion-in-Decoder, RETRO가 검색 결과를 모델에 넣는 위치 · 방식을 한 줄씩 구분하세요.
- 풀이:
- REALM: 사전학습 단계부터 검색기를 넣고, 마스크 언어 모델링을 학습 신호로 수백만 문서를 고려하는 검색 단계를 거쳐 역전파합니다.
- RAG: 사전학습된 검색기(DPR)와 생성 모델(seq2seq)을 묶어, 검색 문단을 생성 모델 입력에 넣고 함께 미세조정합니다.
- FiD: 문단마다 질문과 붙여 인코더에서 따로 처리하고, 디코더에서 모든 문단 표현을 함께 보며 근거를 융합합니다. 검색 문단 수를 늘릴수록 성능이 크게 오른다고 보고했습니다.
- RETRO: 2조 토큰 데이터베이스에서 앞 토큰과 비슷한 청크를 찾아 청크 단위 교차 어텐션으로 넣습니다. Pile에서 GPT-3 · Jurassic-1과 비슷한 성능을 25배 적은 파라미터로 냈다고 보고했습니다.
- 다시 볼 곳: REALM · RAG · FiD · RETRO
14. 상황에 맞는 고급 패턴 (개념 · 충실도 계산)
(가) "올해 고객 문의 전체의 주요 불만 주제는?" (나) 검색된 문서가 엉뚱할 때가 잦고, 그럴 때 웹에서 보충하고 싶다. (다) 간단한 인사말에도 매번 검색해 느리고, 답의 근거 품질을 모델이 스스로 표시했으면 한다. 각각에 맞는 패턴은? 덧붙여, 답을 진술 6개로 나눴더니 문맥이 4개를 뒷받침했다면 Ragas 충실도는?
- 풀이: (가) 자료 전체를 보는 전역 질문이므로 GraphRAG(개체 그래프 + 커뮤니티 요약) 또는 RAPTOR(요약 트리). (나) 검색 평가기의 신뢰도에 따라 행동을 바꾸고 웹 검색으로 보강하는 CRAG. (다) 반성 토큰으로 필요할 때만 검색하고 자기 출력을 비평하는 Self-RAG. 충실도는 입니다.
- 다시 볼 곳: RAG 평가와 고급 패턴
채점과 복습 안내
| 맞힌 개수 | 권장 |
|---|---|
| 12~14 | 트랙 완료. 중간에서 길을 잃다 · RAG 서베이 로 시야를 넓히세요 |
| 8~11 | 틀린 문제의 '다시 볼 곳'만 복습한 뒤 작은 RAG 만들기 실습을 다시 돌려 보세요 |
| 7 이하 | 검색의 기초 부터 RAG 파이프라인 설계 까지 순서대로 다시 보세요 |
flowchart LR
A[검색 기초<br/>문제 1 · 10] --> B[밀집 검색<br/>문제 2~5]
B --> C[벡터 인덱스<br/>문제 6~8]
C --> D[RAG 파이프라인<br/>문제 9 · 11]
D --> E[평가 · 진단<br/>문제 12 · 14]
E --> F[연구 흐름<br/>문제 13 · 14]스스로 점검
- 이 트랙에서 가장 자주 등장한 설계 원칙 하나를 꼽는다면?
- 답: "넓게 찾고 좁게 다시 고른다"입니다. 싼 방법(BM25 · 바이 인코더 · ANN)으로 후보를 넓게 모으고, 비싼 방법(크로스 인코더 · 원본 벡터 재정렬 · LLM)으로 상위만 정밀하게 다룹니다.
- RAG 품질 문제를 받으면 가장 먼저 무엇을 재나요?
- 답: 정답 근거가 검색 상위 K에 들어오는지(recall@K)입니다. 검색 실패와 생성 실패를 나눠야 고칠 곳이 보입니다.
- 밀집 검색만으로 충분하지 않은 대표 상황은?
- 답: 오류 코드 · 제품 번호 · 고유명사처럼 정확한 문자열이 중요한 질문, 그리고 학습 데이터와 다른 분야의 문서입니다. BM25와의 하이브리드가 안전합니다.
용어 정리
| 용어 | 쉬운 뜻 |
|---|---|
| 배치 내 음성 예 | 같은 배치의 다른 질문 정답을 음성 예로 쓰는 학습 요령 |
| MaxSim | 질의 토큰마다 가장 비슷한 문서 토큰 점수를 골라 더하는 계산 |
| 지연 상호작용 | 질의 · 문서를 따로 인코딩한 뒤 토큰 수준에서 늦게 비교하는 방식 |
| 대조 학습 | 맞는 쌍은 가깝게, 틀린 쌍은 멀게 배우는 학습 |
| 전역 질문 | 특정 문단이 아니라 자료 전체를 봐야 답할 수 있는 질문 |
| 청크 단위 교차 어텐션 | RETRO가 검색 청크를 모델에 넣는 어텐션 방식 |
더 깊이 보려면
- 대형 언어 모델을 위한 RAG 총정리 (서베이) — 트랙 전체를 한 번에 정리한 서베이
- 에이전트 설계: 루프 · 워크플로 · 메모리 · 멀티에이전트 · MCP — 검색을 도구로 쓰는 에이전틱 RAG의 바탕
다음에 볼 것
- 강화학습 입문 (Sutton · Barto, 2판) — 학습 경로의 다음 트랙(강화학습) 시작점
- 정렬 개요와 RLHF 파이프라인 — LLM을 사람 의도에 맞추는 정렬 트랙
라이선스
본문은 KAITABASE 자체 작성입니다. 계산 문제의 숫자는 해설용 예이며 파이썬으로 검산했습니다. 논문 수치는 각 원문(arXiv)에서 확인한 것만 옮겼습니다.
출처
- Reimers · Gurevych, Sentence-BERT (2019): arxiv.org/abs/1908.10084
- Karpukhin 외, Dense Passage Retrieval (2020): arxiv.org/abs/2004.04906
- Khattab · Zaharia, ColBERT (2020): arxiv.org/abs/2004.12832 · Santhanam 외, ColBERTv2 (2021): arxiv.org/abs/2112.01488
- Izacard 외, Contriever (2021): arxiv.org/abs/2112.09118
- Malkov · Yashunin, HNSW (2016): arxiv.org/abs/1603.09320 · Douze 외, The Faiss Library (2024): arxiv.org/abs/2401.08281
- Gao 외, HyDE (2022): arxiv.org/abs/2212.10496
- Guu 외, REALM (2020): arxiv.org/abs/2002.08909 · Izacard · Grave, FiD (2020): arxiv.org/abs/2007.01282 · Borgeaud 외, RETRO (2021): arxiv.org/abs/2112.04426
- Barnett 외, Seven Failure Points (2024): arxiv.org/abs/2401.05856 · Es 외, Ragas (2023): arxiv.org/abs/2309.15217
- Cormack 외, Reciprocal Rank Fusion (SIGIR 2009): plg.uwaterloo.ca/~gvcormac/cormacksigir09…
AI 원리부터 이해하기 · RAG·검색 모듈
RAG·검색 모듈 학습
이 글은 RAG·검색 모듈의 학습 자료입니다. 전체 21개 자료 중 21번째입니다.
출처·원문
원문 보기요약만