SentenceTransformersDocumentEmbedder
SentenceTransformersDocumentEmbedder
SentenceTransformersDocumentEmbedder는 문서 목록의 임베딩을 계산해 각 문서의 embedding 필드에 얻은 벡터를 저장해요. Sentence Transformers 라이브러리와 호환되는 임베딩 모델을 사용하죠.
이 컴포넌트가 계산한 벡터는 문서 컬렉션에 대해 임베딩 검색을 수행하는 데 필요해요. 검색 시점에 쿼리를 나타내는 벡터를 문서들의 벡터와 비교해 가장 유사하거나 관련 있는 문서를 찾죠.
출처: 문서
본문
| 항목 | 내용 |
|---|---|
| 파이프라인에서 가장 흔한 위치 | 인덱싱 파이프라인에서 DocumentWriter 앞 |
| 필수 run 변수 | documents: 문서 목록 |
| 출력 변수 | documents: 임베딩으로 풍부해진 문서 목록 |
| API reference | Sentence Transformers |
| GitHub 링크 | sentence_transformers 통합 |
| 패키지 이름 | sentence-transformers-haystack |
개요
SentenceTransformersDocumentEmbedder는 문서 목록을 임베딩할 때 사용해요. 문자열을 임베딩하려면 SentenceTransformersTextEmbedder를 사용하세요.
인증
Hugging Face API 토큰 인증은 Serverless Inference API나 Inference Endpoints를 통해 비공개 또는 게이트 모델에 접근할 때만 필요해요.
컴포넌트는 HF_API_TOKEN 또는 HF_TOKEN 환경 변수를 사용하거나, 초기화 시 Hugging Face API 토큰을 전달할 수 있어요. 자세한 내용은 Secret Management 페이지를 참고하세요.
document_embedder = SentenceTransformersDocumentEmbedder(
token=Secret.from_token("<your-api-key>"),
)
호환 모델
기본 임베딩 모델은 sentence-transformers/all-mpnet-base-v2예요. 컴포넌트 초기화 시 model 파라미터로 다른 모델을 지정할 수 있어요.
원본 모델은 Sentence Transformers 문서에서 볼 수 있어요.
요즘은 Massive Text Embedding Benchmark (MTEB) 리더보드의 대부분 모델이 Sentence Transformers와 호환돼요. 모델 카드에서 호환성을 확인할 수 있어요: BGE 모델 관련 예시.
인스트럭션(instructions)
MTEB에서 찾을 수 있는 일부 최신 모델은 검색 성능을 높이려면 텍스트 앞에 인스트럭션을 붙여야 해요. 예를 들어 intfloat/e5-large-v2를 사용한다면 문서 앞에 다음과 같은 인스트럭션을 접두사로 붙여야 해요: "passage:"
SentenceTransformersDocumentEmbedder에서 이렇게 동작해요:
embedder = SentenceTransformersDocumentEmbedder(
model="intfloat/e5-large-v2",
prefix="passage: ",
)
메타데이터 임베딩
텍스트 문서에는 흔히 메타데이터 세트가 따라와요. 이것들이 독특하고 의미적으로 유의미하다면, 문서 텍스트와 함께 임베딩해 검색을 개선할 수 있어요.
Document Embedder를 사용하면 쉽게 할 수 있어요:
from haystack import Document
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersDocumentEmbedder,
)
doc = Document(content="some text", meta={"title": "relevant title", "page number": 18})
embedder = SentenceTransformersDocumentEmbedder(meta_fields_to_embed=["title"])
docs_w_embeddings = embedder.run(documents=[doc])["documents"]
사용법
SentenceTransformersDocumentEmbedder를 사용하려면 sentence-transformers-haystack 패키지를 설치하세요:
pip install sentence-transformers-haystack
단독으로 사용하기
from haystack import Document
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersDocumentEmbedder,
)
doc = Document(content="I love pizza!")
doc_embedder = SentenceTransformersDocumentEmbedder()
result = doc_embedder.run([doc])
print(result["documents"][0].embedding)
# [-0.07804739475250244, 0.1498992145061493, ...]
파이프라인에서 사용하기
from haystack import Document
from haystack import Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersTextEmbedder,
SentenceTransformersDocumentEmbedder,
)
from haystack.components.writers import DocumentWriter
from haystack.components.retrievers.in_memory import InMemoryEmbeddingRetriever
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
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"),
]
indexing_pipeline = Pipeline()
indexing_pipeline.add_component("embedder", SentenceTransformersDocumentEmbedder())
indexing_pipeline.add_component("writer", DocumentWriter(document_store=document_store))
indexing_pipeline.connect("embedder", "writer")
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component(
"retriever",
InMemoryEmbeddingRetriever(document_store=document_store),
)
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "Who lives in Berlin?"
indexing_pipeline.run({"documents": documents})
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result["retriever"]["documents"][0])
# Document(id=..., content: 'My name is Wolfgang and I live in Berlin', score: ...)