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)
Kiwi 형태소 분석 예시 (from source)
입력: "벡터 데이터베이스를 비교했다"
공백 분리: ["벡터", "데이터베이스를", "비교했다"]
Kiwi 분석: ["벡터", "데이터베이스", "비교", "하다"]
실험할 하이브리드 조합 (from source)
| 조합 | 구성 |
|---|---|
| A | BM25+Kiwi + 벡터 검색 |
| B | Ripgrep + 벡터 검색 |
| C | BM25+Kiwi + 벡터 검색 + 메타데이터 필터 |
| D | 전체 5가지 통합 |
| E | Qdrant 네이티브 하이브리드 (BGE-M3 dense + sparse) |
임베딩 모델 비교 대상 (from source)
| 모델 | 차원 | 한국어 지원 | 특징 |
|---|---|---|---|
| BGE-M3 | 1024 | 우수 | dense + sparse 동시 출력 |
| multilingual-e5-large | 1024 | 양호 | 범용 다국어 |
| OpenAI text-embedding-3-small | 1536 | 보통 | API 기반 |
| ko-sroberta-multitask | 768 | 우수 | 한국어 특화 |
Connections
- llm-text-to-sql — 같은 AI 시스템 품질 평가 문제를 SQL 생성 정확도 측면에서 다룬다