실행 프로그램과 확장
최종 업데이트
EmbeddingGemma 2로 사진·녹음까지 내 컴퓨터에서 검색하려면?
글로 사진을 찾고, 문서와 녹음도 공통 임베딩 공간에서 비교해요.
EmbeddingGemma 2는 텍스트·코드·이미지·영상·오디오를 공통 768차원 임베딩으로 바꾸는 모델이에요. 검색에 쓸 벡터를 만들며, 검색 결과의 요약은 별도 LLM1에 맡길 수 있어요.
문서에서 사진과 음성까지 검색하려면
EmbeddingGemma 2는 문장·코드·이미지·영상·오디오를 검색용 숫자 벡터로 바꾸는 임베딩 모델이에요. 질문에 가까운 문서나 사진, 녹음을 찾아 보여주고, 검색 결과의 요약은 별도 LLM에 맡길 수 있어요. 모든 입력은 공통 768차원 임베딩 공간에 놓여서 글로 사진을 찾거나 설명으로 음성을 비교할 수 있어요. Google 모델 카드
벡터는 원문 내용의 의미를 수치로 나타내는 배열이에요. 비슷한 의미의 질문과 자료는 벡터 공간에서 가까운 위치를 갖도록 모델이 학습돼요. 예를 들어 ‘환불은 며칠 안에 되나요?’라는 질문으로 ‘결제 취소 후 영업일 기준 5일 이내’라는 안내를 찾을 수 있죠. 한국어 검색 품질은 내 분야의 표현과 문서에 따라 달라지므로 실제 자료로 확인해야 해요.

문서를 나누고 텍스트 검색을 시작해요
문서 전체를 한 덩어리로 색인하기보다 FAQ 항목이나 설명서의 한 절처럼 답을 독립적으로 읽을 수 있는 크기로 나눠요. 문서 ID·제목·본문·원문 위치를 함께 저장하면 검색 결과를 다시 열어 근거를 확인할 수 있어요. 표와 코드가 잘려 의미가 사라지지 않도록 문서 형식에 맞춰 나누는 기준을 정해요.
아래 설치 명령은 macOS·Linux의 bash/zsh 기준이에요. Windows PowerShell에서는 가상환경2을 만든 뒤 .\.venv\Scripts\Activate.ps1로 활성화해요. 패키지 설치와 예제 실행도 이 가상환경에서 이어가면 돼요.
텍스트만 검색한다면 이미지·오디오 인코더를 끄고 270M 텍스트 구성을 불러올 수 있어요. 질문에는 SearchQuery, 검색 대상 문서에는 Document 프롬프트3를 사용해요. 제목이 있는 문서는 title: 제목 | text: 내용 형식으로 표현해요. 공식 개발자 안내
python -m venv .venv
source .venv/bin/activate
python -m pip install -U sentence-transformers transformersfrom sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"google/embeddinggemma-2",
config_kwargs={"vision_config": None, "audio_config": None},
)
documents = [
"title: 환불 처리 | text: 결제 취소 후 영업일 기준 5일 이내에 환불됩니다.",
"title: 배송 변경 | text: 주문 준비가 시작되기 전까지 배송지를 바꿀 수 있습니다.",
]
query = "환불은 며칠 안에 되나요?"
doc_vectors = model.encode(documents, prompt_name="Document", normalize_embeddings=True)
query_vector = model.encode(query, prompt_name="SearchQuery", normalize_embeddings=True)
scores = model.similarity(query_vector, doc_vectors)[0]
for index in scores.argsort(descending=True).tolist():
print(f"{scores[index]:.3f}\t{documents[index]}")코드를 search.py로 저장하고 같은 가상환경에서 실행해요. 두 문서의 점수와 본문이 출력되고 환불 안내가 먼저 보이면 첫 검색이 된 거예요. 질문과 정답 문서를 짝지은 실제 자료에서도 상위 결과에 정답이 들어오는지 확인해 문서 분할과 제목 기록을 조정해요.
python search.py텍스트 색인에 멀티모달 질의를 연결해요
EmbeddingGemma 2의 텍스트 문서 벡터와 호환되는 같은 체크포인트4·작업 지시·차원의 이미지 또는 녹음 질의라면 기존 색인을 활용할 수 있어요. Qwen이나 BGE처럼 다른 모델이 만든 벡터를 그대로 섞을 수 있다는 뜻은 아닙니다.
검색할 자료가 사진 설명이나 녹음 파일이면 원본 경로·캡션·녹음 날짜를 메타데이터로 함께 저장하세요. 벡터는 원본 파일을 대신하지 않으므로 결과를 열어 확인할 식별자가 필요해요.
사진과 음성을 텍스트로 검색해요
먼저 작업 폴더에 photos/lake.jpg, photos/street.jpg, recordings/meeting.wav 파일을 준비하거나 아래 코드의 경로를 실제 파일 위치로 바꾸세요. 멀티모달 인코더와 전처리 라이브러리를 설치한 뒤 사진은 image 키, 녹음은 audio 키를 가진 딕셔너리로 encode()에 전달해요. 다음 예제는 설명 문장과 사진 두 장의 벡터를 비교해 점수순으로 정렬해요.
python -m pip install -U sentence-transformers transformers pillow soundfile torchcodecfrom sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
query = model.encode("눈 덮인 산과 호수가 보이는 풍경", prompt_name="SearchQuery")
photos = [{"image": "photos/lake.jpg"}, {"image": "photos/street.jpg"}]
photo_vectors = model.encode(photos)
scores = model.similarity(query, photo_vectors)[0]
print(scores.argsort(descending=True).tolist())녹음은 model.encode({"audio": "recordings/meeting.wav"})처럼 파일 경로를 전달하고 검색 문장과 비교해요. 아래 예제는 회의 녹음과 두 질문의 유사도를 점수순으로 정렬해요. 오디오는 내부에서 16 kHz로 변환돼요. 영상은 기본적으로 초당 1프레임5을 샘플링하므로 더 촘촘한 장면 검색에는 프레임 수를 조정하세요. Google 멀티모달 예제
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
audio = model.encode({"audio": "recordings/meeting.wav"})
queries = [
"회의 일정을 언제로 정했나요?",
"환불은 며칠 안에 되나요?",
]
query_vectors = model.encode(queries, prompt_name="SearchQuery")
scores = model.similarity(audio, query_vectors)[0]
for index in scores.argsort(descending=True).tolist():
print(f"{scores[index]:.3f}\t{queries[index]}")
텍스트 전용과 전체 모달 구성을 구분해요
공식 카드에 따르면 텍스트 전용 선택 로드는 270M, 텍스트·이미지·오디오 인코더를 모두 포함한 구성은 740M이에요. 필요한 입력 유형에 맞춰 인코더를 켜고 끄며, 실제 라이브러리 옵션과 메모리 사용량을 기록하세요.
이전 EmbeddingGemma 소개의 전체 모델 사양을 그대로 검색 경로의 메모리 요구량으로 읽지 마세요. 첫 실행은 가중치를 내려받고, 텍스트만 평가하는 비교에는 공식 text-only 설정을 사용해요.
색인 차원과 라이선스를 정해요
EmbeddingGemma 2의 기본 벡터는 768차원이에요. Sentence Transformers의 truncate_dim으로 512·256·128차원까지 줄이면 색인 저장 공간을 아낄 수 있지만, 검색 품질도 함께 확인해야 해요. Google은 256차원까지 품질이 기본값에 가깝다고 안내하고, 128차원은 텍스트 전용 작업에 권장해요. 질문과 문서는 같은 차원으로 인코딩하고, 자른 뒤에는 다시 정규화하세요.
차원을 바꾸면 저장해 둔 문서 벡터도 새 차원으로 다시 만들어 색인을 갱신해요. 검색 질문과 문서에는 같은 값을 써야 해요. 이 모델은 Apache 2.0 라이선스라 조건에 따라 사용·수정·재배포할 수 있고, 배포할 때는 라이선스와 저작권 고지를 함께 보존해요. 모델 카드와 라이선스
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("google/embeddinggemma-2")
query = "환불은 며칠 안에 되나요?"
document = "title: 환불 처리 | text: 결제 취소 후 영업일 기준 5일 이내에 환불됩니다."
query_vector = model.encode(
query, prompt_name="SearchQuery", truncate_dim=256, normalize_embeddings=True
)
document_vector = model.encode(
document, prompt_name="Document", truncate_dim=256, normalize_embeddings=True
)
print(model.similarity(query_vector, document_vector))검색 질문의 작업 지시와 자료 형식을 맞춰요
텍스트 검색에서 질문에는 task: search result | query: ... 지시를 붙이고, 문서는 title: ... | text: ... 형식으로 넣어요. 이미지·영상·오디오 입력에는 이 텍스트 접두사를 붙이지 않아요. 문서 제목이 없으면 title: none을 사용해요.
공식 Sentence Transformers 예제의 SearchQuery와 Document 작업 이름을 그대로 사용하면 라이브러리가 해당 접두사를 적용해요. 이미 수동으로 접두사를 붙였다면 prompt도 다시 넣어 이중으로 적용하지 않도록 한 경로를 택하세요.
실행 오류와 메모리 문제를 확인해요
ModuleNotFoundError가 나오면 search.py를 실행하는 Python이 패키지를 설치한 가상환경과 같은지 확인해요. python -m pip show sentence-transformers로 설치 여부를 확인하고, 필요하면 환경을 다시 활성화한 뒤 설치 명령을 실행해요.
사진이나 오디오를 열지 못하면 상대 경로가 현재 작업 폴더를 기준으로 맞는지 확인해요. 실제 파일의 절대 경로를 넣으면 경로 문제와 모델 문제를 구분하기 쉽습니다. 메모리가 부족하면 텍스트 전용 구성으로 돌아가거나 다른 앱과 모델을 닫고 다시 실행하세요.

폴더를 증분 갱신하며 색인 크기를 재요
파일 ID·해시·수정 시각을 저장해 변경된 문서와 미디어만 다시 임베딩하고, 삭제 파일의 벡터는 제거합니다. 사진·녹음 폴더라면 캡션과 원본 파일을 연결해 색인이 가리키는 대상이 무엇인지 알 수 있게 해요.
128·256·512·768차원 축소는 원시 벡터 용량을 줄일 수 있지만 품질도 달라질 수 있어요. 같은 질문 집합으로 순위 변화를 확인하고, 원시 배열뿐 아니라 벡터 DB 인덱스와 메타데이터까지 잰 실제 폴더 크기로 저장량을 결정해요.
모달리티별 검색과 원본 검수를 따로 해요
텍스트→이미지, 이미지→텍스트, 오디오→텍스트처럼 실제로 쓸 입력 방향을 나눠 질문을 만들고 정답 파일 ID가 상위 k개에 드는지 기록하세요. 하나의 방향에서 얻은 순위가 다른 modality 조합까지 증명하지 않아요.
정답 문서·사진·녹음의 내용을 열어 실제 근거인지 확인하고, 검색 누락과 파싱·캡션 오류를 구분하세요. 이 가이드는 독자의 파일을 실행한 실측치를 제공하지 않으므로 본인 자료의 정확도·속도·메모리를 각각 측정해야 해요.
용어 각주
대규모 언어 모델 — 대규모 텍스트 데이터에서 언어 패턴을 학습해 문맥에 맞는 텍스트를 처리하고 생성하는 모델입니다.
본문으로 돌아가기Python 가상환경 — 프로젝트별로 Python 패키지를 분리해 설치하는 공간입니다. 패키지 버전 충돌을 줄이는 데 쓰입니다.
본문으로 돌아가기프롬프트 — 모델에 보내는 입력문입니다. 생성 모델에서는 만들 결과를 설명하는 문장이 되어 출력의 구성과 내용을 크게 좌우합니다.
본문으로 돌아가기체크포인트 — 학습된 모델의 가중치 등을 저장한 파일입니다. 같은 모델 계열도 버전이나 용도에 따라 다른 체크포인트를 쓸 수 있습니다.
본문으로 돌아가기프레임 — 영상의 한 장면을 이루는 단일 이미지입니다.
본문으로 돌아가기
자주 묻는 질문
- 이 글에서 가장 먼저 확인할 것은 무엇인가요?
- EmbeddingGemma 2는 텍스트·코드·이미지·영상·오디오를 공통 768차원 임베딩으로 바꾸는 모델이에요. 검색에 쓸 벡터를 만들며, 검색 결과의 요약은 별도 LLM에 맡길 수 있어요.
- 필요한 메모리는 어느 정도인가요?
- 공식 카드에 따르면 텍스트 전용 선택 로드는 270M, 텍스트·이미지·오디오 인코더를 모두 포함한 구성은 740M이에요. 필요한 입력 유형에 맞춰 인코더를 켜고 끄며, 실제 라이브러리 옵션과 메모리 사용량을 기록하세요.
- 조건과 출처는 어디서 확인하나요?
- EmbeddingGemma 2는 문장·코드·이미지·영상·오디오를 검색용 숫자 벡터로 바꾸는 임베딩 모델이에요. 질문에 가까운 문서나 사진, 녹음을 찾아 보여주고, 검색 결과의 요약은 별도 LLM에 맡길 수 있어요. 모든 입력은 공통 768차원 임베딩 공간에 놓여서 글로 사진을 찾거나 설명으로 음성을 비교할 수 있어요. [Google 모델 카드](https://huggingface.co/google/embeddinggemma-2)
