QdrantSparseEmbeddingRetriever

QdrantSparseEmbeddingRetriever

희소 임베딩 기반의, Qdrant Document Store와 호환되는 Retriever예요.

출처: 문서

본문

항목 내용
파이프라인에서 가장 흔한 위치 1. RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞 2. 시맨틱 검색 파이프라인의 마지막 컴포넌트 3. 추출형 QA 파이프라인에서 Text Embedder 다음, TransformersExtractiveReader 앞
필수 init 변수 document_store: QdrantDocumentStore 인스턴스
필수 run 변수 query_sparse_embedding: 쿼리의 벡터 표현을 담은 SparseEmbedding 객체
출력 변수 documents: 문서 목록
API reference Qdrant
GitHub 링크 qdrant 통합
패키지 이름 qdrant-haystack

개요

QdrantSparseEmbeddingRetriever는 QdrantDocumentStore와 호환되는 희소 임베딩 기반 Retriever예요.

쿼리와 문서의 희소 임베딩을 비교하고, 결과에 따라 QdrantDocumentStore에서 쿼리에 가장 관련 있는 문서를 가져와요.

QdrantSparseEmbeddingRetriever를 사용할 때는 쿼리와 문서의 희소 임베딩이 준비되어 있어야 해요. 인덱싱 파이프라인에 희소 문서 Embedder를, 쿼리 파이프라인에 희소 텍스트 Embedder를 추가하면 되죠.

query_sparse_embedding 외에도 QdrantSparseEmbeddingRetriever는 top_k(가져올 최대 문서 수)와 filters(검색 공간을 좁히기) 같은 선택적 파라미터를 받아요.

희소 임베딩 지원: 희소 임베딩 지원을 사용하려면 QdrantDocumentStore를 use_sparse_embeddings=True로 초기화해야 해요. 기본값은 False예요.

이 기능을 비활성화한 상태로 이전에 만든 Document Store나 컬렉션을 사용하고 싶다면 기존 데이터를 마이그레이션해야 해요. migrate_to_sparse_embeddings_support 유틸리티 함수를 활용하면 됩니다.

설치

Qdrant를 Haystack에서 사용하려면 먼저 패키지를 설치하세요:

pip install qdrant-haystack

사용법

단독으로 사용하기

이 Retriever는 동작하려면 QdrantDocumentStore와 인덱싱된 문서가 필요해요.

from haystack_integrations.components.retrievers.qdrant import (
    QdrantSparseEmbeddingRetriever,
)
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack.dataclasses import Document, SparseEmbedding

document_store = QdrantDocumentStore(
    ":memory:",
    use_sparse_embeddings=True,
    recreate_index=True,
    return_embedding=True,
)

doc = Document(
    content="test",
    sparse_embedding=SparseEmbedding(indices=[0, 3, 5], values=[0.1, 0.5, 0.12]),
)
document_store.write_documents([doc])

retriever = QdrantSparseEmbeddingRetriever(document_store=document_store)
sparse_embedding = SparseEmbedding(indices=[0, 1, 2, 3], values=[0.1, 0.8, 0.05, 0.33])
retriever.run(query_sparse_embedding=sparse_embedding)

파이프라인에서 사용하기

Haystack에서는 Fastembed Embedder로 희소 임베딩을 계산할 수 있어요.

먼저 패키지를 설치하세요:

pip install fastembed-haystack

그런 다음 이 파이프라인을 시도해 보세요:

from haystack import Document, Pipeline
from haystack.components.writers import DocumentWriter
from haystack_integrations.components.retrievers.qdrant import (
    QdrantSparseEmbeddingRetriever,
)
from haystack_integrations.document_stores.qdrant import QdrantDocumentStore
from haystack.document_stores.types import DuplicatePolicy
from haystack_integrations.components.embedders.fastembed import (
    FastembedSparseDocumentEmbedder,
    FastembedSparseTextEmbedder,
)

document_store = QdrantDocumentStore(
    ":memory:",
    recreate_index=True,
    use_sparse_embeddings=True,
)

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"),
    Document(content="fastembed is supported by and maintained by Qdrant."),
]

sparse_document_embedder = FastembedSparseDocumentEmbedder()
writer = DocumentWriter(document_store=document_store, policy=DuplicatePolicy.OVERWRITE)

indexing_pipeline = Pipeline()
indexing_pipeline.add_component("sparse_document_embedder", sparse_document_embedder)
indexing_pipeline.add_component("writer", writer)
indexing_pipeline.connect("sparse_document_embedder", "writer")
indexing_pipeline.run({"sparse_document_embedder": {"documents": documents}})

query_pipeline = Pipeline()
query_pipeline.add_component("sparse_text_embedder", FastembedSparseTextEmbedder())
query_pipeline.add_component(
    "sparse_retriever",
    QdrantSparseEmbeddingRetriever(document_store=document_store),
)
query_pipeline.connect(
    "sparse_text_embedder.sparse_embedding",
    "sparse_retriever.query_sparse_embedding",
)

query = "Who supports fastembed?"
result = query_pipeline.run({"sparse_text_embedder": {"text": query}})
print(result["sparse_retriever"]["documents"][0])  # noqa: T201
# Document(id=...,
#  content: 'fastembed is supported by and maintained by Qdrant.',
#  score: 24.882490158081055)

추가 참고 자료

더 알아보기 (Learn more)