Compartir por


Relevancia en la búsqueda de palabras clave (puntuación BM25)

En este artículo se explican los algoritmos de puntuación de relevancia BM25 que se usan para calcular las puntuaciones de búsqueda de texto completo. La relevancia BM25 es exclusiva de la búsqueda de texto completo. Las consultas de filtro, de característica de autocompletado, sugeridas y de búsqueda aproximada, así como la búsqueda con caracteres comodín no se puntúan ni clasifican por relevancia.

Azure AI Search proporciona los siguientes algoritmos de puntuación para la búsqueda de texto completo:

Algoritmo Uso Range
BM25Similarity Algoritmo fijo en todos los servicios de búsqueda creados después de julio de 2020. Puede configurar este algoritmo, pero no puede cambiar a uno anterior (clásico). Sin enlazar.
ClassicSimilarity Presente en los servicios de búsqueda más antiguos. Puede participar en BM25 y elegir un algoritmo por índice. 0 < 1.00

La función BM25 y la función clásica son funciones de recuperación similares a TF-IDF que usan la frecuencia de los términos (TF) y la frecuencia inversa del documento (IDF) como variables para realizar el cálculo de las puntuaciones de relevancia correspondientes a cada par documento-consulta, que luego se usa para obtener los resultados de clasificación. Aunque conceptualmente es similar al clásico, BM25 se basa en la recuperación de información probabilística, que genera coincidencias más intuitivas según las mediciones de la investigación del usuario.

El uso de la función BM25 le ofrece opciones de personalización avanzadas, como permitir que el usuario decida cómo debe escalarse la puntuación de relevancia en función de la frecuencia de los términos coincidentes. Para más información, consulte Configuración del algoritmo de puntuación.

Nota:

Si usa un servicio de búsqueda que se haya creado antes de julio de 2020, lo más probable es que el algoritmo de puntuación que utiliza sea el antiguo valor predeterminado, ClassicSimilarity. Este puede actualizarse en el índice del servicio. Consulte Habilitación de la puntuación de BM25 en los servicios más antiguos para obtener más información.

El siguiente segmento de vídeo avanza rápidamente hasta una explicación de los algoritmos de clasificación de disponibilidad general que se usan en Azure AI Search. Puede ver el vídeo completo para obtener más información.

Funcionamiento de la clasificación de BM25

La puntuación de relevancia hace referencia al cálculo de una puntuación de búsqueda (@search.score) que actúa como indicador de la relevancia de un elemento en el contexto de la consulta actual. El intervalo es ilimitado. Cuanto mayor sea la puntuación, mayor relevancia tendrá el elemento.

La puntuación de búsqueda se calcula en función de las propiedades estadísticas de la entrada de la cadena y la propia consulta. Azure AI Search busca documentos que coinciden con los términos de búsqueda (algunos o todos, dependiendo de searchMode), lo cual favorece a los documentos que contienen muchas instancias del término de búsqueda. La puntuación de búsqueda aumenta todavía más si el término es poco frecuente en el índice de datos, pero común dentro del documento. La base de este enfoque de relevancia informática se denomina TF-IDF o frecuencia de documento inverso de la frecuencia del término.

Las puntuaciones de búsqueda pueden repetirse en un conjunto de resultados. Cuando varios resultados tienen la misma puntuación de búsqueda, el orden de estos elementos puntuados no está definido y no es estable. Vuelva a ejecutar la consulta y podrá ver que los elementos cambian de posición, especialmente si usa el servicio gratuito o un servicio facturable con varias réplicas. Si dos elementos disponen de la misma puntuación, no hay ninguna garantía de cuál aparecerá en primer lugar.

Para romper el vínculo entre las puntuaciones repetidas, puede agregar una cláusula $orderby para ordenar primero por puntuación y, a continuación, ordenar por otro campo que se pueda ordenar (por ejemplo, $orderby=search.score() desc,Rating desc). Para obtener más información, consulte $orderby.

Solo se usan campos marcados como searchable en el índice o searchFields en la consulta para la puntuación. Solo los campos marcados como retrievable, o los especificados en select en la consulta, se devuelven en los resultados de búsqueda, junto con su puntuación de búsqueda.

Nota:

@search.score = 1 indica un conjunto de resultados sin puntuar o sin clasificar. La puntuación es uniforme en todos los resultados. Los resultados sin puntuar se producen cuando el formulario de la consulta es una búsqueda aproximada, consultas con caracteres comodín o expresiones regulares, o una búsqueda vacía (search=*, a veces emparejada con filtros, donde el filtro es el medio principal para devolver una coincidencia).

Puntuaciones en los resultados de un texto

Cada vez que se clasifican los resultados, la propiedad @search.score contiene el valor usado para ordenar los resultados.

En la tabla siguiente se identifica la propiedad de puntuación devuelta en cada coincidencia, algoritmo e intervalo.

Método de búsqueda Parámetro Algoritmo de puntuación Range
búsqueda de texto completo @search.score Algoritmo BM25, mediante los parámetros especificados en el índice. Sin enlazar.

Variación de puntuación

Las puntuaciones de búsqueda transmiten el sentido general de pertinencia, lo que refleja la exactitud de la coincidencia en relación con otros documentos del mismo conjunto de resultados. Sin embargo, las puntuaciones no siempre son coherentes de una consulta a la siguiente, por lo que, al trabajar con consultas, es posible que observe pequeñas discrepancias en cómo se ordenan los documentos de búsqueda. Hay varias explicaciones de por qué puede ocurrir esto.

Causa Descripción
Puntuaciones idénticas Si varios documentos tienen la misma puntuación, cualquiera de ellos podría aparecer en primer lugar.
Volatilidad de datos El contenido del índice varía a medida que se agregan, modifican o eliminan documentos. Las frecuencias de los términos cambiarán a medida que se procesen las actualizaciones del índice a lo largo del tiempo, lo que afecta a las puntuaciones de búsqueda de los documentos coincidentes
Varias réplicas En el caso de los servicios que usan varias réplicas, las consultas se emiten para cada réplica en paralelo. Las estadísticas del índice usadas para calcular una puntuación de búsqueda se calculan por réplica, donde los resultados se combinan y ordenan en la respuesta de la consulta. Las réplicas son principalmente reflejos unas de otras, pero las estadísticas pueden diferir debido a pequeñas diferencias en el estado. Por ejemplo, una réplica podría tener documentos eliminados que contribuyan a sus estadísticas, que se combinaron a partir de otras réplicas. Normalmente, las diferencias en las estadísticas por réplica son más evidentes en los índices más pequeños. En la sección siguiente se proporciona más información sobre esta condición.

Efectos de particionamiento en los resultados de la consulta

Una partición es un fragmento de un índice. Azure AI Search divide cada índice en particiones de base de datos para que el proceso de agregar particiones sea más rápido (al mover las particiones de base de datos a nuevas unidades de búsqueda). En un servicio de búsqueda, la gestión de fragmentos es un detalle de implementación y no configurable, pero saber que un índice está fragmentado ayuda a comprender las anomalías ocasionales en los comportamientos de clasificación y autocompletado:

  • Anomalías de clasificación: las puntuaciones de búsqueda se calculan primero en el nivel de partición de base de datos y luego se suman en un único conjunto de resultados. En función de las características del contenido de la partición de base de datos, las coincidencias de una partición de base de datos pueden tener una clasificación mayor que las de otra. Si observa clasificaciones intuitivas del contador en los resultados de búsqueda, lo más probable es que se deba a los efectos del particionamiento, especialmente si los índices son pequeños. Puede evitar estas anomalías de clasificación si opta por calcular las puntuaciones de forma global en todo el índice, aunque esto conlleva una penalización de rendimiento.

  • Anomalías de autocompletar: las consultas de tipo Autocompletar, donde las coincidencias se realizan según los primeros caracteres de un término especificado parcialmente, aceptan un parámetro aproximado que perdona pequeñas desviaciones de ortografía. En Autocompletar, la coincidencia aproximada se restringe a los términos de la partición de base de datos actual. Por ejemplo, si una partición de base de datos contiene "Microsoft" y se escribe un término parcial "micro", el motor de búsqueda combinará con "Microsoft" en esa partición de base de datos, pero no en otras particiones de base de datos que contengan las partes restantes del índice.

En el siguiente diagrama se muestra la relación entre réplicas, particiones, particiones de base de datos y unidades de búsqueda. Muestra un ejemplo de cómo se distribuye un solo índice entre cuatro unidades de búsqueda de un servicio con dos réplicas y dos particiones. Cada una de las cuatro unidades de búsqueda almacena solo la mitad de las particiones de base de datos del índice. Las unidades de búsqueda de la columna izquierda almacenan la primera mitad de las particiones de base de datos, que comprende la primera partición, mientras que las de la columna derecha almacenan la segunda mitad de las particiones de base de datos, que comprende la segunda partición. Dado que hay dos réplicas, hay dos copias de cada partición de base de datos del índice. Las unidades de búsqueda de la fila superior almacenan una copia, que comprende la primera réplica, mientras que las de la fila inferior almacenan otra copia, que comprende la segunda réplica.

Los índices de búsqueda se particionan entre particiones.

El diagrama anterior es solo un ejemplo. Hay muchas combinaciones de particiones y réplicas posibles, hasta un máximo de 36 unidades de búsqueda totales.

Nota:

El número de réplicas y particiones se dividirse equitativamente en 12 (en concreto, 1, 2, 3, 4, 6, 12). Azure AI Search divide previamente cada índice en 12 particiones para que se pueda repartir en porciones iguales entre todas las particiones. Por ejemplo, si su servicio tiene tres particiones y crea un nuevo índice, cada partición contendrá 4 particiones del índice. La manera en que Azure AI Search particiona un índice es un detalle de implementación, sujeto a cambios en la futura versión. Aunque el número es 12 hoy, no debe esperar que ese número se siempre 12 en el futuro.

Estadísticas de puntuación y sesiones permanentes

Para ofrecer escalabilidad, Azure AI Search distribuye cada índice horizontalmente a través de un proceso de particionamiento, lo que significa que las partes de un índice son físicamente independientes.

De forma predeterminada, la puntuación de un documento se calcula en función de las propiedades estadísticas de los datos de una partición. Este enfoque no suele ser un problema para una gran corpus de datos y proporciona un mejor rendimiento que el cálculo de la puntuación basado en la información de todas las particiones. Dicho esto, el uso de esta optimización del rendimiento puede provocar que dos documentos muy similares (o incluso idénticos) terminen con puntuaciones de relevancia diferentes si acaban en diferentes particiones.

Si prefiere calcular la puntuación en función de las propiedades estadísticas de todas las particiones, puede agregar scoringStatistics=global como un parámetro de consulta (o agregar "scoringStatistics": "global" como un parámetro del cuerpo de la solicitud de consulta).

POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2024-07-01
{
    "search": "<query string>",
    "scoringStatistics": "global"
}

El uso de scoringStatistics garantizará que todas las particiones de la misma réplica proporcionen los mismos resultados. Dicho esto, las diferentes réplicas pueden ser ligeramente distintas entre sí, ya que siempre se actualizan con los cambios más recientes en el índice. En algunos casos, puede que desee que los usuarios obtengan resultados más coherentes durante una "sesión de consulta". En esos casos, puede proporcionar un sessionId como parte de las consultas. El sessionId es una cadena única que se crea para hacer referencia a una sesión de usuario única.

POST https://[service name].search.windows.net/indexes/hotels/docs/search?api-version=2024-07-01
{
    "search": "<query string>",
    "sessionId": "<string>"
}

Siempre y cuando se use el mismo sessionId, se intentará en lo posible dirigirse a la misma réplica, lo que aumentará la coherencia de los resultados que verán los usuarios.

Nota:

Reutilizar los mismos valores de sessionId repetidamente puede interferir en el equilibrio de carga de las solicitudes entre réplicas y afectar negativamente al rendimiento del servicio de búsqueda. El valor utilizado como sessionId no puede empezar con el carácter "_".

Ajuste de relevancia

En Azure AI Search, puede configurar los parámetros del algoritmo BM25, adaptar la relevancia de la búsqueda e impulsar las puntuaciones de búsqueda mediante estos mecanismos:

Enfoque Implementación Descripción
Configuración del algoritmo de puntuación Índice de búsqueda
Perfiles de puntuación Índice de búsqueda Proporcione criterios para aumentar la puntuación de búsqueda de una coincidencia en función de las características de contenido. Por ejemplo, es posible que quiera aumentar las coincidencias según su potencial de ingresos, promover elementos más recientes o quizás aumentar los que han permanecido en el inventario demasiado tiempo. Un perfil de puntuación es parte de la definición del índice que se compone de campos, funciones y parámetros ponderados. Puede actualizar un índice existente con cambios en el perfil de puntuación, sin tener que recurrir a una recompilación del índice.
Clasificación semántica Solicitud de consulta Aplica la comprensión de lectura automática a los resultados de búsqueda, lo que hace que los resultados más pertinentes desde el punto de vista semántico se muevan a la parte superior.
Parámetro featuresMode Solicitud de consulta Este parámetro se usa principalmente para desempaquetar una puntuación, pero se puede usar en el código que proporciona una solución de puntuación personalizada.

Parámetro featuresMode (versión preliminar)

Las solicitudes para buscar documentos admiten un parámetro featuresMode que puede proporcionar más detalles sobre la puntuación de relevancia en el nivel de campo. Mientras que @searchScore se calcula para todo el documento (según corresponda, en el contexto de esta consulta), featuresMode muestra información sobre los campos individuales, tal y como se expresa en una estructura de @search.features. La estructura contiene todos los campos usados en la consulta (campos específicos mediante searchFields en una consulta o todos los campos asignados como que permite búsquedas en un índice).

Para cada campo, @search.features proporciona los siguientes valores:

  • Número de tokens únicos encontrados en el campo
  • Puntuación de similitud, o una medida de la similitud del contenido del campo con respecto al término de consulta
  • Frecuencia del término, o el número de veces que el término de la consulta se encontró en el campo

Para una consulta que tiene como destino los campos "descripción" y "título", una respuesta que incluye @search.features podría ser similar a la siguiente:

"value": [
 {
    "@search.score": 5.1958685,
    "@search.features": {
        "description": {
            "uniqueTokenMatches": 1.0,
            "similarityScore": 0.29541412,
            "termFrequency" : 2
        },
        "title": {
            "uniqueTokenMatches": 3.0,
            "similarityScore": 1.75451557,
            "termFrequency" : 6
        }
    }
 }
]

Puede utilizar estos puntos de datos en las soluciones de puntuación personalizadas o utilizar la información para depurar los problemas de relevancia de búsqueda.

El parámetro featuresMode no se documenta en las API de REST, pero puede usarlo en una llamada API de REST en versión preliminar para Buscar documentos.

Número de resultados clasificados en una respuesta de consulta de texto completo

De manera predeterminada, si no utiliza la paginación, el motor de búsqueda devuelve las 50 coincidencias mejor clasificadas para la búsqueda de texto completo. Puede usar el parámetro top para devolver un número mayor o menor de elementos (hasta 1000 en una sola respuesta). La búsqueda de texto completo está sujeta a un límite máximo de 1000 coincidencias (consulte Límites de respuesta de API). Una vez encontradas 1000 coincidencias, el motor de búsqueda deja de buscar más.

Para devolver más resultados o menos, use los parámetros de paginación top, skip y next. La paginación es la forma de determinar el número de resultados en cada página lógica y de navegar por toda la carga útil. Para más información, consulte Procedimientos para trabajar con los resultados de búsqueda.

Consulte también