Fusion Embedding 2

Fusion Embedding 2 (fusion-embedding-2)

Fusion Embedding 2는 Eximius Labs가 만든 오픈 웨이트 멀티모달 임베딩 모델이에요. 텍스트, 이미지, 비디오, 오디오를 하나의 공유 벡터 공간으로 매핑해서, 서로 다른 타입의 콘텐츠를 직접 비교할 수 있게 해 줘요. 모델은 여러분의 하드웨어에서 돌아가고, 가중치는 Hugging Face에 공개되어 있어요.

출처: Qdrant 공식 문서 — fusion-embedding-2

이 글에서는 Fusion Embedding 2로 텍스트 벡터를 만들고 Python SDK로 Qdrant에 인덱싱하는 과정을 살펴볼게요. 가벼운 텍스트 인코더는 베이스와 훈련된 텍스트 헤드만 불러오기 때문에, 오디오 타워(audio tower)는 가져오지 않아요.

의존성 설치

$ pip install "git+https://github.com/Eximius-Labs/fusion-embedding" qdrant-client

모델 불러오기

from fusion_embedding import FusionTextEmbedder
from qdrant_client import QdrantClient

model = FusionTextEmbedder.from_pretrained(
    "EximiusLabs/fusion-embedding-2-2b-preview"
)
client = QdrantClient(url="http://localhost:6333/")

데이터 인코딩하기

texts = [
    "a dog running on the beach",
    "a slow piano melody",
    "a red bicycle leaning on a wall",
]

embeddings = model.encode(texts)  # numpy array of shape [len(texts), dim]

컬렉션 만들고 벡터 upsert 하기

from qdrant_client.models import VectorParams, Distance, PointStruct

collection_name = "fusion_embedding_2"

client.create_collection(
    collection_name,
    vectors_config=VectorParams(
        size=embeddings.shape[1],
        distance=Distance.COSINE,
    ),
)

client.upsert(
    collection_name,
    points=[
        PointStruct(
            id=idx,
            vector=vector.tolist(),
            payload={"text": texts[idx]},
        )
        for idx, vector in enumerate(embeddings)
    ],
)

검색하기

query = model.encode("something to ride")  # a single string returns one vector
client.query_points(
    collection_name=collection_name,
    query=query.tolist(),
)

더 알아보기 (Learn more)