JinaDocumentImageEmbedder

JinaDocumentImageEmbedder

JinaDocumentImageEmbedder는 문서 리스트의 이미지 임베딩을 계산하고 얻은 벡터를 각 문서의 embedding 필드에 저장해요. 텍스트와 이미지를 같은 벡터 공간에 임베딩할 수 있는 Jina 임베딩 모델을 사용해요.

출처: 문서

본문

JinaDocumentImageEmbedder는 meta 필드에 이미지 또는 PDF 파일 경로를 담은 문서 리스트를 기대해요. meta 필드는 이 컴포넌트의 file_path_meta_field init 파라미터로 지정할 수 있어요. 임베더가 이미지를 효율적으로 로드하고 Jina 모델로 임베딩을 계산해 각 임베딩을 문서의 embedding 필드에 저장해요.

JinaDocumentImageEmbedder는 인덱싱 파이프라인에서 흔히 쓰여요. 검색 시점에는 Embedding Retriever를 사용하기 전에 JinaTextEmbedder로 같은 모델을 사용해 쿼리를 임베딩해야 해요.

이 컴포넌트는 Jina 멀티모달 임베딩 모델과 호환돼요:

  • jina-clip-v1
  • jina-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_KEY env 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개 컴포넌트가 있는 인덱싱 파이프라인을 볼 수 있어요:

  • ImageFileToDocument Converter — 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