시맨틱 리랭킹

원본 보기

시맨틱 리랭킹

이 개요는 시맨틱 리랭킹의 상위 수준 개념과 활용 사례에 초점을 맞춥니다. Elasticsearch에서 시맨틱 리랭킹을 설정하고 사용하는 전체 구현 세부 사항은 Search API 문서의 레퍼런스 문서를 참조하세요.

리랭커는 이전 단계의 검색 메커니즘에서 나온 결과의 관련성을 개선합니다. 시맨틱 리랭커는 머신러닝 모델을 사용해 쿼리와의 의미적 유사도를 기준으로 검색 결과의 순서를 재정렬합니다.

시맨틱 리랭킹은 비교적 크고 복잡한 머신러닝 모델을 필요로 하며 쿼리에 대응해 실시간으로 동작합니다. 이 기법은 파이프라인의 마지막 단계 중 하나로서 작은 top-k 결과 집합에 적용할 때 적합합니다. 키워드, 시맨틱, 하이브리드 검색 알고리즘 어느 쪽에서든 동일하게 잘 작동하는 강력한 검색 관련성 개선 기법입니다.

다음 섹션에서는 시맨틱 리랭킹의 이점, 활용 사례, 사용되는 모델 유형을 더 자세히 설명합니다. 마지막 섹션에서는 Elasticsearch에서의 시맨틱 리랭킹 구현 방법에 대한 실용적이고 개괄적인 개요와 전체 레퍼런스 문서 링크를 제공합니다.

시맨틱 리랭킹은 다양한 활용 사례를 가능하게 합니다:

  • 렉시컬(BM25) 검색 결과 리랭킹

    • 기존의 렉시컬/BM25 검색 파이프라인에 간단한 API 호출을 추가하는 것만으로 즉시 사용 가능한 시맨틱 검색을 구현합니다.
    • 재색인 없이 기존 인덱스 위에 시맨틱 검색 기능을 추가하므로 빠른 개선에 적합합니다.
    • 복잡한 기존 인덱스를 가진 환경에 이상적입니다.
  • 시맨틱 검색 결과 리랭킹

    • 더 강력한 모델을 사용해 ELSER 희소 벡터 임베딩 또는 밀집 벡터 임베딩 기반 시맨틱 리트리버의 결과를 개선합니다.
    • reciprocal rank fusion (RRF) 또는 linear 리트리버를 사용한 선형 결합 기반 하이브리드 검색 위에 정제 계층을 추가합니다
  • 일반적인 활용

    • 검색 증강 생성(RAG) 활용 사례나 언어 모델(LLM) 입력이 관련된 기타 시나리오에서 문서 관련성을 명시적으로 제어할 수 있게 합니다.

시맨틱 리랭킹의 가치를 살펴봤으니, 이제 이 과정을 구동하는 구체적인 모델과 그 차이점을 알아보겠습니다.

상위 수준에서 보면 시맨틱 리랭킹에는 cross-encoder와 bi-encoder라는 두 가지 모델 유형이 사용됩니다.

참고

이 버전에서 Elasticsearch는 시맨틱 리랭킹에 cross-encoder만 지원합니다.

  • cross-encoder 모델은 쿼리를 인식한 문서 표현을 생성하기 때문에 더 강력한 올인원 솔루션으로 볼 수 있습니다. 쿼리 텍스트와 문서 텍스트를 하나로 이어 붙인 단일 입력으로 받습니다.

  • bi-encoder 모델은 문서 텍스트 또는 쿼리 텍스트 중 하나를 입력으로 받습니다. 문서 임베딩과 쿼리 임베딩이 각각 별도로 계산되므로 서로를 인식하지 못합니다.

    • 랭킹 점수를 계산하려면 외부 연산이 필요합니다. 일반적으로 쿼리 임베딩과 문서 임베딩 간의 내적 또는 코사인 유사도를 계산하는 방식입니다.

요약하면, cross-encoder는 정확도가 높지만 리소스를 더 많이 사용합니다. bi-encoder는 더 빠르고 비용 효율적이지만 정밀도는 떨어집니다.

향후 버전에서는 Elasticsearch가 bi-encoder도 지원할 예정입니다. cross-encoder와 bi-encoder의 실무적 차이에 대한 보다 상세한 분석이 궁금하다면 다음 섹션을 펼쳐 보세요.

cross-encoder와 bi-encoder 비교

Elasticsearch는 검색 파이프라인에 시맨틱 리랭킹을 추가하는 두 가지 방법을 제공합니다:

두 방법 모두 동일한 기반 inference 엔드포인트와 리랭킹 모델을 사용합니다.

두 방식 모두 rerank 작업용으로 구성된 inference 엔드포인트가 필요합니다. 다음과 같은 선택지가 있습니다:

  1. Elastic Inference Service (EIS)가 구동하는 사전 구성된 .jina-reranker-v3.5 엔드포인트를 사용합니다. 권장되는 방식입니다. Jina 리랭커 모델에 대해 자세히 알아보세요.

  2. 사전 구성된 .rerank-v1-elasticsearch 엔드포인트를 통해 Elastic Rerank cross-encoder 모델을 사용하거나, inference API의 Elasticsearch 서비스를 사용해 커스텀 엔드포인트를 생성합니다.

  3. Jina AI Rerank inference 엔드포인트를 사용해 rerank 엔드포인트를 생성합니다.

  4. Cohere Rerank inference 엔드포인트를 사용해 rerank 엔드포인트를 생성합니다.

  5. Google Vertex AI inference 엔드포인트를 사용해 rerank 엔드포인트를 생성합니다.

  6. Eland를 사용해 Hugging Face에서 Elasticsearch로 모델을 업로드합니다. Eland로 모델을 로드할 때는 text_similarity NLP 작업 유형을 사용해야 합니다. 그런 다음 rerank 엔드포인트 유형으로 Elasticsearch 서비스 inference 엔드포인트를 설정합니다.

    Elasticsearch가 시맨틱 리랭킹에 지원하는 서드파티 텍스트 유사도 모델 목록은 Elastic NLP 모델 레퍼런스를 참조하세요.

리트리버 또는 ES|QL 중 하나를 사용해 시맨틱 리랭킹을 수행할 수 있습니다.

리트리버 문법을 사용하면 단일 _search 호출 안에서 다단계 검색 파이프라인을 선언적으로 구성할 수 있습니다. RRF, linear, pinned 같은 다른 리트리버 단계와 리랭킹을 결합하고 싶을 때 적합합니다.

사전 구성된 rerank 엔드포인트(예: .jina-reranker-v3.5 또는 .rerank-v1-elasticsearch)를 사용하거나 Elasticsearch Inference API로 커스텀 엔드포인트를 생성할 수 있습니다. 그런 다음 검색 요청에 text_similarity_reranker 리트리버를 정의합니다.

예시: 리트리버 기반 시맨틱 리랭킹

전체 레퍼런스 문서는 text_similarity_reranker 리트리버를 참조하세요.

ES|QL RERANK 명령을 사용하면 파이프 형태의 쿼리에 리랭킹을 하나의 단계로 추가할 수 있습니다. 변환, 집계, COMPLETION을 이용한 텍스트 생성 같은 다른 ES|QL 기능과 리랭킹을 결합하고 싶을 때 적합합니다.

예시: ES|QL 기반 시맨틱 리랭킹

전체 레퍼런스 문서는 RERANK 명령을 참조하세요.

리트리버 ES|QL
문법 선언적 JSON(리트리버 트리) 파이프 방식 쿼리 언어
조합성 다른 리트리버와 중첩(RRF, linear, pinned, diversify) 다른 명령과 파이프 연결(FORK, FUSE, COMPLETION, STATS)
다중 필드 리랭킹 단일 필드만 가능 다중 필드 지원
적합한 용도 _search API의 다단계 검색 파이프라인 변환이나 생성을 포함하는 엔드투엔드 검색 쿼리
클라이언트 지원 모든 Elasticsearch 클라이언트 모든 Elasticsearch 클라이언트

많은 cross-encoder 모델의 한계는 긴 문서로 이루어진 코퍼스에서 성능이 좋지 않다는 점입니다. 이는 다수의 모델이 입력을 토큰 윈도우 길이에 맞춰 잘라내기 때문이며, 그 과정에서 문서의 가장 관련성 높은 부분이 리랭커로 전달되기 전에 잘려 나갈 수 있습니다. 사전 구성된 .rerank-v1-elasticsearch 엔드포인트도 이런 방식으로 잘라냅니다.

text_similarity_reranker 리트리버의 chunk_rescorer를 사용하면 리랭커로 전달되는 콘텐츠 양을 명시적으로 제어할 수 있습니다. 이는 긴 문서 문제를 해결할 뿐 아니라 리랭커에 더 적은 토큰을 보내 inference 비용도 조절할 수 있게 합니다.

경고

점수가 매겨진 청크에 대한 리랭킹은 전문가용 기능으로, 잘라내기를 수행하지 않는 모델과 함께 사용하면 관련성에 부정적인 영향을 줄 수 있습니다.

청크 재점수화를 사용하는 시맨틱 리랭커 검색 요청 예시