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_KEY env 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},
    },
)