Skip to content
logo

블로그 검색 실험

Updated 2026-04-262 min read
#rag
#ai
#embeddings
#bm25
#search
#vector-search
#hybrid-search
#korean
#experiment
#evaluation
Summary

280개 한국어+영어 혼용 블로그 포스트를 테스트베드로 6가지 검색 방법(Ripgrep, BM25, BM25+Kiwi, 벡터 검색, 메타데이터 필터, 하이브리드 퓨전)의 성능을 비교하는 실험 시리즈다. 교착어 한국어의 형태소 분석 필요성, 다국어 임베딩 모델 선택, 하이브리드 퓨전 전략이 핵심 변수다.

Key Claims

  • 영어 대규모 벤치마크(MS MARCO 등)의 결과가 "소규모 + 한국어 + 기술 블로그" 특성 데이터에 그대로 적용되지 않는다. 데이터 특성에 맞는 직접 실험이 필요하다.1
  • 한국어는 교착어이므로 "데이터베이스를", "데이터베이스의", "데이터베이스"가 공백 분리 시 다른 토큰이 된다. kiwipiepy로 형태소(NNG, NNP, VV, VA, SL)만 추출하면 이를 해결할 수 있다.1
  • BGE-M3는 한 번의 인코딩으로 dense vector와 sparse vector(lexical weights)를 동시에 출력한다. Qdrant Named Vectors에 넣으면 별도 BM25 파이프라인 없이 하이브리드 검색이 가능하다.1
  • BM25에서 IDF는 단어가 전체 코퍼스에서 희귀할수록 높고, 문서 길이 정규화 항이 긴 문서의 과대 표현을 방지한다. "AI" 같은 범용 단어는 낮은 점수, "HNSW" 같은 희귀 용어는 높은 점수를 받는다.1
  • Hybrid fusion 방법: RRF(순위 기반, 스코어 스케일 무관), Weighted Sum(방법별 가중치 조절 가능), Cascade(1차 검색 후 상위 N개만 2차 검색, 비용 절감).1
  • 평가 지표: Precision@K, Recall@K, MRR(Mean Reciprocal Rank), nDCG@10. 30~50개 쿼리에 대해 수동 레이블링(0/1/2)하고 블라인드 셔플로 평가한다.1

Examples / Code

BM25 수식 (from source)

BM25(d,q)=tqIDF(t)f(t,d)(k1+1)f(t,d)+k1(1b+bdavgdl)BM25(d, q) = \sum_{t \in q} IDF(t) \cdot \frac{f(t, d) \cdot (k_1 + 1)}{f(t, d) + k_1 \cdot (1 - b + b \cdot \frac{|d|}{avgdl})}

Kiwi 형태소 분석 예시 (from source)

입력: "벡터 데이터베이스를 비교했다"
공백 분리: ["벡터", "데이터베이스를", "비교했다"]
Kiwi 분석: ["벡터", "데이터베이스", "비교", "하다"]

실험할 하이브리드 조합 (from source)

조합구성
ABM25+Kiwi + 벡터 검색
BRipgrep + 벡터 검색
CBM25+Kiwi + 벡터 검색 + 메타데이터 필터
D전체 5가지 통합
EQdrant 네이티브 하이브리드 (BGE-M3 dense + sparse)

임베딩 모델 비교 대상 (from source)

모델차원한국어 지원특징
BGE-M31024우수dense + sparse 동시 출력
multilingual-e5-large1024양호범용 다국어
OpenAI text-embedding-3-small1536보통API 기반
ko-sroberta-multitask768우수한국어 특화

Connections

  • llm-text-to-sql — 같은 AI 시스템 품질 평가 문제를 SQL 생성 정확도 측면에서 다룬다

Footnotes

Footnotes

  1. content/AI/2026-04-04-블로그-검색-실험-1-실험설계.md 2 3 4 5 6

Linked from (3)

Comments