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


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

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

Некоторые ключевые моменты о картах синонимов:

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

Создание карты синонимов

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

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

Создание карты синонимов (REST API) используется для создания карты синонимов.

POST /synonymmaps?api-version=2024-07-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 Явное сопоставление применяется только в указанном направлении и не перезаписывает запрос WA Washington в этом случае.

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

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

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

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

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

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

Так как обратная косая черта сама по себе является специальным символом на других языках, таких как JSON и C#, вам, вероятно, нужно дважды экранировать его. Ниже приведен пример в ФОРМАТЕ JSON:

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

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

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

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

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

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

  • Поле должно быть типом Edm.String или Collection(Edm.String)
  • Поле должно иметь "searchable":true
  • Поле может иметь только одну карту синонимов

Если карта синонимов существует в службе поиска, она используется в следующем запросе без переиндексирования или перестроения.

Чтобы изменить определение поля, используйте индекс создания или обновления (REST API).

POST /indexes?api-version=2024-07-01
{
    "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>*.

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

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