Добавление анализаторов языка в строковые поля в индекс поиска ИИ Azure

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

Когда следует использовать анализатор языка

Анализатор языка рекомендуется использовать, когда обнаружение слова или структуры предложения добавляет некоторую ценность при синтаксическом анализе текста. Типичным примером является связь неправильных глаголов ("bring" и "brought") или существительных во множественном числе ("mice" и "mouse"). Без лингвистической контроля эти строки анализируются только по физическим характеристикам, которые не выявят подобную связь. Учитывая, что в больших фрагментах текста, скорее всего, будут такие элементы, анализатор языка рекомендуется использовать для полей, состоящих из описаний, обзоров или сводок.

Также следует использовать анализатор языка, когда содержимое состоит из строк не на западных языках. Хотя анализатор по умолчанию (Standard Lucene) не зависит от языка, концепция использования пробелов и специальных символов (дефисов и косых черт) для разделения строк более применимо к западным языкам, чем не западные.

Например, в китайском, японском, корейском (CJK) и других азиатских языках пробел не обязательно является разделителем слов. Рассмотрим следующую строку на японском языке. Т. к. в ней нет пробелов, нейтральный к языку анализатор, скорее всего, будет анализировать всю строку как одну лексему, хотя на самом деле в строке приведена целая фраза.

これは私たちの銀河系の中ではもっとも重く明るいクラスの球状星団です。
(This is the heaviest and brightest group of spherical stars in our galaxy.)

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

Рекомендуется искать отдельные слова: 明るい (яркий), 私たちの (наш), 銀河系 (галактика). Использование одного из японских анализаторов, доступных в поиске ИИ Azure, скорее всего, разблокирует это поведение, так как эти анализаторы лучше оснащены разделением фрагмента текста на значимые слова на целевом языке.

Сравнение анализаторов Lucene и Майкрософт

Служба "Поиск ИИ Azure" поддерживает 35 анализаторов языка, поддерживаемых Lucene, и 50 анализаторов языка, поддерживаемых собственной технологией обработки естественного языка Майкрософт, используемой в Office и Bing.

Некоторые разработчики предпочитают более знакомое и простое решение Lucene с открытым исходным кодом. Анализаторы языка Lucene быстрее, но анализаторы Майкрософт обладают расширенными возможностями, такими как лемматизация, декоммундирование слов (на таких языках, как немецкий, датский, голландский, шведский, норвежский, финский, финский, венгерский, словацкий) и распознавание сущностей (URL-адреса, даты, числа). Рекомендуем вам сравнить результаты работы анализаторов от Майкрософт и Lucene и выбрать оптимальный для себя вариант. Вы можете использовать API анализа для просмотра маркеров, созданных на основе заданного текста с помощью определенного анализатора.

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

Анализаторы английского языка

По умолчанию используется анализатор Lucene (цен. категория "Стандартный"), который хорошо работает с английским языком. Однако вполне вероятно, что лучше него работают анализаторы для английского языка от Lucene или Майкрософт.

  • Анализатор английского языка от Lucene расширяет возможности стандартного анализатора. Он удаляет из слов признаки принадлежности (символы 's в конце), выделяет корень слова с помощью алгоритма стеммера Портера и удаляет английские стоп-слова.

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

Как указать анализатор языка

Задайте анализатор во время создания индекса перед загрузкой данных.

  1. В определении поля убедитесь, что поле атрибутируется как "доступный для поиска" и имеет тип Edm.String.

  2. Задайте свойству "анализатор" одно из анализаторов языка из поддерживаемого списка анализаторов.

    Свойство "анализатор" — это единственное свойство, которое будет принимать анализатор языка, и используется как для индексирования, так и для запросов. Другие свойства, связанные с анализатором (searchAnalyzer и indexAnalyzer), не принимают анализатор языка.

Не удается настроить анализаторы языка. Если анализатор не соответствует вашим требованиям, создайте пользовательский анализатор с помощью microsoft_language_tokenizer или microsoft_language_stemming_tokenizer, а затем добавьте фильтры для обработки до и после токенизации.

В следующем примере показана спецификация анализатора языка в индексе:

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

Подробности о создании индекса и настройке свойств полей см. в Создание индекса (REST). Дополнительные сведения об анализе текста см. в статье "Анализаторы" в службе "Поиск ИИ Azure".

Поддерживаемые анализаторы языка

Ниже приведен список поддерживаемых языков и названия анализаторов Lucene и Майкрософт.

Язык Название анализатора Майкрософт Название анализатора Lucene
Арабский ar.microsoft ar.lucene
Армянский hy.lucene
Бенгальский bn.microsoft
Баскский eu.lucene
Болгарский bg.microsoft bg.lucene
Каталонский ca.microsoft ca.lucene
китайский (упрощенный) zh-Hans.microsoft zh-Hans.lucene
китайский (традиционный) zh-Hant.microsoft zh-Hant.lucene
Хорватский hr.microsoft
Чешский cs.microsoft cs.lucene
датский da.microsoft da.lucene
Голландский nl.microsoft nl.lucene
Английский en.microsoft en.lucene
Эстонский et.microsoft
Финский fi.microsoft fi.lucene
французский fr.microsoft fr.lucene
Галисийский gl.lucene
немецкий de.microsoft de.lucene
Греческий el.microsoft el.lucene
Гуджарати gu.microsoft
Иврит he.microsoft
Hindi hi.microsoft hi.lucene
Венгерский hu.microsoft hu.lucene
Исландский is.microsoft
Индонезийский (бахаса) id.microsoft id.lucene
Ирландский ga.lucene
Итальянский it.microsoft it.lucene
Японский ja.microsoft ja.lucene
Каннада kn.microsoft
Корейский ko.microsoft ko.lucene
Латышский lv.microsoft lv.lucene
Литовский lt.microsoft
Малаялам ml.microsoft
Малайский (латиница) ms.microsoft
Маратхи mr.microsoft
Норвежский nb.microsoft no.lucene
Персидский fa.lucene
Польский pl.microsoft pl.lucene
португальский (Бразилия) pt-Br.microsoft pt-Br.lucene
Португальский (Португалия) pt-Pt.microsoft pt-Pt.lucene
Панджаби pa.microsoft
Румынский ro.microsoft ro.lucene
русском языке ru.microsoft ru.lucene
Сербский (кириллица) sr-cyrillic.microsoft
Сербский (латиница) sr-latin.microsoft
Словацкий sk.microsoft
Словенский sl.microsoft
Испанский es.microsoft es.lucene
Шведский sv.microsoft sv.lucene
Тамильский ta.microsoft
Телугу te.microsoft
Тайский th.microsoft th.lucene
Турецкий tr.microsoft tr.lucene
Украинский uk.microsoft
Урду ur.microsoft
Вьетнамский vi.microsoft

Все анализаторы, у которых в названии есть идентификатор Lucene, работают на базе анализаторов языка Apache Lucene.

См. также