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


Добавление синонимов в поиске ИИ Azure

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

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

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

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

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

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

Создание карты синонимов (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, описанному в этом документе: SynonymGraphFilter. Формат solr поддерживает два типа правил:

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

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

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

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

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

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

В случае эквивалентности запрос собаки расширяет запрос, чтобы также включать щенка и каноины.

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

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

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

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

{
"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.

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

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

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

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

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

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

PUT /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>*.

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