JinaDocumentImageEmbedder
JinaDocumentImageEmbedder 计算文档列表中图像的图像嵌入,并将获得的向量存储在每个文档的 embedding 字段中。它使用 Jina 嵌入模型,这些模型能够将文本和图像嵌入到同一个向量空间中。
| pipeline 中的最常见位置 | 在索引管道中的 DocumentWriter 之前 |
| 必需的初始化变量 | "api_key": Jina API 密钥。可以通过 JINA_API_KEY 环境变量设置。 |
| 强制运行变量 | "documents": 文档列表,其中包含一个包含图像文件路径的 meta 字段 |
| 输出变量 | "documents": 文档列表(已添加 embedding) |
| API 参考 | Jina |
| GitHub 链接 | https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/jina |
概述
JinaDocumentImageEmbedder 期望一个文档列表,其中包含 meta 字段中的图像或 PDF 文件路径。meta 字段可以通过此组件的file_path_meta_field 初始化参数指定。
嵌入器高效地加载图像,使用 Jina 模型计算嵌入,并将每个嵌入存储在文档的embedding 字段中。
JinaDocumentImageEmbedder 通常用于索引管道。在检索时,您需要在嵌入检索器之前,使用具有相同模型的 JinaTextEmbedder 来嵌入查询。
此组件兼容 Jina 多模态嵌入模型
jina-clip-v1jina-clip-v2(默认)jina-embeddings-v4(仅限非商业研究)
安装
要开始使用此集成与 Haystack,请使用以下命令安装软件包:
pip install jina-haystack
身份验证
该组件默认使用默认情况下,通过 JINA_API_KEY 环境变量。否则,您可以在初始化时使用 Secret 和 Secret.from_token 方法传递 API 密钥
embedder = JinaDocumentImageEmbedder(api_key=Secret.from_token("<your-api-key>"))
要获取 Cohere API 密钥,请访问 https://jina.ai/embeddings/。
用法
单独使用
请记住,首先将 JINA_API_KEY 设置为环境变量。
from haystack import Document
from haystack_integrations.components.embedders.jina import JinaDocumentImageEmbedder
embedder = JinaDocumentImageEmbedder(model="jina-clip-v2")
embedder.warm_up()
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),
# ...]
在 pipeline 中
在此示例中,我们可以看到一个包含 3 个组件的索引管道
ImageFileToDocument转换器,它创建空文档,并在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)
# {
# 'retriever': {
# 'documents': [
# Document(
# id=0c96...,
# meta={
# 'file_path': 'dog.jpg',
# 'embedding_source': {
# 'type': 'image',
# 'file_path_meta_field': 'file_path'
# }
# },
# score=0.246
# ),
# Document(
# id=5e76...,
# meta={
# 'file_path': 'cat.jpg',
# 'embedding_source': {
# 'type': 'image',
# 'file_path_meta_field': 'file_path'
# }
# },
# score=0.199
# )
# ]
# }
# }
其他参考资料
更新于 25 天前
