Создание индекса для нескольких языков в службе "Поиск ИИ Azure"

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

Поиск ИИ Azure поддерживает анализаторы Microsoft и Lucene. По умолчанию поисковая система использует Standard Lucene, которая является неуклюжным языком. Если тестирование указывает, что анализатор по умолчанию недостаточно, замените его языковым анализатором.

В поиске ИИ Azure два шаблона для поддержки нескольких языков включают:

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

  • Создайте смешанный индекс с версиями каждого поля (например, description_en, description_fr, description_ko), а затем ограничить полнотекстовый поиск только этими полями во время запроса. Этот подход полезен для сценариев, когда языковые варианты требуются только в нескольких полях, например описание.

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

  • Определите строковое поле для каждого варианта языка.
  • Задайте анализатор языка для каждого поля.
  • В запросе запроса задайте searchFields параметр определенным полям, а затем используйте select для возврата только тех полей, которые имеют совместимое содержимое.

Примечание.

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

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

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

Нестрочные поля и неисключаемые для поиска строковые поля не проходят лексический анализ и не токенизированы. Вместо этого они хранятся и возвращаются подробно.

Добавление перевода текста

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

Чтобы добавить перевод текста, выполните следующие действия.

  1. Убедитесь, что содержимое находится в поддерживаемом источнике данных.

  2. Создайте источник данных, указывающий на содержимое.

  3. Создайте набор навыков, включающий навык перевода текста.

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

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

  5. Подключите к набору навыков ресурс служб ИИ Azure с несколькими регионами.

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

Совет

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

Определение полей для содержимого на разных языках

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

Свойство analyzer определения поля используется для задания анализатора языка. Он используется как для индексирования, так и для выполнения запросов.

{
  "name": "hotels-sample-index",
  "fields": [
    {
      "name": "Description",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "en.microsoft"
    },
    {
      "name": "Description_fr",
      "type": "Edm.String",
      "retrievable": true,
      "searchable": true,
      "analyzer": "fr.microsoft"
    }
  ]
}

Построение и загрузка индекса

Промежуточный шаг — создание и заполнение индекса перед созданием запроса. Здесь мы упомянем этот шаг для полноты картины. Один из способов определения доступности индекса — проверка списка индексов на портале.

Ограничение запроса и усечение результатов

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

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

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

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

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

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

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
    "search": "animaux acceptés",
    "searchFields": "Tags, Description_fr",
    "select": "HotelName, Description_fr, Address/City, Address/StateProvince, Tags",
    "count": "true"
}

Пример кода на C#

private static void RunQueries(SearchClient srchclient)
{
    SearchOptions options;
    SearchResults<Hotel> response;

    options = new SearchOptions()
    {
        IncludeTotalCount = true,
        Filter = "",
        OrderBy = { "" }
    };

    options.Select.Add("HotelId");
    options.Select.Add("HotelName");
    options.Select.Add("Description_fr");
    options.SearchFields.Add("Tags");
    options.SearchFields.Add("Description_fr");

    response = srchclient.Search<Hotel>("*", options);
    WriteDocuments(response);
}

Повышение приоритета полей для конкретного языка

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

  "scoringProfiles": [
    {
      "name": "frenchFirst",
      "text": {
        "weights": { "description_fr": 2 }
      }
    }
  ]

Затем вы включите профиль повышения в поисковый запрос:

POST /indexes/hotels/docs/search?api-version=2023-11-01
{
  "search": "pets allowed",
  "searchFields": "Tags, Description_fr",
  "select": "HotelName, Tags, Description_fr",
  "scoringProfile": "frenchFirst",
  "count": "true"
}

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