文档API 参考📓 教程🧑‍🍳 食谱🤝 集成💜 Discord🎨 Studio
API 参考

Embedders (嵌入器)

为文档添加基于图像的嵌入。

模块 haystack_experimental.components.embedders.image.sentence_transformers_doc_image_embedder

SentenceTransformersDocumentImageEmbedder

一个组件,用于使用 Sentence Transformers 模型根据图像计算文档嵌入。

每个 Document 的嵌入存储在Document 的 embedding 字段中。

使用示例

from haystack import Document
from haystack_experimental.components.embedders.image import SentenceTransformersDocumentImageEmbedder

embedder = SentenceTransformersDocumentImageEmbedder(model="sentence-transformers/clip-ViT-B-32")
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 512),
#  ...]

SentenceTransformersDocumentImageEmbedder.__init__

def __init__(*,
             file_path_meta_field: str = "file_path",
             root_path: Optional[str] = None,
             model: str = "sentence-transformers/clip-ViT-B-32",
             device: Optional[ComponentDevice] = None,
             token: Optional[Secret] = Secret.from_env_var(
                 ["HF_API_TOKEN", "HF_TOKEN"], strict=False),
             batch_size: int = 32,
             progress_bar: bool = True,
             normalize_embeddings: bool = False,
             trust_remote_code: bool = False,
             local_files_only: bool = False,
             model_kwargs: Optional[Dict[str, Any]] = None,
             tokenizer_kwargs: Optional[Dict[str, Any]] = None,
             config_kwargs: Optional[Dict[str, Any]] = None,
             precision: Literal["float32", "int8", "uint8", "binary",
                                "ubinary"] = "float32",
             encode_kwargs: Optional[Dict[str, Any]] = None,
             backend: Literal["torch", "onnx", "openvino"] = "torch") -> None

创建一个 SentenceTransformersDocumentEmbedder 组件。

参数:

  • file_path_meta_field: Document 中包含图像或 PDF 文件路径的元数据字段。
  • root_path: 存储文档文件的根目录路径。如果提供,文档元数据中的文件路径将相对于此路径解析。如果为 None,则文件路径被视为绝对路径。
  • model: 用于计算嵌入的 Sentence Transformers 模型。可以传递本地路径或 Hugging Face 上的模型 ID。为了与此组件兼容,模型必须能够将图像和文本嵌入到同一个向量空间。兼容模型包括:
  • "sentence-transformers/clip-ViT-B-32"
  • "sentence-transformers/clip-ViT-L-14"
  • "sentence-transformers/clip-ViT-B-16"
  • "sentence-transformers/clip-ViT-B-32-multilingual-v1"
  • "jinaai/jina-embeddings-v4"
  • "jinaai/jina-clip-v1"
  • "jinaai/jina-clip-v2"。
  • device: 用于加载模型的设备。覆盖默认设备。
  • token: 用于从 Hugging Face 下载私有模型的 API 令牌。
  • batch_size:一次嵌入的文档数量。
  • progress_bar: 如果True,在嵌入文档时显示进度条。
  • normalize_embeddings: 如果为True,则使用 L2 范数对嵌入进行归一化,使每个嵌入的范数为 1。
  • trust_remote_code: 如果为False,则只允许 Hugging Face 经过验证的模型架构。如果为True,则允许自定义模型和脚本。
  • local_files_only: 如果为True,则不尝试从 Hugging Face Hub 下载模型,只查找本地文件。
  • model_kwargs: 加载模型时传递给AutoModelForSequenceClassification.from_pretrained 的额外关键字参数。有关可用 kwargs,请参阅特定模型的文档。
  • tokenizer_kwargs: 加载分词器时传递给AutoTokenizer.from_pretrained 的额外关键字参数。有关可用 kwargs,请参阅特定模型的文档。
  • config_kwargs: 加载模型配置时传递给AutoConfig.from_pretrained 的额外关键字参数。
  • precision: 用于嵌入的精度。所有非 float32 的精度都经过量化。量化后的嵌入体积更小,计算速度更快,但准确性可能较低。它们对于减小语料库嵌入的尺寸以用于语义搜索等任务非常有用。
  • encode_kwargs: 在嵌入文档时传递给SentenceTransformer.encode 的额外关键字参数。此参数用于进行精细定制。请注意不要与已设置的参数冲突,并避免传递会改变输出类型的参数。
  • backend: 用于 Sentence Transformers 模型的后端。选择 "torch"、"onnx" 或 "openvino"。有关加速和量化选项的更多信息,请参阅 Sentence Transformers 文档

SentenceTransformersDocumentImageEmbedder.to_dict

def to_dict() -> Dict[str, Any]

将组件序列化为字典。

返回值:

包含序列化数据的字典。

SentenceTransformersDocumentImageEmbedder.from_dict

@classmethod
def from_dict(
        cls, data: Dict[str,
                        Any]) -> "SentenceTransformersDocumentImageEmbedder"

从字典反序列化组件。

参数:

  • data: 要反序列化的字典。

返回值:

反序列化后的组件。

SentenceTransformersDocumentImageEmbedder.warm_up

def warm_up() -> None

Initializes the component.

SentenceTransformersDocumentImageEmbedder.run

@component.output_types(documents=List[Document])
def run(documents: List[Document]) -> Dict[str, List[Document]]

嵌入文档列表。

参数:

  • documents: 要嵌入的 Documents。

返回值:

包含以下键的字典

  • documents: 带有嵌入的 Documents。