글, 사진, 오디오처럼 형식이 다른 데이터를 같은 벡터 공간의 숫자 목록(벡터)으로 바꿔, 의미가 비슷하면 형식이 달라도 가까이 놓이게 하는 기술이다. 글로 사진을 찾거나 사진으로 비슷한 상품·설명을 찾는 형식을 넘나드는 검색에 쓴다.
| 종류 | 넣는 것 | 가능한 검색 |
|---|---|---|
| 텍스트 임베딩 | 글 | 글로 글 찾기 |
| 이미지 임베딩 | 사진 | 사진으로 사진 찾기 |
| 멀티모달 임베딩 | 글·사진 (모델에 따라 오디오·영상) | 글↔사진 교차 검색 |
OpenAI의 CLIP이 이 분야를 열었다. 이미지와 설명 문장 쌍을 대량으로 보면서, 짝이 맞는 쌍은 가깝게, 맞지 않는 쌍은 멀게 놓이도록 학습했다. 그래서 "강아지 사진"이라는 글과 실제 강아지 사진이 벡터 공간에서 가까이 있다.
덕분에 따로 학습하지 않아도 분류가 된다. 이미지 하나를 "고양이", "강아지", "자동차" 같은 문장들과 비교해 가장 가까운 문장을 고르면 그게 분류 결과다.
직접 만들 때는 Hugging Face Transformers의 CLIP 모델을 쓰거나 Google Vertex AI 멀티모달 임베딩 API 같은 관리형 서비스를 쓴다. Weaviate 같은 벡터 DB는 CLIP 모듈을 연결해 데이터를 저장할 때 임베딩을 자동으로 만들게 할 수도 있다.
| 순서 | 할 일 |
|---|---|
| 1. 저장 | 상품 사진·문서 이미지를 임베딩해 벡터 DB에 넣는다 |
| 2. 질의 | 사용자가 입력한 글이나 올린 사진을 같은 모델로 임베딩한다 |
| 3. 검색 | 코사인 유사도로 가장 가까운 벡터를 찾는다 |
| 4. 활용 | 찾은 원본을 보여주거나 LLM에 넘긴다 |
쇼핑몰의 "사진으로 검색", "바닷가 노을" 같은 말로 사진첩 뒤지기, 이미지가 섞인 문서를 다루는 RAG에서 그림·도표까지 검색하고 싶을 때 쓴다. 검색 대상이 전부 글이라면 일반 텍스트 임베딩이 더 싸고 글 검색 품질도 대체로 낫다.
| 상황 | 선택 |
|---|---|
| 사진으로 비슷한 상품 찾기 | 멀티모달 임베딩 |
| 문서 속 도표까지 RAG 검색 | 멀티모달 임베딩, 또는 이미지를 글로 설명한 뒤 텍스트 임베딩 |
| 글만 있는 문서 검색 | 텍스트 임베딩 |
벡터는 그것을 만든 모델 안에서만 의미가 있다. 저장할 때와 검색할 때 같은 모델을 써야 하고, 모델을 바꾸면 저장된 데이터를 전부 다시 임베딩해야 한다.
CLIP 계열은 전체 의미는 잘 잡지만 이미지 속 작은 글자 읽기, 개수 세기, 세밀한 차이 구분에는 약한 편이다. 영어 위주로 학습된 모델도 많아서, 한국어로 검색해야 한다면 다국어를 지원하는 모델인지 먼저 확인한다.
가장 흔한 건 사진이 쌓인 곳에 글·사진 검색을 붙이는 방식이다. 이미지는 미리 임베딩해 벡터 DB에 넣어 두고, 사용자의 질의만 그때그때 같은 모델로 임베딩해 가까운 것을 찾는다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 쇼핑몰 검색 | 사용자가 올린 사진이나 "빨간 운동화" 같은 말로 비슷한 상품을 찾아 보여준다 |
| 사진첩·이미지 보관함 | 태그를 달지 않아도 "바닷가 노을"처럼 장면을 말로 적어 사진을 찾는다 |
| 문서 RAG | 보고서 속 그림·도표까지 임베딩해 두고, 질문과 가까운 페이지를 찾아 LLM에 넘긴다 |
| 이미지 분류 | 따로 학습하지 않고 이미지를 분류 이름 문장들과 비교해 가장 가까운 것으로 나눈다 |