BGE-m3
고성능 오픈소스 임베딩 모델. 로컬에서 돌릴 수 있다는 강력한 장점이 있음
| 비교 항목 | BGE-M3 | OpenAI text-embedding-3-small |
|---|---|---|
| 개발 주체 | BAAI | OpenAI |
| 모델 접근성 | 오픈 소스 (MIT License) | 비공개 (API 전용) |
| 최대 토큰 길이 | 8,192 토큰 | 8,191 토큰 |
| 지원 언어 수 | 100개 이상 | 다국어 (영어에 최적화됨) |
| 임베딩 차원(Dimensions) | 1,024 | 512 ~ 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 래퍼 작성해서 호출