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
}
}
}
}
}
관련 문서 (Related documentation)
- Neural sparse ANN search
- Neural sparse query
- Neural sparse ANN search performance tuning