Добавление анализаторов языка в строковые поля в индекс поиска ИИ 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 в конце), выделяет корень слова с помощью алгоритма стеммера Портера и удаляет английские стоп-слова.
Анализатор английского языка от Майкрософт вместо выделения корня слова выполняет лемматизацию. Это означает, что он может обрабатывать перегибы и нерегулярные формы слов гораздо лучше, что приводит к более актуальным результатам поиска.
Как указать анализатор языка
Задайте анализатор во время создания индекса перед загрузкой данных.
В определении поля убедитесь, что поле атрибутируется как "доступный для поиска" и имеет тип Edm.String.
Задайте свойству "анализатор" одно из анализаторов языка из поддерживаемого списка анализаторов.
Свойство "анализатор" — это единственное свойство, которое будет принимать анализатор языка, и используется как для индексирования, так и для запросов. Другие свойства, связанные с анализатором (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 | |
Хинди | 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.