임베딩은 나중에 바꾸면 전체 코퍼스 재임베딩 비용이 드는, RAG에서 가장 되돌리기 비싼 선택이다. 그래서 처음부터 제대로.
MTEB의 함정
MTEB 리더보드 상위권은 벤치마크 학습셋 오버핏("teaching to the test")이 공인된 문제다 — MTEB 팀 스스로 Zero-shot 필터를 추가했고, 비공개 데이터셋 벤치마크 RTEB를 만들어 공개-비공개 점수 격차로 오버핏을 적발한다(실제로 zero-shot 점수 낮은 모델이 비공개셋에서 역전하는 사례 확인). MMTEB(ICLR 2025)의 상징적 발견: 공개 모델 전체 1위가 겨우 560M짜리 multilingual-e5-large-instruct였다 — 크기가 전부가 아니다. 워크플로: Zero-shot 필터 + Retrieval 태스크 + 자기 언어(kor)로 후보 3~4개 → 자사 쿼리 100개 평가셋에서 직접 결승전.
2026년 후보군
- 셀프호스팅 — Qwen3-Embedding(0.6B/4B/8B, Apache 2.0, 8B가 MTEB multilingual 70.58) 또는 BGE-M3(dense+sparse+ColBERT 3-in-1 — 별도 BM25 인덱스 없이 하이브리드 가능).
- 한국어 특화 — KURE-v1(고려대, BGE-M3를 한국어 200만 쌍으로 튜닝, MIT): 한국어 검색 8개 데이터셋 평균 recall@1 0.5264로 원본 bge-m3(0.5178)를 앞선다 — 차원·인터페이스 동일해 그대로 갈아끼우면 공짜 성능 향상. 한국어 순위는 영어 MTEB와 다르다 — 한국어 MTEB 리더보드로 1차 스크리닝.
- API — voyage-4($0.06/1M, 2억 토큰 무료 — 수만 문서 PoC는 사실상 무료), OpenAI text-embedding-3-large($0.13/1M, dimensions=1024로 잘라 쓰는 게 스윗스팟). 단 한국어 검색에선 다국어 특화 모델(BGE 계열, e5)이 OpenAI를 이기는 경우가 많다.
가장 흔한 실무 버그: prefix 누락
e5 계열은 "query: "/"passage: " prefix, Qwen3는 태스크 instruction이 필수다 — 빠뜨리면 조용히 수 포인트 손해(instruction 미부착 시 1~5% 손실). 인덱싱 시 passage, 검색 시 query prefix를 코드 레벨에서 강제하는 래퍼를 만들어 둬라.
비용 다이어트 — 2026년 기본기
- Matryoshka(MRL) 차원 절단 — MRL 학습 모델은 뒤에서 잘라도 성능 유지: 768→64차원(8.3%)에도 성능 98.4% 유지. OpenAI·Gemini·Qwen3·voyage·jina 모두 네이티브 지원. 풀 차원으로 시작해 자사 평가셋에서 낙폭 보며 줄여라.
- binary/int8 양자화 — HF 실측: binary는 스토리지 32배 절감 + 검색 최대 24.8배 가속, float 리스코어링 시 NDCG@10의 ~96% 유지. 구체 비용: 1024차원 × 2.5억 벡터 기준 월 $3,623 → $113. 수백만 문서 이상이면 선택이 아니라 필수.
- 도메인 파인튜닝 — sentence-transformers v3+로 자사 (쿼리, 정답문서) 쌍 수천~수만 개면 소형 모델이 범용 대형을 이기는 게 흔하다(블로그 예제: triplet accuracy 68.3%→90.0%). KURE의 학습 레시피가 한국어 참고서.
표·도면 위주 문서는 파싱 대신 페이지 이미지를 검색하는 ColPali 노선(ICLR 2025)도 있다 — 단 페이지당 벡터 수십~수천 개로 스토리지가 수십 배 커지므로 풀링·양자화와 함께 설계(⑧편).
한 줄 요약: 리더보드가 아니라 자사 쿼리 100개로 후보를 직접 이겨본 모델을 골라라 — 그리고 prefix부터 확인하라.
— RAG 실전 시리즈 ④ / 다음 글: 벡터 DB — pgvector면 충분한가
댓글 없음:
댓글 쓰기
국정원의 댓글 공작을 지탄합니다.