PineconeEmbeddingRetriever
PineconeEmbeddingRetriever
Pinecone Document Store와 호환되는 임베딩 기반 Retriever예요. 쿼리와 문서 임베딩을 비교해 관련성이 가장 높은 문서를 가져오죠.
출처: 문서
본문
| 항목 | 내용 |
|---|---|
| 파이프라인에서 가장 흔한 위치 | 1. RAG 파이프라인에서 Text Embedder 다음, PromptBuilder 앞 2. 시맨틱 검색 파이프라인의 마지막 컴포넌트 3. 추출형 QA 파이프라인에서 Text Embedder 다음, TransformersExtractiveReader 앞 |
| 필수 init 변수 | document_store: PineconeDocumentStore 인스턴스 |
| 필수 run 변수 | query_embedding: 쿼리를 나타내는 벡터 (float 목록) |
| 출력 변수 | documents: 문서 목록 |
| API reference | Pinecone |
| GitHub 링크 | pinecone 통합 |
| 패키지 이름 | pinecone-haystack |
개요
PineconeEmbeddingRetriever는 PineconeDocumentStore와 호환되는 임베딩 기반 Retriever예요. 쿼리와 문서 임베딩을 비교한 결과에 따라 PineconeDocumentStore에서 쿼리에 가장 관련 있는 문서를 가져와요.
NLP 시스템에서 PineconeEmbeddingRetriever를 사용할 때는 쿼리와 문서 임베딩이 준비되어 있어야 해요. 인덱싱 파이프라인에 Document Embedder를, 쿼리 파이프라인에 Text Embedder를 추가하면 되죠.
query_embedding 외에도 PineconeEmbeddingRetriever는 top_k(가져올 최대 문서 수)와 filters(검색 공간을 좁히기) 같은 선택적 파라미터를 받아요.
임베딩 검색에 영향을 주는 몇 가지 파라미터는 해당 PineconeDocumentStore가 초기화될 때 정의해야 해요. 임베딩의 dimension과 사용할 거리 metric이 여기에 해당하죠.
사용법
단독으로 사용하기
이 Retriever는 동작하려면 PineconeDocumentStore와 인덱싱된 문서가 필요해요.
from haystack_integrations.components.retrievers.pinecone import (
PineconeEmbeddingRetriever,
)
from haystack_integrations.document_stores.pinecone import PineconeDocumentStore
# Make sure you have the PINECONE_API_KEY environment variable set
document_store = PineconeDocumentStore(
index="my_index_with_documents",
namespace="my_namespace",
dimension=768,
)
retriever = PineconeEmbeddingRetriever(document_store=document_store)
# using an imaginary vector to keep the example simple, example run query:
retriever.run(query_embedding=[0.1] * 768)
파이프라인에서 사용하기
필요한 의존성을 설치하세요:
pip install pinecone-haystack
pip install sentence-transformers-haystack
쿼리 파이프라인에서 이 Retriever를 이렇게 사용해요:
from haystack.document_stores.types import DuplicatePolicy
from haystack import Document
from haystack import Pipeline
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersTextEmbedder,
SentenceTransformersDocumentEmbedder,
)
from haystack_integrations.components.retrievers.pinecone import (
PineconeEmbeddingRetriever,
)
from haystack_integrations.document_stores.pinecone import PineconeDocumentStore
# Make sure you have the PINECONE_API_KEY environment variable set
document_store = PineconeDocumentStore(
index="my_index",
namespace="my_namespace",
dimension=768,
)
documents = [
Document(content="There are over 7,000 languages spoken around the world today."),
Document(
content="Elephants have been observed to behave in a way that indicates a high level of self-awareness, such as recognizing themselves in mirrors.",
),
Document(
content="In certain parts of the world, like the Maldives, Puerto Rico, and San Diego, you can witness the phenomenon of bioluminescent waves.",
),
]
document_embedder = SentenceTransformersDocumentEmbedder()
documents_with_embeddings = document_embedder.run(documents)
document_store.write_documents(
documents_with_embeddings.get("documents"),
policy=DuplicatePolicy.OVERWRITE,
)
query_pipeline = Pipeline()
query_pipeline.add_component("text_embedder", SentenceTransformersTextEmbedder())
query_pipeline.add_component(
"retriever",
PineconeEmbeddingRetriever(document_store=document_store),
)
query_pipeline.connect("text_embedder.embedding", "retriever.query_embedding")
query = "How many languages are there?"
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result["retriever"]["documents"][0])
예제 출력은 다음과 같아요:
Document(id=cfe93bc1c274908801e6670440bf2bbba54fad792770d57421f85ffa2a4fcc94, content: 'There are over 7,000 languages spoken around the world today.', score: 0.87717235, embedding: vector of size 768)