Синонимы в поиске ИИ Azure

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

Создание синонимов

Карта синонимов — это ресурс, который можно создать один раз и использовать во многих индексах. Уровень служб определяет, сколько карт синонимов можно создать: от трех карт синонимов для уровней "Бесплатный" и "Базовый" до 20 карт для уровня "Стандартный".

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

Карта синонимов состоит из имени, формата и правил в виде записей карты синонимов. Единственным поддерживаемым форматом является solr, и формат solr определяет форму правила.

POST /synonymmaps?api-version=2023-11-01
{
    "name": "geo-synonyms",
    "format": "solr",
    "synonyms": "
        USA, United States, United States of America\n
        Washington, Wash., WA => WA\n"
}

Чтобы создать карту синонимов, необходимо воспользоваться программным способом (портал не поддерживает определения карт синонимов):

Определение правил

Правила сопоставления соответствуют спецификации фильтра синонимов с открытым исходным кодом Apache Solr, описанному в этом документе: SynonymFilter. Формат solr поддерживает два типа правил:

  • правила эквивалентности (где условия в запросе равноценны);

  • явные сопоставления (где до запроса условия сопоставляются с одним явно указанным условием).

Разделителем правил должны служить символы новой строки (\n). Можно определить до 5000 правил на карту синонимов в службе уровня "Бесплатный" и до 20 000 правил на карту при выборе других уровней. Каждое правило может иметь до 20 расширений (или элементов правила). Дополнительные сведения см. в статье Ограничения синонимов.

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

Правила эквивалентности

Правила для эквивалентных условий разделяются запятыми в рамках одного правила. В первом примере запрос USA расширяется до USA OR ИЛИ "United States""United States of America". Обратите внимание, что если требуется найти совпадение с фразой, сам запрос должен состоять из фразы, заключенной в кавычки.

В случае эквивалентности запрос dog для расширения запроса также puppy включает и canine.

{
"format": "solr",
"synonyms": "
    USA, United States, United States of America\n
    dog, puppy, canine\n
    coffee, latte, cup of joe, java\n"
}

Явное сопоставление

Правила для явного сопоставления обозначаются стрелкой =>. При указании последовательность терминов поискового запроса, которая соответствует левой части => запроса, заменяется альтернативами справа во время запроса.

В явном случае запрос или WashingtonWash.WA перезаписывается какWA, а обработчик запросов ищет совпадения только в термине.WA Явное сопоставление применяется только в указанном направлении и не перезаписывает запрос WAWashington в этом случае.

{
"format": "solr",
"synonyms": "
    Washington, Wash., WA => WA\n
    California, Calif., CA => CA\n"
}

Экранирование специальных знаков

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

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

Ниже показан пример экранирования символа с помощью обратной косой черты:

{
    "format": "solr",
    "synonyms": "WA\, USA, WA, Washington\n"
}

Так как обратная косая черта сама по себе является специальным символом на других языках, таких как JSON и C#, вам, вероятно, потребуется дважды экранировать его. Например, код JSON для приведенной выше карты при отправке в REST API будет выглядеть вот так.

{
    "format":"solr",
    "synonyms": "WA\\, USA, WA, Washington"
}

Отправка карт синонимов и управление ими

Как упоминалось ранее, карту синонимов можно создать или обновить без ущерба для рабочих нагрузок обработки запросов и индексирования. Карта синонимов — это автономный объект (как индексы или источники данных), и пока он не используется ни одним из полей, обновления не приведут к сбоям при индексировании или обработке запросов. Однако, если после добавления карты синонимов в определение поля удалить ее, любой содержащий рассматриваемые поля запрос завершится ошибкой 404.

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

Назначение синонимов полям

После отправки карты синонимов можно включить синонимы для полей типа Edm.String или Collection(Edm.String) и полей, где указано "searchable":true. Как уже отмечалось, в определении поля может использоваться только одна карта синонимов.

POST /indexes?api-version=2020-06-30
{
    "name":"hotels-sample-index",
    "fields":[
        {
            "name":"description",
            "type":"Edm.String",
            "searchable":true,
            "synonymMaps":[
            "en-synonyms"
            ]
        },
        {
            "name":"description_fr",
            "type":"Edm.String",
            "searchable":true,
            "analyzer":"fr.microsoft",
            "synonymMaps":[
            "fr-synonyms"
            ]
        }
    ]
}

Запрос с эквивалентным или сопоставленным полем

Добавление синонимов не накладывает новые требования к созданию запросов. Запросы условий и фраз можно направлять так же, как и перед добавлением синонимов. Разница лишь в том, что если условие запроса есть на карте синонимов, обработчик запросов в зависимости от правила либо расширит, либо перезапишет условие или фразу.

Использование синонимов во время выполнения запроса

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

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

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

Синонимы применяются только к текстовым запросам свободной формы и не поддерживаются только для фильтров, аспектов, автозаполнения или предложений. Автозавершение и предложения основаны только на исходном термине; Совпадения синонимов не отображаются в ответе.

Расширения синонимов не применяются к диким карта терминам поиска; префикс, нечеткие и регулярные термины не расширяются.

Если вам нужно сделать один запрос, который применяет расширение синонимов, подстановочные знаки, регулярные выражения или нечеткий поиск, можно объединить запросы с использованием синтаксиса OR. Например, чтобы объединить синонимы с подстановочными знаками для обеспечения простого синтаксиса запросов, термин будет выглядеть так: <query> | <query>*.

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

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