Создание запроса для семантических заголовков в Когнитивном поиске

Важно!

Семантический поиск — это общедоступная предварительная версия в REST API и на портале Azure. Предварительные версии функций предоставляются по принципу "как есть" в соответствии с Дополнительными условиями использования. Эти функции являются платными. Подробнее см. в разделе Доступность и цены.

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

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

Предварительные требования

  • Служба поиска на уровне "Стандартный" (S1, S2, S3), расположенная в одном из следующих регионов: Центрально-северной части США, Западной части США, Западной части США 2, Восточной части США 2, Северной Европе, Западной Европе. При наличии существующей службы S1 или более высокого уровня в одном из этих регионов, вы можете запросить доступ, не создавая новую службу.

  • Доступ к предварительному просмотру семантического поиска: регистрация

  • Существующий индекс поиска с содержимым на английском языке

  • Клиент поиска для отправки запросов

    Клиент поиска должен поддерживать предварительный просмотр API-интерфейсов REST в запросе. Вы можете использовать Postman, Visual Studio Code или код, который выполняет вызовы REST к API предварительного просмотра. Для отправки семантического запроса можно также использовать Обозреватель поиска на портале Azure.

  • Запрос должен включать параметр семантики и другие параметры, описанные в этой статье.

Что такое семантический запрос?

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

Следующий запрос является образцом минимального семантического запроса (без ответов).

POST https://[service name].search.windows.net/indexes/[index name]/docs/search?api-version=2020-06-30-Preview      
{    
    "search": " Where was Alan Turing born?",    
    "queryType": "semantic",  
    "searchFields": "title,url,body",  
    "queryLanguage": "en-us"  
}

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

Разница заключается в релевантности и оценках. Как определено в этом предварительном выпуске, семантический запрос — это такой запрос, результаты которого реранжируются в соответствии с семантической языковой моделью. Это позволяет отображать совпадения, которые наиболее важны для семантического ранжирования, а не оценки, назначенные алгоритмом ранжирования по сходству, который используется по умолчанию.

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

Подача запросов с использованием обозревателя поиска

Обозреватель поиска обновлен и включает параметры семантических запросов. После выполнения следующих действий эти параметры становятся видимыми на портале.

  1. Регистрация и поступление службы поиска в программу предварительной версии

  2. Открытие портала с помощью синтаксиса: https://portal.azure.com/?feature.semanticSearch=true

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

Параметры запроса в обозревателе поиска

Запрос с использованием REST

Используйте Поиск документов (предварительная версия REST), чтобы программно сформулировать запрос.

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

В следующем примере для создания семантического запроса с семантическими ответами и заголовками используется hotels-sample-index:

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30-Preview      
{
    "search": "newer hotel near the water with a great restaurant",
    "queryType": "semantic",
    "queryLanguage": "en-us",
    "searchFields": "HotelName,Category,Description",
    "speller": "lexicon",
    "answers": "extractive|count-3",
    "highlightPreTag": "<strong>",
    "highlightPostTag": "</strong>",
    "select": "HotelId,HotelName,Description,Category",
    "count": true
}

В следующей таблице перечислены параметры запроса, используемые в семантическом запросе, чтобы их можно было увидеть в целом. Список всех параметров см. в разделе Поиск документов (предварительная версия REST)

Параметр Тип Описание
queryType Строка Допустимые значения: простой, полный и семантический. Для семантических запросов требуется значение "семантический".
queryLanguage Строка Требуется для семантических запросов. В настоящее время доступно только значение "en-us".
searchFields Строка Список полей с возможностью поиска, разделенных запятыми. Указывает поля, по которым происходит семантическое ранжирование, из которого извлекаются заголовки и ответы.

В отличие от простых и полных типов запросов, порядок, в котором перечислены поля, определяет приоритет. Дополнительные инструкции по использованию см. в разделе Шаг 2. Настройка searchFields.
speller Строка Необязательный параметр, не относящийся к семантическим запросам, исправляет неправильно написанные слова перед передачей их в поисковую систему. Дополнительные сведения см. в разделе Добавление функции исправления правописания в запросы.
answers Строка Необязательные параметры, указывающие, включаются ли в результат семантические ответы. В настоящее время доступно только значение "извлечение". Ответы можно настроить так, чтобы возвращалось не более пяти. Значение по умолчанию — "один". В этом примере показано, как получать три ответа: "extractive|count3". Подробнее см. в разделе Возврат семантических ответов.

Формулировка запроса

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

Шаг 1. Настройка queryType и queryLanguage

Добавьте следующие параметры. Требуются оба параметра.

"queryType": "semantic",
"queryLanguage": "en-us",

queryLanguage должен соответствовать любым анализаторам языка, которые назначены определениям полей в схеме индекса. Если параметр queryLanguage имеет значение "en-us", то все анализаторы языка должны также иметь английский вариант ("en.microsoft" или "en.lucene"). Анализаторы, не зависящие от языка, такие как простые анализаторы или анализаторы ключевых слов, не конфликтуют со значениями queryLanguage.

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

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

Шаг 2. Настройка searchFields

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

Порядок searchFields играет критически важную роль. Если вы уже используете searchFields в существующем коде для простых или полных запросов Lucene, проверьте порядок полей при переключении на семантический запрос.

Для двух или более полей searchFields

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

  • Первое поле должно быть кратким (например, названием или именем), в идеале — до 25 слов.

  • Если в индексе есть поле URL-адреса, которое является текстовым (для чтения, например www.domain.com/name-of-the-document-and-other-details, а не для компьютера, например www.domain.com/?id=23463&param=eis), поместите его вторым в списке (или первым, если нет поля с кратким названием).

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

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

Шаг 3. Удаление предложений orderBy

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

Шаг 4. Добавление ответов

При необходимости добавьте "answers", если вы хотите включить дополнительную обработку, которая предоставляет ответ. Ответы (и заголовки) извлекаются из фрагментов, находящихся в полях, перечисленных в searchFields. Не забудьте включить в searchFields поля с мультимедийным содержимым, чтобы получить наилучшие ответы в отклике. Подробнее см. в разделе Возврат семантических ответов.

Шаг 5. Добавление других параметров

Задайте любые другие параметры, которые должны быть в запросе. Такие параметры, как средство проверки орфографии, select и count, улучшают качество запроса и удобочитаемость ответа.

При необходимости можно настроить стиль выделения, применяемый к заголовкам. Заголовки применяют форматирование выделения для ключевых фрагментов в документе, который обобщает ответ. Значение по умолчанию — <em>. Если необходимо указать тип форматирования (например, желтый фон), можно задать параметры highlightPreTag и highlightPostTag.

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

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

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

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

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

"@odata.count": 35,
"@search.answers": [],
"value": [
    {
        "@search.score": 1.8810667,
        "@search.rerankerScore": 1.1446577133610845,
        "@search.captions": [
            {
                "text": "Oceanside Resort. Luxury. New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
                "highlights": "<strong>Oceanside Resort.</strong> Luxury. New Luxury Hotel. Be the first to stay.<strong> Bay</strong> views from every room, location near the pier, rooftop pool, waterfront dining & more."
            }
        ],
        "HotelName": "Oceanside Resort",
        "Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
        "Category": "Luxury"
    },

Дальнейшие действия

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