무엇인가
EmbeddingGemma 2는 구글 딥마인드가 2026년 10월 6일 공개한 공개 가중치 멀티모달 임베딩 모델입니다. 텍스트(코드 포함)·이미지·비디오·오디오와 그 조합을 하나의 768차원 공간에 놓습니다. 음성 메모로 영상을 찾고, 사진으로 문서를 찾는 일이 서버 없이 가능해집니다.
크기는 740M — 텍스트 모델 270M(트랜스포머 130M + 토큰 표 140M)에 비전 인코더 170M, 오디오 인코더 300M을 골라서 붙이는 모듈 구조입니다. LiteRT 양자화판 기준 Pixel 11 Pro에서 텍스트만 쓰면 약 191MB, 전부 켜도 약 567MB입니다. 라이선스는 Apache 2.0이고 다운로드에 약관 동의 게이트가 없습니다. 1세대(텍스트 전용 308M)는 2,000만 번 넘게 내려받혔습니다.
임베딩은 한 번 만들면 그 모델에 묶입니다. 벤더가 모델을 은퇴시키면 쌓아 둔 벡터를 전부 다시 만들어야 합니다. 공개 가중치라는 사실이 기능 명세만큼 중요한 이유입니다.
어떻게 동작하나
기술 보고서는 아직 없습니다. 레시피는 1세대 논문(인코더-디코더 초기화, Gemini Embedding 증류, 스프레드아웃 정규화, 모델 수핑, 양자화 인지 학습)에서 유추할 수밖에 없고, 발표문은 "Gemini Embedding 모델과 같은 기술"이라고만 적었습니다.
빠른 시작
모델 카드의 빠른 시작입니다. 질의와 문서에 다른 접두어를 붙이는 것이 핵심이고, 텍스트만 쓸 때는 비전·오디오 인코더를 꺼서 270M만 올립니다.
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"google/embeddinggemma-2",
config_kwargs={"vision_config": None, "audio_config": None}, # 텍스트만 (270M)
)
q = model.encode("오로라는 왜 생기나?", prompt_name="SearchQuery") # task: search result | query:
d = model.encode("오로라는 태양에서 온 하전 입자 때문에 생긴다.", prompt_name="Document") # title: none | text:
print(model.similarity(q, d))
q256 = model.encode("오로라는 왜 생기나?", prompt_name="SearchQuery",
truncate_dim=256, normalize_embeddings=True) # 질의와 문서의 차원은 같아야 한다
로컬에서는 ollama pull embeddinggemma-2:270m(텍스트), :440m(텍스트 + 이미지), :latest(740M) 태그가 있습니다. 추론은 bfloat16 또는 float32로 합니다 — float16은 활성값이 범위를 넘어 NaN이 나온다고 모델 카드가 경고합니다.
코어닷투데이 실측
2026-10-11 맥 한 대(M1 Ultra 128GB, Ollama 0.40.3)에서 코어닷투데이 문서 660건(제목 + 요약, 평균 273자)과 한국어 질문 85개로 임베딩 모델 아홉 개를 같은 조건에서 쟀습니다. EmbeddingGemma 2만 MLX 러너에 nvfp4 양자화로 돌았습니다.
| 모델 (nDCG@10, 85문항) | 접두어 붙임 | 접두어 뺌 | 문서 처리량 · 질의 지연 |
|---|---|---|---|
| Qwen3-Embedding-8B | 0.879 | 0.866 | 3.9건/초 · 115ms |
| EmbeddingGemma 1세대 (300M, BF16) | 0.852 | 0.770 | 54.2건/초 · 22ms |
| Qwen3-Embedding-4B | 0.850 | 0.842 | 6.5건/초 · 84ms |
| EmbeddingGemma 2 (740M·440M·270M, nvfp4) | 0.765 | 0.708 | 32.0건/초 · 37ms |
- 세 태그는 텍스트 검색에서 같은 모델이다. 740M·440M·270M이 소수점 넷째 자리까지 같았다(0.7646). 텍스트 코어가 같고 큰 태그는 인코더만 더한 것이라 정상이다. 이미지를 쓰지 않으면 270M이면 된다.
- 한국어 텍스트 검색은 1세대보다 0.09 낮았다. 텍스트 코어 축소(308M → 270M), nvfp4·MLX 양자화 경로, 다국어 평균 속 작은 한국어 비중 — 셋 중 무엇이 얼마인지는 전체 정밀도 체크포인트로 다시 재야 가려진다. "Ollama에서 받은 그대로 쓰면 이렇다"까지가 이 실측의 범위다.
- 접두어가 +0.057을 바꿨다. 문서를 색인할 때 쓴 규칙을 질의에도 똑같이 쓰고,
title: none | text:의 공백 하나까지 지킨다. - 마트료시카: 768 → 512 → 256 → 128에서 0.765 → 0.751 → 0.718 → 0.603. 256까지가 안전선이고 128은 크게 아프다.
언제 쓰고, 언제 피하나
| 상황 | EmbeddingGemma 2가 잘 맞는다 | 다른 모델을 먼저 본다 |
|---|---|---|
| 입력 | 사진·녹음·영상·스캔 문서를 글로 찾아야 한다 | 텍스트만 — 1세대 EmbeddingGemma, Qwen3-Embedding-4B |
| 데이터 위치 | 기기·내부망 밖으로 나갈 수 없다(망분리·의료·법률) | 클라우드 API를 써도 된다 |
| 코드 | 로컬 코드베이스 색인 — MTEB 코드 78.68(1세대 68.76) | 절대 최고 점수가 필요하다 — Qwen3-Embedding-8B |
| 한국어 | 멀티모달이 필요할 때만 | 한국어 텍스트 중심 — KURE-v2·Qwen3와 먼저 비교 |
구글은 경쟁 모델과의 직접 비교표를 내지 않았습니다. 공개 수치를 모으면 MMEB v2 전체 59.01은 2B급 Qwen3-VL-Embedding(73.2)에 14점 뒤지고, MTEB 다국어 61.36은 1세대(61.15)와 사실상 같으며, 영어(68.46)는 1세대보다 1.21점 낮습니다. 가치는 다섯 입력을 폰 크기에 넣은 데 있지 텍스트 검색의 새 기록에 있지 않습니다.
한계와 주의
- 한국어 점수는 공개되지 않았다. 다국어 61.36은 131개 과제 평균이다. 위 실측처럼 우리 문서로 직접 잰다.
- 128차원에서 멀티모달이 무너진다. MMEB 전체 59.01 → 45.65, 오디오 검색 69.54 → 56.71. "최대 6배 저장 절감"은 텍스트에서만 안전하다. 128차원 + 이진 양자화를 겹치는 것은 특히 위험하다.
- 긴 영상은 잘라야 한다. 1fps로 1분이면 60프레임 × 140 = 8,400토큰으로 창을 넘는다. 장면 단위로 색인하고 시작 시각을 함께 저장한다.
- 단일 벡터의 천장. LIMIT 논문(ICLR 2026)은 단일 벡터로 표현할 수 있는 상위 k 조합이 차원에 묶인다는 것을 보였다. BM25와 하이브리드로 쓰고 상위 후보는 재정렬한다.
- 1세대와 2세대 벡터는 한 인덱스에 섞을 수 없다. 바꾸면 전부 다시 임베딩한다.
- 안전 조정을 거치지 않았고(모델 카드 명시), 임베딩에서 원문을 상당 부분 복원할 수 있다. 온디바이스라도 벡터 저장소는 암호화한다.




