Compartir a través de


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 al clasificador semántico.

Nota:

Para ver un ejemplo de solución de Azure AI Search con la interacción de ChatGPT, consulte esta demostración o este acelerador.

Requisitos previos

  • Una cuenta de Azure con una suscripción activa. También puede crear una cuenta de forma gratuita.

  • Un recurso de la Búsqueda de Azure AI, en el nivel Básico o superior, con clasificador semántico habilitado.

  • 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 y guárdela para 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.

    Captura de pantalla que muestra dónde encontrar el punto de conexión HTTP y la clave de acceso del servicio de búsqueda.

Incorporación de la clasificación semántica

Para usar el clasificador semántico, 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 al clasificador semántico 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.

Cree una aplicación de consola utilizando la biblioteca cliente de Azure.Search.Documents para agregar 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.

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 clientes necesitan el punto de conexión de servicio y una clave de API de administrador para la autenticación con derechos de creación y eliminación. Sin embargo, el código crea el URI automáticamente, por lo que especifica solo el nombre del servicio de búsqueda para la propiedad serviceName. No incluya https:// ni .search.windows.net.

     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 al clasificador semántico, 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:

Captura de pantalla que muestra coincidencias clasificadas según 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.

Recorte de pantalla que muestra las coincidencias clasificadas según la clasificación semántica.

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.