SBERT 활용과 인코딩 API

SBERT 활용과 인코딩 API

SBERT의 활용을 조금 더 깊게 보면, encode() 하나로 텍스트·이미지·오디오·비디오를 모두 다룰 수 있다는 점이 핵심이에요. 특히 검색 시스템에서는 query/document 구분이 중요해서 전용 메서드도 따로 있어요.

출처: Sentence Transformers Usage

문장 인코더(bi-encoder)는 텍스트·이미지·오디오·비디오를 고정 크기 벡터로 만들고, 유사도 계산이 매우 빠른 게 특징이에요. 그래서 보통 2단계 검색의 첫 단계로 쓰이고, Cross-Encoder(reranker)가 상위 결과를 다시 정렬해요.

encode()가 받는 입력은 모델의 멀티모달 지원에 따라 달라져요. 예를 들어 텍스트는 문자열, 이미지는 PIL 이미지·파일 경로·URL·numpy/torch 배열을 받아요. 오디오는 "array""sampling_rate" 키를 가진 dict, 비디오는 "array""video_metadata" 키를 가진 dict로 넘겨요.

멀티모달 모델을 쓰는 예시를 볼게요. Qwen/Qwen3-VL-Embedding-2B 같은 모델은 텍스트와 이미지를 함께 이해해요.

from sentence_transformers import SentenceTransformer

model = SentenceTransformer("Qwen/Qwen3-VL-Embedding-2B")
print(model.modalities)   # 지원하는 모달리티 목록
print(model.supports("audio"))  # True/False

img_embeddings = model.encode([...image URLs...])
text_embeddings = model.encode(["A green car parked in front of a yellow building", ...])
similarities = model.similarity(text_embeddings, img_embeddings)

검색을 만들 때는 encode_query()encode_document()를 권장해요. 많은 임베딩 모델이 query용과 document용 프롬프트를 따로 갖고 있는데, 이 메서드들이 그 프롬프트를 자동으로 처리해 주거든요. encode_query()는 모델의 "query" 프롬프트를 쓰고 task="query"로 두고, encode_document()"document", "passage", "corpus" 중 첫 번째로 있는 프롬프트를 써요. 전용 프롬프트가 없는 모델이라면 encode()와 동일하게 동작해요.

더 알아보기