OpenSearch Multimodal 번역

Cloud_ Ghost·2025년 7월 10일

opensearch

목록 보기
1/23

멀티모달 검색

2.11에서 도입됨

멀티모달 임베딩 모델을 사용하여 텍스트와 이미지 데이터를 검색하는 멀티모달 검색을 사용하십시오.

전제 조건

텍스트 검색을 사용하기 전에 멀티모달 임베딩 모델을 설정해야 합니다. 자세한 내용은 모델 선택을 참조하십시오.

멀티모달 검색 구성

멀티모달 검색을 구성하는 방법에는 두 가지가 있습니다:

  • 자동화된 워크플로 (빠른 설정 권장): 최소한의 구성으로 수집 파이프라인과 인덱스를 자동으로 생성합니다.
  • 수동 설정 (사용자 정의 구성 권장): 더 큰 유연성과 제어를 위해 각 구성 요소를 수동으로 구성합니다.

자동화된 워크플로

OpenSearch는 수집 파이프라인과 인덱스를 모두 자동으로 생성하는 워크플로 템플릿을 제공합니다. 워크플로를 생성할 때 구성된 모델의 모델 ID를 제공해야 합니다. 매개변수 중 업데이트해야 할 것이 있는지 확인하기 위해 멀티모달 검색 워크플로 템플릿 기본값을 검토하십시오. 예를 들어, 모델 차원이 기본값(1024)과 다른 경우 output_dimension 매개변수에서 모델의 차원을 지정하십시오. 기본 멀티모달 검색 워크플로를 생성하려면 다음 요청을 보내십시오:

POST /_plugins/_flow_framework/workflow?use_case=multimodal_search&provision=true
{
"create_ingest_pipeline.model_id": "mBGzipQB2gmRjlv_dOoB"
}

OpenSearch는 생성된 워크플로에 대한 워크플로 ID로 응답합니다:

{
  "workflow_id" : "U_nMXJUBq_4FYQzMOS4B"
}

워크플로 상태를 확인하려면 다음 요청을 보내십시오:

GET /_plugins/_flow_framework/workflow/U_nMXJUBq_4FYQzMOS4B/_status

워크플로가 완료되면 상태가 COMPLETED로 변경됩니다. 워크플로는 다음 구성 요소를 생성합니다:

  • nlp-ingest-pipeline이라는 이름의 수집 파이프라인
  • my-nlp-index라는 이름의 인덱스

이제 3단계와 4단계로 계속하여 인덱스에 문서를 수집하고 인덱스를 검색할 수 있습니다.

수동 설정

텍스트와 이미지 임베딩으로 멀티모달 검색을 수동으로 구성하려면 다음 단계를 따르십시오:

  1. 수집 파이프라인을 생성합니다.
  2. 수집을 위한 인덱스를 생성합니다.
  3. 인덱스에 문서를 수집합니다.
  4. 인덱스를 검색합니다.

1단계: 수집 파이프라인 생성

벡터 임베딩을 생성하려면 문서 필드의 텍스트나 이미지를 벡터 임베딩으로 변환하는 text_image_embedding 프로세서가 포함된 수집 파이프라인을 생성해야 합니다. 프로세서의 field_map은 벡터 임베딩을 생성할 텍스트 및 이미지 필드와 임베딩을 저장할 출력 벡터 필드를 결정합니다.

다음 예제 요청은 image_description의 텍스트와 image_binary의 이미지가 텍스트 임베딩으로 변환되고 임베딩이 vector_embedding에 저장되는 수집 파이프라인을 생성합니다:

PUT /_ingest/pipeline/nlp-ingest-pipeline
{
  "description": "A text/image embedding pipeline",
  "processors": [
    {
      "text_image_embedding": {
        "model_id": "-fYQAosBQkdnhhBsK593",
        "embedding": "vector_embedding",
        "field_map": {
          "text": "image_description",
          "image": "image_binary"
        }
      }
    }
  ]
}

2단계: 수집을 위한 인덱스 생성

파이프라인에서 정의한 텍스트 임베딩 프로세서를 사용하려면 이전 단계에서 생성한 파이프라인을 기본 파이프라인으로 추가하여 벡터 인덱스를 생성하십시오. field_map에서 정의한 필드가 올바른 타입으로 매핑되었는지 확인하십시오. 예제를 계속하면, vector_embedding 필드는 모델 차원과 일치하는 차원을 가진 k-NN 벡터로 매핑되어야 합니다. 마찬가지로 image_description 필드는 텍스트로, image_binary는 바이너리로 매핑되어야 합니다.

다음 예제 요청은 기본 수집 파이프라인이 설정된 벡터 인덱스를 생성합니다:

PUT /my-nlp-index
{
  "settings": {
    "index.knn": true,
    "default_pipeline": "nlp-ingest-pipeline",
    "number_of_shards": 2
  },
  "mappings": {
    "properties": {
      "vector_embedding": {
        "type": "knn_vector",
        "dimension": 1024,
        "method": {
          "name": "hnsw",
          "engine": "lucene",
          "parameters": {}
        }
      },
      "image_description": {
        "type": "text"
      },
      "image_binary": {
        "type": "binary"
      }
    }
  }
}

벡터 인덱스 생성 및 지원되는 방법에 대한 자세한 내용은 벡터 인덱스 생성을 참조하십시오.

3단계: 인덱스에 문서 수집

이전 단계에서 생성한 인덱스에 문서를 수집하려면 다음 요청을 보내십시오:

PUT /nlp-index/_doc/1
{
 "image_description": "Orange table",
 "image_binary": "iVBORw0KGgoAAAANSUI..."
}

문서가 인덱스에 수집되기 전에 수집 파이프라인이 문서에서 text_image_embedding 프로세서를 실행하여 image_description 및 image_binary 필드에 대한 벡터 임베딩을 생성합니다. 원본 image_description 및 image_binary 필드 외에도 인덱싱된 문서에는 결합된 벡터 임베딩이 포함된 vector_embedding 필드가 포함됩니다.

4단계: 인덱스 검색

인덱스에서 벡터 검색을 수행하려면 모델 검색 API 또는 쿼리 DSL 쿼리에서 neural 쿼리 절을 사용하십시오. 벡터 검색 필터를 사용하여 결과를 세분화할 수 있습니다. 텍스트, 이미지 또는 텍스트와 이미지 모두로 검색할 수 있습니다.

다음 예제 요청은 neural 쿼리를 사용하여 텍스트와 이미지를 검색합니다:

GET /my-nlp-index/_search
{
  "size": 10,
  "query": {
    "neural": {
      "vector_embedding": {
        "query_text": "Orange table",
        "query_image": "iVBORw0KGgoAAAANSUI...",
        "model_id": "-fYQAosBQkdnhhBsK593",
        "k": 5
      }
    }
  }
}

각 neural 쿼리 요청과 함께 모델 ID를 전달하는 것을 없애려면 벡터 인덱스나 필드에 기본 모델을 설정할 수 있습니다. 자세한 내용은 인덱스 또는 필드에 기본 모델 설정을 참조하십시오.

다음 단계

AI 검색 애플리케이션을 구축하는 방법을 배우려면 튜토리얼을 탐색하십시오.

profile
행복합시다~

0개의 댓글