Cortex Search Scoring 사용자 지정하기

기본적으로, Cortex Search Service에 대한 쿼리는 벡터 유사성, 텍스트 일치, 순위 재지정을 활용하여 각 결과의 관련성을 결정합니다. 검색 결과의 채점을 여러 가지 방법으로 사용자 지정할 수 있습니다.

  • 숫자 메타데이터 열을 기반으로 숫자 부스트 적용

  • 타임스탬프 메타데이터 열을 기반으로 시간 감쇠 적용

  • 쿼리 대기 시간을 줄이기 위해 순위 재지정 비활성화

  • :ref:`구성 요소 가중치<label-cortex_search_weights>`를 수정하여 전체 검색 순위에서 개별 채점 구성 요소(벡터, 텍스트, 순위 재지정)의 가중치를 조정합니다.

숫자 부스트 및 시간 감소

숫자 또는 타임스탬프 메타데이터를 기준으로 감쇠 검색 결과를 향상하거나 적용할 수 있습니다. 이 기능은 쿼리 시간에 문서의 관련성을 결정하는 데 도움이 될 수 있는 각 결과에 대해 인기도 또는 최신성 신호와 같은 정형 메타데이터가 있는 경우에 유용합니다. 쿼리를 만들 때 두 가지 카테고리의 순위 신호를 지정할 수 있습니다.

타입

설명

적용 가능한 열 유형

메타데이터 필드 예제(예시)

숫자 부스트

관심도나 활동이 많은 결과를 높이는 숫자 메타데이터입니다.

숫자 데이터 타입

clicks, likes, comments

시간 감쇠

날짜 또는 시간 메타데이터를 사용하면 보다 최신의 결과를 확인할 수 있습니다. 최근 신호의 영향력은 시간이 지남에 따라 감소합니다.

날짜 및 시간 데이터 타입

created_timestamp, last_opened_timestamp, action_date

부스트 및 감쇠 메타데이터는 Cortex Search Service 생성 시 사용된 소스 테이블의 열에서 가져옵니다. 쿼리 생성 시 부스트 또는 감쇠에 사용할 메타데이터 열을 지정할 수 있지만, 해당 열들은 Cortex Search Service 생성 시 반드시 포함되어야 합니다.

Cortex Search Service를 쿼리할 때 scoring_config.functions 필드의 numeric_booststime_decays 필드에서 부스팅 또는 감쇠에 사용할 열을 선택 사항으로 지정합니다. 각 부스트 또는 쇠퇴에 대한 가중치를 지정할 수도 있습니다.

{
  "scoring_config": {
    "functions": {
      "numeric_boosts": [
        {
          "column": "column_name",
          "weight": 1
        },
        /* ... */
      ],
      "time_decays": [
        {
          "column": "column_name",
          "weight": 1,
          "limit_hours": 120
        },
        /* ... */
      ]
    }
  }
}
Copy

속성

  • numeric_boosts (array, 선택 사항):

    • <numeric_boost_object> (object, 선택 사항):

      • column_name (string): 부스트가 적용될 숫자 열을 지정합니다.

      • weight (float): 순위 프로세스에서 부스트된 열에 할당된 가중치 또는 중요도를 지정합니다. 여러 열을 지정한 경우 가중치가 높을수록 필드의 영향력이 커집니다.

  • time_decays (array, 선택 사항):

    • <time_decay_object> (object, 선택 사항):

      • column_name (string): 감쇠를 적용할 시간 또는 날짜 열을 지정합니다.

      • weight (float): 순위 프로세스에서 쇠퇴한 열에 할당된 가중치 또는 중요도를 지정합니다. 여러 열을 지정한 경우 가중치가 높을수록 필드의 영향력이 커집니다.

      • limit_hours (float): 문서의 관련성이나 중요도에 영향을 미치기 시작하는 경계를 설정합니다. 예를 들어, limit_hours 값이 240이면 now 타임스탬프에서 과거 240시간(10일) 이상의 타임스탬프가 있는 문서는 크게 부스트되지 않는 반면, 최근 240시간 이내의 타임스탬프가 있는 문서는 더 크게 부스트되어야 함을 나타냅니다.

      • now (string, 선택 사항): ISO-8601 형식 yyyy-MM-dd'T'HH:mm:ss.SSSXXX 로 감쇠를 계산하는 선택적 참조 타임스탬프. 예: "2025-02-19T14:30:45.123-08:00". 지정하지 않으면 기본값은 현재 타임스탬프입니다.

참고

숫자 부스트는 반환된 필드에 가중 평균으로 적용되며, 디케이는 로그 평활화 함수를 활용하여 최근 값이 낮은 값을 강등합니다.

가중치는 지정된 부스트 또는 감쇠 필드에 상대적입니다. boosts 또는 decays 배열 내에 단일 필드만 제공되는 경우 가중치 값은 상관없습니다.

필드가 2개 이상 제공된 경우 가중치는 서로를 기준으로 적용됩니다. 예를 들어, 가중치가 10인 필드는 가중치가 5인 필드보다 레코드의 순위에 두 배 더 많은 영향을 미칩니다.

순위 재조정

기본적으로 Cortex Search Service에 대한 쿼리는 의미 체계 순위 재지정 을 활용하여 검색 결과 관련성을 개선합니다. 순위 재지정은 결과 관련성을 측정 가능하게 높일 수 있지만, 쿼리 대기 시간도 눈에 띄게 증가할 수 있습니다. 비즈니스 사용 사례에서 더 빠른 쿼리 속도를 위해 순위 재지정이 제공하는 품질 이점을 희생할 수 있다고 판단되면 모든 Cortex Search 쿼리에서 순위 재지정 기능을 사용하지 않도록 설정할 수 있습니다.

참고

순위 재지정을 비활성화하면 쿼리 지연 시간이 평균 100~300밀리초 단축되지만, 정확한 지연 시간 단축 정도와 품질 저하 정도는 워크로드에 따라 달라집니다. 쿼리에서 순위 재지정 기능을 비활성화할지 여부를 결정하기 전에 순위 재지정 기능이 있는 경우와 없는 경우의 결과를 나란히 평가하십시오.

다음 형식의 scoring_config.reranker 필드에서 쿼리 시 개별 쿼리에 대한 순위 재지정을 비활성화할 수 있습니다.

{
  "scoring_config": {
      "reranker": "none"
  }
}
Copy

속성

  • reranker (string, 선택 사항): 순위 재지정을 꺼야 하는 경우 “없음”으로 설정할 수 있는 매개 변수입니다. 제외되거나 null인 경우 기본 순위 재지정이 사용됩니다.

구성 요소 가중치

scoring_config 오브젝트의 weights 필드를 사용하면 각 결과의 전체 점수에 개별 채점 구성 요소의 가중치를 지정할 수 있습니다(vectors, texts, reranker). 기본적으로 가중치는 각 구성 요소에 대해 1.0으로 설정되며 전체 점수에 동일하게 기여합니다.

다음 형식으로 가중치를 지정할 수 있습니다.

{
  "scoring_config": {
    "functions": {
      "weights": {
        "texts": 3,
        "vectors": 2,
        "reranker": 1
      }
    }
  }
}
Copy

속성

  • ``weights``(오브젝트, 선택 사항): 각 문서에 대한 텍스트, 벡터 및 순위 재지정 점수를 결합하기 위한 가중치를 지정합니다. 가중치는 이 필드 내에서 서로 상대적으로 적용됩니다.

예를 들어, 다음은 텍스트 점수가 벡터 점수보다 3배 더 크게 가중치가 부여되어야 하고 순위 재지정 점수가 텍스트 점수보다 2배 더 크게 가중치가 적용되어야 함을 지정합니다.

{
  "scoring_config": {
    "functions": {
      "weights": {
        "texts": 3,
        "vectors": 1,
        "reranker": 2
      }
    }
  }
}
Copy

명명된 채점 프로필

부스트/감쇠 및 순위 재지정 설정은 함께 *채점 구성*을 형성하며, 이는 쿼리를 만들 때 scoring_config 매개 변수에서 지정할 수 있습니다. 채점 구성에는 이름을 지정하고 Cortex Search Service에 연결할 수도 있습니다.

명명된 채점 프로필을 사용하면 매번 전체 채점 구성을 지정할 필요 없이 애플리케이션과 쿼리 전체에서 채점 구성을 쉽게 사용할 수 있습니다. 채점 구성을 변경하는 경우 모든 쿼리가 아니라 한 곳에서만 업데이트하면 됩니다.

Cortex Search Service에 채점 프로필을 추가하려면 다음 예와 같이 ALTER CORTEX SEARCH SERVICE … ADD SCORING PROFILE 명령을 사용하세요.

ALTER CORTEX SEARCH SERVICE my_search_service
  ADD SCORING PROFILE IF NOT EXISTS heavy_comments_with_likes
  '{
    "functions": {
            "numeric_boosts": [
                { "column": "comments", "weight": 6 },
                { "column": "likes", "weight": 1 }
            ]
    }
  }'
Copy

채점 프로필 정의의 구문은 쿼리를 만들 때 scoring_config 매개 변수에서 사용된 것과 동일한 스키마입니다.

채점 프로필은 생성된 후에는 수정할 수 없습니다. 프로필을 변경하려면 프로필을 삭제하고 새 채점 구성으로 다시 만드세요. 명명된 채점 프로필을 삭제하려면 :doc:`ALTER CORTEX SEARCH SERVICE … DROP SCORING PROFILE</sql-reference/sql/alter-cortex-search>`을 사용하세요.

명명된 채점 프로필을 사용하여 Cortex Search Service를 쿼리하려면 다음 예와 같이 쿼리를 만들 때 scoring_profile 매개 변수에 프로필 이름을 지정합니다.

results = svc.search(
    query="technology",
    columns=["comments", "likes"],
    scoring_profile="heavy_comments_with_likes",
    limit=10
)
Copy

서비스에 저장된 채점 프로필을 보려면 다음 예와 같이 INFORMATION_SCHEMA 스키마의 CORTEX_SEARCH_SERVICE_SCORING_PROFILES 뷰를 쿼리하세요.

SELECT *
  FROM my_db.INFORMATION_SCHEMA.CORTEX_SEARCH_SERVICE_SCORING_PROFILES
  WHERE service_name = 'my_search_service';
Copy

참고

DESCRIBE CORTEX SEARCH SERVICE 및 SHOW CORTEX SEARCH SERVICE 결과에 각 서비스에 대한 채점 프로필 수를 나타내는 ``scoring_profile_count``라는 열이 포함됩니다.

구성 요소 점수

구성 요소 점수는 검색 결과에 대한 자세한 점수 정보를 제공합니다. 이를 통해 개발자는 검색 순위가 결정되는 방식을 이해하고 검색 성능을 디버그할 수 있습니다. 각 결과에 대한 점수는 각 검색 “구성 요소”(텍스트, 벡터)에 대한 @scores 필드에 반환됩니다. 구성 요소 점수는 다음을 수행해야 하는 시나리오에서 유용합니다.

  • 임계값 설정: 구성 요소 점수를 사용하여 에이전트와 같은 다운스트림 프로세스에 결과를 전달할 시점을 결정합니다.

  • 검색 순위 디버그: 검색 결과에서 특정 문서의 순위가 다른 문서보다 높은 이유를 파악합니다.

구성 요소 점수 이해

구성 요소 점수는 Cortex Search가 각 검색 결과에 대한 최종 관련성 점수를 계산하는 방법에 대한 자세한 분석을 제공합니다. 채점 시스템은 다음과 같은 여러 구성 요소로 구성됩니다.

코사인 유사도

쿼리 인덱스와 벡터 인덱스 간의 의미 체계 유사성을 기준으로 한 점수입니다. 점수가 높을수록 벡터 임베딩을 사용하는 개념 또는 의미 기반 일치가 더 강력한 것입니다.

텍스트 일치

쿼리 인덱스와 텍스트 인덱스 간의 키워드 및 어휘 유사성을 기준으로 한 점수입니다. 점수가 높을수록 정확히 일치하거나 퍼지 키워드 일치가 더 강력한 것입니다.

응답 형식

구성 요소 점수를 활성화하면 모든 Cortex Search 쿼리에 대해 다음과 같은 점수 정보가 반환됩니다. Cortex Search Query 구문에 대한 자세한 내용은 Cortex Search Service 쿼리하기 섹션을 참조하세요.

{
  "results": [
    {
      "@scores": {
        "cosine_similarity": <cosine_similarity_score>,
        "text_match": <text_match_score>
      }
    }
  ]
}

점수 필드

  • @scores.cosine_similarity: 쿼리와 벡터 인덱스의 값 사이의 코사인 유사성 점수로, 범위는 [-1, 1]입니다.

  • @scores.text_match: 쿼리와 텍스트 인덱스의 값 사이의 텍스트 일치 점수입니다. 이 점수는 무제한이며 범위는 쿼리에 따라 다릅니다.

사용법 노트

  • cosine_similarity 점수는 다음과 같습니다.

    • VECTOR INDEX가 포함된 모든 쿼리에 대해 반환됩니다.

    • [-1, 1] 범위로 제한되며 다양한 쿼리에서 비교할 수 있습니다.

    • 많은 경우에 검색 품질을 향상시키는 접두사를 각 쿼리 앞에 추가한 후 계산됩니다. 이 접두사는 모델마다 다르지만 일반적으로 ``Represent this sentence for searching relevant passages: {query}``와 같습니다. 반환된 코사인 유사도 점수는 접두사가 있는 쿼리와 벡터 인덱스의 값 사이의 코사인 유사도입니다.

  • text_match 점수는 다음과 같습니다.

    • TEXT INDEX가 포함된 모든 쿼리에 대해 반환됩니다. text_match 점수는 무제한입니다.

    • 다른 쿼리 간에는 비교할 수 없습니다. 예를 들어, 주어진 쿼리에 대한 결과의 텍스트 일치 점수 0.95는 동일한 서비스에 대한 다른 쿼리의 결과에 대한 텍스트 일치 점수 0.95와 비교할 수 없습니다.

  • @scores 값은 weights 매개 변수의 영향을 받지 않습니다. 가중치는 결과의 최종 순서에만 영향을 줍니다.