Sparse vector

Sparse vector

sparse_vector 필드는 신경망 희소 근사 최근접 이웃(ANN) 검색을 지원하며, 관련성을 유지하면서 검색 효율을 개선해요. sparse_vector는 맵으로 저장되며, 각 키는 토큰을 나타내고 각 값은 토큰의 가중치를 나타내는 양의 float 값이에요.

출처: 문서

본문

파라미터 (Parameters)

sparse_vector 필드 타입은 다음 파라미터를 지원해요.

파라미터 타입 필수 설명 기본값 범위
name String 예 신경망 희소 ANN 검색 알고리즘이에요. 유효 값은 seismic이에요. - -
n_postings Integer 아니요 각 포스팅 목록에 유지할 최대 문서 수예요. 0.0005 * doc_count¹ (0, ∞)
cluster_ratio Float 아니요 클러스터 수를 결정하는 데 사용되는 각 포스팅 목록의 문서 비율이에요. 0.1 (0, 1)
summary_prune_ratio Float 아니요 클러스터 요약 벡터를 프루닝할 때 유지할 총 토큰 가중치의 비율이에요. 예를 들어 summary_prune_ratio가 0.5로 설정되면 총 가중치의 상위 50%에 기여하는 토큰이 유지돼요. 따라서 클러스터 요약 {"100": 1, "200": 2, "300": 3, "400": 6}에 대해 프루닝된 요약은 {"400": 6}이에요. 0.4 (0, 1]
approximate_threshold Integer 아니요 신경망 희소 ANN 검색을 활성화하는 데 필요한 세그먼트의 최소 문서 수예요. 1000000 [0, ∞)
quantization_ceiling_search Float 아니요 검색 중 양자화에 사용되는 최대 토큰 가중치예요. 16 (0, ∞)
quantization_ceiling_ingest Float 아니요 수집 중 양자화에 사용되는 최대 토큰 가중치예요. 3 (0, ∞)

¹doc_count는 세그먼트 내의 문서 수를 나타내요.

파라미터 구성에 대해서는 Neural sparse ANN search를 참고하세요.

검색 효율을 높이고 메모리 사용을 줄이기 위해 sparse_vector 필드는 토큰 가중치의 양자화를 자동으로 수행해요. 서로 다른 토큰 가중치 분포에 따라 quantization_ceiling_search와 quantization_ceiling_ingest 파라미터를 조정할 수 있어요. doc-only 쿼리의 경우 quantization_ceiling_search를 기본값(16)으로 두는 것을 권장해요. bi-encoder 쿼리의 경우 quantization_ceiling_search를 3으로 설정하는 것을 권장해요. doc-only와 bi-encoder 쿼리 모드에 대한 자세한 내용은 희소 벡터 임베딩 자동 생성하기를 참고하세요.

예시

다음 예시는 sparse_vector 필드 타입을 사용하는 방법을 보여줘요.

1단계: 인덱스 만들기

index.sparse를 true로 설정해 희소 인덱스를 만들고, 인덱스 매핑에 sparse_vector 필드를 정의해요.

PUT sparse-vector-index
{
  "settings": {
    "index": {
      "sparse": true
    }
  },
  "mappings": {
    "properties": {
      "sparse_embedding": {
        "type": "sparse_vector",
        "method": {
          "name": "seismic",
          "parameters": {
            "n_postings": 300,
            "cluster_ratio": 0.1,
            "summary_prune_ratio": 0.4,
            "approximate_threshold": 1000000
          }
        }
      }
    }
  }
}

2단계: 인덱스에 데이터 수집

sparse_vector 필드를 포함한 문서 세 개를 인덱스에 수집해요.

PUT sparse-vector-index/_doc/1
{
  "sparse_embedding" : {
    "1000": 0.1
  }
}
PUT sparse-vector-index/_doc/2
{
  "sparse_embedding" : {
    "2000": 0.2
  }
}
PUT sparse-vector-index/_doc/3
{
  "sparse_embedding" : {
    "3000": 0.3
  }
}

3단계: 인덱스 검색

neural_sparse 쿼리를 사용해 원시 벡터 또는 자연어를 제공함으로써 희소 인덱스를 쿼리할 수 있어요.

원시 벡터로 쿼리

원시 벡터로 쿼리하려면 query_tokens 파라미터를 제공해요.

GET sparse-vector-index/_search
{
  "query": {
    "neural_sparse": {
      "sparse_embedding": {
        "query_tokens": {
          "1055": 5.5
        },
        "method_parameters": {
          "heap_factor": 1.0,
          "top_n": 10,
          "k": 10
        }
      }
    }
  }
}

자연어로 쿼리

자연어로 쿼리하려면 query_text와 model_id 파라미터를 제공해요.

GET sparse-vector-index/_search
{
  "query": {
    "neural_sparse": {
      "sparse_embedding": {
        "query_text": "",
        "model_id": "",
        "method_parameters": {
          "k": 10,
          "top_n": 10,
          "heap_factor": 1.0
        }
      }
    }
  }
}
  • Neural sparse ANN search
  • Neural sparse query
  • Neural sparse ANN search performance tuning

더 알아보기 (Learn more)