Share via


Inicio rápido: Clasificación semántica con .NET o Python

En Búsqueda de Azure AI, la clasificación semántica es una funcionalidad del lado de consulta que usa la comprensión de lectura automática de Microsoft para volver a puntuar los resultados de búsqueda, lo que promueve las coincidencias semánticas más relevantes a la parte superior de la lista. En función del contenido y de la consulta, la clasificación semántica puede mejorar considerablemente la relevancia de la búsqueda, y con un esfuerzo mínimo del desarrollador.

En este inicio rápido, se le guiará por las modificaciones en índices y consultas que invocan la clasificación semántica.

Nota:

¿Busca una solución de Azure AI Search que interactúe con ChatGPT? Para más información, vea esta demostración o este acelerador.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.

  • Azure AI Search, en el nivel Básico o superior, con la clasificación semántica habilitada.

  • Una clave de API y un punto de conexión de servicio de búsqueda. Inicie sesión en Azure Portal y encuentre su servicio de búsqueda.

    En Información general, copie la dirección URL en el Bloc de notas para usarla un paso posterior. Un punto de conexión de ejemplo podría ser similar a https://mydemo.search.windows.net.

    En Claves, copie y guarde una clave de administrador a fin de obtener derechos completos para crear y eliminar objetos. Hay dos claves intercambiables una principal y otra secundaria. Elija una de las dos.

    Get an HTTP endpoint and access key

Incorporación de la clasificación semántica

Para usar la clasificación semántica, agregue una configuración semántica a un índice de búsqueda y agregue parámetros a una consulta. Si tiene un índice existente, puede realizar estos cambios sin tener que volver a indexar el contenido, ya que no hay ningún impacto en la estructura del contenido que se puede buscar.

  • Una configuración semántica establece un orden de prioridad para los campos que contribuyen a un título, las palabras clave y el contenido usado en la reclasificación semántica. La priorización de campos permite un procesamiento más rápido.

  • Las consultas que invocan la clasificación semántica incluyen parámetros de tipo de consulta y si se generan descripciones y respuestas. Puede agregar estos parámetros a la lógica de consulta existente. No hay ningún conflicto con otros parámetros.

Utilice la biblioteca cliente Azure.Search.Documents para crear una aplicación de consola y así poder agregar la clasificación semántica a un índice de búsqueda existente.

Como alternativa, puede descargar el código fuente para empezar con un proyecto terminado o seguir los pasos de este artículo para crear su propio proyecto.

Configurar el entorno

  1. Inicie Visual Studio y cree un nuevo proyecto para una aplicación de consola.

  2. En Herramientas>Administrador de paquetes NuGet seleccione Administrar paquetes NuGet para la solución.... .

  3. Seleccione Examinar.

  4. Busque el paquete de Azure.Search.Documents y seleccione la versión estable más reciente.

  5. Seleccione Instalar para agregar el ensamblado al proyecto y la solución.

Creación de un cliente de búsqueda

  1. En Program.cs, agregue las siguientes directivas using.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Cree dos clientes: SearchIndexClient crea el índice y SearchClient carga y consulta uno existente. Ambos necesitan el punto de conexión de servicio y una clave de API de administración para la autenticación con derechos de creación y eliminación.

    Dado que el código compila el URI automáticamente, especifique solo el nombre del servicio de búsqueda en la propiedad "serviceName".

     static void Main(string[] args)
     {
         string serviceName = "<YOUR-SEARCH-SERVICE-NAME>";
         string apiKey = "<YOUR-SEARCH-ADMIN-API-KEY>";
         string indexName = "hotels-quickstart";
    
    
         // Create a SearchIndexClient to send create/delete index commands
         Uri serviceEndpoint = new Uri($"https://{serviceName}.search.windows.net/");
         AzureKeyCredential credential = new AzureKeyCredential(apiKey);
         SearchIndexClient adminClient = new SearchIndexClient(serviceEndpoint, credential);
    
         // Create a SearchClient to load and query documents
         SearchClient srchclient = new SearchClient(serviceEndpoint, indexName, credential);
         . . . 
     }
    

Creación de un índice

Cree o actualice un esquema de índice para incluir una SemanticConfiguration. Si va a actualizar un índice existente, esta modificación no requiere una reindexación porque la estructura de los documentos no ha cambiado.

// Create hotels-quickstart index
private static void CreateIndex(string indexName, SearchIndexClient adminClient)
{

    FieldBuilder fieldBuilder = new FieldBuilder();
    var searchFields = fieldBuilder.Build(typeof(Hotel));

    var definition = new SearchIndex(indexName, searchFields);
    var suggester = new SearchSuggester("sg", new[] { "HotelName", "Category", "Address/City", "Address/StateProvince" });
    definition.Suggesters.Add(suggester);
    definition.SemanticSearch = new SemanticSearch
    {
        Configurations =
        {
            new SemanticConfiguration("my-semantic-config", new()
            {
                TitleField = new SemanticField("HotelName"),
                ContentFields =
                {
                    new SemanticField("Description"),
                    new SemanticField("Description_fr")
                },
                KeywordsFields =
                {
                    new SemanticField("Tags"),
                    new SemanticField("Category")
                }
            })
        }
    };

    adminClient.CreateOrUpdateIndex(definition);
}

Con el código siguiente, se crea el índice en el servicio de búsqueda:

// Create index
Console.WriteLine("{0}", "Creating index...\n");
CreateIndex(indexName, adminClient);

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Carga de documentos

Azure AI Search busca en el contenido almacenado en el servicio. El código para cargar documentos es idéntico al del inicio rápido de C# para la búsqueda de texto completo, por lo que no es necesario duplicarlo aquí. Debe tener cuatro hoteles con nombres, direcciones y descripciones. La solución debe tener tipos para hoteles y direcciones.

Búsqueda de un índice

La siguiente es una consulta que invoca la clasificación semántica, con opciones de búsqueda para especificar parámetros:

Console.WriteLine("Example of a semantic query.");

options = new SearchOptions()
{
    QueryType = Azure.Search.Documents.Models.SearchQueryType.Semantic,
    SemanticSearch = new()
    {
        SemanticConfigurationName = "my-semantic-config",
        QueryCaption = new(QueryCaptionType.Extractive)
    }
};
options.Select.Add("HotelName");
options.Select.Add("Category");
options.Select.Add("Description");

// response = srchclient.Search<Hotel>("*", options);
response = srchclient.Search<Hotel>("what hotel has a good restaurant on site", options);
WriteDocuments(response);

Para fines de comparación, estos son los resultados de una consulta que usa la clasificación BM25 predeterminada, basada en la frecuencia del término y la proximidad. Dada la consulta "qué hotel tiene un buen restaurante en el sitio", el algoritmo de clasificación BM25 devuelve coincidencias en el orden que se muestra en esta captura de pantalla:

Screenshot showing matches ranked by BM25.

Por el contrario, cuando se aplica la clasificación semántica a la misma consulta ("qué hotel tiene un buen restaurante en el sitio"), los resultados se vuelven a clasificar en función de la relevancia semántica de la consulta. Esta vez, el resultado principal es el hotel con el restaurante, que se alinea mejor con las expectativas del usuario.

Screenshot showing matches ranked based on semantic ranking.

Ejecución del programa

Presione F5 para recompilar la aplicación y ejecutar el programa en su totalidad.

La salida incluye mensajes de Console.WriteLIne, con la incorporación de la información de la consulta y los resultados.

Limpieza de recursos

Cuando trabaje con su propia suscripción, es una buena idea al final de un proyecto identificar si todavía se necesitan los recursos que ha creado. Los recursos que se dejan en ejecución pueden costarle mucho dinero. Puede eliminar los recursos de forma individual o eliminar el grupo de recursos para eliminar todo el conjunto de recursos.

Puede encontrar y administrar recursos en el portal, mediante el vínculo Todos los recursos o Grupos de recursos en el panel de navegación izquierdo.

Pasos siguientes

En este inicio rápido, ha aprendido a invocar la clasificación semántica en un índice existente. Como paso siguiente es aconsejable que pruebe la clasificación semántica en sus propios índices. Sin embargo, si desea continuar con las demostraciones, visite el siguiente vínculo.