Configuración de la puntuación de relevancia BM25

En este artículo, aprenderá a configurar el algoritmo de puntuación de relevancia BM25 que usa Azure AI Search para consultas de búsqueda de texto completo. También se explica cómo habilitar BM25 en servicios de búsqueda más antiguos.

BM25 es aplicable a:

  • Consultas que usan el parámetro search para la búsqueda de texto completo, en campos de texto que tienen una atribución searchable.
  • La puntuación se limita a searchFields, o a todos los campos searchable si searchFields es null.

El motor de búsqueda usa BM25 para calcular un @searchScore para cada coincidencia en una consulta determinada. Los documentos coincidentes se clasifican según su puntuación de búsqueda y los resultados principales son los devueltos en la respuesta de la consulta. Es posible obtener algunas variaciones de puntuación en los resultados, incluso desde la misma consulta que se ejecuta en el mismo índice de búsqueda, pero normalmente estas variaciones son pequeñas y no cambian la clasificación general de los resultados.

BM25 tiene valores predeterminados para ponderar la frecuencia del término y la longitud del documento. Puede personalizar estas propiedades si los valores predeterminados no son adecuados para el contenido. Los cambios de configuración se limitan a índices individuales, lo que significa que puede ajustar la puntuación de relevancia en función de las características de cada índice.

Algoritmo de puntuación predeterminado

En función de la antigüedad del servicio de búsqueda, Azure AI Search admite dos algoritmos de puntuación para una consulta búsqueda de texto completo:

  • Algoritmo Okapi BM25 (después del 15 de julio de 2020)
  • Algoritmo de similitud clásico (antes del 15 de julio de 2020)

La clasificación mediante el algoritmo BM25 es la predeterminada porque tiende a generar clasificaciones de búsqueda que se alinean mejor con las expectativas de los usuarios. Además, esta incluye parámetros que ayudan a optimizar los resultados en función de varios factores, como el tamaño de los documentos. BM25 es el único algoritmo de puntuación que se utiliza para los servicios creados después de julio de 2020. Si intenta establecer la similitud en ClassicSimilarity en un nuevo servicio, recibirá un error 400 porque el servicio no admite ese algoritmo.

En el caso de los servicios más antiguos, el algoritmo de similitud clásica sigue siendo el predeterminado. Los servicios más antiguos pueden actualizarse para que usen el algoritmo BM25 mediante cambios en el índice. Cuando cambie del algoritmo de similitud clásica a BM25, puede que observe algunas diferencias con respecto a cómo se ordenan los resultados de búsqueda.

Establecimiento de parámetros de BM25

La clasificación BM25 proporciona dos parámetros para ajustar el cálculo de la puntuación de relevancia.

  1. Use una solicitud Create o Update Index para establecer los parámetros de BM25:

    PUT [service-name].search.windows.net/indexes/[index-name]?api-version=2020-06-30&allowIndexDowntime=true
    {
        "similarity": {
            "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
            "b" : 0.75,
            "k1" : 1.2
        }
    }
    
  2. Si el índice está activo, anexe el parámetro URI allowIndexDowntime=true en la solicitud como se indica en el ejemplo anterior.

    Como Azure AI Search no permite actualizar un índice activo, deberá desconectarlo para poder agregar los parámetros. Los procesos de indexación y las solicitudes de consulta producirán un error mientras el índice esté sin conexión. La duración de la interrupción será la cantidad de tiempo que se tarde en actualizar el índice. Esta no suele durar más de varios segundos. Una vez que se haya completado la actualización, el índice volverá a activarse automáticamente.

  3. Establezca "b" y "k1" en valores personalizados y envíe la solicitud.

    Propiedad Type Descripción
    k1 number Controla la función de escalado entre la frecuencia de cada uno de los términos coincidentes y la puntuación de relevancia final de un par documento-consulta. Los valores suelen oscilar entre 0,0 y 3,0, siendo 1,2 el predeterminado.

    Un valor de 0,0 representa un "modelo binario", donde la contribución de un único término coincidente es la misma para todos los documentos coincidentes, independientemente de cuántas veces aparezca ese término en el texto. Los valores k1 más grandes permiten que la puntuación continúe aumentando a medida que se encuentran más instancias del mismo término en el documento.

    El uso de un valor k1 mayor es importante en los casos en los que se incluyen varios términos en una consulta de búsqueda. En esos casos, es posible que desee favorecer los documentos que coincidan con más términos de consulta, sobre aquellos documentos que solo coinciden con un solo término varias veces. Por ejemplo, al consultar los términos "Apollo Spaceflight", podemos reducir la puntuación de un artículo sobre la mitología griega que contenga el término "Apollo" unas cuantas veces sin menciones a "Spaceflight", en comparación con otro artículo que mencione explícitamente "Apollo" y "Spaceflight" solo unas pocas veces.
    b number Controla cómo afecta la longitud de un documento a la puntuación de relevancia. Los valores oscilan entre 0 y 1, siendo 0,75 el predeterminado.

    Un valor de 0,0 significa que la longitud del documento no influye en la puntuación. Un valor de 1,0 significa que el efecto de la frecuencia del término en la puntuación de relevancia se normaliza con la longitud del documento.

    La normalización de la frecuencia de los términos según la longitud del documento es útil en los casos en los que queremos penalizar los documentos más largos. En algunos casos, es más probable que los documentos más largos (como una novela completa) contengan muchos términos irrelevantes, en comparación con documentos más cortos.

Habilitación de la puntuación BM25 en servicios antiguos

Si está ejecutando un servicio de búsqueda que se creó entre marzo de 2014 y el 15 de julio de 2020, podrá habilitar el algoritmo BM25 si establece una propiedad "similarity" en unos índices nuevos. Como esta propiedad solo se expone en nuevos índices, deberá anular y volver a crear el índice con una propiedad de "similitud" establecida en Microsoft.Azure.Search.BM25Similarity si quiere usar el algoritmo BM25 en un índice existente.

Una vez que exista un índice con una propiedad de "similitud", podrá alternar entre las similitudes BM25Similarity y ClassicSimilarity.

En los vínculos siguientes se describe la propiedad de similitud en los SDK de Azure.

Biblioteca cliente Propiedad de similitud
.NET SearchIndex.Similarity
Java SearchIndex.setSimilarity
JavaScript SearchIndex.Similarity
Python Propiedad de similitud en SearchIndex

Ejemplo de REST

También puede usar la API de REST. En el ejemplo siguiente se crea un índice con la propiedad "similarity" establecida en BM25:

PUT [service-name].search.windows.net/indexes/[index name]?api-version=2020-06-30
{
    "name": "indexName",
    "fields": [
        {
            "name": "id",
            "type": "Edm.String",
            "key": true
        },
        {
            "name": "name",
            "type": "Edm.String",
            "searchable": true,
            "analyzer": "en.lucene"
        },
        ...
    ],
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity"
    }
}

Consulte también