JinaDocumentImageEmbedder
JinaDocumentImageEmbedder
JinaDocumentImageEmbedder는 문서 리스트의 이미지 임베딩을 계산하고 얻은 벡터를 각 문서의 embedding 필드에 저장해요. 텍스트와 이미지를 같은 벡터 공간에 임베딩할 수 있는 Jina 임베딩 모델을 사용해요.
출처: 문서
본문
JinaDocumentImageEmbedder는 meta 필드에 이미지 또는 PDF 파일 경로를 담은 문서 리스트를 기대해요. meta 필드는 이 컴포넌트의 file_path_meta_field init 파라미터로 지정할 수 있어요. 임베더가 이미지를 효율적으로 로드하고 Jina 모델로 임베딩을 계산해 각 임베딩을 문서의 embedding 필드에 저장해요.
JinaDocumentImageEmbedder는 인덱싱 파이프라인에서 흔히 쓰여요. 검색 시점에는 Embedding Retriever를 사용하기 전에 JinaTextEmbedder로 같은 모델을 사용해 쿼리를 임베딩해야 해요.
이 컴포넌트는 Jina 멀티모달 임베딩 모델과 호환돼요:
jina-clip-v1jina-clip-v2(기본값)jina-embeddings-v4(비상업 연구 전용)
Installation
pip install jina-haystack
Authentication
컴포넌트는 기본적으로 JINA_API_KEY 환경 변수를 사용해요. 그렇지 않으면 Secret과 Secret.from_token 메서드로 API 키를 전달할 수 있어요:
embedder = JinaDocumentImageEmbedder(api_key=Secret.from_token("<your-api-key>"))
Jina API 키를 얻으려면 https://jina.ai/embeddings/로 가세요.
- 대표적인 파이프라인 위치: 인덱싱 파이프라인에서
DocumentWriter앞 - 필수 init 변수:
api_key— Jina API 키.JINA_API_KEYenv var로 설정 가능. - 필수 run 변수:
documents— meta 필드에 이미지 파일 경로를 담은 문서 리스트 - 출력 변수:
documents— 임베딩으로 풍부해진 문서 리스트 - API reference: Jina
- 패키지명:
jina-haystack
Usage
On its own
먼저 JINA_API_KEY를 환경 변수로 설정하는 것을 기억하세요.
from haystack import Document
from haystack_integrations.components.embedders.jina import JinaDocumentImageEmbedder
embedder = JinaDocumentImageEmbedder(model="jina-clip-v2")
documents = [
Document(content="A photo of a cat", meta={"file_path": "cat.jpg"}),
Document(content="A photo of a dog", meta={"file_path": "dog.jpg"}),
]
result = embedder.run(documents=documents)
documents_with_embeddings = result["documents"]
print(documents_with_embeddings)
# [Document(id=...,
# content='A photo of a cat',
# meta={'file_path': 'cat.jpg',
# 'embedding_source': {'type': 'image', 'file_path_meta_field': 'file_path'}},
# embedding=vector of size 1024),
# ...]
In a pipeline
이 예시에서 3개 컴포넌트가 있는 인덱싱 파이프라인을 볼 수 있어요:
ImageFileToDocumentConverter —meta.file_path필드에 이미지 참조가 있는 빈 문서 생성.JinaDocumentImageEmbedder— 이미지를 로드하고 임베딩을 계산해 문서에 저장. 여기서image_size파라미터를 설정해 가로세로 비율을 유지하면서 지정된 크기에 맞게 이미지를 리사이즈해요. 이렇게 하면 API 사용량이 줄어들어요.DocumentWriter—InMemoryDocumentStore에 문서 저장.
JinaTextEmbedder(이전과 같은 모델 사용)와 InMemoryEmbeddingRetriever로 구성된 멀티모달 검색 파이프라인도 있어요.
from haystack import Pipeline
from haystack.components.converters.image import ImageFileToDocument
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
from haystack.components.writers import DocumentWriter
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.embedders.jina import (
JinaDocumentImageEmbedder,
JinaTextEmbedder,
)
document_store = InMemoryDocumentStore()
# Indexing pipeline
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("image_converter", ImageFileToDocument())
indexing_pipeline.add_component(
"embedder",
JinaDocumentImageEmbedder(model="jina-clip-v2", image_size=(200, 200)),
)
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("image_converter", "embedder")
indexing_pipeline.connect("embedder", "writer")
indexing_pipeline.run(data={"image_converter": {"sources": ["dog.jpg", "cat.jpg"]}})
# Multimodal retrieval pipeline
retrieval_pipeline = Pipeline()
retrieval_pipeline.add_component("embedder", JinaTextEmbedder(model="jina-clip-v2"))
retrieval_pipeline.add_component(
"retriever",
InMemoryEmbeddingRetriever(document_store=document_store, top_k=2),
)
retrieval_pipeline.connect("embedder.embedding", "retriever.query_embedding")
result = retrieval_pipeline.run(data={"text": "man's best friend"})
print(result)
더 알아보기 (Learn more)
📓 Tutorial: Creating Vision+Text RAG Pipelines