검색 결과 순위 맞춤설정

검색 요구사항은 업계마다 다를 수 있고 시간 경과에 따라 달라질 수 있으므로 기본 순위 지정 동작이 모든 비즈니스 요구사항에 최적이지 않을 수 있습니다. 이 문제를 해결하려면 맞춤 순위 지정을 사용하여 순위 지정 동작을 수정하면 됩니다.

이 페이지에서는 검색 요청에서 맞춤 순위 공식과 공식을 조정하는 방법을 설명합니다. 이 기능은 정형 데이터, 비정형 데이터, 웹사이트 데이터에 사용할 수 있습니다.

개요

맞춤 순위 지정을 사용하면 의미 관련성 점수, 키워드 유사성 점수와 같은 모델 계산 신호와 거리, 문서 연령과 같은 맞춤 필드와 같은 문서 기반 신호에 의존하는 수학적 표현식을 제공할 수 있습니다.

맞춤 순위 지정을 사용하면 다음을 달성할 수 있습니다.

  • 노출 가능성 확보: 검색 결과의 최종 순위에 영향을 미치는 신호를 파악합니다.
  • 기존 신호 조정: 의미 유사성, 키워드 일치, 문서 최신성과 같은 다양한 신호의 가중치를 조정합니다.
  • 비즈니스 로직 통합: 문서 데이터의 맞춤 신호를 순위 공식에 직접 추가합니다.
  • 체계적으로 최적화: 오픈소스 Python 라이브러리를 사용하여 최적의 순위 공식이 프로그래매틱 방식으로 검색됩니다.

맞춤 순위 지정의 필요성 - 예

호텔 예약 웹사이트에서 다음 문자열을 쿼리하는 시나리오를 고려해 보세요.

luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.

다음 항목이 검색되었다고 가정해 보겠습니다.

  • 호텔 A: "공항이 내려다보이는 밴쿠버 최고의 럭셔리 호텔입니다. 멋진 루프톱 수영장이 있습니다. 반려동물은 허용되지 않습니다.'
  • 호텔 B: "밴쿠버 다운타운에 있는 스타일리시한 현대식 호텔입니다. 넓은 객실을 갖춘 반려동물 동반 가능 숙박 시설입니다. 대형 실내 수영장과 피트니스 센터가 있습니다.'
  • 호텔 C: '수족관 근처의 매력적인 반려동물 동반 가능 부티크 호텔 (다운타운에서 도보 10분 거리)입니다. 아름다운 정원 안뜰이 있습니다. 수영장이 없습니다.'
  • 호텔 D: '상징적인 전원풍 리조트입니다. 훌륭한 식사와 완벽한 서비스로 유명합니다. 실내 수영장과 스파가 있습니다. 반려동물 동반 가능 옵션은 요청 시 제공됩니다.'

카탈로그의 모든 호텔에는 distance_from_airport 필드가 킬로미터(km) 단위로 포함됩니다.

임베딩 기반 순위 지정

검색 시스템이 쿼리를 단일 임베딩으로 변환합니다. 그런 다음 이 쿼리 임베딩을 카탈로그에 있는 모든 호텔의 임베딩과 비교합니다. 쿼리의 임베딩과 수치적으로 가장 가까운 임베딩이 있는 호텔의 순위가 더 높습니다.

순전히 임베딩 기반 관련성 검색에서 나올 수 있는 순위는 다음과 같습니다.

순위 호텔 이 순위의 가능한 이유
1 Hotel A 럭셔리, 공항, 루프톱 수영장과 매우 강력한 시맨틱 일치 '반려동물 금지'는 바람직하지 않지만 다른 강력한 일치 항목이 우세합니다.
2 Hotel B '반려동물 동반 가능' 및 '수영장'과 의미가 유사합니다. 하지만 '옥상' 대신 '실내', '럭셔리' 대신 '모던' 및 '스타일리시', '공항' 대신 '시내'를 사용하면 A보다 관련성이 떨어집니다.
3 호텔 D 반려견 동반 가능, 대형 수영장과 의미적으로 일치하지만 '옥상' 대신 '실내'를, '럭셔리' 대신 '러스틱'을 사용하므로 A 및 D보다 의미적으로 관련성이 약간 떨어집니다.
4 Hotel C 반려동물 동반 가능이라는 점은 강점이지만 '수영장 없음' 및 '부티크'는 이 특정 질문과의 관련성을 크게 줄입니다.

이 순위는 가장 관련성이 높은 결과를 제공하지 않습니다. '반려동물 금지'로 인해 많은 사용자가 선호하지 않을 수 있지만 호텔 A가 상위에 표시됩니다. 호텔 D는 여러 기준에 부합하지만 '소박한' 상태가 반드시 '럭셔리'에 매핑되지 않고 '실내' 수영장이 '대형' 및 '실외'의 정확한 일치보다 순위가 낮기 때문에 순위가 낮습니다.

커스텀 순위

이 예시 시나리오에 대해 다음과 같은 순위 표현식을 구성했다고 가정해 보겠습니다. 이 표현식의 구성요소에 관한 자세한 내용은 맞춤 순위 구현 정보를 참고하세요.

rankingExpression = rr(semantic_similarity_score, 32) * 0.4 + rr(keyword_similarity_score, 32) * 0.3 + rr(c.distance_from_airport * -1, 32) * 0.8

여기서 distance_from_airport은 카탈로그에서 가져올 수 있는 필드이고 c.distance_from_airport은 신호 역할을 합니다.

맞춤 순위에서는 문서의 관련성에 영향을 미치는 다양한 신호를 고려합니다. 그런 다음 유효한 구문을 사용하여 이러한 신호가 포함된 수학 표현식을 만듭니다. 이 표현식에서는 신호를 정규화하고 파생된 점수에 가중치를 추가합니다. 최종 맞춤 점수가 계산되고 문서의 순위가 매겨집니다.

이 예에서 이 프로세스는 다음과 같이 설명할 수 있습니다.

  1. 각 호텔에는 의미 유사성 점수와 키워드 유사성 점수가 부여됩니다. 또한 공항과의 거리는 문서에서 파생된 중요한 신호입니다.

  2. 역수 순위 변환 함수 또는 rr()는 모든 점수를 동일한 척도로 변환하는 데 사용됩니다.

  3. 각 신호에서 파생된 점수에 가중치가 부여되고 모든 개별 점수의 합계가 각 호텔의 맞춤 순위 점수가 됩니다.

각 호텔의 다양한 신호는 다음과 같이 표로 정리됩니다.

호텔 semantic_similarity_score keyword_similarity_score c.distance_from_airport 맞춤 순위 점수 커스텀 순위 임베딩 기반 순위 지정
호텔 A 9.0 6.2 ('공항', '럭셔리', '루프탑 수영장') 5.0 0.04879 2 1
호텔 B 7.5 5.6 ('반려동물 동반 가능', '시내', '실내 수영장', '세련됨') 12.5 0.04691 3 2
호텔 C 5.0 3.4 ('반려동물 동반 가능', '시내') 18 0.04525 4 4
호텔 D 8.0 4.5 ('실내 수영장', '반려동물 동반 가능', '소박함') 1 0.04890 1 3

두 가지 순위 지정 방법을 비교해 보면 맞춤 순위 지정이 순전히 삽입 기반 순위 지정보다 사용자의 요구사항에 더 잘 부합하는 신중한 순위 지정을 제공합니다.

맞춤 순위 구현 정보

검색 결과에서 맞춤 순위를 얻으려면 다음 필드를 제공하여 search 메서드를 호출해야 합니다.

  • 순위 표현식 백엔드 (rankingExpressionBackend): 이 필드는 다음 순위 지정 메커니즘 중 사용할 메커니즘을 나타냅니다.

    • RANK_BY_EMBEDDING: 이 필드가 지정되지 않은 경우의 기본값입니다. 이 옵션을 선택하면 임베딩 기반 또는 관련성 기반의 사전 정의된 순위 표현식에 따라 결과의 순위가 지정됩니다.
    • RANK_BY_FORMULA: 기본 순위를 재정의하고 rankingExpression 필드에 맞춤 수식을 제공할 수 있습니다.
  • 순위 표현식 (rankingExpression): 이 필드에는 검색된 문서의 순위를 결정하는 수학 공식이 포함됩니다.

    • RANK_BY_EMBEDDING의 경우 관련성 점수 기반(double * relevanceScore) 또는 삽입 기반(double * dotProduct(embedding_field_path))입니다.

    • RANK_BY_FORMULA의 경우 여러 신호를 결합하여 각 검색 결과의 새 점수를 계산하는 선별된 표현식입니다.

표준 신호

Vertex AI Search는 맞춤 순위를 지정하는 데 사용할 수 있는 다양한 신호를 제공합니다. 사용 가능한 표준 신호는 다음과 같습니다.

신호 이름 설명
default_rank 표준 VAIS 순위 알고리즘에 따라 결정된 문서의 기본 순위입니다.
semantic_similarity_score 검색어와 콘텐츠 임베딩을 기반으로 계산된 점수로, 검색어가 문서의 콘텐츠와 얼마나 유사한지 나타냅니다. 이는 Google의 독점 알고리즘을 사용하여 계산됩니다.
relevance_score 복잡한 질문-문서 상호작용을 처리하는 심층 관련성 모델에서 생성된 점수입니다. 모델은 콘텐츠의 맥락에서 질문의 의미와 의도를 파악합니다. 이는 Google의 독점 알고리즘을 사용하여 계산됩니다.
keyword_similarity_score 키워드 검색 유형을 강조하는 점수입니다. 이 신호는 Best Match 25 (BM25) 순위 지정 함수를 사용합니다.
document_age 문서의 기간(시간)입니다. 부동 소수점 값을 지원합니다. 예를 들어 값 0.5는 30분을 의미하고 50은 2일 2시간을 의미합니다.
pctr_rank 사용자 이벤트 데이터를 기반으로 계산된 예측 전환율을 나타내는 순위입니다. 이 신호는 예측 클릭률 (pCTR)을 사용하여 사용자의 관점에서 검색 결과의 관련성을 측정합니다.
topicality_rank 독점 Google 알고리즘을 사용하여 계산된 키워드 유사성 조정을 나타내는 순위입니다.
boosting_factor 문서에 적용한 모든 맞춤 부스트의 조합입니다.

이러한 필드 외에도 검색 가능으로 표시된 문서의 맞춤 필드를 사용할 수 있습니다. 이렇게 하려면 필드 이름에 c. 접두사를 추가합니다. 예를 들어 date_approved라는 맞춤 필드가 있는 경우 c.date_approved을 맞춤 신호로 사용할 수 있습니다.

신호 이름은 영문자와 밑줄 (_)의 조합입니다. 다음은 신호 이름으로 사용할 수 없는 예약된 이름 목록입니다. log, exp, rr, is_nan, fill_nan

순위 공식 문법

맞춤 순위 공식은 다음 구성요소로 이루어진 수학적 표현식입니다.

  • 숫자 (double): 신호 또는 표현식에 가중치를 추가하는 양수 또는 음수 부동 소수점 값입니다.

  • 신호 (signal): 사용 가능한 신호 섹션에 나열된 신호의 이름입니다.

  • 산술 연산자: + (덧셈) 및 * (곱셈)

  • 수학 함수:

    • log(expression): 자연 로그
    • exp(expression): 자연 지수

    이러한 각 표현식은 신호 측면에서 작성된 표현식인 인수를 정확히 하나 허용합니다.

    유효한 함수의 예: exp(c.document_age), log(keywordSimilarityScore * 0.2 + 1.0)

  • 역수 순위 변환 함수 (rr): 이 함수는 rr(expression, k)로 표현됩니다. 먼저 문서가 expression 값에 따라 내림차순으로 정렬되고 문서에 순위가 할당됩니다. 그런 다음 1 / (rank_i + k) 표현식을 사용하여 최종 값을 계산합니다. 여기서 rank_i은 정렬된 목록에서 문서의 위치(0부터 시작)이고 k은 사용자가 제공하는 양의 부동 소수점 숫자입니다.

    rr() 함수는 모든 점수를 동일한 스케일로 변환하여 추가 정규화가 필요하지 않습니다.

  • 숫자가 아님 (NaN) 처리 함수:

    • is_nan(expression): 표현식이 NaN으로 평가되는 경우(예: 문서의 신호가 누락된 경우) 1이 반환됩니다. 그렇지 않으면 0이 반환됩니다.
    • fill_nan(arg_expression, fill_with_expression): arg_expression이 NaN으로 평가되면 fill_with_expression를 반환합니다. 그 외에는 arg_expression을 반환합니다. 이는 특정 신호가 누락되었을 수 있는 문서를 처리하는 데 중요합니다.

순위 지정 수식 예

  1. 기본 선형 조합:

    semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
    
  2. 역수 순위와 NaN 처리를 사용하는 복잡한 수식:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
    
  3. 역수 순위, 지수 함수, NaN 처리를 사용하는 복잡한 공식:

    rr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
    

검색 결과에서 문서의 순위를 맞춤설정하려면 수식을 직접 작성하여 search API 호출에 추가하세요.

  1. 순위 표현식을 공식화합니다.

  2. 검색 결과를 가져옵니다.

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://discoveryengine.googleapis.com/v1/projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search:search" \
    -d '{
    "servingConfig": "projects/PROJECT_ID/locations/global/collections/default_collection/engines/APP_ID/servingConfigs/default_search",
    "query": "QUERY",
    "rankingExpression": "RANKING_EXPRESSION",
    "rankingExpressionBackend": "RANK_BY_FORMULA"
    }'
    

    다음을 바꿉니다.

Python 라이브러리를 사용하여 순위 공식 조정

고급 사용 사례의 경우 공식에 최적의 가중치를 찾는 것이 어려울 수 있습니다. 이 문제를 해결하려면 오픈소스 도구인 Vertex AI Search의 순위 조정 Python 라이브러리를 사용하여 사용 사례에 적합한 공식을 도출하면 됩니다.

일반적인 워크플로는 다음과 같습니다.

  1. 해당 골드 라벨이 있는 쿼리 데이터 세트를 준비합니다. 이러한 골든 라벨은 검색 응답에서 SearchResult 객체를 연결하는 데 도움이 되는 문서 ID와 같은 고유 식별 필드일 수 있습니다.
  2. 대표적인 쿼리 집합의 경우 search API를 호출하여 반환된 모든 문서에 사용 가능한 순위 지정 신호를 가져옵니다. SearchResult.rankSignals 필드에서 확인할 수 있습니다. 이 데이터를 골드 라벨과 함께 저장합니다.
  3. Python 라이브러리를 사용하여 이 데이터 세트에서 순위 모델을 학습시킵니다. 자세한 내용은 Clearbox Python 라이브러리를 참고하세요.

  4. 학습 결과의 수식을 순위 표현식으로 변환합니다. 이 표현식은 API 호출에 사용할 수 있습니다.