JinaRanker
JinaRanker
Jina AI 모델을 사용해 쿼리에 대한 유사성에 따라 문서를 순위 매기는 구성 요소예요.
출처: 문서
본문
JinaRanker는 주어진 쿼리에 얼마나 유사한지에 따라 주어진 문서를 순위 매겨요. Jina AI ranking 모델을 사용하며, 전체 목록은 Jina AI의 웹사이트에서 확인할 수 있어요. 이 Ranker의 기본 모델은 jina-reranker-v1-base-en이에요.
추가로 JinaRanker와 함께 선택적 top_k와 score_threshold 파라미터를 사용할 수 있어요:
- Ranker의
top_k는 반환하는(파이프라인의 마지막 컴포넌트라면) or 다음 컴포넌트에 전달하는 문서 수예요. - Ranker의
score_threshold를 설정하면 Jina AI 모델이 계산한 유사도 점수가 이 임계값보다 높은 문서만 반환해요.
Installation
pip install jina-haystack
Authorization
컴포넌트는 기본적으로 JINA_API_KEY 환경 변수를 사용해요. 그렇지 않으면 이렇게 api_key로 Jina API 키를 전달할 수 있어요:
ranker = JinaRanker(api_key=Secret.from_token("<your-api-key>"))
API 키를 얻으려면 Jina AI의 웹사이트로 가세요.
- 대표적인 파이프라인 위치: 쿼리 파이프라인에서 문서 리스트를 반환하는 컴포넌트(예: Retriever) 뒤
- 필수 init 변수:
api_key— Jina API 키.JINA_API_KEYenv var로 설정 가능. - 필수 run 변수:
query(쿼리 문자열) /documents(문서 리스트) - 출력 변수:
documents— 문서 리스트 /meta— 사용된 모델과 사용량 정보를 담은 딕셔너리 - API reference: Jina
- 패키지명:
jina-haystack
Usage
On its own
파이프라인 밖에서 JinaRanker를 사용해 쿼리 기준으로 문서를 정렬할 수 있어요. Ranker를 실행하려면 쿼리를 전달하고, 문서를 제공하며, top_k 파라미터에 반환할 문서 수를 설정하세요.
from haystack import Document
from haystack_integrations.components.rankers.jina import JinaRanker
docs = [Document(content="Paris"), Document(content="Berlin")]
ranker = JinaRanker()
ranker.run(query="City in France", documents=docs, top_k=1)
In a pipeline
InMemoryDocumentStore에서 키워드 검색(InMemoryBM25Retriever 사용)으로 문서를 검색하는 파이프라인 예시예요. 그다음 JinaRanker로 쿼리에 대한 유사성에 따라 검색된 문서를 순위 매겨요.
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.jina import JinaRanker
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 = JinaRanker()
ranker_pipeline = Pipeline()
ranker_pipeline.add_component(instance=retriever, name="retriever")
ranker_pipeline.add_component(instance=ranker, name="ranker")
ranker_pipeline.connect("retriever.documents", "ranker.documents")
query = "Cities in France"
ranker_pipeline.run(
data={
"retriever": {"query": query, "top_k": 3},
"ranker": {"query": query, "top_k": 2},
},
)