Google Colab에서 최신 AI 모델 사용하기: EmbeddingGemma 2로 텍스트, 이미지, 음성 검색
요약
Google DeepMind가 공개한 멀티모달 임베딩 모델인 EmbeddingGemma 2를 Google Colab 환경에서 테스트했습니다. 이 모델은 텍스트, 이미지, 음성 등 다양한 미디어를 동일한 768차원 벡터 공간에 투영하여 코사인 유사도 비교가 가능하게 합니다. 실험 결과, 여러 미디어 간의 검색이 흥미롭지만, 모든 방향에서 높은 정확도를 보장하기는 어려웠으며 특히 이미지-텍스트 검색에서는 아쉬움이 있었습니다.
핵심 포인트
- EmbeddingGemma 2는 Text, Image, Audio 등 다양한 미디어를 공통 벡터 공간에 투영합니다.
- 코사인 유사도만으로 서로 다른 미디어 간의 비교가 가능해져 RAG 활용 범위가 확장됩니다.
- 실제 실험 결과, 모든 유형에서 높은 정확도를 보장하기에는 한계점이 있었습니다.
- Google Colab 무료 버전에서도 구동 가능한 740M 규모의 효율적인 모델입니다.
서론
지금까지는 'Google Colab에서 최신 LLM을 사용해보기' 시리즈를 통해 다양한 LLM과 멀티모달 모델을 실제로 Google Colab 환경에서 구동해 왔습니다.
이번에는 조금 방향을 바꿔봅니다.
이번에 시도할 것은 텍스트를 생성하는 LLM이 아닙니다.
Google DeepMind가 공개한, google/embeddinggemma-2라는 멀티모달 임베딩(Embedding) 모델입니다.
임베딩 모델이라고 하면,
텍스트
↓
벡터
와 같은 사용법을 떠올리는 분들이 많을 것입니다. RAG(Retrieval-Augmented Generation)를 통해 텍스트를 검색할 때도, 텍스트를 임베딩하여 벡터 DB에 저장하고 질문 문과의 유사도를 계산합니다.
그런데 EmbeddingGemma 2는 그 정도에 그치지 않습니다.
텍스트 ─┐
이미지 ─┤
음성 ─┼→ 같은 768차원 벡터 공간
...
으로 변환할 수 있습니다. 즉,
'고양이 사진'이라고 일본어로 입력하여 고양이 이미지를 검색하는 것이 가능합니다.
혹은,
'사람이 말하는 음성'이라고 입력하여 오디오 파일을 검색할 수도 있습니다.
나아가, 이미지를 검색 쿼리(Query)로 사용하여 텍스트를 찾는 것까지 동일한 메커니즘으로 수행할 수 있습니다.
흥미롭습니다. 이번에는 실제 이미지, 텍스트, 음성을 사용하여,
정말로 서로 다른 미디어를 같은 벡터 공간에서 검색할 수 있는지 여부를 Google Colab 무료 버전으로 시험해 보았습니다.
그리고 미리 결론을 말씀드리자면,
상당히 흥미롭지만, '같은 공간에 들어가는 것'과 '어떤 방향에서도 높은 정확도로 검색할 수 있는 것'은 같지 않다는 결과였습니다.
특히 이미지에서 텍스트를 찾는 방향에서는 생각만큼 매끄럽게 진행되지 않았습니다.
이러한 'うまくいかなかった部分(잘 되지 않은 부분)'까지 포함하여 소개하겠습니다.
EmbeddingGemma 2란?
EmbeddingGemma 2는 Google DeepMind가 공개한 오픈 멀티모달 임베딩 모델입니다.
Hugging Face:
주요 사양은 다음과 같습니다.
| 항목 | 내용 |
|---|---|
| 모델 | google/embeddinggemma-2 |
| ... |
이름 때문에 약간 오해하기 쉽지만,
Gemma 2의 임베딩 버전이라는 의미는 아닙니다. EmbeddingGemma의 제2세대이며, Google 설명에 따르면 Gemma 4의 아키텍처적 진보를 통합한 모델로 알려져 있습니다.
중요한 점은,
Text, Image, Video, Audio를 비교 가능한 동일한 768차원 임베딩 공간으로 투영(写す)한다는 것입니다.
일반적인 임베딩 모델의 경우,
텍스트 → Text Embedding
이미지 → Image Embedding
음성 → Audio Embedding
처럼 각각 별도의 모델과 별도의 공간을 사용하는 경우가 많습니다.
하지만 EmbeddingGemma 2에서는,
┌─ 텍스트
├─ 이미지
768차원 공통 공간 ←┼─ 음성
...
이 됩니다.
따라서 기본적으로 코사인 유사도(cosine similarity)만으로 서로 다른 미디어 간을 비교할 수 있습니다.
이번 실험 환경
이번에는 Google Colab 무료 버전에서 실행했습니다.
실행일은 2026년 10월 7일입니다.
할당된 GPU는,
Tesla T4
VRAM 15,360 MiB
이었습니다. 모델 로드도 문제없이 성공했습니다.
이번 모델은 740M 규모이기 때문에, 최근 수십 B 또는 수백 B급 LLM과 비교하면 상당히 작은 모델입니다.
이번에는 텍스트를 생성하는 것이 아니므로,
무료 버전 Colab에서도 다루기 쉬운 모델이었습니다.
실제로 구동해 보기
1. 라이브러리 설치하기
이번에는 sentence-transformers에서 이용했습니다.
!pip -q install -U sentence-transformers transformers accelerate \
scikit-image librosa soundfile pandas matplotlib
이어서 모델을 불러옵니다.
import torch
from sentence_transformers import SentenceTransformer
MODEL_ID =
여기서는 정확도에 대해 주의가 필요합니다.
EmbeddingGemma 2의 공식 모델 카드에서는 `float16`은 권장되지 않습니다.
`bfloat16` 또는 `float32`를 이용하는 것이 권장됩니다.
이번 Colab 환경에서는 `bfloat16`으로 로드되었습니다.
# 이번에 사용한 데이터
Embedding 실험이므로, 처음부터 준비된 수치 벡터로는 흥미롭지 않습니다.
실제 - 이미지 - 문서(글) - 음성
을 사용합니다.
다만, 공개 기사나 GitHub에서 다루기 때문에 **저작권 및 재배포 조건이 명확한 데이터만을 이용**하기로 했습니다.
## 이미지
이미지는 `scikit-image`의 샘플 이미지 중 공식 문서에서 라이선스가 명확하게 확인되는 것을 사용했습니다.
### 고양이 (Chelsea)

`skimage.data.chelsea()`는 scikit-image 공식 문서에서 촬영자 Stefan van der Walt에 의해 **CC0**으로 공개된 것이 명시되어 있습니다.
### 커피

이 역시 공식 문서에서 **CC0**이라고 되어 있습니다.
### 사진작가

현재 scikit-image 버전에서는 Lav Varshney에 의한 **CC0** 이미지입니다.
### 로켓

SpaceX의 DSCOVR 발사 당시 사진이며, scikit-image 공식 문서에서 **public domain**으로 설명되어 있습니다.
이미지 라이선스 정보:
이번에는 기사에 그대로 게재해도 라이선상 문제가 생기기 어려우므로, 여기서 확인할 수 있는 이미지들만 공개용 데이터로 채택했습니다.
## 문서(글)
문서는 이번 실험을 위해 제가 직접 작성한 짧은 문장입니다.
text_documents = {
"doc_space":
"우주 개발에서는 로켓을 사용해 인공위성이나 우주선을 궤도로 옮깁니다.",
...
이것들은 기존 문서의 전재가 아니라, 이번 실험을 위해 만든 문장입니다.
## 음성
음성에 대해서는 조금 주의했습니다.
첫 번째 실험에서는 `librosa`에 준비된 트럼펫 음원도 이용했습니다.
다만, 이 음원의 원저작자가 제시한 이용 조건은 CC0처럼 '무엇이든 자유롭게 재배포 가능'한 조건은 아닙니다.
따라서, **공개 기사에는 그 음원 자체를 포함하지 않기로** 했습니다.
반면, 음성 인식 연구에서 널리 사용되는 LibriSpeech는 **CC BY 4.0**으로 공개되어 있습니다.
이번 이야기 음성에는 `librosa.ex(
입력 형식은 다르지만, 출력은 모두
768차원
입니다.
이번 Notebook에서는
Number of items: 12
Embedding shape : (12, 768)
이 되었습니다.
즉, 12개의 서로 다른 미디어를
12 × 768
의 하나의 행렬로 다룰 수 있습니다.
이 시점에서는 이미 흥미롭습니다.
# 일본어에서 이미지를 검색하기
먼저,
고양이 사진
으로 검색했습니다.
결과는 다음과 같았습니다.
| 순위 | 종류 | 데이터 | cosine similarity |
|---|---|---|---|
| 1 | text | 고양이는 사람과 사는 대표적인 소형 포유류입니다. | 0.7349 |
| ... |
상당히 좋은 결과입니다.
검색 Query는 일본어인
고양이 사진
뿐입니다.
그럼에도 불구하고,
- 고양이에 대해 설명한 문장
- 실제 고양이 이미지
이 1위와 2위에 올랐습니다.
즉,
일본어
↓
Embedding
...
을 함께 검색할 수 있습니다.
# '커피를 마시고 싶다'로도 검색하기
다음은,
커피를 마시고 싶다
입니다.
| 순위 | 종류 | 데이터 | score |
|---|---|---|---|
| 1 | text | 커피는 로스팅한 커피콩에서 추출하는 음료입니다. | 0.7559 |
| ... |
이것도,
문장 → 1위
이미지 → 2위
이 되었습니다.
단순한 키워드 매칭이 아닙니다.
Query에는
마시고 싶다
라고 쓰여 있고,
문장 쪽에는
추출하는 음료입니다
라고만 쓰여 있습니다.
이미지에는 물론 글자조차 없습니다.
그럼에도 가까운 위치에 Embedding되어 있습니다.
# 로켓도 상당히 이해하기 쉽다
Query:
우주로 날아가는 로켓
결과:
| 순위 | 종류 | 데이터 | score |
|---|---|---|---|
| 1 | text | 우주 개발에서는 로켓을 사용하여 인공위성이나 우주선을 궤도로 옮깁니다. | 0.7844 |
| ... |
문장과 이미지를 나누어 검색하는 것이 아닙니다.
하나의 vector index에 넣고,
scores = embeddings @ query_embedding
로 하고 있을 뿐입니다.
여기가 EmbeddingGemma 2의 이해하기 쉬운 강점이라고 생각합니다.
# 그렇다면 이미지에서 문장을 찾을 수 있는가?
여기까지는,
일본어 텍스트
↓
문장・이미지
이었습니다.
그럼 역방향은 어떨까요?
고양이 이미지 자체를 Query로 삼습니다.
결과는,
| 순위 | 종류 | 데이터 | score |
|---|---|---|---|
| 1 | image | Query와 같은 고양이 이미지 | 0.9965 |
| ... |
이것은 조금 의외였습니다.
당연히, Query와 같은 고양이 이미지는 거의 1.0이 됩니다.
하지만, 그것을 제외하고 보면,
커피 이미지
카메라 이미지
고양이에 대한 문장
순서입니다.
즉,
고양이 이미지로부터 '고양이는 사람과 사는 대표적인 소형 포유류입니다'라는 문장을 직접 검색한다는 의미에서는, 이번 작은 실험에서는 그다지 깨끗한 결과는 아니었습니다.
정답 문장은 4위이고, 자기 일치(self-consistency)를 제외하면 3위입니다.
## '공통 공간'이라고 해서 모든 방향이 같은 정밀도는 아니다
여기는 이번에 상당히 중요하다고 느꼈습니다.
EmbeddingGemma 2는 확실히,
Text
Image
Audio
...
을 실현하고 있습니다.
하지만,
Text → Image
이 잘 되는 것과,
Image → Text
이 같은 정밀도로 잘 되는 것은 별개입니다.
이는 생각해 보면 당연하기도 합니다.
모델은 여러 벤치마크에서 학습 및 평가되었지만,
- Query의 모달리티(modality)
- 검색 대상의 모달리티
- Query의 길이
- 이미지의 내용
- 문장의 추상도
- 데이터셋
에 따라 난이도는 달라집니다.
'같은 벡터 공간이기 때문에 무엇이든 자유자재로 검색할 수 있다'는 것은
이해하는 것은 다소 위험합니다.
# 음성 검색도 시도해 보기
다음은 사람이 말하는 음성이라는 일본어 Query입니다.
이번 실행 결과는 다음과 같았습니다.
| 순위 | 종류 | 데이터 | score |
|---|---|---|---|
| 1 | text | 인간의 목소리를 녹음한 음성 데이터입니다. | 0.8369 |
| ... |
여기서는
인간의 목소리를 녹음한 음성 데이터입니다
라는 문장이 매우 높은 score로 1위에 올랐습니다.
하지만 실제 말하는 음성인 `LibriSpeech`는 상위 7개 안에 들지 못했습니다.
이것은 '음성을 공통 공간에 넣을 수 없다'는 의미는 아닙니다.
반면에,
일본어의 의미 Query로부터 짧은 음성 클립을 안정적으로 직접 끌어내는
그런 용도에서는, 적어도 이 소규모 실험만 보고 '충분히 고정확도'라고 말할 수는 없습니다.
여기 역시 솔직하게 알아둘 필요가 있습니다.
# 성공한 결과만 보면 위험하다
멀티모달 모델을 다루다 보면,
고양이 사진 → 고양이 이미지가 나왔다!
라는 한 가지 예시만으로도
크로스미디어 검색이 가능했다고 말하고 싶어집니다.
확실히 가능합니다.
하지만 이번에 몇 가지 방향을 바꿔서 검색해 본 것만으로도,
Text → Image
은 비교적 이해하기 쉽게 작동하는 한편,
Image → Text
Text → Audio
에서는 순위가 상당히 무너지는 사례가 있었습니다.
따라서 이번의 결론은,
다른 미디어를 같은 벡터 공간에서 검색할 수 있다는 것 자체는 매우 흥미롭지만, 공통 공간으로 사상(写像)이 가능하다는 것과 임의의 cross-modal retrieval이 동일한 정확도로 가능하다는 것은 별개의 문제라는 것입니다.
이 차이는 중요하다고 생각합니다.
# Matryoshka Representation Learning도 시도해 보기
EmbeddingGemma 2의 또 다른 흥미로운 특징은,
**Matryoshka Representation Learning (MRL)**입니다.
표준적으로는 768차원이지만,
768
512
256
...
까지 Embedding을 짧게 할 수 있습니다.
이번에는 '우주 개발에 대해 알고 싶다'라는 Query로 768차원과 256차원을 비교했습니다.
### 768차원
| 순위 | 문서 | score |
|---|---|---|
| 1 | doc_space | 0.8019 |
| ... |
### 256차원
| 순위 | 문서 | score |
|---|---|---|
| 1 | doc_space | 0.8066 |
| ... |
적어도 이번의 작은 예시에서는,
1위 = doc_space
는 변하지 않았습니다.
실용 시스템에서는 Embedding이 수백만 개, 수천만 개가 될 때도 있습니다.
그 경우,
768차원 → 256차원
으로 줄어들면 vector storage나 검색 비용에도 영향을 미칩니다.
물론 '항상 256차원으로 충분하다'라고 결론 내릴 수는 없습니다.
하지만,
정확도와 계산 자원의 trade-off를 Embedding 측에서도 선택할 수 있다는 것은 흥미로운 설계입니다.
# EmbeddingGemma 2는 '답변'을 생성하지 않는다
이번에 다루면서 LLM과의 차이점도 다시 한번 명확하게 느꼈습니다.
LLM이라면,
질문
↓
LLM
...
입니다.
EmbeddingGemma 2는,
데이터
↓
EmbeddingGemma 2
...
입니다.
스스로 답을 쓰는 것이 아닙니다.
하지만 이 vector를 통해,
검색
유사도 계산
클러스터링
...
등이 가능해집니다.
생성 AI라는 단어가 널리 사용되게 되었지만,
AI 시스템 = 글을 생성하는 모델만은 아닙니다.
특히 RAG에서는,
검색하는 AI
+
생성하는 AI
와 같은 분업이 이루어집니다.
EmbeddingGemma 2는 그 **검색하는 쪽**을 텍스트 이외의 미디어까지 확장하는 모델이라고 생각하면 이해하기 쉽습니다.
# 여기서 RAG로 연결하면 흥미롭다
예를 들어 대학 연구실에,
PDF
강의 슬라이드
연구실 사진
...
이 있다고 가정해 봅시다.
기존 텍스트 RAG라면,
PDF 텍스트
↓
Embedding
...
EmbeddingGemma 2를 사용하면,
PDF 텍스트 ─┐
사진 ─┤
영상 ─┼→ 공통 Embedding
...
와 같은 구성을 만들 수 있습니다.
예를 들어서,
Attention을 설명하는 부분
이라는 일본어 Query에 대해,
-
강의 자료의 해당 문장
- Attention 그림이 실린 슬라이드 이미지
- Attention을 설명하는 강의 음성
- Attention을 설명하는 영상 구간
을 가로질러 검색할 수 있는 가능성이 있습니다.
이것은 상당히 흥미하다고 생각합니다.
# 그리고 XAI의 문제도 등장한다
개인적으로는, 여기서부터가 더욱 흥미롭습니다.
EmbeddingGemma 2에서는,
고양이라는 문장
고양이 이미지
고양이에 대한 설명문
등이 가까운 위치에 배치됩니다.
그렇다면,
왜 그 이미지와 그 문장이 가까운가?
라는 문제가 발생합니다.
게다가 이번처럼,
고양이 이미지
↓
왜 커피 이미지가 더...
같은 예시도 있습니다.
이것은 단순한 feature importance와는 조금 다릅니다.
서로 다른 모달리티(modality)로부터,
Image encoder
Audio encoder
Text encoder
...
로 투영된 결과,
어떤 정보가 공통 표현으로 남아 있고, 어떤 정보가 손실되었는지
를 설명하는 문제입니다.
크로스미디어 검색(Cross-media retrieval)을 실용화할수록,
검색 결과가 왜 가까운지
에 대한 설명 가능성(explainability)도 중요해질 것이라고 생각합니다.
# 이번에 시도해보고 알게 된 것들
이번 실험을 정리하자면,
- EmbeddingGemma 2는 Google Colab 무료 버전 T4에서 문제없이 작동했다
- Text / Image / Audio를 동일한 768차원 공간으로 Embedding할 수 있었다
- 일본어 Text → Image 검색은 상당히 명확하게 작동했다
- Text → Text도 안정적이었다
- Image → Text는 이번 소규모 실험에서는 반드시 좋지 않았다
- Text → Audio도 Query에 따라 기대했던 순위가 아니었다
- 따라서 '동일 Embedding 공간'과 '전방위적인 높은 검색 정확도'는 구분해야 한다
- MRL을 통해 Embedding 차원을 줄일 수 있는 것도 실용적으로 흥미롭다
라는 결과였습니다.
저는 이번에,
모두 같은 공간에 들어간다면, 상당히 자연스럽게 무엇이든 상호 검색할 수 있지 않을까
라고 약간 기대했습니다.
실제로 가능한 부분은 있습니다.
하지만 실험해 보니, 모달리티의 방향에 따라 차이가 꽤 있었습니다.
이 결과가 단순히 '대단한 모델이었다'로 끝나는 것보다 더 흥미롭다고 생각합니다.
## '생성하는 AI'만이 아니다
최근에는 LLM(Large Language Model)이 매우 눈에 띄기 때문에,
AI = 문장을 생성하는 모델
처럼 보일 때가 있습니다.
하지만 이번 EmbeddingGemma 2는 아무것도 문장을 생성하지 않습니다.
그럼에도 불구하고,
이미지
음성
문장
...
을 의미적으로 연결할 수 있습니다.
그리고 그 뒤에 LLM을 연결하면,
Cross-media retrieval
↓
RAG
...
와 같은 구성이 됩니다.
생성 모델과는 다른 역할이지만, 실제 AI 시스템에서는 매우 중요한 부분입니다.
이번에는 Google Colab 무료 버전에서 이렇게 쉽게 시도할 수 있었다는 점을 포함하여, 상당히 흥미로운 모델이었습니다.
## 향후 계획
다음으로 시도하고 싶은 것은 이번 데모 데이터가 아니라,
- 자신의 강의 자료
- 자신의 연구실 사진
- 자신의 강의 영상
- 자신의 강연 음성
을 사용한 교차 검색입니다.
예를 들어서,
AIME에 대해 설명하는 부분
이라고 입력하면,
논문의 문장
슬라이드 이미지
강연 영상
...
모두에서 관련 부분을 찾는 것입니다.
여기까지 할 수 있다면, 단순한 Embedding 데모가 아니라,
자신의 미디어 자산 전체를 대상으로 하는 Cross-media RAG
이 됩니다.
이것은 앞으로 실제로 시도해보고 싶습니다.
## 참고 링크
- EmbeddingGemma 2 - Hugging Face
https://huggingface.co/google/embeddinggemma-2 -
EmbeddingGemma 2 - Transformers documentation
https://huggingface.co/docs/transformers/model_doc/embedding_gemma2 -
scikit-image sample data
https://scikit-image.org/docs/stable/api/skimage.data.html - LibriSpeech ASR Corpus
https://www.openslr.org/12 - Creative Commons Attribution 4.0
※본 기사의 실행 결과는 2026년 10월 7일 기준입니다. Google Colab의 GPU, PyTorch, Transformers, sentence-transformers 등의 환경은 향후 변경될 수 있습니다. 또한, 공개 교육 자료에 이미지/음성 등의 미디어를 포함하는 경우, 모델 본체의 라이선스뿐만 아니라 각 미디어 소스별 라이선스 및 이용 조건을 확인해 주십시오.
### 토론 (Discussion)

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기