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

OptimumDocumentEmbedder

使用 Hugging Face Optimum 库加载的模型计算文档嵌入的组件。

pipeline 中的最常见位置在索引管道中的 DocumentWriter  之前
强制运行变量“documents”:文档列表
输出变量“documents”: 一份包含嵌入的文档列表
API 参考Optimum
GitHub 链接https://github.com/deepset-ai/haystack-core-integrations/tree/main/integrations/optimum

概述

OptimumDocumentEmbedder 使用 HuggingFace Optimum 库加载的模型嵌入文本字符串。它使用 ONNX Runtime 进行高速推理。

默认模型为sentence-transformers/all-mpnet-base-v2.

与其他 Embedder 类似,此组件允许添加前缀(和后缀)以包含说明。有关更多详细信息,请参阅组件的 API 参考。

Optimum Embedder 有三个有用的特定参数,您可以通过各种模式进行控制

  • Pooling:从可变长度的句子嵌入生成固定大小的句子嵌入
  • Optimization:对模型应用图优化并提高推理速度
  • Quantization:降低计算和内存成本

在我们的 Optimum API 参考中查找所有可用的模式详细信息。

身份验证

只有在通过 Serverless Inference API 或 Inference Endpoints 访问私有或受限模型时,才需要使用 Hugging Face API Token 进行身份验证。

该组件使用HF_API_TOKENHF_TOKEN 环境变量,或者您可以在初始化时传递 Hugging Face API Token。有关更多信息,请参阅我们的 Secret Management 页面。

用法

要开始将此集成与 Haystack 一起使用,请使用以下命令安装它:

pip install optimum-haystack

单独使用

from haystack.dataclasses import Document
from haystack_integrations.components.embedders.optimum import OptimumDocumentEmbedder

doc = Document(content="I love pizza!")

document_embedder = OptimumDocumentEmbedder(model="sentence-transformers/all-mpnet-base-v2")
document_embedder.warm_up()

result = document_embedder.run([doc])
print(result["documents"][0].embedding)

# [0.017020374536514282, -0.023255806416273117, ...]

在 pipeline 中

from haystack import Pipeline
from haystack import Document
from haystack_integrations.components.embedders.optimum import (
    OptimumDocumentEmbedder,
    OptimumEmbedderPooling,
    OptimumEmbedderOptimizationConfig,
    OptimumEmbedderOptimizationMode,
)

documents = [
    Document(content="My name is Wolfgang and I live in Berlin"),
    Document(content="I saw a black horse running"),
    Document(content="Germany has many big cities"),
]

embedder = OptimumDocumentEmbedder(
    model="intfloat/e5-base-v2",
    normalize_embeddings=True,
    onnx_execution_provider="CUDAExecutionProvider",
    optimizer_settings=OptimumEmbedderOptimizationConfig(
        mode=OptimumEmbedderOptimizationMode.O4,
        for_gpu=True,
    ),
    working_dir="/tmp/optimum",
    pooling_mode=OptimumEmbedderPooling.MEAN,
)

pipeline = Pipeline()
pipeline.add_component("embedder", embedder)

pipeline.run({"embedder": {"documents": documents}})

print(results["embedder"]["embedding"])

相关链接

请查看 GitHub 仓库或我们的文档中的 API 参考