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


Добавление семантического ранжирования в запросы в поиске ИИ Azure

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

В этой статье объясняется, как вызвать семантический рангер для запросов.

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

Примечание.

Заголовки и ответы извлекаются дословно из текста в документе поиска. Семантическая подсистема использует понимание машинного чтения для распознавания содержимого с характеристиками подписи или ответа, но не создает новые предложения или фразы. По этой причине содержимое, включающее объяснения или определения, лучше всего подходит для семантического ранжирования. Если требуется взаимодействие в стиле чата с созданными ответами, см. статью "Извлечение дополненного поколения" (RAG).

Выбор клиента

Для создания запроса, использующего семантический ранжирование, можно использовать любой из следующих средств и пакетов SDK:

Избегайте функций, которые обходят оценку релевантности

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

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

  • Сортировка (предложения orderBy) для определенных полей переопределяет оценки поиска и семантические оценки. Учитывая, что семантическая оценка должна предоставлять рейтинг, добавление предложения orderby приводит к ошибке HTTP 400 при применении семантического ранжирования по упорядоченным результатам.

Настройка запроса

На этом шаге добавьте параметры в запрос запроса. Для успешного выполнения запроса должен быть полнотекстовый поиск (с помощью search параметра для передачи строки) или векторного запроса, а индекс должен содержать текстовые поля с форматированным семантическим содержимым и семантической конфигурацией.

Обозреватель поиска включает параметры семантического ранжирования.

  1. Войдите на портал Azure.

  2. Откройте индекс поиска и выберите обозреватель поиска.

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

    Снимок экрана: параметры запроса в обозревателе поиска.

  4. Введите запрос, например "исторический отель с хорошей едой", и выберите "Поиск".

  5. Кроме того, выберите представление JSON и вставьте определения в редактор запросов:

    Снимок экрана: синтаксис запроса JSON в портал Azure.

    Ниже приведен пример JSON, который можно вставить в представление:

    {
      "search": "funky or interesting hotel with good food on site",
      "count": true,
      "queryType": "semantic",
      "semanticConfiguration": "my-semantic-config",
      "captions": "extractive|highlight-true",
      "answers": "extractive|count-3",
      "queryLanguage": "en-us",
      "highlightPreTag": "<strong>",
      "highlightPostTag": "</strong>",
      "select": "HotelId,HotelName,Description,Category"
    }
    

Оценка ответа

Только первые 50 совпадений из начальных результатов могут быть семантические. Как и во всех запросах, ответ состоит из всех полей, помеченных как извлекаемые, или только эти поля, перечисленные в параметре select . Ответ включает исходную оценку релевантности, а также может включать количество или пакетные результаты в зависимости от того, как вы сформулировали запрос.

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

В клиентском приложении можно структурировать страницу поиска, включив в нее заголовок в качестве описания совпадения, а не всего содержимого определенного поля. Этот подход полезен, если отдельные поля слишком плотны для страницы результатов поиска.

Ответ на приведенный выше пример запроса ("интересный отель с рестораном на сайте и уютный лобби или общий район") возвращает три ответа ("answers": "extractive|count-e"). Заголовки возвращаются, так как свойство "субтитры" задано с обычным текстом и выделенными версиями. Если не удается определить ответ, он опущен из ответа. Для краткости в этом примере показаны только три ответа и три самых высоких результата оценки из запроса.

{
  "@odata.count": 29,
  "@search.answers": [
    {
      "key": "24",
      "text": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.",
      "highlights": "Chic hotel near the city. <strong>High-rise hotel in downtown, </strong>within<strong> walking distance to </strong>theaters, art<strong> galleries, restaurants and shops.</strong> Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.",
      "score": 0.9340000152587891
    },
    {
      "key": "40",
      "text": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
      "highlights": "Only 8 miles from Downtown. <strong>On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, </strong>All non-smoking<strong> hotel.</strong> Only 15 miles from airport.",
      "score": 0.9210000038146973
    },
    {
      "key": "38",
      "text": "Nature is Home on the beach. Explore the shore by day, and then come home to our shared living space to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.",
      "highlights": "Nature is Home on the beach. Explore the shore by day, and then come home to our<strong> shared living space </strong>to relax around a stone fireplace, sip something warm, and explore the library by night. Save up to 30 percent. Valid Now through the end of the year. Restrictions and blackouts may apply.",
      "score": 0.9200000166893005
    }
  ],
  "value": [
    {
      "@search.score": 3.2328331,
      "@search.rerankerScore": 2.575303316116333,
      "@search.captions": [
        {
          "text": "The best of old town hospitality combined with views of the river and cool breezes off the prairie. Our penthouse suites offer views for miles and the rooftop plaza is open to all guests from sunset to 10 p.m. Enjoy a complimentary continental breakfast in the lobby, and free Wi-Fi throughout the hotel.",
          "highlights": "The best of old town hospitality combined with views of the river and cool breezes off the prairie. Our<strong> penthouse </strong>suites offer views for miles and the rooftop<strong> plaza </strong>is open to all guests from sunset to 10 p.m. Enjoy a<strong> complimentary continental breakfast in the lobby, </strong>and free Wi-Fi<strong> throughout </strong>the hotel."
        }
      ],
      "HotelId": "50",
      "HotelName": "Head Wind Resort",
      "Description": "The best of old town hospitality combined with views of the river and cool breezes off the prairie. Our penthouse suites offer views for miles and the rooftop plaza is open to all guests from sunset to 10 p.m. Enjoy a complimentary continental breakfast in the lobby, and free Wi-Fi throughout the hotel.",
      "Category": "Suite"
    },
    {
      "@search.score": 0.632956,
      "@search.rerankerScore": 2.5425150394439697,
      "@search.captions": [
        {
          "text": "Every stay starts with a warm cookie. Amenities like the Counting Sheep sleep experience, our Wake-up glorious breakfast buffet and spacious workout facilities await.",
          "highlights": "Every stay starts with a warm cookie. Amenities like the<strong> Counting Sheep sleep experience, </strong>our<strong> Wake-up glorious breakfast buffet and spacious workout facilities </strong>await."
        }
      ],
      "HotelId": "34",
      "HotelName": "Lakefront Captain Inn",
      "Description": "Every stay starts with a warm cookie. Amenities like the Counting Sheep sleep experience, our Wake-up glorious breakfast buffet and spacious workout facilities await.",
      "Category": "Budget"
    },
    {
      "@search.score": 3.7076726,
      "@search.rerankerScore": 2.4554927349090576,
      "@search.captions": [
        {
          "text": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.",
          "highlights": "Chic hotel near the city. <strong>High-rise hotel in downtown, </strong>within<strong> walking distance to </strong>theaters, art<strong> galleries, restaurants and shops.</strong> Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance."
        }
      ],
      "HotelId": "24",
      "HotelName": "Uptown Chic Hotel",
      "Description": "Chic hotel near the city. High-rise hotel in downtown, within walking distance to theaters, art galleries, restaurants and shops. Visit Seattle Art Museum by day, and then head over to Benaroya Hall to catch the evening's concert performance.",
      "Category": "Suite"
    },
   . . .
  ]
}

Ожидаемые рабочие нагрузки

Для семантического ранжирования следует ожидать, что служба поиска поддерживает до 10 одновременных запросов на реплику.

Служба регулирует запросы семантического ранжирования, если объемы слишком высоки. Сообщение об ошибке, включающее эти фразы, указывает, что служба находится в емкости для семантического ранжирования:

Error in search query: Operation returned an invalid status 'Partial Content'`
@search.semanticPartialResponseReason`
CapacityOverloaded

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

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

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