커스텀 임베딩 사용

데이터에 대한 자체 커스텀 벡터 임베딩을 이미 만들었으면 Vertex AI Search에 업로드하고 Vertex AI Search로 쿼리할 때 사용할 수 있습니다.

일반적인 정형 데이터가 있거나 메타데이터가 있는 비정형 데이터가 있는 데이터 스토어에서 이 기능을 사용할 수 있습니다. 미디어 및 의료 검색에는 이 기능을 사용할 수 없습니다.

기본적으로 Vertex AI Search는 필수 구성 없이 벡터 임베딩을 자동으로 생성합니다. 임베딩 생성에 익숙하지 않은 경우 Vertex AI Search에서 자동으로 임베딩을 만들고 사용하도록 하는 것이 좋습니다. 하지만 데이터를 위한 자체 임베딩을 만들었으면 특히 커스텀 임베딩에 검색과 순위를 강화할 수 있는 추가 컨텍스트가 포함되어 있는 경우에는 Vertex AI Search에서 생성한 임베딩 대신 자체 임베딩을 사용하는 것이 좋습니다. 예를 들면 다음과 같습니다.

  • 임베딩은 공개 데이터에서 학습하면 의미적 유사성을 캡처할 수 없는 내부 용어(예: 비공개 문서에만 표시되는 조직별 용어)와 같은 커스텀 단어에서 학습되었습니다.
  • 사용자 프로필의 임베딩을 만들었고 이 임베딩을 사용하여 의미상 관련성이 높은 맞춤설정 문서 순위를 만들려고 합니다. 임베딩을 사용하여 맞춤설정 기반 순위를 얻을 수 있습니다. 맞춤설정 기반 순위는 관련성 기반 순위를 위해 Google의 문서 임베딩을 보완할 수 있습니다.

자체 임베딩을 가져오려면 다음 안내를 따르세요.

  1. 시작하기 전에: 임베딩이 모든 요구사항을 충족하는지 확인합니다.
  2. 임베딩으로 데이터 수집: 임베딩이 포함된 문서를 수집합니다.
  3. 스키마 업데이트: 키 속성 필드와 측정기준 사양으로 스키마를 업데이트합니다.
  4. 임베딩 지정: 전역적으로 또는 검색 요청별로 임베딩을 지정합니다.

시작하기 전에

시작하기 전에 임베딩이 다음 요구사항을 충족하는지 확인합니다.

  • 임베딩은 정형 데이터와 메타데이터가 있는 비정형 데이터에 지원됩니다.
  • 임베딩을 1차원 배열로 제공해야 합니다.
  • 임베딩 차원수는 1~768 사이여야 합니다(해당 값 포함).
  • 임베딩은 텍스트와 이미지에 지원됩니다. 동영상은 지원되지 않습니다.
  • 필드 최대 2개까지 임베딩 키 속성 필드로 태그를 지정할 수 있습니다. 임베딩의 A/B 테스트와 같은 경우에는 필드 2개를 사용할 수 있습니다.
  • 현재 임베딩 필드 키 속성 지정은 설정된 후에는 삭제될 수 없습니다.

임베딩으로 데이터 수집

문서 처리 중에 문서의 데이터나 메타데이터의 일부로 포함된 필드 1~2개에서 문서 임베딩을 수집할 수 있습니다.

임베딩을 사용하여 데이터를 수집하려면 다음 안내를 따르세요.

  1. 데이터 유형에 따라 수집할 데이터를 준비합니다.

    • 정형 데이터: 데이터를 준비할 때 각 문서의 임베딩을 1차원 배열로 문서의 필드 1~2개에 포함합니다. 임베딩을 최대 2개까지 제공할 수 있습니다(예: 임베딩 간에 A/B 테스트를 수행하는 경우). 각 임베딩을 문서의 자체 필드에 제공해야 합니다(예: "example_embedding_vector": [0.1, 0.2, 0.3 ...]).

      수집을 위한 데이터 준비 문서에서 정형 데이터 준비에 대한 안내를 따르세요.

    • 메타데이터가 포함된 비정형 데이터: 데이터를 준비할 때 각 문서의 임베딩을 1차원 배열로 문서 메타데이터의 필드에 포함합니다. 임베딩을 최대 2개까지 제공할 수 있습니다(예: 임베딩 간에 A/B 테스트를 수행하는 경우). 각 임베딩을 문서 메타데이터의 자체 필드에 제공해야 합니다(예: "example_embedding_vector": [0.1, 0.2, 0.3 ...]).

      수집을 위한 데이터 준비 문서에서 수집 방법(Cloud Storage 또는 BigQuery)에 맞는 메타데이터가 포함된 비정형 데이터 준비에 대한 안내를 따르세요.

  2. 엔진 만들기 및 Vertex AI Search로 데이터 수집의 데이터 유형에 대한 안내를 따라 임베딩으로 문서를 수집합니다.

그런 다음 올바른 임베딩 필드를 사용하도록 스키마를 업데이트합니다.

스키마 업데이트

Google Cloud 콘솔이나 API를 사용하여 임베딩 필드의 키 속성 매핑과 측정기준으로 스키마를 업데이트합니다.

콘솔

Google Cloud 콘솔을 사용하여 스키마를 업데이트하려면 다음 단계를 수행합니다.

  1. Google Cloud 콘솔에서 Agent Builder 페이지로 이동합니다.

    Agent Builder를 사용하여 이 모든 것을 자체 데이터에 그라운딩하세요.

  2. 탐색 메뉴에서 데이터 스토어를 클릭합니다.

  3. 이름 열에서 업데이트할 스키마가 있는 데이터 스토어를 클릭합니다.

  4. 스키마 탭을 클릭하여 데이터의 스키마를 봅니다.

  5. Edit(수정) 버튼을 클릭합니다.

  6. 스키마에서 임베딩 필드를 찾고 키 속성 열에서 해당 필드의 키 속성으로 embedding_vector를 선택합니다.

    두 번째 임베딩 필드가 있으면 해당 필드에 이 단계를 반복합니다.

  7. 측정기준 열에 해당 임베딩 필드의 측정기준 수를 입력합니다.

    두 번째 임베딩 필드가 있으면 해당 필드에 이 단계를 반복합니다.

  8. 저장을 클릭하여 스키마 변경사항을 적용합니다.

    스키마를 업데이트한 후 데이터 스토어 크기에 따라 색인을 다시 생성하는 데 최대 24시간이 걸릴 수 있습니다.

REST

API를 사용하여 스키마를 업데이트하려면 다음 단계를 수행합니다.

  1. 스키마 업데이트REST 안내를 따라 각 임베딩 필드의 키 속성 매핑과 측정기준 수를 지정합니다.

    • "keyPropertyMapping": "embedding_vector"
    • "dimension": NUMBER_OF_DIMENSIONS

    예를 들어 다음은 example_embedding_vector 필드의 측정기준이 768개 있는 형식이 지정된 JSON 스키마입니다.

      {
        "$schema": "https://json-schema.org/draft/2020-12/schema",
        "type": "object",
        "properties": {
          "example_embedding_vector": {
            "type": "array",
            "keyPropertyMapping": 'embedding_vector',
            "dimension": 768,
            "items": {
              "type": "number"
            }
          }
        }
      }
    

    업데이트 스키마 요청에서 위의 형식이 지정된 JSON은 JSON 문자열로 포함됩니다.

      "jsonSchema": "{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"properties\":{\"example_embedding_vector\":{\"type\":\"array\",\"keyPropertyMapping\":\"embedding_vector\",\"dimension\":768,\"items\":{\"type\":\"number\"}}}}"
    

    스키마를 업데이트한 후 데이터 스토어 크기에 따라 색인을 다시 생성하는 데 최대 24시간이 걸릴 수 있습니다.

다음으로 임베딩을 지정합니다.

임베딩 지정

스키마 업데이트에서 색인 생성이 완료되면 임베딩 사양이 포함된 검색 요청을 보낼 수 있습니다.

임베딩을 지정하는 방법에는 두 가지가 있습니다.

  • 전역적으로 임베딩 지정: 모든 검색 요청에 같은 임베딩을 지정하려면 Google Cloud 콘솔이나 API를 사용하여 임베딩 사양이 포함되도록 서빙 설정을 업데이트합니다.
  • 검색 요청별로 임베딩 지정: API를 사용하여 각 검색 요청에서 embeddingSpec을 전송합니다. 전역 설정이 있으면 이 설정이 전역 설정을 재정의합니다.

전역적으로 임베딩 지정

Google Cloud 콘솔이나 API를 사용하여 모든 검색 요청에 같은 임베딩을 지정할 수 있습니다.

콘솔

모든 검색 요청에 같은 임베딩 사양을 제공하려면 임베딩 사양으로 서빙 설정을 업데이트합니다.

  1. Google Cloud 콘솔에서 Agent Builder 페이지로 이동합니다.

    Agent Builder

  2. 업데이트하려는 스키마가 있는 데이터 스토어의 보기를 클릭합니다.

  3. 구성 페이지로 이동하여 서빙 탭을 클릭합니다.

  4. 임베딩 필드 경로에 임베딩 키 속성에 매핑한 필드의 이름을 입력합니다.

  5. 순위 표현식에 결과 순위를 제어하는 함수 하나 또는 여러 개를 입력합니다. 입력한 표현식에 따라 가중치가 변수에 적용됩니다. 순위 표현식은 +가 조인된 function, { " + ", function } 형식의 함수 하나 또는 여러 개입니다.

    지원되는 함수는 다음과 같습니다.

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    허용되는 변수는 다음과 같습니다.

    • relevance_score: 문서 관련성을 측정하기 위해 Vertex AI Search에서 제공하는 사전 정의된 변수입니다. 점수 범위는 0~1.0이며 경계값이 포함됩니다.
    • dotProduct(): Vertex AI Search에서 제공하는 사전 정의된 함수입니다. 이 함수에는 embeddingVector.fieldPath에 제공한 필드 이름과 동일한 필드 이름을 제공해야 합니다.

    예를 들면 다음과 같습니다.

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)

REST

모든 검색 요청에 같은 임베딩 사양을 제공하려면 embeddingConfigservingConfig를 업데이트합니다.

  1. 업데이트할 필드로 servingConfig 항목을 패치합니다. updateMask로 업데이트할 필드를 지정합니다.

    다음 예시에서 embeddingConfigexample_embedding_field 필드의 임베딩을 사용하고 relevance_score에 가중치 0.5를 부여합니다.

    curl -X PATCH \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d '{
          "name": "projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search",
          "embeddingConfig": {
            "fieldPath": "example_embedding_field"
          },
          "ranking_expression": "0.5 * relevance_score"
        }' \
    'https://discoveryengine.googleapis.com/v1alpha/projects/PROJECT_ID/locations/LOCATION/collections/default_collection/dataStores/DATA_STORE_ID/servingConfigs/default_search?updateMask=embeddingConfig,rankingExpression'
    
    • fieldPath: 임베딩 키 속성에 매핑한 필드의 이름입니다.
    • ranking_expression: 결과 순위를 제어합니다. 입력한 표현식에 따라 가중치가 변수에 적용됩니다. 순위 표현식은 +가 조인된 function, { " + ", function } 형식의 함수 하나 또는 여러 개입니다.

    지원되는 함수는 다음과 같습니다.

    • DOUBLE * relevance_score
    • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

    허용되는 변수는 다음과 같습니다.

    • relevance_score: Vertex AI Search에서 제공하는 사전 정의된 변수입니다.
    • dotProduct(): Vertex AI Search에서 제공하는 사전 정의된 함수입니다. 내적이 정규화됩니다. 이 함수에는 embeddingVector.fieldPath에 제공한 필드 이름과 동일한 필드 이름을 제공해야 합니다.

    예를 들면 다음과 같습니다.

    • 0.3 * relevance_score
    • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. 검색 요청을 전송하면 servingConfig.embeddingConfig가 자동으로 포함됩니다.

    다른 embeddingSpec을 명시적으로 포함하는 검색 요청을 전송하면 servingConfig.embeddingConfig가 재정의됩니다. 단일 검색 요청에 임베딩 사양을 제공하는 방법은 요청별 안내를 참조하세요.

검색 요청별로 임베딩 지정

API를 사용하여 단일 검색 요청에 임베딩 사양을 제공할 수 있습니다. 요청별 임베딩 사양은 모든 전역 임베딩 사양을 재정의합니다.

  1. embeddingSpec이 포함된 검색 요청을 전송합니다.

    다음 embeddingSpec 예시에서는 example_embedding_field 필드의 임베딩을 사용하고 '예시 쿼리'를 입력 벡터로 지정하며 순위를 계산할 때 relevance_score에 가중치 0.5를, example_embedding_field에 가중치 0.3을 부여합니다.

      "embeddingSpec": {
        "embeddingVectors": [{
          "fieldPath": "example_embedding_field",
          "vector": [
            0.96241474,
            -0.45999944,
            0.108588696
          ]
        }]
      },
      "ranking_expression": "0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)"
    
    • fieldPath: 임베딩 키 속성에 매핑한 필드의 이름입니다.
    • vector: 배열로 제공된 입력 벡터입니다.
    • ranking_expression: 결과 순위를 제어합니다. 입력한 표현식에 따라 가중치가 변수에 적용됩니다. 순위 표현식은 +가 조인된 function, { " + ", function } 형식의 함수 하나 또는 여러 개입니다.

      지원되는 함수는 다음과 같습니다.

      • DOUBLE * relevance_score
      • DOUBLE * dotProduct(EMBEDDING_FIELD_PATH)

      허용되는 변수는 다음과 같습니다.

      • relevance_score: 문서 관련성을 측정하기 위해 Vertex AI Search에서 제공하는 사전 정의된 변수입니다. 점수 범위는 0~1.0이며 경계값이 포함됩니다.
      • dotProduct(): Vertex AI Search에서 제공하는 사전 정의된 함수입니다. 이 함수에는 embeddingVector.fieldPath에 제공한 필드 이름과 동일한 필드 이름을 제공해야 합니다.

      예를 들면 다음과 같습니다.

      • 0.3 * relevance_score
      • 0.5 * relevance_score + 0.3 * dotProduct(example_embedding_field)
  2. 검색 응답에서 결과를 가져옵니다. 각 검색 결과에는 관련성 점수와 내적 값이 포함됩니다. 예를 들면 다음과 같습니다.

    "modelScores": {
      "dotProduct(example_embedding_field)": [0.02150772698223591],
      "relevance_score": [ 0.8828125 ]
    }
    
    • dotProduct(): 검색 결과 문서에서 계산된 내적입니다.
    • relevance_score: 검색 결과 문서에서 계산된 관련성 점수입니다.

다음 단계