본문 바로가기
WIKI 기술 지식 베이스

Vector search techniques

원문 보기 위키 갱신

출처: 문서

본문

Vector search techniques

OpenSearch는 벡터 검색을 k-최근접 이웃(k-NN) 검색으로 구현합니다. k-NN 검색은 벡터 인덱스에서 쿼리 포인트에 가장 가까운 k개의 이웃을 찾습니다. 이웃을 결정하기 위해 포인트 간 거리를 측정하는 데 사용할 공간(거리 함수)을 지정할 수 있습니다.

OpenSearch는 벡터 인덱스에서 k-최근접 이웃을 얻기 위한 세 가지 방법을 지원합니다.

  • Approximate search (approximate k-NN, 또는 ANN): 쿼리 벡터에 대한 근사 최근접 이웃을 반환합니다. 일반적으로 근사 검색 알고리즘은 인덱싱 속도와 검색 정확도를 희생하는 대신 낮은 지연 시간, 더 작은 메모리 사용량, 더 확장 가능한 검색과 같은 성능 이점을 제공합니다. 대부분의 사용 사례에서 근사 검색이 가장 좋은 선택입니다.

  • Exact search: 벡터 필드에 대한 무차별 대입(brute-force) 방식의 정확한 k-NN 검색입니다. OpenSearch는 다음과 같은 유형의 정확 검색을 지원합니다.

    • Exact search with a scoring script: 스코어링 스크립트를 사용하여 최근접 이웃 검색을 실행하기 전에 인덱스에 필터를 적용할 수 있습니다.
    • Painless extensions: 거리 함수를 Painless 확장으로 추가하여 더 복잡한 조합에서 사용할 수 있습니다. 이 방법을 사용하여 인덱스에 대한 무차별 대입 방식의 정확한 벡터 검색을 수행할 수 있으며, 사전 필터링도 지원합니다.

일반적으로 대규모 데이터셋에는 ANN 방법을 선택하는 것이 좋습니다. 확장성이 훨씬 뛰어나기 때문입니다. 필터를 적용하려는 소규모 데이터셋에는 사용자 정의 스코어링 방식을 선택해야 합니다. 스코어링 방법의 일부로 거리 함수를 사용해야 하는 더 복잡한 사용 사례가 있다면 Painless 스크립팅 방식을 사용해야 합니다.

OpenSearch는 여러 백엔드 알고리즘(methods)과 이러한 알고리즘을 구현하는 라이브러리(engines)를 지원합니다. 선택한 모드와 사용 가능한 메모리에 따라 최적의 구성을 자동으로 선택합니다. 자세한 내용은 Methods and engines을 참조하세요.

opensearch-jvector plugin은 disk_ann 메서드와 함께 추가 jvector 엔진을 제공합니다. 이 플러그인은 어떤 OpenSearch 배포판의 일부도 아니며 opensearch-knn과 함께 설치할 수 없습니다.

Using sparse vectors

_Neural sparse search_는 희소 임베딩 모델과 역색인을 사용하여 밀집 벡터 검색에 대한 효율적인 대안을 제공하며, BM25와 유사한 성능을 제공합니다. 많은 메모리와 CPU 리소스가 필요한 밀집 벡터 방법과 달리 희소 검색은 토큰-가중치 쌍 목록을 생성하여 순위 특징 인덱스에 저장합니다. 이 접근 방식은 전통적인 검색의 효율성과 신경망의 의미 이해를 결합합니다. OpenSearch는 수집 파이프라인을 통한 자동 임베딩 생성과 직접 희소 벡터 수집을 모두 지원합니다. 자세한 내용은 Neural sparse search를 참조하세요.

Combining multiple search techniques

_Hybrid search_는 OpenSearch에서 여러 검색 기술을 결합하여 검색 관련성을 향상시킵니다. 전통적인 키워드 검색과 벡터 기반 의미 검색을 통합합니다. 구성 가능한 검색 파이프라인을 통해 하이브리드 검색은 다양한 검색 방법의 점수를 정규화하고 결합하여 통합된 관련성 높은 결과를 제공합니다. 이 접근 방식은 의미 이해와 정확한 일치가 모두 중요한 복잡한 쿼리에 특히 효과적입니다. 검색 파이프라인은 사후 필터링 작업 및 집계로 추가 사용자 지정하여 특정 검색 요구 사항을 충족할 수 있습니다. 자세한 내용은 Hybrid search를 참조하세요.

더 알아보기 (Learn more)