- 2026-10-06에 공개된 EmbeddingGemma 2(740M, Apache 2.0)는 텍스트, 이미지, 음성, 영상을 동일한 768 차원의 공간에 임베딩할 수 있는 모델입니다. Apple M3 Mac에서도 API 키 없이 구동되었습니다.
- 텍스트 3건, 이미지 2건, 음성 2건, 영상 1건을 같은 인덱스에 넣고 일본어 질문 6개로 각각 검색했습니다. 이번 검증에서는 이미지는 2개 질문 모두 목표대로 1위를 차지했지만, 텍스트가 섞이자 '고양이 생태'가 6개 질문 중 5개에서 상위 3위에 들었고, 관계없는 '내일 날씨'에서도 1위를 차지했습니다. 이미지/음성/영상으로만 한정하면 6개 질문 중 5개에서 목표한 것이 1위를 차지했습니다.
- 차원을 128로 축소해도 1위는 6개 질문 중 5개에서 768차원과 동일했습니다. 건수가 적은 검증이므로, 실제로 사용할 때는 자신의 데이터로 정확도를 확인해야 합니다.
임베딩 모델(문장 등을 의미의 근접성을 측정할 수 있는 수치 벡터로 변환하는 모델)은 검색이나 RAG(검색된 자료를 LLM에 전달하여 답변하게 하는 방법)의 기반입니다.
2026-10-06, Google DeepMind가 EmbeddingGemma 2를 공개했습니다 (Google 공식 블로그). 특징은 다음과 같습니다 (모델 카드 및 공식 블로그 참조).
| 항목 | 내용 |
|---|
| 크기 | 740M 파라미터 (Gemma 4 기반). 텍스트만 사용할 경우 약 270M이며, 이미지용 170M, 음성용 300M 인코더는 필요할 때만 사용합니다 |
| ... | |
| 이전의 EmbeddingGemma는 텍스트 전용이었습니다. 이번에는 이미지/음성/영상이 같은 공간에 들어가기 때문에 '일본어 문장으로 영상이나 음성을 검색'하는 것이 로컬에서 가능해야 합니다. 실제로 시험해 보았습니다. | |
다음 8건을 하나의 인덱스에 넣고 일본어 텍스트로 검색합니다.
| 종류 | 내용 |
|---|
| 텍스트 | '고양이 생태', '금문교 역사', '파스타 삶는 법'의 짧은 문장 3건 |
| ... | |
이미지 2장, 영어 음성, 영상은 공식 튜토리얼에서 사용된 샘플입니다. 일본어 일기 예보는 macOS의 say | |
명령어로 만들었습니다. 소재는 prepare_media.sh | |
| 로 다운로드 및 생성합니다 (이 기사 리포지토토리에는 포함하지 않았습니다). | |
검색할 때는 모델 카드에서 권장하는 대로, 쿼리에 task: search result | query: ,
텍스트 문서에 title: none | text: 를 붙입니다 (sentence-transformers의 `prompt_name=
RuntimeError Could not load libtorchcodec. Likely causes:
- FFmpeg is not properly installed in your environment.
파일 로딩에 사용되는 torchcodec은 시스템에 설치된 FFmpeg을 필요로 하기 때문입니다. 이번에는 FFmpeg을 시스템에 넣지 않고, 직접 디코딩하여 전달했습니다.
- 음성: PyAV (FFmpeg이 포함된 Python 패키지)를 사용하여 16kHz・모노라・float32의 파형으로 전달합니다.
- 영상: PyAV로 1초당 1프레임을 추출하고, PIL 이미지 리스트로 전달합니다.
어떤 형태로든 전달할 수 있다는 것은 공식 튜토리얼의 음성/영상 섹션에 적혀 있습니다. 이 때문에 최종적인 requirements.txt에는 torchcodec을 넣지 않았습니다.
"""EmbeddingGemma 2를 사용하여, 텍스트・이미지・음성・영상을 하나의 검색 인덱스에 담고, 일본어 텍스트로 검색한다.
소재는 prepare_media.sh로 media/ 에 준비한다.
"""
...
outputs/run.log에서 라이브러리 경고와 로딩 진행 표시를 제외하고 붙입니다.
Python 3.12.15 / Darwin arm64
sentence-transformers==6.1.0
transformers==5.20.1
...
'붉은 다리 사진'으로 금문교 사진이, '주방을 그린 그림'으로 주방 일러스트가 1위가 되었습니다. 이미지 안에 글자가 없기 때문에, 일본어 문장과 이미지 내용이 같은 공간에서 가깝게 위치한다고 생각됩니다 (이번 2문제에서의 결과입니다).
이미지・음성・영상에만 한정하여 검색했을 때는, 6문제 중 5문제에서 목표한 것이 1위였습니다 ('요리 팁'은 주방 일러스트를, '시를 낭독하는 목소리'는 영어 시의 음성을 정답으로 간주했습니다). '내일 날씨'에서는 일본어로 읽어준 일기 예보 음성이 1위입니다. 이번 사례에서는 음성을 문자 변환하지 않고 그대로 검색할 수 있었습니다.
한편, 텍스트와 다른 종류를 하나의 인덱스에 넣었을 때는, 이번 6문제에서 텍스트가 상위를 차지하는 경우가 많았습니다. 예를 들어 '내일 날씨'와 '시를 낭독하는 목소리'의 1위는 둘 다 관계없는 '고양이 생태'였습니다.
스코어를 보면, 이미지・음성・영상 1위는 0.6~0.7 정도였습니다. 텍스트끼리는 내용이 관계없어도 0.6 전후가 되기도 합니다. 종류에 따라 스코어 수준이 다르기 때문에 그대로 섞어서 나열하면 비교하기 어려워집니다. 이번 8건・6문제만으로는 일반화할 수 없습니다. 이 경향이 제 데이터에서도 나오는지 확인한 후, 나온다면 다음과 같은 고안을 검토하는 것이 좋을 것 같습니다.
- 종류별로 상위를 먼저 보여주기 (이번 '이미지・음성・영상만' 검색이 이것입니다)
- 종류별로 스코어 임계값을 다르게 설정하기
'시를 낭독하는 목소리'는 미디어에만 한정해도, 영어 시(0.606)보다 일본어 일기 예보(0.608)가 근소하게 높았습니다. '목소리이다'라는 것은 파악하고 있는 것 같지만, '시인지 아닌지'까지는 구별하지 못했습니다. 영어 음성과 일본어 쿼리의 조합도 불리하게 작용했을지도 모릅니다 (추측입니다).
맨 앞 128 차원으로 줄여도, 1위는 6문제 중 5문제에서 768 차원과 동일했습니다. 달랐던 것은 '시를 낭독하는 목소리'만으로, 768 차원에서도 텍스트끼리가 1위・2위를 다투었던 문제였습니다. 저장할 벡터의 크기는 6분의 1이 됩니다. 다만 모델 카드에는, 128 차원에서는 멀티모달 품질이 크게 떨어지므로, 자신의 데이터로 확인하도록 적혀 있습니다 (모델 카드). 이번에도 128 차원에서는 스코어 전체가 높아져서, 3위는 6문제 중 5문제에서 바뀌었습니다.
이번 한 번의 측정에서는 M3 Mac(MPS, bfloat16)으로, 텍스트는 건당 0.040.23초, 이미지는 장당 0.80.9초 정도였습니다. 영상은 30프레임에 약 12.7초가 걸렸습니다. 처리 시간은 머신이나 입력의 길이에 따라 달라지므로, 실제로 사용하기 전에 자신의 환경에서 측정해야 합니다. 영상을 많이 넣을 경우, 프레임 수(max_frames)
)や 1 枚あたりの 토큰 수를 줄이는 것도 좋을 것 같습니다. 참고로, 모델 카드에는 float16을 사용할 경우 NaN(숫자가 아닌 값)이 발생할 수 있다고 나와 있으므로, bfloat16 또는 float32로 실행합니다. 이번에는 아무것도 지정하지 않았는데도 bfloat16으로 로드되었습니다.
-
EmbeddingGemma 2는 텍스트, 이미지, 음성, 비디오를 하나의 공간에 임베딩할 수 있습니다. M3 Mac에서도 API 키 없이 작동했습니다.
-
이번 검증에서는 일본어 텍스트로 이미지, 음성, 비디오를 찾을 수 있었습니다. 일본어 음성도 녹취록(transcription) 없이 검색이 가능했습니다.
-
다만 종류를 혼합한 인덱스에서는 이번에 텍스트의 점수가 높게 나왔습니다. 종류별로 순위를 매기는 등의 개선 방안을 고려하고 싶습니다.
-
모든 결과는 8개 항목, 6가지 질문, 1회 검증을 통해 나온 것입니다. 실제로 사용할 때는 자신의 환경과 데이터에서 정확도와 속도를 확인해야 합니다.
-
음성/비디오 파일 경로를 전달하려면 FFmpeg이 필요합니다. 설치하고 싶지 않다면 PyAV로 디코드하여 파형(waveform)이나 프레임으로 전달하면 됩니다.
-
EmbeddingGemma 2: an open, lightweight multimodal embedding model — Google, 2026-10-06
-
google/embeddinggemma-2 (모델 카드) — Google DeepMind / Hugging Face
-
Multimodal Embeddings with EmbeddingGemma 2 — Google AI for Developers, 2026-10-06 업데이트
-
EmbeddingGemma — Google AI for Developers, 2026-10-06 업데이트
-
google-gemma/cookbook — Google (샘플 이미지 출처. Apache-2.0)
-
roses-are.wav — Google AI for Developers (공식 튜토리얼에서 사용하는 샘플 음성)
-
bebechien/gemma — 공식 튜토리얼에서 사용하는 샘플 비디오
videos/cat_dozing.mp4
의 위치(리포지토리에 라이선스 표기가 없으므로, 이 기사에서는 비디오를 재배포하지 않고 스크립트로 가져옵니다)