Поделиться через


Краткое руководство. Семантическое ранжирование с помощью .NET или Python

В службе "Поиск искусственного интеллекта Azure" семантическая ранжирование — это функции на стороне запроса, которые используют понимание машинного чтения от Корпорации Майкрософт к результатам поиска rescore, повышая наиболее семантические совпадения в верхней части списка. В зависимости от содержимого и запроса семантический ранжирование может значительно повысить релевантность поиска, с минимальным трудом для разработчика.

В этом кратком руководстве описаны изменения индекса и запроса, которые вызывают семантический рангировщик.

Примечание.

Пример решения поиска ИИ Azure с взаимодействием ChatGPT см . в этой демонстрации или этом акселераторе.

Необходимые компоненты

  • Учетная запись Azure с активной подпиской. Вы можете создать учетную запись бесплатно.

  • Ресурс поиска ИИ Azure на уровне "Базовый" или выше с поддержкой семантического ранга.

  • Ключ API и конечная точка службы поиска. Войдите в портал Azure и найдите службу поиска.

    В обзоре скопируйте URL-адрес и сохраните его для последующего шага. Пример конечной точки может выглядеть так: https://mydemo.search.windows.net.

    В ключах скопируйте и сохраните ключ администратора для полного доступа к созданию и удалению объектов. Существует две взаимозаменяемых пары первичного и вторичного ключей. Выберите один из них.

    Снимок экрана, показывающий, где найти конечную точку HTTP службы поиска и ключ доступа.

Добавление семантического ранжирования

Чтобы использовать семантический рангировщик, добавьте семантику конфигурации в индекс поиска и добавьте параметры в запрос. Если у вас есть существующий индекс, вы можете внести эти изменения, не переиндексировав содержимое, так как не влияет на структуру содержимого, доступного для поиска.

  • Семантическая конфигурация задает порядок приоритета полей, которые способствуют заголовку, ключевым словам и содержимому, используемому в семантической повторной настройке. Приоритет полей позволяет ускорить обработку.

  • Запросы, вызывающие семантический рангировщик, включают параметры типа запроса и возвращаются ли заголовки и ответы. Эти параметры можно добавить в существующую логику запроса. Нет конфликта с другими параметрами.

Создайте консольное приложение с помощью клиентской библиотеки Azure.Search.Documents для добавления семантического ранжирования в существующий индекс поиска.

Кроме того, можно скачать исходный код , чтобы начать работу с готовым проектом.

Настройка среды

  1. Запустите Visual Studio и создайте проект для консольного приложения.

  2. В разделе Инструменты>Диспетчер пакетов NuGet выберите Управление пакетами NugGet для решения....

  3. Выберите Обзор.

  4. Найдите пакет Azure.Search.Documents и выберите последнюю стабильную версию.

  5. Выберите " Установить" , чтобы добавить сборку в проект и решение.

Создание клиента для поиска

  1. В Program.cs добавьте следующие using директивы.

    using Azure;
    using Azure.Search.Documents;
    using Azure.Search.Documents.Indexes;
    using Azure.Search.Documents.Indexes.Models;
    using Azure.Search.Documents.Models;
    
  2. Создайте два клиента: SearchIndexClient создает индекс, а SearchClient загружает и запрашивает существующий индекс.

    Оба клиента нуждаются в конечной точке службы и ключе API администратора для проверки подлинности с правами создания и удаления. Однако код создает универсальный код ресурса (URI) для вас, поэтому укажите только имя службы поиска для serviceName свойства. Не включайте или .search.windows.netне включайтеhttps://.

     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);
         . . . 
     }
    

Создание индекса

Создайте или обновите схему индекса для включения SemanticConfiguration. Если вы обновляете существующий индекс, это изменение не требует переиндексирования, так как структура документов не изменяется.

// 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);
}

Следующий код создает индекс в службе поиска:

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

SearchClient ingesterClient = adminClient.GetSearchClient(indexName);

Загрузка документов

Поиск azure AI выполняет поиск по содержимому, хранящемуся в службе. Код для отправки документов идентичен краткому руководству по C# для полнотекстового поиска , поэтому здесь не нужно дублировать его. У вас должно быть четыре отеля с именами, адресами и описаниями. Решение должно иметь типы для отелей и адресов.

Поиск в индексе

Ниже приведен запрос, вызывающий семантический рангер, с параметрами поиска для указания параметров:

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);

Для сравнения ниже приведены результаты запроса, использующего ранжирование по умолчанию BM25 на основе частоты терминов и близости. Учитывая запрос "что отель имеет хороший ресторан на сайте", алгоритм ранжирования BM25 возвращает совпадения в порядке, показанном на этом снимке экрана:

Снимок экрана: совпадения, ранжированные по BM25.

В отличие от этого, при применении семантического ранжирования к тому же запросу ("что отель имеет хороший ресторан на сайте"), результаты повторно выполняются на основе семантической релевантности запроса. На этот раз лучший результат — отель с рестораном, который лучше соответствует ожиданиям пользователей.

Снимок экрана: совпадения, ранжированные на основе семантического ранжирования.

Запуск программы

Нажмите клавишу F5, чтобы перестроить приложение и запустить полнофункциональную программу.

Выходные данные содержат сообщения из Console.WriteLine, а также сведения о запросе и результаты.

Очистка ресурсов

Если вы работаете в собственной подписке, в конце проекта следует решить, нужны ли вам созданные ресурсы. Ресурсы, которые продолжат работать, могут быть платными. Вы можете удалить ресурсы по отдельности либо удалить всю группу ресурсов.

Ресурсы и управление ими можно найти в портал Azure, используя ссылку "Все ресурсы" или "Группы ресурсов" в области навигации слева.

Следующие шаги

В этом кратком руководстве вы узнали, как вызвать семантический ранжирование по существующему индексу. Мы рекомендуем попробовать семантический ранжирование по собственным индексам в качестве следующего шага. Однако если вы хотите продолжить демонстрацию, перейдите по следующей ссылке.