SentenceTransformersSimilarityRanker
SentenceTransformersSimilarityRanker
쿼리와의 유사도에 따라 문서를 순위 매기는 컴포넌트예요. SentenceTransformersSimilarityRanker는 cross-encoder 모델을 사용해 문서와 쿼리 임베딩을 만드는 강력한 모델 기반 Ranker예요.
출처: 문서
본문
| 항목 | 내용 |
|---|---|
| 파이프라인에서 가장 흔한 위치 | 쿼리 파이프라인에서 문서 목록을 반환하는 컴포넌트(예: Retriever) 다음 |
| 필수 init 변수 | 없음 |
| 필수 run 변수 | documents: 문서 목록. query: 쿼리 문자열 |
| 출력 변수 | documents: 문서 목록 |
| API reference | Sentence Transformers |
| GitHub 링크 | sentence_transformers 통합 |
| 패키지 이름 | sentence-transformers-haystack |
개요
SentenceTransformersSimilarityRanker는 쿼리와 얼마나 유사한지에 따라 문서를 순위 매겨요. Hugging Face Hub의 사전 훈련된 cross-encoder 모델로 쿼리와 문서를 모두 임베딩한 뒤, 임베딩을 비교해 유사도를 판단하죠. 결과는 쿼리와 가장 유사한 문서가 먼저 나오는 순위 순서의 Document 객체 목록이에요.
SentenceTransformersSimilarityRanker는 검색된 문서가 관련성 순으로 정렬되도록 보장하는 데 쿼리 파이프라인에서 가장 유용해요. 예를 들어 검색 증강 생성(RAG) 파이프라인이나 문서 검색 파이프라인에서요. Retriever(예: InMemoryEmbeddingRetriever) 다음에 사용해 검색 결과를 개선할 수 있죠. SentenceTransformersSimilarityRanker를 Retriever와 함께 사용할 때는 Retriever의 top_k를 작은 수로 설정하는 것을 고려하세요. 그러면 Ranker가 처리할 문서가 줄어 파이프라인을 더 빠르게 만들 수 있어요.
기본적으로 이 컴포넌트는 cross-encoder/ms-marco-MiniLM-L-6-v2 모델을 사용하지만 유연해요. Ranker 초기화 시 model 파라미터를 조정해 다른 모델로 바꿀 수 있어요. 다양한 초기화 설정에 대한 자세한 내용은 이 컴포넌트의 API reference를 확인하세요.
device 파라미터를 설정해 HF 모델을 CPU나 GPU에서 실행할 수 있어요.
또한 backend 파라미터로 Sentence Transformers 모드에 사용할 백엔드를 선택할 수 있어요: torch(기본값), onnx, openvino.
인증
Hugging Face API 토큰 인증은 비공개 또는 게이트 모델에만 필요해요. 컴포넌트는 기본적으로 HF_API_TOKEN 환경 변수를 사용해요. 또는 Secret token으로 초기화 시 Hugging Face API 토큰을 전달할 수도 있어요:
ranker = SentenceTransformersSimilarityRanker(token=Secret.from_token("<your-api-key>"))
사용법
SentenceTransformersSimilarityRanker를 사용하려면 sentence-transformers-haystack 패키지를 설치하세요:
pip install sentence-transformers-haystack
단독으로 사용하기
파이프라인 밖에서도 SentenceTransformersSimilarityRanker를 사용해 쿼리에 따라 문서를 정렬할 수 있어요.
이 예제는 SentenceTransformersSimilarityRanker로 두 개의 간단한 문서를 순위 매겨요. Ranker를 실행하려면 쿼리를 전달하고 문서를 제공하며, 반환할 문서 수를 top_k 파라미터에 설정하면 돼요.
from haystack import Document
from haystack_integrations.components.rankers.sentence_transformers import (
SentenceTransformersSimilarityRanker,
)
ranker = SentenceTransformersSimilarityRanker()
docs = [Document(content="Paris"), Document(content="Berlin")]
query = "City in Germany"
result = ranker.run(query=query, documents=docs)
docs = result["documents"]
print(docs[0].content)
파이프라인에서 사용하기
SentenceTransformersSimilarityRanker는 Retriever 다음에 사용할 때 쿼리 파이프라인에서 가장 효율적이에요.
아래는 키워드 검색(InMemoryBM25Retriever 사용)으로 InMemoryDocumentStore에서 문서를 가져오는 파이프라인 예시예요. 그런 다음 SentenceTransformersSimilarityRanker로 쿼리와의 유사도에 따라 검색된 문서를 순위 매기죠. 파이프라인은 Ranker의 기본 설정을 사용해요.
from haystack import Document, Pipeline
from haystack.document_stores.in_memory import InMemoryDocumentStore
from haystack.components.retrievers.in_memory import InMemoryBM25Retriever
from haystack_integrations.components.rankers.sentence_transformers import (
SentenceTransformersSimilarityRanker,
)
docs = [
Document(content="Paris is in France"),
Document(content="Berlin is in Germany"),
Document(content="Lyon is in France"),
]
document_store = InMemoryDocumentStore()
document_store.write_documents(docs)
retriever = InMemoryBM25Retriever(document_store=document_store)
ranker = SentenceTransformersSimilarityRanker()
document_ranker_pipeline = Pipeline()
document_ranker_pipeline.add_component(instance=retriever, name="retriever")
document_ranker_pipeline.add_component(instance=ranker, name="ranker")
document_ranker_pipeline.connect("retriever.documents", "ranker.documents")
query = "Cities in France"
document_ranker_pipeline.run(
data={
"retriever": {"query": query, "top_k": 3},
"ranker": {"query": query, "top_k": 2},
},
)
Ranker의 top_k: 위 예제에서 Retriever와 Ranker의
top_k값은 달라요. Retriever의top_k는 반환할 문서 수를 지정해요. 그런 다음 Ranker가 이 문서들을 순서대로 정렬하죠.Ranker에는 같거나 더 작은
top_k값을 설정할 수 있어요. Ranker의top_k는 반환하는 문서 수(파이프라인의 마지막 컴포넌트라면)이거나 다음 컴포넌트로 전달하는 문서 수예요. 위 파이프라인 예제에서 Ranker는 마지막 컴포넌트이므로, 파이프라인을 실행했을 때 얻는 출력은 Ranker의top_k에 따라 상위 2개 문서예요.
top_k값을 조정해 성능을 최적화할 수 있어요. 이 경우 Retriever의top_k를 더 작게 설정하면 Ranker가 처리할 문서가 줄어 파이프라인을 더 빠르게 만들 수 있죠.