OptimumDocumentEmbedder

OptimumDocumentEmbedder

Hugging Face Optimum 라이브러리로 로드한 모델을 사용해 문서의 임베딩을 계산하는 컴포넌트예요.

출처: 문서

본문

OptimumDocumentEmbedder는 HuggingFace Optimum 라이브러리로 로드한 모델로 텍스트 문자열을 임베딩해요. 고속 추론을 위해 ONNX runtime을 사용하죠.

기본 모델은 sentence-transformers/all-mpnet-base-v2예요.

다른 임베더와 마찬가지로 이 컴포넌트는 지시사항을 포함하기 위해 접두사(와 접미사)를 추가할 수 있어요. 자세한 내용은 컴포넌트의 API 참조를 확인하세요.

다양한 모드로 제어할 수 있는 Optimum Embedder 특유의 유용한 파라미터가 세 가지 있어요.

  • Pooling: 가변 크기의 문장 임베딩에서 고정 크기의 문장 임베딩을 생성해요.
  • Optimization: 모델에 그래프 최적화를 적용하고 추론 속도를 높여요.
  • Quantization: 계산 및 메모리 비용을 줄여요.

사용 가능한 모든 모드의 세부 내용은 Optimum API 참조에서 확인할 수 있어요.

인증

Hugging Face API 토큰 인증은 Serverless Inference API나 Inference Endpoints를 통해 비공개 또는 gated 모델에 접근할 때만 필요해요.

이 컴포넌트는 HF_API_TOKEN 또는 HF_TOKEN 환경 변수를 사용하고, 초기화할 때 Hugging Face API 토큰을 넘길 수도 있어요. 자세한 내용은 Secret Management 페이지를 참고하세요.

더 알아보기 (Learn more)

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",
)

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

# [0.017020374536514282, -0.023255806416273117, ...]

파이프라인에서 쓰기

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)

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

print(results["embedder"]["documents"][0].embedding)