하나의 모델로 밀집·희소·다중벡터 검색을 동시에: BGE-M3의 다기능성을 활용한 차세대 정보 검색 아키텍처입니다.
작성일: 2026년 8월 4일
목차
- 서론: BGE-M3가 등장한 배경
- 핵심 개념: 하이브리드 검색과 다기능 임베딩
- BGE-M3 모델 심층 분석
- Milvus 벡터 데이터베이스와 BGE-M3의 결합 구조
- 설치 및 환경 구성 완전 가이드
- 하이브리드 검색 시스템 구현 (Python 실습)
- 결과 융합 알고리즘: RRF와 가중 점수
- 성능 최적화 및 인덱스 튜닝
- 실전 운영을 위한 고려사항
- 결론 및 향후 발전 방향
1. 서론: BGE-M3가 등장한 배경
정보 검색 시스템을 설계할 때 실무자들이 항상 마주하는 문제는 하나의 임베딩 모델로 시멘틱 검색과 키워드 검색을 모두 처리할 수 없다는 구조적 제약이었습니다. 일반적인 밀집 임베딩 모델은 의미적 유사성을 포착하는 데는 강하지만 정확한 용어 매칭에는 약하며, 이를 보완하기 위해서는 BM25와 같은 별도의 희소 검색 엔진을 병렬로 운영해야 했습니다. 이는 곧 두 개의 서로 다른 파이프라인을 유지보수해야 한다는 엔지니어링 부담으로 이어졌습니다.
북경 지능형 인공지능 연구원(BAAI, Beijing Academy of Artificial Intelligence)이 2024년 공개한 BGE-M3는 이러한 문제를 근본적으로 해결하기 위해 설계된 임베딩 모델입니다. BGE-M3의 “M3″는 다국어(Multi-Lingual), 다기능성(Multi-Functionality), 다중 granularity(Multi-Granularity)라는 세 가지 특성의 앞글자를 조합한 명칭으로, 이름 그대로 하나의 모델이 밀집 검색, 희소 검색, 다중 벡터 검색이라는 세 가지 검색 방식을 동시에 지원하도록 설계되었습니다.
이 기록에서는 BGE-M3의 이론적 기반과 Milvus 벡터 데이터베이스와의 통합 방법을 박사 연구자의 관점에서 심층적으로 다루며, 실제 프로덕션 환경에 적용 가능한 수준의 구현 코드와 명령어 설명을 함께 제공하도록 하겠습니다.
2. 핵심 개념: 하이브리드 검색과 다기능 임베딩
2.1 세 가지 검색 패러다임의 비교
정보 검색 이론에서 문서와 쿼리 간의 관련성을 계산하는 방식은 크게 세 가지로 구분됩니다. 첫째, 밀집 검색(Dense Retrieval)은 문장 전체를 하나의 고정 길이 벡터로 압축하여 표현하며, 코사인 유사도를 통해 전역적인 의미 유사성을 측정합니다. 둘째, 희소 검색(Sparse Retrieval)은 어휘 단위의 가중치를 계산하여 정확한 용어 일치를 우선시하며, BM25가 대표적인 알고리즘입니다. 셋째, 다중 벡터 검색(Multi-Vector Retrieval)은 문장을 토큰 단위의 여러 벡터로 표현하고, ColBERT 계열 모델에서 사용하는 후기 상호작용(Late Interaction) 방식을 통해 토큰 간 세밀한 유사도를 계산합니다.
기존에는 이 세 가지 방식을 각각 다른 모델로 구현해야 했으나, BGE-M3는 단일 모델 내에서 세 가지 출력을 동시에 생성할 수 있도록 설계되어 시스템 복잡도를 크게 낮추었습니다.
2.2 자기 지식 증류(Self-Knowledge Distillation)의 원리
BGE-M3의 학습 과정에서 가장 중요한 기술적 혁신은 자기 지식 증류 프레임워크입니다. 이는 세 가지 검색 기능(밀집, 희소, 다중 벡터)을 별도로 학습시키는 것이 아니라, 세 가지 기능이 상호 강화하도록 공동 학습시키는 방식입니다. 구체적으로 [CLS] 토큰의 임베딩은 밀집 검색에 사용되고, 나머지 토큰들의 임베딩은 희소 검색과 다중 벡터 검색에 각각 활용되며, 세 가지 방식이 산출한 관련성 점수를 앙상블하여 교사 신호(teacher signal)로 활용해 각 개별 기능을 다시 지도학습하는 순환 구조를 가집니다. 이러한 학습 방식을 통해 세 가지 검색 기능이 서로의 성능을 끌어올리는 상호 보완적 관계를 형성하게 됩니다.
2.3 하이브리드 검색이 필요한 실무적 시나리오
예를 들어 “ISMS-P 인증 심사 기준 2.5.3항”이라는 쿼리를 생각해보겠습니다. 이는 정확한 조항 번호를 포함하고 있어 희소 검색이 강점을 보이는 유형입니다. 반면 “개인정보 접근 권한을 제한하는 방법”이라는 쿼리는 표현이 문서마다 상이할 수 있어 시멘틱 검색이 유리합니다. BGE-M3 기반 하이브리드 검색은 하나의 모델 호출로 두 가지 벡터를 동시에 생성하므로, 별도의 인프라 구축 없이도 이러한 다양한 쿼리 유형에 안정적으로 대응할 수 있습니다.
3. BGE-M3 모델 심층 분석
3.1 모델 사양 개요
| 항목 | 사양 |
|---|---|
| 개발 기관 | BAAI (Beijing Academy of Artificial Intelligence) |
| 지원 언어 | 100개 이상 (다국어 전용 설계) |
| 최대 컨텍스트 길이 | 8,192 토큰 |
| 지원 검색 기능 | 밀집 검색, 희소 검색, 다중 벡터(ColBERT 방식) 검색 |
| 밀집 벡터 차원 | 1024차원 |
| 학습 데이터 규모 | 194개 언어, 약 12억 개의 문장 쌍 |
| 주요 평가 데이터셋 | MIRACL, Mr.TyDi 등 다국어 검색 벤치마크 |
3.2 다중 granularity 처리 능력
BGE-M3의 또 다른 강점은 짧은 문장부터 최대 8,192 토큰에 이르는 장문 문서까지 폭넓은 입력 길이를 안정적으로 처리할 수 있다는 점입니다. 이는 문단 단위의 짧은 청크뿐 아니라, 계약서나 기술 명세서와 같이 긴 문서를 통째로 임베딩해야 하는 실무 요구사항을 충족시킵니다. 특히 다중 벡터 방식은 토큰 단위로 세밀한 표현을 유지하므로, 긴 문서 내에서 특정 구간의 관련성을 정밀하게 포착하는 데 유리합니다.
3.3 Qwen3-Embedding 계열과의 비교 관점
BGE-M3는 단일 모델에서 세 가지 검색 기능을 동시에 제공한다는 점에서 아키텍처적 효율성이 뛰어나며, 상대적으로 가벼운 파라미터 규모(약 5억 6천만 개 수준)로도 실용적인 성능을 낸다는 특징이 있습니다. 반면 대규모 매개변수 기반의 최신 임베딩 모델들은 순수 밀집 검색 성능 자체는 더 높은 경우가 많습니다. 따라서 희소 검색과 다중 벡터 검색까지 하나의 모델로 통합 운영하고자 하는 경우에는 BGE-M3가, 순수 밀집 검색의 최고 성능이 최우선인 경우에는 대규모 임베딩 모델이 적합한 선택지가 될 수 있습니다.
4. Milvus 벡터 데이터베이스와 BGE-M3의 결합 구조
4.1 Milvus의 다중 벡터 필드 지원
Milvus는 하나의 컬렉션 내에 여러 개의 벡터 필드를 정의할 수 있는 다중 벡터(Multi-Vector) 기능을 지원합니다. BGE-M3가 생성하는 밀집 벡터와 희소 벡터를 각각 별도의 필드로 저장하고, 검색 시점에 두 필드를 동시에 조회한 뒤 결과를 융합하는 방식으로 하이브리드 검색을 구현합니다.
4.2 PyMilvus의 BGEM3EmbeddingFunction
PyMilvus는 pymilvus.model.hybrid 모듈을 통해 BGE-M3 전용 래퍼 클래스인 BGEM3EmbeddingFunction을 공식적으로 제공합니다. 이 클래스는 단일 함수 호출로 밀집 벡터와 희소 벡터를 동시에 반환하도록 설계되어 있어, 개발자가 별도의 후처리 로직을 구현할 필요가 없습니다.
4.3 인덱싱 전략
밀집 벡터 필드에는 HNSW 또는 IVF 계열의 인덱스를, 희소 벡터 필드에는 SPARSE_INVERTED_INDEX 계열의 인덱스를 적용하는 것이 일반적입니다. Milvus는 검색 시점에 각 필드에 최적화된 인덱스를 독립적으로 활용하면서도, 애플리케이션 계층에서는 단일 API 호출로 결과를 받아볼 수 있도록 추상화되어 있습니다.
5. 설치 및 환경 구성 완전 가이드
5.1 사전 요구사항 확인
설치를 시작하기 전에 다음 시스템 요구사항을 확인하시기 바랍니다. Python 버전은 3.9 이상을 권장하며, 메모리는 최소 8GB 이상을 확보해야 합니다. BGE-M3는 상대적으로 가벼운 모델이므로 CPU 환경에서도 실행 가능하지만, 대규모 배치 처리를 고려한다면 GPU 환경(CUDA 11.8 이상)을 권장합니다.
5.2 PyMilvus 및 모델 확장 패키지 설치
# PyMilvus 최신 버전 설치 또는 업그레이드 pip install –upgrade pymilvus # 임베딩 모델 통합 확장 패키지 설치 (BGE-M3 포함) pip install “pymilvus[model]” # 특정 버전 고정 설치 (재현성 확보 목적) pip install pymilvus==2.5.4 # FlagEmbedding 라이브러리 직접 설치 (선택 사항) pip install FlagEmbedding
명령어 상세 설명입니다:
--upgrade옵션은-U의 전체 표기로, 이미 설치된 pymilvus가 있을 경우 최신 버전으로 갱신합니다.pymilvus[model]은 extras 문법을 사용하여 BGE-M3, Qwen 계열 등 다양한 임베딩 모델 통합에 필요한 부가 라이브러리(FlagEmbedding, sentence-transformers 등)를 함께 설치합니다.FlagEmbedding은 BAAI에서 직접 배포하는 원본 라이브러리로, BGE 계열 모델의 세부 옵션을 직접 제어하고자 할 때 별도로 설치할 수 있습니다.
5.3 Milvus Lite를 통한 빠른 시작
from pymilvus import MilvusClient # 로컬 파일 기반의 Milvus Lite 인스턴스 생성 client = MilvusClient(uri=”./milvus_bgem3.db”) print(“Milvus Lite 클라이언트가 성공적으로 초기화되었습니다.”)
uri에 로컬 파일 경로(.db 확장자)를 지정하면 별도의 서버 프로세스 없이 애플리케이션 내에서 임베디드 모드로 동작하며, 이는 개발 및 테스트 단계에 적합합니다.
5.4 프로덕션 환경을 위한 Docker 기반 독립형 설치
# 공식 설치 스크립트 다운로드 curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh # 컨테이너 시작 (etcd, MinIO 포함 자동 구성) bash standalone_embed.sh start # 실행 상태 확인 docker ps | grep milvus # 컨테이너 중지 명령 (필요 시) bash standalone_embed.sh stop
명령어 상세 설명입니다:
curl -sfL의 각 플래그는 순서대로 진행률 숨김(-s), HTTP 오류 시 종료(-f), 리다이렉트 자동 추적(-L)을 의미합니다.standalone_embed.sh start는 Milvus 서버와 메타데이터 저장소(etcd), 객체 스토리지(MinIO)를 하나의 컨테이너로 묶어 실행하는 올인원 스크립트입니다.docker ps | grep milvus는 실행 중인 컨테이너 목록을 조회한 뒤 파이프(|)로 결과를 전달하여 milvus 문자열을 포함한 행만 필터링합니다.
5.5 BGE-M3 모델 다운로드 및 초기화 확인
from pymilvus.model.hybrid import BGEM3EmbeddingFunction # BGE-M3 임베딩 함수 초기화 (최초 실행 시 모델 자동 다운로드) bge_m3_ef = BGEM3EmbeddingFunction( model_name=”BAAI/bge-m3″, device=”cpu”, # GPU 사용 시 “cuda”로 변경 use_fp16=False # GPU 및 CUDA 환경에서는 True 권장 ) print(“BGE-M3 임베딩 함수가 초기화되었습니다.”) print(f”밀집 벡터 차원: {bge_m3_ef.dim[‘dense’]}”)
명령어 상세 설명입니다:
model_name="BAAI/bge-m3"는 Hugging Face 모델 허브의 정식 저장소 경로로, 최초 호출 시 자동으로 가중치 파일을 다운로드하여 로컬 캐시에 저장합니다.use_fp16=False는 16비트 반정밀도 연산 사용 여부를 결정하며, CPU 환경에서는 지원되지 않으므로 반드시 False로 설정해야 하고, GPU 환경에서는 True로 설정하여 메모리 사용량과 추론 속도를 개선할 수 있습니다.
6. 하이브리드 검색 시스템 구현
6.1 문서 임베딩 생성
BGE-M3는 단일 함수 호출로 밀집 벡터와 희소 벡터를 동시에 반환합니다.
documents = [ “리튬이온 배터리의 열관리 시스템은 전기차 안전성의 핵심 요소입니다.”, “하이브리드 검색은 키워드 매칭과 의미론적 검색을 결합한 방식입니다.”, “BGE-M3는 밀집, 희소, 다중 벡터 검색을 동시에 지원하는 임베딩 모델입니다.”, “벡터 데이터베이스는 고차원 임베딩의 효율적인 저장과 검색을 지원합니다.”, ] # 문서 임베딩 생성 (밀집 + 희소 동시 반환) docs_embeddings = bge_m3_ef(documents) dense_vectors = docs_embeddings[“dense”] sparse_vectors = docs_embeddings[“sparse”] print(f”밀집 벡터 차원: {len(dense_vectors[0])}”) print(f”희소 벡터 형식: {type(sparse_vectors)}”)
bge_m3_ef(documents) 호출은 내부적으로 밀집, 희소, 다중 벡터(colbert_vecs) 세 가지 표현을 모두 계산하지만, 반환되는 딕셔너리에서 필요한 키(dense, sparse)만 선택적으로 활용할 수 있습니다.
6.2 컬렉션 스키마 설계 및 생성
from pymilvus import MilvusClient, DataType client = MilvusClient(uri=”./milvus_bgem3.db”) collection_name = “bge_m3_hybrid_demo” # 스키마 생성 schema = client.create_schema(auto_id=True, enable_dynamic_field=True) schema.add_field(“id”, DataType.INT64, is_primary=True) schema.add_field(“text”, DataType.VARCHAR, max_length=65535) schema.add_field(“dense_vector”, DataType.FLOAT_VECTOR, dim=bge_m3_ef.dim[“dense”]) schema.add_field(“sparse_vector”, DataType.SPARSE_FLOAT_VECTOR) # 인덱스 매개변수 설정 index_params = client.prepare_index_params() index_params.add_index( field_name=”dense_vector”, index_type=”HNSW”, metric_type=”IP”, params={“M”: 24, “efConstruction”: 100} ) index_params.add_index( field_name=”sparse_vector”, index_type=”SPARSE_INVERTED_INDEX”, metric_type=”IP” ) # 컬렉션 생성 client.create_collection( collection_name=collection_name, schema=schema, index_params=index_params ) print(f”컬렉션 ‘{collection_name}’이 생성되었습니다.”)
주요 매개변수 설명입니다:
dim=bge_m3_ef.dim["dense"]는 BGE-M3 인스턴스가 실제로 생성하는 밀집 벡터의 차원(1024)을 동적으로 참조하여 스키마 불일치 오류를 방지합니다.metric_type="IP"는 내적(Inner Product)을 유사도 척도로 사용하는 설정으로, BGE 계열 모델은 정규화된 벡터를 생성하므로 내적 계산 결과가 코사인 유사도와 동일한 의미를 가집니다.M=24, efConstruction=100은 HNSW 그래프의 밀도와 구축 정밀도를 조정하는 값으로, 문서 규모가 중간 수준일 때 검색 속도와 정확도의 균형점으로 흔히 채택됩니다.
6.3 데이터 삽입
# 삽입할 데이터 구성 data = [] for i, doc in enumerate(documents): data.append({ “text”: doc, “dense_vector”: dense_vectors[i], “sparse_vector”: sparse_vectors[[i]] }) client.insert(collection_name=collection_name, data=data) client.load_collection(collection_name=collection_name) print(“데이터 삽입 및 컬렉션 로드가 완료되었습니다.”)
sparse_vectors[[i]]와 같이 이중 대괄호를 사용하는 이유는 BGE-M3의 희소 벡터가 SciPy의 CSR(Compressed Sparse Row) 행렬 형식으로 반환되기 때문이며, 이는 행 단위 슬라이싱을 통해 개별 문서의 희소 벡터를 추출하는 표준적인 방식입니다.
7. 결과 융합 알고리즘: RRF와 가중 점수
7.1 하이브리드 검색 실행
from pymilvus import AnnSearchRequest, RRFRanker query = “전기차 배터리 안전 관리 방법” # 쿼리 임베딩 생성 (밀집 + 희소 동시 반환) query_embeddings = bge_m3_ef([query]) # 밀집 벡터 검색 요청 dense_request = AnnSearchRequest( data=[query_embeddings[“dense”][0]], anns_field=”dense_vector”, param={“metric_type”: “IP”, “params”: {“ef”: 100}}, limit=10 ) # 희소 벡터 검색 요청 sparse_request = AnnSearchRequest( data=[query_embeddings[“sparse”][[0]]], anns_field=”sparse_vector”, param={“metric_type”: “IP”}, limit=10 ) # RRF 융합기를 사용한 하이브리드 검색 실행 ranker = RRFRanker(k=60) results = client.hybrid_search( collection_name=collection_name, reqs=[dense_request, sparse_request], ranker=ranker, limit=5, output_fields=[“text”] ) for hit in results[0]: print(f”점수: {hit[‘distance’]:.4f} | 텍스트: {hit[‘entity’][‘text’]}”)
7.2 RRF 알고리즘의 수학적 원리
RRF_score(d) = Σ [ 1 / (k + rank_i(d)) ]
여기서 rank_i(d)는 문서 d가 i번째 검색 결과 목록(밀집 또는 희소)에서 차지하는 순위이며, k는 평활화 상수로 일반적으로 60이 안정적인 값으로 알려져 있습니다. RRF는 원점수의 스케일 차이를 신경 쓰지 않고 순위 정보만을 활용하므로, 밀집 검색의 내적 값과 희소 검색의 BM25 유사 점수처럼 이질적인 척도를 가진 두 결과를 안정적으로 결합할 수 있다는 장점이 있습니다.
7.3 가중 점수 방식과 다중 벡터 확장
from pymilvus import WeightedRanker # 밀집 검색에 0.6, 희소 검색에 0.4의 가중치 부여 weighted_ranker = WeightedRanker(0.6, 0.4) results = client.hybrid_search( collection_name=collection_name, reqs=[dense_request, sparse_request], ranker=weighted_ranker, limit=5, output_fields=[“text”] )
BGE-M3는 다중 벡터(ColBERT 방식) 임베딩도 함께 제공하므로, 정밀도가 매우 중요한 재순위화(Reranking) 단계에서 세 번째 검색 경로로 다중 벡터 유사도를 추가하여 3단계 하이브리드 구조로 확장하는 것도 가능합니다. 다만 다중 벡터 방식은 토큰 단위 비교로 인해 연산 비용이 상대적으로 높으므로, 일반적으로는 1차 하이브리드 검색으로 후보군을 압축한 뒤 상위 결과에 대해서만 다중 벡터 재순위화를 적용하는 2단계 파이프라인이 실무에서 널리 채택됩니다.
8. 성능 최적화 및 인덱스 튜닝
8.1 인덱스 알고리즘 선택 기준
데이터 규모에 따라 100만 건 미만은 IVF-Flat, 100만 건에서 1억 건 사이는 HNSW, 1억 건 초과 시에는 디스크 기반 인덱스인 DiskANN을 고려하는 것이 일반적인 지침입니다. BGE-M3의 밀집 벡터는 1024차원으로 비교적 큰 편이므로, HNSW 인덱스 구축 시 메모리 사용량을 사전에 산정하는 것이 중요합니다.
8.2 배치 처리를 통한 처리량 향상
# 대량 문서를 배치 단위로 임베딩 생성 batch_size = 64 all_dense = [] all_sparse = [] for i in range(0, len(documents), batch_size): batch = documents[i:i + batch_size] batch_result = bge_m3_ef(batch) all_dense.extend(batch_result[“dense”]) all_sparse.append(batch_result[“sparse”]) print(f”총 {len(all_dense)}건의 밀집 벡터가 생성되었습니다.”)
BGE-M3는 상대적으로 경량 모델이므로 CPU 환경에서도 batch_size=64 수준의 처리가 가능하지만, GPU 환경에서는 128 이상으로 늘려 처리량을 극대화할 수 있습니다.
8.3 검색 매개변수 튜닝
ef 매개변수는 검색 시점의 탐색 폭을 결정하며, 값이 클수록 재현율은 높아지지만 지연 시간이 증가하는 트레이드오프가 존재합니다. 서비스의 응답 시간 요구사항에 맞추어 실험적으로 최적값을 도출하는 과정이 필요합니다.
9. 실전 운영을 위한 고려사항
9.1 다국어 환경에서의 일관성
BGE-M3는 194개 언어의 학습 데이터를 기반으로 하므로, 한국어와 영어가 혼재된 문서 집합에서도 별도의 언어별 모델 전환 없이 단일 파이프라인으로 처리할 수 있다는 실무적 강점이 있습니다. 이는 다국적 기업의 지식베이스나 글로벌 고객 지원 시스템 구축 시 유지보수 비용을 크게 절감시킵니다.
9.2 평가 지표를 통한 품질 검증
하이브리드 검색 시스템의 품질은 정밀도(Precision), 재현율(Recall), NDCG와 같은 전통적 지표와 함께, RAG 시스템에 적용하는 경우 RAGAS 프레임워크의 컨텍스트 정밀도 및 컨텍스트 재현율 지표를 병행하여 평가하는 것이 바람직합니다. 특히 밀집 검색만 사용했을 때와 하이브리드 검색을 적용했을 때의 지표 변화를 A/B 비교하여 실제 개선 효과를 정량적으로 확인하는 절차를 권장합니다.
9.3 자원 효율성 관점
BGE-M3는 단일 모델 호출로 세 가지 벡터 표현을 동시에 생성하므로, 별도의 BM25 인덱싱 파이프라인이나 추가적인 재순위화 모델을 유지보수할 필요가 없어 전체 시스템의 운영 복잡도와 인프라 비용을 낮추는 효과가 있습니다. 이는 특히 인력이 제한적인 중소 규모 조직이나 스타트업 환경에서 실질적인 이점으로 작용합니다.
10. 결론 및 향후 발전 방향
이 기록에서는 Milvus와 BGE-M3를 결합한 하이브리드 검색 시스템의 이론적 배경, 자기 지식 증류라는 핵심 학습 원리, 그리고 실제 구현과 성능 최적화 방법을 살펴보았습니다. BGE-M3의 가장 큰 기여는 밀집, 희소, 다중 벡터라는 세 가지 검색 패러다임을 하나의 모델로 통합함으로써, 하이브리드 검색 시스템의 구축과 운영 복잡도를 근본적으로 낮추었다는 점입니다.
향후 발전 방향으로는 다음을 고려할 수 있습니다. 첫째, 다중 벡터 방식을 활용한 재순위화 단계를 표준 파이프라인에 통합하여 검색 정밀도를 한층 더 끌어올리는 3단계 검색 아키텍처의 정교화입니다. 둘째, 도메인 특화 데이터를 활용한 BGE-M3의 파인튜닝을 통해 특정 산업 분야(법률, 의료, 금융 등)에서의 검색 정확도를 추가로 향상시키는 방향입니다. 셋째, 멀티모달 확장을 통해 텍스트뿐 아니라 이미지와 표 데이터까지 포괄하는 통합 검색 시스템으로 발전시키는 것입니다.
벡터 검색과 임베딩 모델 기술은 매우 빠르게 발전하고 있는 분야이므로, 실제 프로덕션에 적용할 때는 항상 최신 공식 문서와 벤치마크 결과를 참고하여 자신의 서비스 특성에 맞는 최적의 구성을 지속적으로 검증해 나가는 자세가 필요합니다.
참고 자료 및 출처
본 글은 다음의 공식 문서와 자료를 기반으로 작성되었습니다:
- BGE M3 | Milvus Documentation
- Hybrid Search with Milvus | Milvus Documentation
- Embedding Overview | Milvus Documentation
- BGEM3EmbeddingFunction API Reference | Milvus
- Exploring BGE-M3: The Future of Information Retrieval with Milvus | Zilliz Learn
- BGE M3-Embedding: Multi-Lingual, Multi-Functionality, Multi-Granularity Text Embeddings Through Self-Knowledge Distillation
- BAAI/bge-m3 · Hugging Face
- The guide to bge-m3 | BAAI – Zilliz
Takeaway
- BGE-M3는 모델 하나를 여러 검색 모드로 쓰는 것이 장점입니다. 그 대가는 파이프라인 복잡입니다.
- 다중벡터를 켜기 전에 문서 길이와 저장 비용을 계산하십시오.
- 한국어 사내 용어는 반드시 자체 질의로 재현율을 재십시오. 공개 벤치마크를 복사하지 않습니다.
- 모델 선택은 비교 허브글을 기준으로 하고, 이 글은 설정값만 따르십시오.