EmbeddingGemma 2: 텍스트·이미지·오디오·비디오를 한 벡터 공간에 넣는 오픈 경량 임베딩 모델
EmbeddingGemma 2: An open, lightweight multimodal embedding model
TL;DR Highlight
740M 오픈 모델 하나로 텍스트·이미지·오디오·비디오를 같은 벡터 공간에서 검색
Who Should Read
온디바이스나 셀프호스팅 RAG에서 텍스트 외에 이미지·오디오·비디오까지 검색해야 하는 백엔드·앱 개발자
Core Mechanics
- 텍스트·이미지·오디오·비디오를 한 공간에 넣는다
- EmbeddingGemma 2는 코드·이미지·비디오·오디오를 공유 임베딩 공간에 매핑하는 멀티모달 모델이다.
- Gemma 4 아키텍처 기반이고 Apache 2.0 라이선스로 공개됐다.
- 파라미터는 총 740M이다.
- 필요한 인코더만 골라 쓴다
- 텍스트 전용은 270M 파라미터만 있으면 된다.
- 비전(170M)과 오디오(300M) 인코더는 선택으로 붙인다.
- MRL로 벡터를 잘라 저장공간 6배 절감
- Matryoshka Representation Learning(MRL, 벡터 앞부분만 잘라 써도 성능이 유지되도록 학습하는 방식)으로 768차원을 512·256·128차원으로 줄일 수 있다.
- 로컬 벡터 DB와 메모리 사용량이 최대 6배 줄어든다.
- 코드 검색 점수가 9.92점 올랐다
- MTEB Code 기준 EmbeddingGemma 1 대비 68.76에서 78.68로 올랐다.
- 다국어 텍스트 성능은 EmbeddingGemma와 비슷한 수준이라고 한다.
- 양자화하면 Pixel 11 Pro에서 191MB~567MB RAM
- 양자화(가중치를 낮은 정밀도로 줄이는 기법) 적용 시 텍스트 전용 가중치는 약 191MB를 쓴다.
Community Reactions
- Apache 2.0이라서 임베딩 모델로 적합하다는 의견
- 독점 호스팅 모델은 중단되면 저장해 둔 수백만 벡터를 새 모델로 다시 계산해야 해서 부담이라는 의견이 있었다.
- 호스팅 업체에 비용을 내고 쓰되, 중단되면 오픈 가중치로 직접 돌릴 수 있는 구조를 선호한다는 의견이다.
- 텍스트만 쓰면 이득이 없다는 경험
- 댓글에서는 텍스트 벤치마크가 첫 EmbeddingGemma와 동일하다는 지적이 나왔다.
- Claude 기반으로 테스트해 봤더니 검색·클러스터링용 텍스트 임베딩은 더 낫거나 빠르지 않았다는 경험이 있었다.
- 음악 오디오는 MuQ-MuLan이 여전히 낫다는 의견이다.
- MRL이라 모델 가중치는 못 줄인다는 지적
- 이전 온디바이스 모델의 MatFormers와 달리 MRL이라서 차원만 줄고 모델 가중치는 함께 줄지 않는다는 의견이 있었다.
- 비교 대상이 아쉽다는 의견
- 텍스트는 Voyage AI 모델과, 이미지는 SigLIP2와 비교하는 자료가 필요하다는 의견이 있었다.
- Voyage 모델이 Qwen 계열보다 낫다고 느꼈다는 경험도 있었다.
How to Apply
- 기존 RAG 코퍼스로 텍스트 전용 모델부터 비교하기
- 오늘 sentence-transformers로 270M 텍스트 경로를 받아 현재 임베딩 모델과 같은 질문 20개로 검색 결과를 비교하라.
- 텍스트만 쓰는 서비스라면 이득이 없을 수 있으니 먼저 확인하라.
- MRL 차원을 줄여 저장공간 줄이기
- 벡터 DB에 768차원 대신 256·128차원을 넣고 검색 품질 변화를 측정하라.
- 품질이 허용되는 가장 작은 차원으로 인덱스를 재구성하라.
- 코드베이스 검색에 적용하기
- 코딩 에이전트의 코드 검색이나 로컬 코드 인덱싱에 이 모델을 붙이고 현재 모델과 정답 적중률을 비교하라.
- 오디오·비디오 검색이 필요한 곳에만 인코더 추가하기
- 음성 메모나 영상 클립 검색이 필요하면 오디오(300M)·비전(170M) 인코더를 붙이라.
- 필요 없으면 텍스트 전용으로 두어 메모리를 아끼라.
Try It
# 터미널에서 실행 (원문은 sentence-transformers 지원만 언급하며, 아래 모델 ID는 직접 확인해서 바꿔 넣을 것)
pip install -U sentence-transformers
# 파이썬 파일로 저장해 실행
from sentence_transformers import SentenceTransformer
MODEL_ID = "{{Hugging Face의 EmbeddingGemma 2 모델 ID}}"
model = SentenceTransformer(MODEL_ID, truncate_dim=256) # MRL: 768 -> 256 차원
docs = ["{{문서1}}", "{{문서2}}", "{{문서3}}"]
query = "{{질문}}"
d = model.encode(docs, normalize_embeddings=True)
q = model.encode([query], normalize_embeddings=True)
print(q @ d.T)
# 이어서 해 볼 것: truncate_dim을 512·256·128로 바꿔 순위가 얼마나 변하는지 비교Terminology
관련 논문
트랜스포머는 '기억 저장소'에서 처음부터 만들어 낼 수 있었다
선형층→MLP→self-attention을 기억 저장소로 보면 용량이 64→약 2,700→100만 이상
400년치 고문서에 AI를 돌렸더니 잊힌 운석·코뿔소·화산 폭발이 나왔다
임베딩 검색과 싼 필터 모델로 400년 고문서를 뒤져 미기록 사건 발굴
RAG-NAROK: 출처를 직접 반박하는 문서로 RAG 지식베이스를 오염시키는 공격
검색된 출처를 겨냥해 반박문을 심었더니 1위 검색과 탐지 회피가 높아졌다
텍스트냐 이미지냐 둘 다냐: 멀티모달 문서 QA 입력 방식 비교
문서 QA에서 페이지 이미지가 정확도는 높지만 느려서, 질문별 라우터로 지연 30% 줄였다
MS 임원이 AI 스크래핑을 '인류 역사상 최대의 노동 도둑질'이라 불렀다는 NYT 소송 공개 문서
NYT 소송 공개 문서에서 MS·OpenAI 내부의 스크래핑 인식이 드러났다
임베딩의 보편적 기하 구조 활용: 짝 데이터 없이 임베딩 공간 간 변환
짝 데이터 없이 임베딩을 다른 모델 공간으로 옮겼고, 벡터 DB 보안 위험이 드러났다
Better Together: 강한 RAG 베이스라인 위에서 쿼리 리라이팅 조합하기
쿼리 리라이팅을 합치고 점수 낮을 때만 돌렸더니 비용 40%로 효과 절반