2주 전에 시장의 선도적인 재순위화 솔루션으로 자리매김한 Reranker API를 소개했습니다. Jina Reranker는 다양한 벤치마크에서 BM25 결과 대비 히트율을 최대 +33% 향상시키며 인기 있는 기준들을 능가하는 성능을 보여줍니다. 성능이 인상적이지만, 제가 더 흥미로워하는 것은 Reranker API의 잠재력입니다. 쿼리-문서 목록을 입력하고 재순위화된 상위 k개의 결과를 직접 출력하는 간단한 인터페이스를 제공합니다. 이는 이론적으로 BM25, 임베딩, 벡터 데이터베이스 또는 어떤 파이프라인도 필요 없이 Reranker만으로 검색이나 추천 시스템을 구축할 수 있어 엔드투엔드 기능을 달성할 수 있다는 것을 의미합니다.
이 개념이 너무 흥미로워서 실험해보지 않을 수 없었습니다. 그래서 지금 보시는 것처럼 우리 웹사이트의 뉴스 페이지에서 @ 키를 누르고 "get top 5 related articles" 버튼을 클릭하면, jina-reranker-v1 모델을 사용하여 약 5초 만에 현재 기사와 가장 관련성이 높은 5개의 기사를 받을 수 있습니다(jina-colbert-v1 모델의 경우 조금 더 걸립니다). 모든 계산은 온라인으로 수행되며 Reranker API가 전적으로 관리합니다. 아래는 작동 방식을 보여주는 비디오입니다:
이 데모를 실행하려면 충분한 토큰이 남아있는 API 키가 필요합니다. 할당량을 모두 소진하여 데모를 실행할 수 없는 경우 https://jina.ai/reranker에서 새 키를 생성할 수 있습니다. 새 키마다 100만 개의 무료 토큰이 제공됩니다.
tag구현
구현은 매우 간단합니다: jina.ai/news/의 주어진 기사와 가장 관련된 기사를 찾기 위해, 현재 읽고 있는 기사를 쿼리로 사용하고 뉴스 사이트의 다른 모든 230여 개의 기사(전체 텍스트 사용!)를 문서로 사용합니다(물론 현재 기사는 제외). 그런 다음 이 를 페이로드로 Reranker API에 전송합니다. 응답을 받으면 정렬된 문서 인덱스를 사용하여 결과를 표시합니다. 따라서 기본 코드는 다음과 같습니다:
const getRecommendedArticles = async () => {
const query = `${currentNews.title} ${currentNews.excerpt}`;
const docs = newsStore.allBlogs.filter((item) => item.slug !== currentNews.slug);
const data = {
model: modelName,
query: query,
documents: docs,
top_n: 5,
}
const rerankUrl = 'https://api.jina.ai/v1/rerank';
const headers = {
'Content-Type': 'application/json',
Authorization: `Bearer ${apiKey}`,
};
const modelName = 'jina-reranker-v1-base-en';
const res = await fetch(rerankUrl, {
method: 'POST',
headers: headers,
body: JSON.stringify(data),
});
const resp = await res.json();
const topKList = resp.results.map((item) => {
return docs[item.index];
});
console.log(topKList);
}
API 키를 얻으려면 Reranker API 페이지를 방문하여 API 섹션으로 이동하면 됩니다. Embedding API에서 이미 API 키를 가지고 있다면 여기서도 재사용할 수 있습니다.
이렇게 하면 결과가 나타나며, 구현 과정이 약 10분 정도 걸린다는 점을 고려하면 첫 시도치고는 꽤 괜찮은 결과를 보여줍니다.
독자들은 이 구현에 대해 우려할 수 있는데, 일부 비판은 과도한 걱정일 수 있고 다른 일부는 타당할 수 있습니다:
- 전체 텍스트가 너무 길고 청킹이 필요하다는 우려는 과도한 걱정일 수 있습니다:
jina-reranker-v1모델은 길이가 512까지인 쿼리와 임의 길이의 문서를 처리할 수 있으며,jina-colbert-v1모델은 쿼리와 문서 모두 8192까지 처리할 수 있습니다. 따라서 전체 텍스트를 Reranker API에 입력하는 것은 불필요할 수 있습니다. 두 모델 모두 긴 컨텍스트를 효율적으로 관리하므로 걱정할 필요가 없습니다. 임베딩-벡터-검색-재순위화 파이프라인에서 가장 번거롭고 휴리스틱한 측면일 수 있는 청킹은 여기서는 큰 문제가 되지 않습니다. 하지만 더 긴 컨텍스트는 더 많은 토큰을 가정하므로, 이는 API 유료 사용자가 고려해야 할 사항입니다. 이 예제에서는 233개 기사의 전체 텍스트를 사용하므로 하나의 재순위화 쿼리에 300K+ 토큰이 소비됩니다. - 품질에 대한 원시 데이터 대 정제된 데이터의 영향. 데이터 정제를 추가하면 향상될 수 있습니다. 예를 들어, HTML 태그를 제거하는 것만으로도 (즉,
docs.map(item => item.html.replace(/<[^>]*>?/gm, ''))jina-reranker-v1모델의 추천 품질이 크게 향상되는 것을 관찰했습니다. 하지만jina-colbert-v1모델에서는 그 효과가 덜 두드러집니다. 이는 ColBERT 모델이jina-reranker-v1모델보다 노이즈가 있는 텍스트에 더 관대하도록 훈련되었다는 것을 시사합니다. - 다른 쿼리 구성이 품질에 미치는 영향. 위의 구현에서는 현재 기사의 제목과 요약을 쿼리로 직접 사용했습니다. 이것이 쿼리를 구성하는 최적의 방법일까요?
"What is the most related article to..."와 같은 접두사를 추가하는 것이"가장 좋은 글을 추천해 주시면 $20를 드리겠습니다"와 같이 대규모 언어 모델에서 사용되는 프롬프트와 유사한 방식이 도움이 될까요? 이는 모델의 학습 데이터 분포와 관련이 있을 것으로 보이는 흥미로운 질문을 제기하며, 이에 대해 더 자세히 살펴볼 예정입니다. - 쿼리 구성에 대한 이전 논점을 확장하여, 사용자의 최근 브라우징 기록을 활용한 개인화된 추천과 같이 쿼리의 조합 능력을 더 자세히 조사하는 것도 흥미로울 것입니다. 특히 시스템이 쿼리의 긍정적인 예시뿐만 아니라 부정적인 예시도 이해할 수 있는지, 예를 들어
NOT_LIKE연산자,"이런 글은 추천하지 마세요"또는"이와 같은 글을 덜 보고 싶습니다"와 같은 것을 이해할 수 있는지 고려해 볼 만합니다. 다음 섹션에서 이에 대해 더 자세히 다룰 것입니다.
tag쿼리 작성에 대한 실증 연구
Jina Reranker API를 사용한 다양한 쿼리 작성 탐구에서, 상위 10개 결과에 초점을 맞추어 인간 레이블링(즉, 우리 스스로 평가)을 통한 정성적 평가를 수행했습니다. 웹사이트에 게시된 모든 콘텐츠에 대한 완전한 지식을 가지고 있기 때문에 이는 타당한 접근이었습니다. 우리가 검토한 쿼리 작성 전략은 다음과 같습니다:
- 글의 제목, 발췌문, 그리고 제목 + 발췌문의 조합 사용
- "이와 같은 글", "이런 글은 제외", "가장 관련성이 높은 글은 무엇인가요?"와 같은 "프롬프트" 스타일의 지시문 채택
reranker의 효과를 테스트하기 위해, 200개 이상의 게시물 중에서 가장 관련성 있는 글을 찾아내는—LLM에서의 "건초더미 속 바늘 찾기"에서 영감을 받은 도전 과제—을 위해 두 개의 복잡한 글을 쿼리 대상으로 선택했습니다. 아래에서는 이러한 "바늘"들을 녹색으로 강조 표시했습니다.

tag요약
테스트 결과를 바탕으로 다음과 같은 관찰 사항과 요약을 도출했습니다:
- 제목과 발췌문을 조합하는 것이 가장 좋은 재순위화 결과를 보여주며, 발췌문은 재순위화 품질을 향상시키는 데 중요한 역할을 합니다.
- "프롬프트" 스타일의 지시문을 포함하는 것은 개선으로 이어지지 않습니다.
- 현재 reranker 모델은 긍정적이거나 부정적인 한정자를 효과적으로 처리하지 못합니다. "더 많이", "더 적게" 또는 "제외"와 같은 용어는 reranker가 이해하지 못합니다.
2번과 3번 포인트의 통찰은 reranker의 향후 개선을 위한 흥미로운 방향을 제시합니다. 정렬 로직을 변경하기 위한 즉각적인 프롬프팅을 가능하게 하면 reranker의 기능이 크게 확장되어 개인화된 콘텐츠 큐레이션/추천과 같은 새로운 잠재적 응용 분야가 열릴 수 있을 것으로 믿습니다.







