검색 요구사항은 업계마다 다를 수 있고 시간 경과에 따라 달라질 수 있으므로 기본 순위 지정 동작이 모든 비즈니스 요구사항에 최적이지 않을 수 있습니다. 이 문제를 해결하려면 맞춤 순위 지정을 사용하여 순위 지정 동작을 수정하면 됩니다.
이 페이지에서는 검색 요청에서 맞춤 순위 공식과 공식을 조정하는 방법을 설명합니다. 이 기능은 정형 데이터, 비정형 데이터, 웹사이트 데이터에 사용할 수 있습니다.
개요
맞춤 순위 지정을 사용하면 의미 관련성 점수, 키워드 유사성 점수와 같은 모델 계산 신호와 거리, 문서 연령과 같은 맞춤 필드와 같은 문서 기반 신호에 의존하는 수학적 표현식을 제공할 수 있습니다.
맞춤 순위 지정을 사용하면 다음을 달성할 수 있습니다.
- 노출 가능성 확보: 검색 결과의 최종 순위에 영향을 미치는 신호를 파악합니다.
- 기존 신호 조정: 의미 유사성, 키워드 일치, 문서 최신성과 같은 다양한 신호의 가중치를 조정합니다.
- 비즈니스 로직 통합: 문서 데이터의 맞춤 신호를 순위 공식에 직접 추가합니다.
- 체계적으로 최적화: 오픈소스 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
은 신호 역할을 합니다.
맞춤 순위에서는 문서의 관련성에 영향을 미치는 다양한 신호를 고려합니다. 그런 다음 유효한 구문을 사용하여 이러한 신호가 포함된 수학 표현식을 만듭니다. 이 표현식에서는 신호를 정규화하고 파생된 점수에 가중치를 추가합니다. 최종 맞춤 점수가 계산되고 문서의 순위가 매겨집니다.
이 예에서 이 프로세스는 다음과 같이 설명할 수 있습니다.
각 호텔에는 의미 유사성 점수와 키워드 유사성 점수가 부여됩니다. 또한 공항과의 거리는 문서에서 파생된 중요한 신호입니다.
역수 순위 변환 함수 또는
rr()
는 모든 점수를 동일한 척도로 변환하는 데 사용됩니다.각 신호에서 파생된 점수에 가중치가 부여되고 모든 개별 점수의 합계가 각 호텔의 맞춤 순위 점수가 됩니다.
각 호텔의 다양한 신호는 다음과 같이 표로 정리됩니다.
호텔 | 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
을 반환합니다. 이는 특정 신호가 누락되었을 수 있는 문서를 처리하는 데 중요합니다.
순위 지정 수식 예
기본 선형 조합:
semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
역수 순위와 NaN 처리를 사용하는 복잡한 수식:
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
역수 순위, 지수 함수, 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 호출에 추가하세요.
순위 표현식을 공식화합니다.
검색 결과를 가져옵니다.
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" }'
다음을 바꿉니다.
PROJECT_ID
: Google Cloud 프로젝트의 ID입니다.APP_ID
: 쿼리할 Vertex AI Search 앱의 ID입니다.QUERY
: 검색할 쿼리 텍스트입니다.RANKING_EXPRESSION
: 유효한 순위 지정 공식 구문으로 사용 가능한 신호를 사용하여 작성할 수 있는 맞춤 순위 지정 공식입니다.- 유효한 예는 순위 공식 예시를 참고하세요.
- 최상의 결과를 얻을 수 있는 순위 공식 조정에 관한 내용은 Python 라이브러리를 사용하여 순위 공식 조정을 참고하세요.
Python 라이브러리를 사용하여 순위 공식 조정
고급 사용 사례의 경우 공식에 최적의 가중치를 찾는 것이 어려울 수 있습니다. 이 문제를 해결하려면 오픈소스 도구인 Vertex AI Search의 순위 조정 Python 라이브러리를 사용하여 사용 사례에 적합한 공식을 도출하면 됩니다.
일반적인 워크플로는 다음과 같습니다.
- 해당 골드 라벨이 있는 쿼리 데이터 세트를 준비합니다. 이러한 골든 라벨은 검색 응답에서
SearchResult
객체를 연결하는 데 도움이 되는 문서 ID와 같은 고유 식별 필드일 수 있습니다. - 대표적인 쿼리 집합의 경우
search
API를 호출하여 반환된 모든 문서에 사용 가능한 순위 지정 신호를 가져옵니다.SearchResult.rankSignals
필드에서 확인할 수 있습니다. 이 데이터를 골드 라벨과 함께 저장합니다. Python 라이브러리를 사용하여 이 데이터 세트에서 순위 모델을 학습시킵니다. 자세한 내용은 Clearbox Python 라이브러리를 참고하세요.
학습 결과의 수식을 순위 표현식으로 변환합니다. 이 표현식은 API 호출에 사용할 수 있습니다.