Chroma 멀티모달 임베딩 — 이미지와 텍스트 함께 검색

Chroma 멀티모달 임베딩 — 이미지와 텍스트 함께 검색

Chroma의 멀티모달 컬렉션은 여러 모달리티(multi-modal)의 데이터를 저장하고 검색할 수 있는 컬렉션이에요. 현재 멀티모달 지원은 Python에서만 가능하고, JavaScript/TypeScript는 준비 중입니다.

출처: https://docs.trychroma.com/docs/embeddings/multimodal

멀티모달 임베딩 함수

Chroma는 OpenCLIP 임베딩 함수를 기본 제공하는데, 텍스트와 이미지 양쪽을 하나의 임베딩 공간으로 표현할 수 있어요.

from chromadb.utils.embedding_functions import OpenCLIPEmbeddingFunction
embedding_function = OpenCLIPEmbeddingFunction()

멀티모달 데이터 추가

이미지처럼 텍스트가 아닌 모달리티의 임베딩도 컬렉션에 직접 추가할 수 있어요. 텍스트 문서와 달리 원본 이미지는 저장하지 않습니다. 대신 각 레코드의 URI데이터 로더(data loader) 를 지정하면, Chroma가 로더로 원본을 읽어 임베딩하고 저장합니다. 이미지 로더 ImageLoader를 쓰는 예시예요.

import chromadb
from chromadb.utils.data_loaders import ImageLoader
from chromadb.utils.embedding_functions import OpenCLIPEmbeddingFunction

client = chromadb.Client()

data_loader = ImageLoader()
embedding_function = OpenCLIPEmbeddingFunction()

collection = client.create_collection(
    name='multimodal_collection',
    embedding_function=embedding_function,
    data_loader=data_loader
)

이제 .add로 URI를 넘기면 컬렉션의 로더가 이미지를 가져와 임베딩하고 저장해요.

collection.add(
    ids=["id1", "id2"],
    uris=["path/to/file/1", "path/to/file/2"]
)

임베딩 함수가 OpenCLIPEmbeddingFunction처럼 멀티모달이라면 텍스트도 같은 컬렉션에 넣을 수 있습니다.

collection.add(
    ids=["id3", "id4"],
    documents=["This is a document", "This is another document"]
)

쿼리

멀티모달 컬렉션은 임베딩 함수가 지원하는 모든 모달리티로 질의할 수 있어요. 이미지로 검색하든 텍스트로 검색하든, 같은 임베딩 공간 기준의 유사도 검색이라 결과가 자연스럽게 섞여 나옵니다.

더 알아보기