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)