Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Эта статья предназначена для разработчиков, которые нуждаются в более глубоком понимании композиции набора навыков и предполагает знакомство с высокоуровневыми понятиями обогащения ИИ или применениеМ ИИ в Службе поиска ИИ Azure для преобразования необработанного содержимого во время индексирования.
Набор навыков — это многократно используемый объект в поиске ИИ Azure, подключенный к индексатору. Он содержит один или несколько навыков, которые используют встроенные возможности искусственного интеллекта или внешнюю пользовательскую обработку для необработанного контента, полученного из внешнего источника данных.
На следующей схеме показан базовый поток данных выполнения набора навыков.
С начала обработки набора навыков до его вывода навыки считываются и записываются в *обогащенное дерево документов , которое существует в памяти. Изначально обогащенный документ — это просто необработанное содержимое, извлеченное из источника данных (сформулированное как корневой "/document" узел). При каждом выполнении навыка обогащенный документ наполняется структурой и содержанием, так как каждый навык записывает выходные данные в виде узлов в графе.
После выполнения набора навыков выходные данные обогащенного документа направляются в индекс с помощью сопоставлений полей вывода, определяемых пользователем. Любое необработанное содержимое, которое требуется передать без изменений из источника в индекс, определяется с помощью сопоставлений полей. В отличие от этого, сопоставления выходных полей передают содержимое узлов в памяти в индекс.
Чтобы настроить примененный ИИ, укажите параметры в наборе навыков и индексаторе.
Определение набора навыков
Набор навыков — это массив одного или нескольких навыков , которые выполняют обогащение, например преобразование текста или оптического распознавания символов (OCR) в файле изображения. Навыки могут быть встроенными навыками от Корпорации Майкрософт или пользовательскими навыками для обработки логики, размещенной на внешних серверах. Набор навыков создает обогащенные документы, которые используются во время индексирования или проецируются в хранилище знаний.
Навыки имеют контекст, входные данные и выходные данные:
Контекст ссылается на область операции, которая может быть один раз в документе или один раз для каждого элемента в коллекции.
Входные данные возникают из узлов в обогащенном документе, где "источник" и "имя" определяют заданный узел.
Результаты отправляются обратно в обогащенный документ в качестве нового узла. Значения — это "имя узла" и содержимое узла. Если имя узла дублируется, можно задать целевое имя для диамбигуации.
Контекст навыка
У каждого навыка есть контекст, которым может быть весь документ (/document) или узел ниже в дереве (/document/countries/*).
Контекст определяет следующие характеристики.
Количество выполнения навыка для одного значения (один раз на поле, в документе) или для коллекции, где добавление
/*приводит к вызову навыка для каждого экземпляра в этой коллекции.Объявление выходных данных или место в дереве обогащения, куда добавляются выходные данные навыков. Выходные данные всегда добавляются в дерево в качестве дочерних узлов узла контекста.
Форма входных данных. Для многоуровневых коллекций настройка контекста родительской коллекции влияет на форму входных данных для навыка. Например, если у вас есть дерево обогащения со списком стран или регионов, каждый из которых обогащен списком состояний, содержащих список ZIP-кодов, то как задать контекст определяет, как интерпретируются входные данные.
Context Input Форма входных данных Активация навыка /document/countries/*/document/countries/*/states/*/zipcodes/*Список всех почтовых индексов в стране или регионе По одному разу для страны или региона /document/countries/*/states/*/document/countries/*/states/*/zipcodes/*Список почтовых индексов в штате, области или крае Один раз для каждого сочетания страны или региона и штата, области или края
Зависимости навыков
Навыки могут выполняться независимо и параллельно или последовательно в зависимых отношениях, если вы передаете выходные данные одного навыка в другой навык. В следующем примере показаны два встроенных навыка, которые выполняются в последовательности :
Навык #1 — это навык разделения текста, который принимает содержимое исходного поля "reviews_text" в качестве входных данных и разбивает содержимое на "страницы" из 5000 символов в качестве выходных данных. Разделение большого текста на небольшие блоки может привести к улучшению результатов для таких навыков, как обнаружение тональности.
Навык #2 — это навык обнаружения тональности, зависящий от результатов разбиения навыков. Он принимает "страницы" в качестве входных данных и создает новое поле под названием "Тональность" в качестве выходных данных, содержащих результаты анализа тональности.
Обратите внимание, что выходные данные первого навыка ("страниц") используются в анализе тональности, где "/document/reviews_text/pages/*" — это контекст и входные данные. Дополнительные сведения о формулировке пути см. в разделе "Как ссылаться на обогащения".
{
"skills": [
{
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "#1",
"description": null,
"context": "/document/reviews_text",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 5000,
"inputs": [
{
"name": "text",
"source": "/document/reviews_text"
}
],
"outputs": [
{
"name": "textItems",
"targetName": "pages"
}
]
},
{
"@odata.type": "#Microsoft.Skills.Text.SentimentSkill",
"name": "#2",
"description": null,
"context": "/document/reviews_text/pages/*",
"defaultLanguageCode": "en",
"inputs": [
{
"name": "text",
"source": "/document/reviews_text/pages/*",
}
],
"outputs": [
{
"name": "sentiment",
"targetName": "sentiment"
},
{
"name": "confidenceScores",
"targetName": "confidenceScores"
},
{
"name": "sentences",
"targetName": "sentences"
}
]
}
. . .
]
}
Дерево обогащения
Обогащенный документ — это временная древовидная структура данных, созданная во время выполнения набора навыков, которая собирает все изменения, представленные с помощью навыков. В совокупности обогащения представлены как иерархия адресных узлов. Узлы также содержат все необогащенные поля, передаваемые дословно из внешнего источника данных. Лучший подход для изучения структуры и содержимого дерева обогащения — это сеанс отладки на портале Azure.
Обогащенный документ существует во время выполнения набора навыков, но может быть кэширован или отправлен в хранилище знаний.
Изначально обогащенный документ — это просто содержимое, извлеченное из источника данных во время взлома документа, когда текст и изображения извлекаются из источника и становятся доступными для анализа языка или изображений.
Начальное содержимое — метаданные и корневой узел (document/content). Корневой узел обычно является целым документом или нормализованным изображением, извлеченным из источника данных во время взлома документов. То, как он сформирован в дереве обогащения, различается для каждого типа источника данных. В следующей таблице показано состояние документа, поступающего в конвейер обогащения для нескольких поддерживаемых источников данных.
| Источник данных и режим анализа | Default | JSON, строки JSON и CSV |
|---|---|---|
| Blob Storage | /document/content /document/normalized_images/* … |
/document/{key1} /document/{key2} … |
| Azure SQL | /document/{column1} /document/{column2} … |
N/A |
| Azure Cosmos DB | /document/{key1} /document/{key2} … |
N/A |
По мере выполнения навыков выходные данные добавляются в дерево обогащения как новые узлы. Если выполнение навыка выполняется по всему документу, узлы добавляются на первом уровне под корнем.
Узлы можно использовать в качестве входных данных для последующих навыков. Например, навыки, которые создают содержимое, например переведенные строки, могут стать входными данными для навыков, которые распознают сущности или извлекают ключевые фразы.
Хотя вы можете визуализировать и работать с деревом обогащения с помощью визуального редактора сеансов отладки, это в основном внутренняя структура.
Обогащения неизменяемы. После их создания узлы не могут быть изменены. По мере усложнения набора навыков усложняется и дерево обогащения, но помещать все его узлы в индекс или хранилище знаний не обязательно.
Вы можете выборочно сохранить только подмножество выходных данных обогащения, чтобы сохранить только то, что вы планируете использовать. Сопоставления полей выходных данных в вашем определении индексатора определяют, какое содержимое действительно индексируется в поисковом индексе. Аналогичным образом, если вы создаете хранилище знаний, вы можете сопоставить выходные данные с фигурами , назначенными проекциям.
Note
Формат дерева обогащения позволяет конвейеру обогащения присоединять метаданные даже к примитивным типам данных. Метаданные не будут допустимым объектом JSON, но могут быть проецированы в допустимый формат JSON в определениях проекций в хранилище знаний. Дополнительные сведения см. в статье Навык Шейпера.
Определение индексатора
Индексатор имеет свойства и параметры, используемые для настройки выполнения индексатора. Среди этих свойств — сопоставления, которые задают путь к данным полям в индексе поиска.
Существует два набора сопоставлений:
FieldMappings сопоставляет исходное поле с полем поиска.
OutputFieldMappings сопоставляет узел в обогащенном документе с полем поиска.
Свойство sourceFieldName указывает поле в источнике данных или узле в дереве обогащения. Свойство targetFieldName указывает поле поиска в индексе, который получает содержимое.
Пример обогащения
На примере набора инструментов для отзывов об отелях здесь показано, как развивается дерево обогащения посредством эксплуатации навыков с использованием концептуальных диаграмм.
В примере также показано следующее.
- Как контекст и входные данные навыка влияют на то, сколько раз применяется навык?
- Какой будет форма входных данных, исходя из контекста?
В этом примере исходные поля из файла CSV включают отзывы клиентов об отелях ("reviews_text") и оценки ("reviews_rating"). Индексатор добавляет поля метаданных из хранилища Blob, а навыки добавляют переведенный текст, оценки тональности и определение ключевых фраз.
В примере с отзывами об отелях, "документ" в процессе обогащения данных представляет собой отдельный отзыв об отеле.
Tip
Вы можете создать индекс поиска и хранилище знаний для этих данных с помощью REST API. Также можно использовать Сеансы отладки для понимания состава набора навыков, зависимостей и влияния на дерево обогащения. Изображения, приведенные в этой статье, взяты из сеансов отладки.
Концептуально исходное дерево обогащения выглядит следующим образом.
Корневой узел для всех обогащений — "/document". При работе с индексаторами BLOB-объектов "/document" узел имеет дочерние узлы "/document/content" и "/document/normalized_images". Если данные — CSV, как в этом примере, имена столбцов сопоставляют с узлами ниже "/document".
Навык №1: Навык сегментации
Если исходное содержимое состоит из больших фрагментов текста, полезно разбить его на небольшие компоненты для интегрированной векторизации или для повышения точности распознавания языка, тональности и ключевой фразы. Имеются две единицы: страницы и предложения. Страница состоит из примерно 5 000 символов.
Альтернативой фрагментации с помощью навыка "разделение" является навык "Макет документа", но этот навык выходит за рамки настоящей статьи.
Если требуется фрагментирование, умение Split обычно является первым в наборе умений.
"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "#1",
"description": null,
"context": "/document/reviews_text",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 5000,
"inputs": [
{
"name": "text",
"source": "/document/reviews_text"
}
],
"outputs": [
{
"name": "textItems",
"targetName": "pages"
}
]
В контексте навыка "/document/reviews_text" навык разделения выполняется один раз для reviews_text. Выходные данные навыка — это список, в котором reviews_text разбивается на сегменты по 5000 символов. Выходные данные после выполнения навыка разделения называются pages и добавляются в иерархию обогащения. Признак targetName позволяет переименовать выходные данные навыка перед их добавлением в дерево обогащения.
Дерево обогащения теперь содержит новый узел, находящийся в контексте навыка. Этот узел доступен для любого сопоставления навыков, проекций или выходных полей.
Чтобы получить доступ к любому из результатов обогащения, добавленных в узел навыком, требуется полный путь для обогащения. Например, если вы хотите использовать текст из узла в pages качестве входных данных для другого навыка, укажите его как "/document/reviews_text/pages/*". Дополнительные сведения о путях см. в разделе «Справочные обогащения».
Навык № 2. Определение языка
Документы с отзывами об отеле содержат отзывы клиентов на нескольких языках. Используемый язык определяется при помощи навыка определения языка. Затем результат будет передан для извлечения ключевых фраз и обнаружения тональности (не показано), принимая во внимание язык при анализе тональности и фраз.
Хотя навык обнаружения языка является третьим (навык 3), определенным в наборе навыков, это следующий навык для выполнения. Он не требует входных данных, поэтому он выполняется параллельно с предыдущим навыком. Как и в случае с предыдущим навыком разделения, навык определения языка также вызывается один раз для каждого документа. Дерево обогащения теперь содержит новый узел для языка.
Навыки № 3 и № 4 (анализ тональности и определение ключевых фраз)
Отзывы клиентов отражают как положительный, так и отрицательный опыт. Навык анализа тональности анализирует обратную связь и присваивает баллы в диапазоне от отрицательных до положительных чисел или нейтральных, если тональность не определяется. Наряду с анализом настроений, обнаружение ключевых фраз идентифицирует и извлекает слова и короткие выражения, которые имеют значимость.
Учитывая контекст /document/reviews_text/pages/*, как семантический анализ, так и ключевые фразы задействуются один раз для каждого элемента в коллекции pages. Результатом выполнения навыка будет узел под соответствующим элементом page.
Теперь вы должны иметь возможность посмотреть на остальные навыки в наборе навыков и визуализировать, как дерево обогащения растет с выполнением каждого навыка. Некоторые навыки, например навык объединения и навык формирования данных, также создают новые узлы, но используют данные только из имеющихся узлов и не создают новые обогащения данных.
Цвета соединительных элементов в древе выше указывают на то, что обогащения были созданы разными функциями, и узлы должны быть рассмотрены по отдельности; они не войдут в состав объекта, возвращаемого при выборе родительского узла.
Навык № 5: Навык формирователя
Если выходные данные содержат хранилище знаний, добавьте навык определения формы в качестве последнего шага. Навык Формирователя создает формы данных из узлов в дереве расширения. Например, можно объединить несколько узлов в одну форму. Затем можно спроецировать эту форму как таблицу (узлы становятся столбцами в таблице), передав название формы для проекции таблицы.
С навыком определения формы легко работать, поскольку он фокусируется на формировании одного навыка. В качестве альтернативы можно выбрать линейное формообразование в пределах отдельных проекций. Навык формировщика не добавляет и не исключает дерево обогащения, поэтому он не визуализируется. Вместо этого вы можете рассматривать навык "Shaper" как способ пересоздания дерева классификации, которое у вас уже есть. Концептуально это похоже на создание представлений из таблиц в базе данных.
{
"@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
"name": "#5",
"description": null,
"context": "/document",
"inputs": [
{
"name": "name",
"source": "/document/name"
},
{
"name": "reviews_date",
"source": "/document/reviews_date"
},
{
"name": "reviews_rating",
"source": "/document/reviews_rating"
},
{
"name": "reviews_text",
"source": "/document/reviews_text"
},
{
"name": "reviews_title",
"source": "/document/reviews_title"
},
{
"name": "AzureSearch_DocumentKey",
"source": "/document/AzureSearch_DocumentKey"
},
{
"name": "pages",
"sourceContext": "/document/reviews_text/pages/*",
"inputs": [
{
"name": "Sentiment",
"source": "/document/reviews_text/pages/*/Sentiment"
},
{
"name": "LanguageCode",
"source": "/document/Language"
},
{
"name": "Page",
"source": "/document/reviews_text/pages/*"
},
{
"name": "keyphrase",
"sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
"inputs": [
{
"name": "Keyphrases",
"source": "/document/reviews_text/pages/*/Keyphrases/*"
}
]
}
]
}
],
"outputs": [
{
"name": "output",
"targetName": "tableprojection"
}
]
}
Дальнейшие шаги
Изучив введение и пример, попробуйте создать свой первый набор навыков, используя встроенные навыки.