TextEmbeddingRetriever

TextEmbeddingRetriever

TextEmbeddingRetriever 는 임베딩 기반 리트리버를 텍스트 임베더와 함께 하나의 컴포넌트로 묶어, 텍스트 질의를 그대로 받는 리트리버예요. 내부적으로 질의를 임베딩으로 변환한 뒤 문서를 관련성 점수 순으로 반환해요.

출처: 문서

본문

개요 (Overview)

TextEmbeddingRetriever 는 텍스트 임베더와 임베딩 기반 리트리버를 단일 컴포넌트로 묶어요. 일반 텍스트 질의를 받아 내부에서 임베딩으로 변환하고, 관련성 점수 순으로 정렬된 문서를 반환해요.

임베딩 기반 리트리버가 들어갈 자리라면 어디든 쓸 수 있어요: RAG 파이프라인에서 프롬프트 빌더 앞, 의미 검색 파이프라인의 마지막 컴포넌트, 또는 MultiRetriever 안의 드롭인 리트리버로요.

사용법 (Usage)

단독으로 쓰기

이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요:

pip install sentence-transformers-haystack
from haystack import Document
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.sentence_transformers import (
    SentenceTransformersDocumentEmbedder,
    SentenceTransformersTextEmbedder,
)
from haystack.components.retrievers import (
    InMemoryEmbeddingRetriever,
    TextEmbeddingRetriever,
)
from haystack.components.writers import DocumentWriter

documents = [
    Document(
        content="Renewable energy is energy that is collected from renewable resources.",
    ),
    Document(
        content="Solar energy is a type of green energy that is harnessed from the sun.",
    ),
    Document(
        content="Wind energy is another type of green energy that is generated by wind turbines.",
    ),
    Document(
        content="Geothermal energy is heat that comes from the sub-surface of the earth.",
    ),
]

doc_store = InMemoryDocumentStore()
doc_embedder = SentenceTransformersDocumentEmbedder(
    model="sentence-transformers/all-MiniLM-L6-v2",
)
doc_writer = DocumentWriter(document_store=doc_store, policy=DuplicatePolicy.SKIP)
doc_writer.run(documents=doc_embedder.run(documents)["documents"])

retriever = TextEmbeddingRetriever(
    retriever=InMemoryEmbeddingRetriever(document_store=doc_store, top_k=2),
    text_embedder=SentenceTransformersTextEmbedder(
        model="sentence-transformers/all-MiniLM-L6-v2",
    ),
)
result = retriever.run(query="Geothermal energy")
for doc in result["documents"]:
    print(f"Content: {doc.content}, Score: {doc.score}")

MultiRetriever의 일부로 쓰기

TextEmbeddingRetriever 는 대부분 MultiRetriever 안의 리트리버 중 하나로 쓰여요:

from haystack_integrations.components.embedders.sentence_transformers import (
    SentenceTransformersTextEmbedder,
)
from haystack.components.retrievers import (
    InMemoryBM25Retriever,
    InMemoryEmbeddingRetriever,
)
from haystack.components.retrievers import MultiRetriever, TextEmbeddingRetriever

retriever = MultiRetriever(
    retrievers={
        "bm25": InMemoryBM25Retriever(document_store=doc_store),
        "embedding": TextEmbeddingRetriever(
            retriever=InMemoryEmbeddingRetriever(document_store=doc_store),
            text_embedder=SentenceTransformersTextEmbedder(
                model="sentence-transformers/all-MiniLM-L6-v2",
            ),
        ),
    },
)

더 알아보기 (Learn more)