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