임베딩 리트리버
임베딩 리트리버 (InMemoryEmbeddingRetriever)
InMemoryEmbeddingRetriever는 InMemoryDocumentStore와 호환되는 임베딩 기반 리트리버예요. 쿼리 임베딩과 문서 임베딩을 비교해 그 결과를 바탕으로 InMemoryDocumentStore에서 쿼리와 가장 관련 있는 Document를 가져와요. 임베딩 기반 검색을 찾고 있다면 이 리트리버를 InMemoryDocumentStore와 함께 쓰세요.
출처: 공식문서
주요 정보
| 항목 | 값 |
|---|---|
| 파이프라인에서 가장 흔한 위치 | 쿼리 파이프라인: RAG 파이프라인에서는 PromptBuilder 앞 의미 검색 파이프라인에서는 마지막 컴포넌트 추출적 QA 파이프라인에서는 TextEmbedder 뒤, TransformersExtractiveReader 앞 |
| 필수 초기화 변수 | document_store: InMemoryDocumentStore 인스턴스 |
| 필수 실행 변수 | query_embedding: 부동소수점 숫자 리스트 |
| 출력 변수 | documents: 문서 리스트 |
| API 레퍼런스 | Retrievers |
| GitHub 링크 | https://github.com/deepset-ai/haystack/blob/main/haystack/components/retrievers/in_memory/embedding_retriever.py |
| 패키지 이름 | haystack-ai |
개요
InMemoryEmbeddingRetriever는 InMemoryDocumentStore와 호환되는 임베딩 기반 리트리버예요. 쿼리 임베딩과 문서 임베딩을 비교해 그 결과를 바탕으로 InMemoryDocumentStore에서 쿼리와 가장 관련 있는 Document를 가져와요.
NLP 시스템에서 InMemoryEmbeddingRetriever를 사용할 때는 쿼리 임베딩과 문서 임베딩이 준비돼 있는지 확인해야 해요. 인덱싱 파이프라인에 DocumentEmbedder를, 쿼리 파이프라인에 Text Embedder를 추가하면 됩니다. 자세한 내용은 임베더를 참고하세요.
query_embedding 외에도 InMemoryEmbeddingRetriever는 top_k(가져올 최대 Document 수)와 filters(검색 공간을 좁히는 용도) 같은 다른 선택적 파라미터를 받아요.
임베딩 검색에 사용할 embedding_similarity_function은 해당 InMemoryDocumentStore가 초기화될 때 정의해야 해요.
사용법
파이프라인 안에서 쓰기
쿼리 파이프라인에서 이 리트리버를 이렇게 사용해요.
이 페이지의 예시는 sentence-transformers-haystack 패키지의 Sentence Transformers 임베더를 사용해요. 예시를 실행하려면 설치하세요.
pip install sentence-transformers-haystack
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack_integrations.components.embedders.sentence_transformers import (
SentenceTransformersTextEmbedder,
SentenceTransformersDocumentEmbedder,
)
from haystack.components.retrievers import InMemoryEmbeddingRetriever
document_store = InMemoryDocumentStore(embedding_similarity_function="cosine")
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)["documents"]
document_store.write_documents(documents_with_embeddings)
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 = "How many languages are there?"
result = query_pipeline.run({"text_embedder": {"text": query}})
print(result["retriever"]["documents"][0])