Configuración del algoritmo de clasificación de similitud en Azure Cognitive SearchConfigure the similarity ranking algorithm in Azure Cognitive Search

Azure Cognitive Search admite dos algoritmos de clasificación de similitudes:Azure Cognitive Search supports two similarity ranking algorithms:

  • Un algoritmo de similitud clásica, que usan todos los servicios de búsqueda hasta el 15 de julio de 2020.A classic similarity algorithm, used by all search services up until July 15, 2020.
  • Una implementación del algoritmo BM25 de Okapi, que usan todos los servicios de búsqueda creados después del 15 de julio.An implementation of the Okapi BM25 algorithm, used in all search services created after July 15.

La clasificación BM25 es la nueva predeterminada porque tiende a generar clasificaciones de búsqueda que se alinean mejor con las expectativas de los usuarios.BM25 ranking is the new default because it tends to produce search rankings that align better with user expectations. Incluye parámetros para optimizar los resultados en función de factores como el tamaño del documento.It comes with parameters for tuning results based on factors such as document size.

En el caso de los servicios creados después del 15 de julio de 2020, BM25 se usa automáticamente y es el único algoritmo similarity.For new services created after July 15, 2020, BM25 is used automatically and is the sole similarity algorithm. Si intenta establecer la similitud en ClassicSimilarity en un nuevo servicio, se devolverá un error 400 porque el servicio no admite ese algoritmo.If you try to set similarity to ClassicSimilarity on a new service, an HTTP 400 error will be returned because that algorithm is not supported by the service.

En el caso de los servicios anteriores creados antes del 15 de julio de 2020, la similitud clásica sigue siendo el algoritmo predeterminado.For older services created before July 15, 2020, classic similarity remains the default algorithm. Los servicios antiguos pueden actualizarse a BM25 según el índice, tal y como se explica a continuación.Older services can upgrade to BM25 on a per-index basis, as explained below. Si va a cambiar de la similitud clásica a BM25, puede que observe algunas diferencias con respecto a cómo se ordenan los resultados de búsqueda.If you are switching from classic to BM25, you can expect to see some differences how search results are ordered.

Nota

La clasificación semántica, que actualmente se encuentra en versión preliminar para los servicios estándar de las regiones seleccionadas, constituye un paso más adelante en la generación de resultados más pertinentes.Semantic ranking, currently in preview for standard services in selected regions, is an additional step forward in producing more relevant results. A diferencia de los demás algoritmos, es una característica complementaria que recorre en iteración un conjunto de resultados existente.Unlike the other algorithms, it is an add-on feature that iterates over an existing result set. Para obtener más información, consulte Introducción a la búsqueda semántica y Clasificación semántica.For more information, see Semantic search overview and Semantic ranking.

Habilitación de la puntuación BM25 en servicios antiguosEnable BM25 scoring on older services

Si ejecuta un servicio de búsqueda que se creó antes del 15 de julio de 2020, puede habilitar BM25 si establece una propiedad de similitud en los nuevos índices.If you are running a search service that was created prior to July 15, 2020, you can enable BM25 by setting a Similarity property on new indexes. La propiedad solo se expone en los nuevos índices, por lo que, si quiere BM25 en un índice existente, debe quitar y volver a crear el índice con una nueva propiedad de similitud establecida en "Microsoft.Azure.Search.BM25Similarity".The property is only exposed on new indexes, so if want BM25 on an existing index, you must drop and rebuild the index with a new Similarity property set to "Microsoft.Azure.Search.BM25Similarity".

Una vez que existe un índice con una propiedad de similitud, puede cambiar entre BM25Similarity o ClassicSimilarity.Once an index exists with a Similarity property, you can switch between BM25Similarity or ClassicSimilarity.

En los vínculos siguientes se describe la propiedad de similitud en los SDK de Azure.The following links describe the Similarity property in the Azure SDKs.

Biblioteca de clienteClient library Propiedad de similitudSimilarity property
.NET.NET SearchIndex.SimilaritySearchIndex.Similarity
JavaJava SearchIndex.setSimilaritySearchIndex.setSimilarity
JavaScriptJavaScript SearchIndex.SimilaritySearchIndex.Similarity
PythonPython Propiedad de similitud en SearchIndexsimilarity property on SearchIndex

Ejemplo de RESTREST example

También puede usar la API REST, como se muestra en el ejemplo siguiente:You can also use the REST API, as the following example illustrates:

PUT https://[search 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"
    }
}

Establecimiento de parámetros de BM25Set BM25 parameters

La similitud de BM25 agrega dos parámetros personalizables por el usuario para controlar la puntuación de relevancia calculada.BM25 similarity adds two user customizable parameters to control the calculated relevance score. Puede establecer los parámetros de BM25 durante la creación del índice o como una actualización de este si durante la creación del índice se especificó el algoritmo BM25.You can set BM25 parameters during index creation, or as an index update if the BM25 algorithm was specified during index creation.

PropiedadProperty TipoType DescripciónDescription
k1k1 numbernumber 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.Controls the scaling function between the term frequency of each matching terms to the final relevance score of a document-query pair. Los valores suelen oscilar entre 0,0 y 3,0, siendo 1,2 el predeterminado.Values are usually 0.0 to 3.0, with 1.2 as the default.

Un valor de 0,0 representa un "modelo binario", en el que la contribución de un único término coincidente es la misma para todos los documentos coincidentes, con independencia del número de veces que ese término aparezca en el texto, mientras que un valor k1 mayor permite que la puntuación siga aumentando a medida que se encuentren más instancias del mismo término en el documento.A value of 0.0 represents a "binary model", where the contribution of a single matching term is the same for all matching documents, regardless of how many times that term appears in the text, while a larger k1 value allows the score to continue to increase as more instances of the same term is found in the document.

El uso de un valor de k1 mayor puede ser importante en los casos en los que se espera que varios términos formen parte de una consulta de búsqueda.Using a higher k1 value can be important in cases where we expect multiple terms to be part of a search query. En estos casos, podemos favorecer documentos que coincidan con muchos de los diferentes términos de consulta buscados frente a los documentos que solo coinciden con uno varias veces.In those cases, we might want to favor documents that match many of the different query terms being searched over documents that only match a single one, multiple times. Por ejemplo, al consultar en el índice los documentos que contienen 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.For example, when querying the index for documents containing the terms "Apollo Spaceflight", we might want to lower the score of an article about Greek Mythology that contains the term "Apollo" a few dozen times, without mentions of "Spaceflight", compared to another article that explicitly mentions both "Apollo" and "Spaceflight" a handful of times only.
bb numbernumber Controla cómo afecta la longitud de un documento a la puntuación de relevancia.Controls how the length of a document affects the relevance score. Los valores oscilan entre 0 y 1, siendo 0,75 el predeterminado.Values are between 0 and 1, with 0.75 as the default.

Un valor de 0,0 significa que la longitud del documento no influye en la puntuación, mientras que un valor de 1,0 significa que el impacto de la frecuencia de los términos en la puntuación de relevancia se normalizará según la longitud del documento.A value of 0.0 means the length of the document will not influence the score, while a value of 1.0 means the impact of term frequency on relevance score will be normalized by the document's length.

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.Normalizing the term frequency by the document's length is useful in cases where we want to penalize longer documents. 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 mucho más cortos.In some cases, longer documents (such as a complete novel), are more likely to contain many irrelevant terms, compared to much shorter documents.

Establecimiento de los parámetros k1 y bSetting k1 and b parameters

Para establecer o modificar los valores b o k1, agréguelos al objeto de similitud de BM25.To set or modify b or k1 values, add them to the BM25 similarity object. La configuración o el cambio de estos valores en un índice existente dejará el índice sin conexión durante al menos unos segundos, lo que provocará errores en las solicitudes de indexación y consulta activas.Setting or changing these values on an existing index will take the index offline for at least a few seconds, causing active indexing and query requests to fail. Por lo tanto, debe establecer el parámetro "allowIndexDowntime=true" de la solicitud de actualización:Consequently, you should set the "allowIndexDowntime=true" parameter of the update request:

PUT https://[search service name].search.windows.net/indexes/[index name]?api-version=2020-06-30&allowIndexDowntime=true
{
    "similarity": {
        "@odata.type": "#Microsoft.Azure.Search.BM25Similarity",
        "b" : 0.5,
        "k1" : 1.3
    }
}

Consulte tambiénSee also