이 문서는 한국어 RAG 최적화 의 일부입니다.
3. Kiwi 기반 BM25 Retriever
기본 BM25는 공백 기반으로 텍스트를 분절하므로, 한국어에서는 조사가 붙은 채로 토큰화됩니다. Kiwi로 형태소 분석 후 명사/동사/외국어만 추출 하면 검색 품질이 크게 향상됩니다.Kiwi + Ensemble Retriever
한국어 RAG에서 가장 효과적인 조합은 Kiwi BM25 + Dense (Vector Search) 앙상블입니다:
팁
한국어 전문 용어가 많은 도메인(법률, 의료 등)에서는 BM25 가중치를 0.5~0.6으로 높이면 정확한 용어 매칭이 강화됩니다.
RRF (Reciprocal Rank Fusion) 직접 구현
LangChain 없이 BM25와 Vector Search 결과를 직접 결합하는 방법입니다. 각 검색기의 점수 스케일이 달라도 순위(rank) 기반으로 통합하므로 별도의 정규화가 필요 없습니다.팁
- RRF의
k파라미터: 기본값 60은 원래 RRF 논문의 권장값입니다.k를 줄이면(예: 10) 상위 순위 문서에 더 큰 가중치가 부여됩니다.- 가중 RRF: BM25와 Vector Search에 서로 다른 가중치를 주고 싶다면, 각각의 RRF 점수에 가중치를 곱하면 됩니다 (예: BM25에 0.4, Vector에 0.6).
4. 한국어 청킹 전략
| 전략 | 설명 | 장점 | 단점 |
|---|---|---|---|
| 문장 기반 (KSS) | 한국어 문장 경계 인식 | 자연스러운 분절 | 문장이 짧으면 청크가 너무 작음 |
| 형태소 기반 | Kiwi로 의미 단위 분절 | 정확한 의미 보존 | 구현 복잡 |
| Semantic 청킹 | 임베딩 유사도 기반 경계 결정 | 의미 전환점 자동 감지 | 연산 비용 높음 |
| Recursive + 한국어 구분자 | 한국어 종결어미 기반 분절 | 범용적, 구현 간단 | 구분자 설계 필요 |
KSS (Korean Sentence Splitter) 활용
RecursiveCharacterTextSplitter + 한국어 구분자
참고 한국어에서RecursiveCharacterTextSplitter를 사용할 때는 종결어미(다.,요.)를 구분자에 추가하면 문장 중간에서 잘리는 것을 방지할 수 있습니다.
이전: 과제 & Kiwi 형태소 분석
한국어 RAG의 구조적 어려움과 형태소 분석 기초
다음: 임베딩 모델 & 베스트 프랙티스
한국어 임베딩 모델 선택, Re-ranking, 트러블슈팅