Neural sparse 쿼리

Neural sparse 쿼리

neural_sparse 쿼리는 neural sparse 기능을 위해 벡터 필드 검색을 수행해요. 이 쿼리는 rank_features 필드와 sparse_vector 필드 두 종류의 벡터 필드에서 실행할 수 있어요.

출처: 문서

본문

Introduced 2.11 neural_sparse 쿼리는 neural sparse 기능을 위해 벡터 필드 검색을 수행해요. 이 쿼리는 다음 두 종류의 벡터 필드에서 실행할 수 있어요:

  • rank_features 필드: 전통적인 neural sparse 검색용
  • sparse_vector 필드: neural sparse ANN 검색용

Neural sparse 검색

전통적인 희소 벡터 검색을 역색인(inverted index) 효율로 수행하려면 rank_features 필드에서 neural sparse 검색을 사용해요. neural sparse 검색은 원시 희소 벡터(raw sparse vector) 또는 텍스트 중 하나를 사용해서 실행할 수 있어요. 텍스트는 내장 analyzer 또는 토크나이저 모델로 토큰화할 수 있어요.

원시 희소 벡터 사용

일치시키기 위해 희소 벡터 임베딩을 직접 제공하세요:

"neural_sparse": {
  "": {
    "query_tokens": {
      "": ,
      ...
    }
  }
}

자세한 내용은 Neural sparse search using raw vectors를 참고하세요.

내장 analyzer로 텍스트 사용

내장 DL 모델 analyzer를 사용해 토큰화할 텍스트를 제공하세요:

"neural_sparse": {
  "": {
    "query_text": "",
    "analyzer": "bert-uncased"
  }
}

사용자 지정 모델로 텍스트 사용

사용자 지정 토크나이저 모델로 토큰화할 텍스트를 제공하세요:

"neural_sparse": {
  "": {
    "query_text": "",
    "model_id": ""
  }
}

자세한 내용은 Generating sparse vector embeddings automatically를 참고하세요.

Neural sparse ANN 검색

Introduced 3.3 높은 재현율(recall)로 향상된 쿼리 성능을 얻으려면 sparse_vector 필드에서 neural sparse ANN 검색을 사용해요. 자세한 내용은 Neural sparse ANN search를 참고하세요. neural sparse 검색은 원시 희소 벡터 또는 텍스트 중 하나를 사용해 실행할 수 있어요.

원시 희소 벡터 사용

"neural_sparse": {
  "": {
    "query_tokens": {
      "": ,
      ...
    },
    "method_parameters": {
      "top_n": 10,
      "heap_factor": 1.0,
      "k": 10
    }
  }
}

모델로 텍스트 사용

"neural_sparse": {
  "": {
    "query_text": "",
    "model_id": "",
    "method_parameters": {
      "top_n": 10,
      "heap_factor": 1.0,
      "k": 10
    }
  }
}

요청 본문 필드 (Request body fields)

최상위 필드 이름은 검색 쿼리를 실행할 벡터 필드를 지정해요. 입력을 정의하려면 query_text 또는 query_tokens 중 하나를 반드시 지정해야 해요.

공통 필드 (Common fields)

이 필드들은 rank_features와 sparse_vector 두 필드 타입 모두에서 지원돼요. Field Data type Required/Optional Description query_text | 선택 | 문자열(String) | 희소 벡터 임베딩으로 변환할 쿼리 텍스트예요. query_text 또는 query_tokens 중 하나는 반드시 지정해야 해요. query_tokens | 선택 | 토큰(string)에서 가중치(float)로의 매핑 | 토큰과 가중치 형태의 원시 희소 벡터예요. 직접 벡터 입력을 위한 query_text의 대안으로 사용해요. query_text 또는 query_tokens 중 하나는 반드시 지정해야 해요. model_id | 선택 | 문자열(String) | query_text와 함께 사용해요. 쿼리 텍스트에서 벡터 임베딩을 생성하는 데 쓰는 희소 인코딩 모델(양방향 인코더 bi-encoder 모드) 또는 토크나이저(doc 전용 모드)의 ID예요. 모델/토크나이저는 neural sparse 검색에 사용되기 전에 OpenSearch에 배포되어 있어야 해요. 자세한 내용은 Using custom models within OpenSearch와 Generating sparse vector embeddings automatically를 참고하세요. neural sparse 쿼리에서 기본 모델 ID를 설정하는 방법은 neural_query_enricher를 참고하세요. analyzer와 동시에 지정할 수 없어요. max_token_score | 선택 | 실수(Float) | (사용 중단됨, Deprecated) 이 파라미터는 OpenSearch 2.12부터 사용 중단되었어요. 하위 호환성 목적으로만 유지되며 더 이상 기능에 영향을 주지 않아요. 요청에 여전히 포함할 수는 있지만 그 값은 아무런 효과가 없어요. 이전에는 어휘(vocabulary)에 있는 모든 토큰 점수의 이론적 상한으로 사용됐어요.

rank_features 전용 필드

Field Data type Required/Optional Description 

analyzer | 선택 | 문자열(String) | query_text와 함께 사용해요. 쿼리 텍스트를 토큰화할 내장 DL 모델 analyzer를 지정해요. 유효한 값은 bert-uncased와 mbert-uncased예요. 기본값은 bert-uncased예요. model_id와 analyzer 중 어느 것도 지정하지 않으면 기본 analyzer(bert-uncased)로 텍스트를 토큰화해요. model_id와 동시에 지정할 수 없어요. 자세한 내용은 DL model analyzers를 참고하세요.

sparse_vector 전용 필드

Field Data type Required/Optional Description 

method_parameters.top_n | 선택 | 정수(Integer) | 근사(approximate) 희소 쿼리에서 유지할 가장 높은 가중치의 쿼리 토큰 수를 지정해요. method_parameters.heap_factor | 선택 | 실수(Float) | 재현율(recall)과 성능 사이의 균형을 조절해요. 값이 높을수록 재현율이 높아지지만 쿼리 속도는 떨어지고, 값이 낮을수록 재현율이 낮아지지만 쿼리 속도는 빨라져요. method_parameters.k | 선택 | 정수(Integer) | 근사 신경망 검색 알고리즘이 반환하는 상위 k개의 가장 가까운 결과 수를 지정해요. method_parameters.filter | 선택 | 객체(Object) | 쿼리 결과에 필터를 적용해요. Neural sparse ANN search의 Filtering을 참고하세요.

예제 (Examples)

다음 예제는 neural_sparse 쿼리 사용법을 보여줘요.

rank_features 필드에서의 neural sparse 검색

analyzer나 모델로 토큰화한 텍스트, 또는 원시 벡터를 사용해 rank_features 필드에서 neural sparse 검색을 실행할 수 있어요.

analyzer로 토큰화한 텍스트 사용

analyzer로 토큰화한 텍스트로 검색하려면 요청에 analyzer를 지정하세요. analyzer는 수집(ingestion) 시 텍스트 분석에 사용했던 모델과 호환되어야 해요:

GET my-nlp-index/_search
{
  "query": {
    "neural_sparse": {
      "passage_embedding": {
        "query_text": "Hi world",
        "analyzer": "bert-uncased"
      }
    }
  }
}

자세한 내용은 DL model analyzers를 참고하세요. analyzer를 지정하지 않으면 기본 bert-uncased analyzer가 사용돼요:

GET my-nlp-index/_search
{
  "query": {
    "neural_sparse": {
      "passage_embedding": {
        "query_text": "Hi world"
      }
    }
  }
}

모델로 토큰화한 텍스트 사용

토크나이저 모델로 토큰화한 텍스트로 검색하려면 요청에 모델 ID를 제공하세요:

GET my-nlp-index/_search
{
  "query": {
    "neural_sparse": {
      "passage_embedding": {
        "query_text": "Hi world",
        "model_id": "aP2Q8ooBpBj3wT4HVS8a"
      }
    }
  }
}

원시 벡터 사용

희소 벡터로 검색하려면 query_tokens 파라미터에 희소 벡터를 제공하세요:

GET my-nlp-index/_search
{
  "query": {
    "neural_sparse": {
      "passage_embedding": {
        "query_tokens": {
          "hi" : 4.338913,
          "planets" : 2.7755864,
          "planet" : 5.0969057,
          "mars" : 1.7405145,
          "earth" : 2.6087382,
          "hello" : 3.3210192
        }
      }
    }
  }
}

sparse_vector 필드에서의 neural sparse ANN 검색

텍스트나 원시 벡터를 사용해 sparse_vector 필드에서 neural sparse ANN 검색을 실행할 수 있어요.

텍스트 사용

자연어로 검색하려면 query_text와 배포된 희소 인코딩 모델 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
        }
      }
    }
  }
}

메서드 파라미터와 함께 원시 벡터 사용

미리 계산된 희소 벡터로 검색하려면 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
        }
      }
    }
  }
}

다음 단계 (Next steps)

  • neural sparse 검색에 대한 자세한 내용은 Neural sparse search를 참고하세요.
  • neural sparse ANN 검색에 대한 자세한 내용은 Neural sparse ANN search를 참고하세요.
  • 필드 타입 정보는 Rank features와 Sparse vector를 참고하세요.
  • neural_sparse 쿼리 결과 필터링에 대한 정보는 Neural sparse ANN search의 Filtering을 참고하세요.
  • Neural sparse ANN explain

    Neural sparse searchUsing raw sparse vectors

Neural sparse ANN searchUsing raw sparse vectors

Request body fieldsCommon fields

ExamplesNeural sparse search on rank_features fields

더 알아보기 (Learn more)