Dado que las necesidades de búsqueda pueden diferir según las industrias y variar con el tiempo, es posible que el comportamiento de clasificación predeterminado no sea óptimo para todas las necesidades comerciales. Para solucionar este problema, puedes modificar el comportamiento de la clasificación con la clasificación personalizada.
En esta página, se describe cómo usar una fórmula de clasificación personalizada en tu solicitud de búsqueda y cómo ajustarla. Esta función está disponible para datos estructurados, no estructurados y de sitios web.
Descripción general
El ranking personalizado te permite proporcionar una expresión matemática que se basa en un conjunto de indicadores calculados por el modelo, como la puntuación de relevancia semántica y la puntuación de similitud de palabras clave, y en indicadores basados en documentos, como un campo personalizado, como la distancia o la antigüedad del documento.
Con el ranking personalizado, puedes lograr lo siguiente:
- Obtén visibilidad: Comprende qué indicadores contribuyen a la clasificación final de tus resultados de búsqueda.
- Ajusta los indicadores existentes: Ajusta las ponderaciones de varios indicadores, como la similitud semántica, la coincidencia de palabras clave o la actualización de documentos.
- Incorpora la lógica empresarial: Agrega tus propios indicadores personalizados de los datos de tus documentos directamente en la fórmula de clasificación.
- Optimiza de forma sistemática: Usa la biblioteca de Python de código abierto para descubrir de forma programática la fórmula de clasificación óptima.
Necesidad de una clasificación personalizada: un ejemplo
Considera una situación en la que se busca la siguiente cadena en un sitio web de reservas de hoteles:
luxury hotel with a large rooftop pool in Vancouver, pet-friendly and close to airport.
Supongamos que se recuperan las siguientes entradas:
- Hotel A: "El principal hotel de lujo de Vancouver con vista al aeropuerto. Cuenta con una impresionante piscina en la azotea. No se permiten mascotas".
- Hotel B: "Hotel moderno y elegante en el centro de Vancouver. Se admiten mascotas y las habitaciones son amplias. Cuenta con una gran piscina cubierta y un gimnasio".
- Hotel C: "Un encantador hotel boutique que admite mascotas cerca del acuario (a 10 minutos a pie del centro). Cuenta con un hermoso patio con jardín. No hay piscina".
- Hotel D: "Un complejo turístico rústico icónico. Conocido por su exquisita gastronomía y su servicio impecable. Cuenta con una piscina cubierta y un spa. Opciones aptas para mascotas disponibles a pedido".
Todos los hoteles del catálogo incluyen un campo distance_from_airport
en kilómetros (km).
Clasificación basada en embeddings
El sistema de búsqueda convierte la búsqueda en un solo embedding. Luego, compara esta incorporación de la búsqueda con las incorporaciones de todos los hoteles de su catálogo. Los hoteles con incorporaciones que son numéricamente más cercanas a la incorporación de la búsqueda se clasifican más alto.
Esta es la clasificación probable de una búsqueda de relevancia basada únicamente en embeddings:
Clasificación | Hotel | Posible motivo de esta clasificación |
---|---|---|
1 | Hotel A | Hay una coincidencia semántica muy sólida para lujo, aeropuerto y piscina en la azotea. El "no se admiten mascotas" no es deseable, pero las otras coincidencias sólidas dominan. |
2 | Hotel B | Buena concordancia semántica para "admite mascotas" y "piscina". Sin embargo, "interior" en lugar de "azotea", "moderno" y "elegante" en lugar de "lujoso", y "centro de la ciudad" en lugar de "aeropuerto" hacen que sea menos relevante que A. |
3 | Hotel D | Hay una fuerte coincidencia semántica para "admite mascotas" y "piscina grande", pero "interior" en lugar de "en la azotea" y "rústico" en lugar de "de lujo" hacen que sea un poco menos pertinente semánticamente que A y D. |
4 | Hotel C | Es muy apto para mascotas, pero "sin piscina" y "boutique" reducen significativamente su relevancia para esta búsqueda específica. |
Esta clasificación no ofrece los resultados más relevantes. El hotel A se clasifica en primer lugar, aunque, con la indicación "no se admiten mascotas", es posible que muchos usuarios no lo prefieran. El hotel D, que cumple con muchos criterios, se clasifica más abajo porque su estado “rústico” no se correlaciona necesariamente con “lujoso”, y la piscina “cubierta” se clasifica más abajo que las coincidencias exactas de “grande” y “al aire libre”.
Clasificación personalizada
Supongamos que configuraste la siguiente expresión de clasificación para este caso de ejemplo. Para obtener información sobre los componentes de esta expresión, consulta Acerca de la implementación de la clasificación personalizada.
rankingExpression = rr(semantic_similarity_score, 32) * 0.4 + rr(keyword_similarity_score, 32) * 0.3 + rr(c.distance_from_airport * -1, 32) * 0.8
Aquí, distance_from_airport
es un campo recuperable en el catálogo y c.distance_from_airport
actúa como un indicador.
En el ranking personalizado, se consideran diferentes indicadores que influyen en la relevancia de un documento. Luego, creas una expresión matemática que contiene estos indicadores con una sintaxis válida. En esta expresión, normalizas los indicadores y agregas pesos a sus puntuaciones derivadas. Se calcula la puntuación personalizada final y se clasifican los documentos.
En este ejemplo, el proceso se puede explicar de la siguiente manera:
A cada hotel se le otorga una puntuación de similitud semántica y una puntuación de similitud de palabras clave. Además, la distancia desde el aeropuerto es un indicador importante que se deriva del documento.
La función de transformación del rango recíproco o
rr()
se usa para transformar todas las puntuaciones a la misma escala.A la puntuación derivada de cada indicador se le asigna un peso y, luego, la suma de todas las puntuaciones individuales se convierte en la puntuación de clasificación personalizada para cada hotel.
Los diferentes indicadores de cada hotel se tabulan de la siguiente manera:
Hotel | semantic_similarity_score |
keyword_similarity_score |
c.distance_from_airport |
Puntuación de clasificación personalizada | Clasificación personalizada | Clasificación basada en embeddings |
---|---|---|---|---|---|---|
Hotel A | 9.0 | 6.2 ("aeropuerto", "lujo", "piscina en la azotea") | 5.0 | 0.04879 | 2 | 1 |
Hotel B | 7.5 | 5.6 ("admite mascotas", "centro de la ciudad", "piscina cubierta", "elegante") | 12.5 | 0.04691 | 3 | 2 |
Hotel C | 5.0 | 3.4 ("admite mascotas", "centro de la ciudad") | 18 | 0.04525 | 4 | 4 |
Hotel D | 8.0 | 4.5 ("piscina cubierta", "admite mascotas", "rústico") | 1 | 0.04890 | 1 | 3 |
Si comparamos los dos métodos de clasificación, la clasificación personalizada ofrece una clasificación más considerada que probablemente satisfaga mejor las necesidades de un usuario que una clasificación basada únicamente en la incorporación.
Acerca de la implementación de la clasificación personalizada
Para obtener una clasificación personalizada en los resultados de la búsqueda, debes llamar al método search
y proporcionar los siguientes campos:
Backend de la expresión de clasificación (
rankingExpressionBackend
): Este campo indica cuál de los siguientes mecanismos de clasificación se debe usar.RANK_BY_EMBEDDING
: Este es el valor predeterminado cuando no se especifica este campo. Si eliges esta opción, los resultados se clasifican según una expresión de clasificación predefinida que se basa en la incorporación o en la relevancia.RANK_BY_FORMULA
: Anula la clasificación predeterminada y te permite proporcionar tu fórmula personalizada en el camporankingExpression
.
Expresión de clasificación (
rankingExpression
): Este campo contiene una fórmula matemática que determina la clasificación de los documentos recuperados.Para
RANK_BY_EMBEDDING
, puede ser basado en la puntuación de relevancia (double * relevanceScore
) o en la incorporación (double * dotProduct(embedding_field_path)
).En el caso de
RANK_BY_FORMULA
, se trata de una expresión seleccionada que combina varios indicadores para calcular una nueva puntuación para cada resultado de la búsqueda.
Indicadores estándares
Vertex AI Search ofrece una variedad de indicadores que puedes usar para formular una clasificación personalizada. Estos son los indicadores estándares disponibles:
Nombre del indicador | Descripción |
---|---|
default_rank |
El rango predeterminado del documento, según lo determina el algoritmo de clasificación estándar de VAIS |
semantic_similarity_score |
Es una puntuación calculada en función de las incorporaciones de la búsqueda y el contenido para determinar qué tan similar es una búsqueda al contenido de un documento. Se calcula con un algoritmo propietario de Google. |
relevance_score |
Es una puntuación que produce un modelo de relevancia profunda, que controla interacciones complejas entre la búsqueda y el documento. El modelo determina el significado y la intención de una búsqueda en el contexto del contenido. Se calcula con un algoritmo propietario de Google. |
keyword_similarity_score |
Es una puntuación que hace mucho hincapié en la concordancia de palabras clave. Este indicador usa la función de clasificación Best Match 25 (BM25). |
document_age |
Es la antigüedad del documento en horas. Admite valores de punto flotante. Por ejemplo, un valor de 0.5 significa 30 minutos, mientras que 50 significa 2 días y 2 horas. |
pctr_rank |
Es un ranking que indica los porcentajes de conversiones previstos, calculado en función de los datos de eventos del usuario. Este indicador utiliza la tasa de clics prevista (pCTR) para medir la relevancia de un resultado de la búsqueda desde la perspectiva del usuario. |
topicality_rank |
Es un ranking que denota el ajuste de similitud de palabras clave calculado con un algoritmo patentado de Google. |
boosting_factor |
Es una combinación de todos los aumentos personalizados que aplicaste al documento. |
Además de estos campos, puedes usar cualquier campo personalizado en un documento que esté marcado como recuperable. Para ello, agrega el prefijo c.
a los nombres de sus campos. Por ejemplo, si tienes un campo personalizado llamado date_approved
, puedes usar c.date_approved
como un indicador personalizado.
Los nombres de los indicadores son una combinación de caracteres alfabéticos y guiones bajos (_
). A continuación, se incluye una lista de nombres reservados que no se pueden usar como nombres de indicadores: log
, exp
, rr
, is_nan
y fill_nan
.
Sintaxis de la fórmula de clasificación
La fórmula de clasificación personalizada es una expresión matemática con los siguientes componentes:
Números (
double
): Son valores de punto flotante positivos o negativos que agregan un peso a un indicador o una expresión.Indicadores (
signal
): Son los nombres de los indicadores que se enumeran en la sección Indicadores disponibles.Operadores aritméticos:
+
(suma) y*
(multiplicación).Funciones matemáticas:
log(expression)
: El logaritmo naturalexp(expression)
: El exponente natural
Cada una de estas expresiones acepta exactamente un argumento, que es una expresión escrita en términos de un indicador.
Ejemplos de una función válida:
exp(c.document_age)
ylog(keywordSimilarityScore * 0.2 + 1.0)
.Función de transformación del rango recíproco (
rr
): Esta función se expresa comorr(expression, k)
. Primero, ordena los documentos según el valor deexpression
en orden descendente y les asigna una clasificación. Luego, calcula el valor final con las expresiones1 / (rank_i + k)
, donderank_i
es la posición del documento en la lista ordenada a partir de 0 yk
es un número de punto flotante positivo que proporcionas.La función
rr()
transforma todas las puntuaciones en la misma escala y elimina la necesidad de una normalización adicional.Funciones de control de valores que no son números (NaN):
is_nan(expression)
: Cuando la expresión se evalúa como NaN, por ejemplo, cuando falta un indicador para un documento, se devuelve1
. De lo contrario, se devuelve0
.fill_nan(arg_expression, fill_with_expression)
: Siarg_expression
se evalúa como NaN, devuelvefill_with_expression
. De lo contrario, muestraarg_expression
. Esto es fundamental para manejar documentos a los que les podrían faltar ciertos indicadores.
Ejemplos de fórmulas de clasificación
Una combinación lineal elemental:
semantic_similarity_score * 0.7 + keyword_similarity_score * 0.3
Una fórmula compleja que usa el rango recíproco y el control de NaN:
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.5 + topicality_rank * 0.5
Una fórmula compleja que usa el rango recíproco, la función exponencial y el control de NaN:
rr(fill_nan(semantic_similarity_score, 0), 40) * 0.2 + exp(keyword_similarity_score) * 0.3 + is_nan(keyword_similarity_score) * 0.1
Personaliza la clasificación con la fórmula de clasificación en la búsqueda
Para personalizar la clasificación de tus documentos en los resultados de la búsqueda, redacta manualmente una fórmula y agrégala a tu llamada a la API de search
.
Formula una expresión de clasificación.
Obtener resultados de la búsqueda
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" }'
Reemplaza lo siguiente:
PROJECT_ID
: Es el ID de tu proyecto de Google Cloud .APP_ID
: Es el ID de la app de Vertex AI Search que deseas consultar.QUERY
: Es el texto de la búsqueda.RANKING_EXPRESSION
: Es la fórmula de clasificación personalizada que puedes escribir con los indicadores disponibles con una sintaxis de fórmula de clasificación válida.- Para ver ejemplos válidos, consulta Ejemplos de fórmulas de clasificación.
- Para ajustar la fórmula de clasificación, que puede brindarte los mejores resultados, consulta Cómo ajustar la fórmula de clasificación con la biblioteca de Python.
Ajusta la fórmula de clasificación con la biblioteca de Python
Para casos de uso más avanzados, encontrar los pesos óptimos para tu fórmula puede ser un desafío. Para superar este problema, puedes usar la biblioteca de Python de ajuste de clasificación de Vertex AI Search, que es una herramienta de código abierto, y llegar a una fórmula adecuada para tu caso de uso.
El flujo de trabajo general es el siguiente:
- Prepara un conjunto de datos de búsquedas con etiquetas de referencia correspondientes. Estas etiquetas doradas pueden ser campos de identificación únicos, como el ID del documento, que pueden ayudarte a asociar el objeto
SearchResult
en la respuesta de búsqueda. - Para un conjunto de búsquedas representativas, llama a la API de
search
para obtener los indicadores de clasificación disponibles para todos los documentos devueltos. Puedes encontrarlo en el campoSearchResult.rankSignals
. Almacena estos datos junto con tus etiquetas de referencia. Usa la biblioteca de Python para entrenar un modelo de clasificación en este conjunto de datos. Para obtener más información, consulta la biblioteca de Python de Clearbox.
Convierte la fórmula de los resultados del entrenamiento en una expresión de clasificación, que luego puedes usar en tus llamadas a la API.