BGE-m3

고성능 오픈소스 임베딩 모델. 로컬에서 돌릴 수 있다는 강력한 장점이 있음

비교 항목BGE-M3OpenAI text-embedding-3-small
개발 주체BAAIOpenAI
모델 접근성오픈 소스 (MIT License)비공개 (API 전용)
최대 토큰 길이8,192 토큰8,191 토큰
지원 언어 수100개 이상다국어 (영어에 최적화됨)
임베딩 차원(Dimensions)1,024512 ~ 1,536 (가변 가능)
검색 방식(Functionality)Dense, Sparse(Lexical), Multi-vector 동시 지원Dense 방식 단독 지원

BGE-m3 서빙

BGE-m3 는 단일 신경망 연산 후 마지막 단계에서 Dense, Sparse, ColBERT 의 세 가지 형태의 값을 동시에 계산하여 반환하는 특수한 구조(Head)를 가진다. TEI 의 규격에서 벗어나므로, /sparse_embed 와 같은 엔드포인트 호출시 에러가 난다.

  • fastembed는 “BAAI/bge-m3”라는 이름을 입력받으면, 내부적으로 알아서 최적화된 희소 임베딩 전용 ONNX 가중치를 캐시 경로에 다운로드하고 실행을 진행함

    • 이는 dense 한정
    • Python FastEmbed의 sparse 지원 목록에 BAAI/bge-m3가 없음
  • TEI 에서 /embed_sparse 를 서빙할 수 없다. 이는 BGE-m3 가 huggingface 의 규격을 따르지 않고 있기 때문이다.

    • /embed_dense 는 가능하다.
  • BGE-m3 는 inifinity 도 받지 않는다. 올릴수는 있는데 infinity 에서 sparse 벡터 리턴을 지원을 안한다.

BGE-m3 서빙하는 최선의 방법

컨테이너 이미지로 python-slim 을 올리고, 거기에 FlagEmbedding 과 FastAPI 를 물린 후 api 래퍼 작성해서 호출