EmbeddingGemma 300M 릴리즈 노트

TL;DR

Google은 EmbeddingGemma를 출시했으며, 308 M 파라미터의 다국어 텍스트 전용 임베딩 모델로 2 K 토큰 컨텍스트 윈도우를 갖추고 있어 온‑디바이스 검색, 에이전트 및 기타 저지연 애플리케이션에 설계되었습니다. 500 M 파라미터 이하 모델 중 Massive Text Embedding Benchmark (MTEB)에서 최고 순위를 차지했으며 100개 이상의 언어를 지원합니다.


소개 – 컴팩트하고 고성능의 다국어 임베더

EmbeddingGemma는 Google DeepMind에서 발표한 최신 소규모 다국어 임베딩 모델입니다. 308 M 파라미터와 양자화 시 200 MB 이하 RAM을 차지하며, Massive Multilingual Text Embedding Benchmark (MMTEB)에서 최첨단 성능을 제공하면서도 모바일 및 엣지 배포에 충분히 작습니다. 모델은 2048 토큰을 한 번의 포워드 패스에서 처리하고 768 차원 벡터를 출력하며, Matryoshka Representation Learning (MRL)을 통해 512, 256, 128 차원으로 선택적으로 절단할 수 있습니다.


아키텍처 – 평균 풀링 및 밀집 헤드를 갖춘 Encoder‑only Gemma3

EmbeddingGemma는 Gemma3 트랜스포머 백본을 재사용하지만 인과적(attention)에서 양방향 어텐션으로 전환하여 디코더 아키텍처를 인코더로 바꿉니다. 이 인코더는 토큰 수준 임베딩을 생성하고 이를 평균 풀링하여 단일 텍스트 임베딩으로 만든 뒤, 두 개의 밀집 레이어를 통해 풀링된 벡터를 768 차원 출력으로 매핑합니다. 모델은 공개 웹 텍스트, 코드, 기술 문서, 합성 작업‑특정 예시를 혼합한 ~320 억 토큰 규모의 다국어 코퍼스에서 훈련되었으며, CSAM, 민감 데이터, 저품질 콘텐츠에 대한 엄격한 필터링을 적용했습니다.


평가 – 500 M 이하 모델 중 최고 수준 결과

EmbeddingGemma는 **Multilingual MTEB (v2)**와 English MTEB (v2) 두 스위트에서 벤치마크되었습니다. 규모가 작음에도 불구하고 일관되게 비교 가능한 베이스라인보다 우수한 성능을 보이며, 공식 MTEB 리더보드에서 500 M 파라미터 이하 텍스트 전용 다국어 임베딩 모델 중 가장 높은 순위를 차지했습니다. 블로그 게시물에는 다국어와 영어 트랙 모두에 대한 성능 그래프가 포함되어 있으며, MTEB 데이터의 20 % 이상을 사용해 훈련된 모델은 과적합을 방지하기 위해 제외되었다고 명시합니다.


프롬프트 설계 – 작업‑특정 접두사가 필요합니다

EmbeddingGemma는 최적 성능을 위해 입력 앞에 추가해야 하는 작업‑특정 프롬프트 세트로 훈련되었습니다. 가장 일반적인 프롬프트는:

  • query: "task: search result | query: "
  • document: "title: none | text: "

다른 프롬프트는 BitextMining, Clustering, Classification, InstructionRetrieval, MultilabelClassification, PairClassification, Reranking, STS, Summarization 등을 포함합니다. Sentence‑Transformers 라이브러리에서는 model.encode_querymodel.encode_document가 자동으로 querydocument 프롬프트를 추가하며, 다른 프레임워크는 수동으로 지정해야 합니다.


다양한 생태계에서의 사용 – 바로 실행 가능한 예시

EmbeddingGemma는 많은 인기 있는 검색 및 LLM 툴킷에 통합되어 있습니다. 아래는 임베딩을 얻고 유사도 검색을 수행하는 방법을 보여주는 간결하고 독립적인 코드 스니펫입니다.

Sentence‑Transformers (Python)

from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-300m")
query = "Which planet is known as the Red Planet?"
documents = [
    "Venus is often called Earth's twin because of its similar size and proximity.",
    "Mars, known for its reddish appearance, is often referred to as the Red Planet.",
    "Jupiter, the largest planet in our solar system, has a prominent red spot.",
    "Saturn, famous for its rings, is sometimes mistaken for the Red Planet."
]
q_emb = model.encode_query(query)
d_emb = model.encode_document(documents)
print(q_emb.shape, d_emb.shape)  # (768,) (4, 768)
print(model.similarity(q_emb, d_emb))

이 예시는 문서를 올바르게 순위 매기며, 화성에 관한 문장이 가장 높은 유사도를 갖습니다.

차원 절단 (Matryoshka)

model = SentenceTransformer("google/embeddinggemma-300m", truncate_dim=256)
q_emb = model.encode_query(query)
d_emb = model.encode_document(documents)
print(q_emb.shape, d_emb.shape)  # (256,) (4, 256)

256 차원으로 절단하면 저장 및 연산 비용을 줄이면서도 순위 순서를 유지합니다.

LangChain (Python)

from langchain_huggingface.embeddings import HuggingFaceEmbeddings
embedder = HuggingFaceEmbeddings(
    model_name="google/embeddinggemma-300m",
    query_encode_kwargs={"prompt_name": "query"},
    encode_kwargs={"prompt_name": "document"}
)
# Use with FAISS vector store for retrieval as shown in the blog post.

LangChain 사용자는 querydocument 프롬프트를 명시적으로 설정해야 합니다.

LlamaIndex (Python)

from llama_index.embeddings.huggingface import HuggingFaceEmbedding
emb = HuggingFaceEmbedding(
    model_name="google/embeddinggemma-300m",
    query_instruction="task: search result | query: ",
    text_instruction="title: none | text: "
)

올바른 임베딩 생성을 위해 동일한 프롬프트 문자열이 필요합니다.

Haystack, txtai, Transformers.js, ONNX Runtime, 및 TEI

블로그에서는 각 런타임에 대한 바로 실행 가능한 스크립트를 제공합니다. 모두 동일한 흐름을 따릅니다: Hub에서 모델을 다운로드하고, 적절한 프롬프트를 설정하고, 임베딩을 계산한 뒤, 내적 유사도(학습 목표)를 수행합니다. Text Embeddings Inference (TEI) Docker 이미지(cpu-1.8.1, cuda-1.8.1 등)는 OpenAI 호환 /v1/embeddings 엔드포인트를 제공하며, /embed 엔드포인트는 실시간 절단을 위한 prompt_namedimensions 파라미터도 지원합니다.


파인튜닝 – MIRIAD 의료 데이터셋에 대한 도메인 적응

EmbeddingGemma는 Sentence‑Transformers 라이브러리를 사용해 파인튜닝할 수 있습니다. 블로그에서는 전체 파이프라인을 시연합니다:

  1. 기본 모델을 로드합니다 (google/embeddinggemma-300m).
  2. MIRIAD 의료 지시‑검색 데이터셋을 로드합니다 (훈련 100 k 쌍, 평가 1 k, 테스트 1 k).
  3. 효율적인 배치 내 부정 샘플링을 위해 CachedMultipleNegativesRankingLoss를 사용합니다.
  4. RTX 3090에서 1 epoch 동안 (≈5.5 h) 혼합 정밀도(fp16)로 학습합니다.
  5. InformationRetrievalEvaluator로 평가하여 NDCG@10을 보고합니다.

기본 모델은 MIRIAD 테스트 분할에서 0.8340 NDCG@10을 달성했습니다. 파인튜닝 후 모델 (sentence‑transformers/embeddinggemma-300m‑medical)은 0.8862 NDCG@10에 도달했으며, Qwen3‑Embedding‑0.6B(596 M 파라미터)와 같은 더 큰 모델을 포함한 모든 일반 목적 임베딩 모델을 능가했습니다.


시사점 – 온‑디바이스 다국어 검색 활성화

EmbeddingGemma는 컴팩트한 크기, 2 K 컨텍스트, 다국어 지원을 결합하여 지연 시간, 메모리, 대역폭이 제한된 상황에 최적화됩니다:

  • 모바일 RAG 파이프라인은 쿼리와 문서를 로컬에서 임베딩하여 클라우드 API 의존도를 낮출 수 있습니다.
  • 엣지 에이전트(예: 음성 비서, AR/VR 앱)는 원시 텍스트를 전송하지 않고도 의미 검색을 수행할 수 있습니다.
  • 다언어 검색은 100개 이상의 언어를 지원함으로써 저전력 디바이스에서도 가능해집니다.
  • Matryoshka 절단을 통해 개발자는 정확도와 저장·연산 비용을 트레이드오프하여, 보통 수준의 하드웨어에서도 대규모 벡터 데이터베이스를 운영할 수 있습니다.

전반적으로 EmbeddingGemma는 속도와 효율성을 요구하는 프로덕션 환경에서 고품질 다국어 임베딩을 배포하는 장벽을 낮춥니다.


추가 읽을거리


빠른 시작 체크리스트

  1. 설치 프리뷰 Transformers 패키지 (pip install git+https://github.com/huggingface/transformers@v4.56.0-Embedding-Gemma-preview).
  2. 프레임워크 선택 (Sentence‑Transformers, LangChain, LlamaIndex, 등).
  3. Hub에서 google/embeddinggemma-300m로드합니다.
  4. 적절한 프롬프트를 적용합니다 (query는 검색, document는 코퍼스 항목).
  5. 필요에 따라 truncate_dim(256, 512, 128)으로 임베딩을 절단합니다.
  6. 프로덕션 확장을 위해 TEI 또는 ONNX Runtime으로 배포합니다.

결론

EmbeddingGemma는 다국어 기능, 온‑디바이스 효율성, 벤치마크 최고 품질을 500 M 이하 파라미터 패키지에 결합한 드문 조합을 제공합니다. 오픈소스로 제공되며 주요 검색 프레임워크와 폭넓게 통합되고, 간단한 파인튜닝 파이프라인을 갖추고 있어 제한된 하드웨어에서 차세대 의미 검색 및 검색‑증강 생성 시스템을 구축하는 개발자에게 실용적인 선택이 됩니다.

Sources