Создание набора навыков в поиске ИИ Azure
Набор навыков определяет операции, которые создают текстовое содержимое и структуру из документов, содержащих изображения или неструктурированный текст. Примерами являются оптическое распознавание символов (OCR) для изображений, распознавание сущностей для неифференцированного текста и перевода текста. Набор навыков выполняется после извлечения текста и изображений из внешнего источника данных и после обработки сопоставлений полей.
В этой статье объясняется, как создать набор навыков с помощью REST API, но те же понятия и шаги применяются к другим языкам программирования.
Ниже указаны правила определения набора навыков:
- Должен иметь уникальное имя в коллекции наборов навыков. Набор навыков — это ресурс верхнего уровня, который может использоваться любым индексатором.
- Должен иметь по крайней мере один навык. Три–пять навыков являются типичными. Максимальное значение — 30.
- Набор навыков может повторять навыки одного типа. Например, набор навыков может иметь несколько навыков фигуры.
- Набор навыков поддерживает цепочки операций, циклов и ветвления.
Индексаторы управляют выполнением набора навыков. Перед тестированием набора навыков требуется индексатор, источник данных и индекс .
Совет
Включите кэширование обогащения, чтобы повторно использовать контент, который вы уже обработали, и снизить стоимость разработки.
Добавление определения набора навыков
Начните с базовой структуры. В REST API создания набора навыков текст запроса создается в ФОРМАТЕ JSON и содержит следующие разделы:
{
"name":"skillset-template",
"description":"A description makes the skillset self-documenting (comments aren't allowed in JSON itself)",
"skills":[
],
"cognitiveServices":{
"@odata.type":"#Microsoft.Azure.Search.CognitiveServicesByKey",
"description":"An Azure AI services resource in the same region as Azure AI Search",
"key":"<Your-Cognitive-Services-Multiservice-Key>"
},
"knowledgeStore":{
"storageConnectionString":"<Your-Azure-Storage-Connection-String>",
"projections":[
{
"tables":[ ],
"objects":[ ],
"files":[ ]
}
]
},
"encryptionKey":{ }
}
После имени и описания в наборе навыков указаны четыре основных свойства.
skills
массив, неупорядоченная коллекция навыков. Навыки могут быть служебными (например, разделение текста), преобразование (на основе ИИ из служб ИИ Azure) или пользовательские навыки, предоставляемые вами. Пример массива навыков представлен в следующем разделе.cognitiveServices
используется для оплачиваемых навыков , которые вызывают API служб искусственного интеллекта Azure. Удалите этот раздел, если вы не используете навыки, по которым можно выставлять счета, или пользовательский поиск сущностей. Если вы находитесь, подключите ресурс azure AI с несколькими службами.knowledgeStore
(необязательно) указывает учетную запись служба хранилища Azure и параметры для проецирования набора навыков в таблицы, большие двоичные объекты и файлы в служба хранилища Azure. Удалите этот раздел, если он вам не нужен. в противном случае укажите хранилище знаний.encryptionKey
(необязательно) указывает Azure Key Vault и ключи, управляемые клиентом, используемые для шифрования конфиденциального содержимого (описания, строка подключения ключей, ключей) в определении набора навыков. Удалите это свойство, если вы не используете шифрование, управляемое клиентом.
Добавление навыков
В определении набора навыков массив навыков указывает, какие навыки необходимо выполнить. Три-пять навыков являются общими, но вы можете добавить столько навыков, сколько необходимо, при условии ограничений обслуживания.
Конечным результатом конвейера обогащения является текстовое содержимое в индексе поиска или хранилище знаний. По этой причине большинство навыков либо создают текст из изображений (текст OCR, подписи, теги), либо анализируют существующий текст, чтобы создать новую информацию (сущности, ключевые фразы, тональность). Навыки, которые работают независимо, обрабатываются параллельно. Навыки, зависящие друг от друга, указывают выходные данные одного навыка (например, ключевые фразы) в качестве входных данных второго навыка (например, перевода текста). Служба поиска определяет порядок выполнения навыка и среды выполнения.
Все навыки имеют тип, контекст, входные данные и выходные данные. При желании навык может иметь имя и описание. В следующем примере показаны два несвязанных встроенных навыка , чтобы можно было сравнить базовую структуру.
"skills": [
{
"@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
"name": "#1",
"description": "This skill detects organizations in the source content",
"context": "/document",
"categories": [
"Organization"
],
"inputs": [
{
"name": "text",
"source": "/document/content"
}
],
"outputs": [
{
"name": "organizations",
"targetName": "orgs"
}
]
},
{
"name": "#2",
"description": "This skill detects corporate logos in the source files",
"@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
"context": "/document/normalized_images/*",
"visualFeatures": [
"brands"
],
"inputs": [
{
"name": "image",
"source": "/document/normalized_images/*"
}
],
"outputs": [
{
"name": "brands"
}
]
}
]
Каждый навык является уникальным с точки зрения входных значений и параметров, которые он принимает. Справочная документация по навыкам описывает все параметры и свойства заданного навыка. Несмотря на различия, для большинства навыков используется общий набор и они имеют похожие шаблоны.
Примечание.
Вы можете создавать сложные наборы навыков с циклом и ветвлением с помощью условного когнитивного навыка для создания выражений. В основе синтаксиса лежит нотация пути к указателю JSON с небольшими изменениями, означающими узлы на дереве обогащения. Переход "/"
по уровню ниже в дереве и "*"
выступает в качестве оператора для каждого из них в контексте. Многочисленные примеры в этой статье иллюстрируют синтаксис.
Настройка контекста навыка
Каждый навык имеет свойство контекста, определяющее уровень, на котором выполняются операции. context
Если свойство не задано явным образом, по умолчанию "/document"
используется контекст целиком (навык вызывается один раз для каждого документа).
"skills":[
{
"@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
"context": "/document",
"inputs": [],
"outputs": []
},
{
"@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
"context": "/document/normalized_images/*",
"visualFeatures": [],
"inputs": [],
"outputs": []
}
]
Свойство context
обычно имеет одно из следующих примеров:
Пример контекста | Description |
---|---|
context : /document |
(по умолчанию) Входные данные и выходные данные находятся на уровне документа. |
context : /document/pages/* |
Некоторые навыки, такие как анализ тональности, выполняются лучше по сравнению с меньшими фрагментами текста. Если вы разбиваете большое поле содержимого на страницы или предложения, контекст должен находиться над каждой частью компонента. |
context : /document/normalized_images/* |
Для содержимого изображения входные и выходные данные — один на изображение в родительском документе. |
Контекст также определяет, где выходные данные создаются в дереве обогащения. Например, навык распознавания сущностей возвращает свойство с именем organizations
, записанное как orgs
. Если контекст имеет значение "/document"
, organizations
узел добавляется в качестве дочернего "/document"
элемента. Если вы хотите ссылаться на этот узел в нисходящих навыках, путь — "/document/orgs"
это .
Определение входных данных
Навыки чтения из и записи в обогащенный документ. Входные данные навыка указывают источник входящих данных. Часто это корневой узел обогащенного документа. Для больших двоичных объектов типичные входные данные навыка — это свойство содержимого документа.
Справочная документация по навыкам для каждого навыка описывает входные данные, которые он может использовать. Каждый вход имеет определенный name
вход и source
указывает расположение данных в обогащенном документе. Ниже приведен пример навыка распознавания сущностей:
"inputs": [
{
"name": "text",
"source": "/document/content"
},
{
"name": "languageCode",
"source": "/document/language"
}
]
Навыки могут иметь несколько входных данных. Это
name
определенные входные данные. Для распознавания сущностей определенные входные данные — текст и языковой код.Свойство
source
указывает, какое поле или строка предоставляет обрабатываемое содержимое. Для навыков на основе текста источник — это поле в документе или строке, предоставляющей текст. Для навыков на основе изображений узел, предоставляющий входные данные, нормализуется изображения.Пример источника Description source
:/document
Для табличного набора данных документ соответствует строке. source
:/document/content
Для больших двоичных объектов источник обычно является свойством содержимого большого двоичного объекта. source
:/document/some-named-field
Для навыков на основе текста, таких как распознавание сущностей или извлечение ключевых фраз, источник должен быть полем, которое содержит достаточно текста для анализа, например описание или сводку. source
:/document/normalized_images/*
Для содержимого изображения источник — это изображение, нормализуемое во время взлома документа.
Если навык выполняет итерацию по массиву, контекст и источник входных данных должны включаться /*
в правильные позиции.
Определение выходных данных
Каждый навык предназначен для создания определенных типов выходных данных, на которые можно ссылаться по имени в наборе навыков. Выходные данные навыка имеют name
и необязательный targetName
атрибут.
Справочная документация по навыкам для каждого навыка описывает выходные данные, которые он может производить. Ниже приведен пример навыка распознавания сущностей:
"outputs": [
{
"name": "persons",
"targetName": "people"
},
{
"name": "organizations",
"targetName": "orgs"
},
{
"name": "locations",
"targetName": "places"
}
]
Навыки могут иметь несколько выходных данных. Свойство
name
определяет определенные выходные данные. Например, для распознавания сущностей выходные данные могут быть лицами, расположениями, организациями, среди прочего.Свойство
targetName
указывает имя, которое должен иметь этот узел в обогащенном документе. Это полезно, если выходные данные навыка имеют то же имя. Если у вас несколько навыков, возвращающих одинаковые выходные данные, используйтеtargetName
для диамбигуации имен в путях узла обогащения. Если целевое имя не указано, свойство name используется для обоих.
В некоторых ситуациях требуется ссылаться на каждый элемент массива отдельно. Предположим, что нужно отдельно передать каждый элемент "/document/orgs"
в другой навык. Для этого добавьте звездочку в путь: "/document/orgs/*"
Выходные данные навыка записываются в обогащенный документ в виде нового узла в дереве обогащения. Это может быть простое значение, например оценка тональности или языковой код. Это также может быть коллекция, например список организаций, людей или расположений. Выходные данные навыка также могут быть сложной структурой, как и в случае с навыком фигуры. Входные данные навыка определяют композицию фигуры, но выходные данные — именованный объект, на который можно ссылаться в индексе поиска, проекции хранилища знаний или другом навыке по его имени.
Добавление настраиваемого навыка
В этом разделе приведен пример пользовательского навыка. URI указывает на функцию Azure, которая, в свою очередь, вызывает предоставленную вами модель или преобразование. Дополнительные сведения см. в статье "Добавление пользовательского навыка в конвейер обогащения поиска ИИ Azure".
Хотя пользовательский навык выполняет код, который является внешним для конвейера, в массиве навыков это просто другой навык. Подобно встроенным навыкам он имеет тип, контекст, входные и выходные данные. Он считывает и записывает данные в дерево обогащения так же, как и встроенные навыки. Обратите внимание, что поле имеет значение звездочки, что означает, что context
шаг обогащения вызывается для каждой организации в разделе "/document/orgs"
."/document/orgs/*"
Выходные данные, такие как описание компании в этом примере, создаются для каждой организации, которая идентифицируется. При обращении к узлу на нижнем шаге (например, в извлечении ключевых фраз) вы будете использовать путь "/document/orgs/*/companyDescription"
для этого.
{
"@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
"description": "This skill calls an Azure function, which in turn calls custom code",
"uri": "https://indexer-e2e-webskill.azurewebsites.net/api/InvokeCode?code=foo",
"httpHeaders": {
"Ocp-Apim-Subscription-Key": "foobar"
},
"context": "/document/orgs/*",
"inputs": [
{
"name": "query",
"source": "/document/orgs/*"
}
],
"outputs": [
{
"name": "description",
"targetName": "companyDescription"
}
]
}
Отправка выходных данных в место назначения
Хотя выходные данные навыка можно кэшировать при необходимости для повторного использования, обычно это временно и существует только во время выполнения навыка.
Чтобы отправить выходные данные в какое-либо поле в индексе поиска, создайте сопоставление поля выходных данных в индексаторе.
Чтобы отправить выходные данные в хранилище знаний, создайте проекцию.
Чтобы отправить выходные данные в подчиненный навык, наведите ссылку на выходные данные по имени узла, например
"/document/organization"
в свойстве источника входного источника нижестоящего навыка. Примеры см. в статье "Ссылка на заметку ".
Советы по созданию первого набора навыков
Попробуйте мастер импорта данных.
Мастер автоматизирует несколько шагов, которые могут быть сложными в первый раз. Он определяет набор навыков, индекс и индексатор, включая сопоставления полей и сопоставления выходных полей. Он также определяет проекции в хранилище знаний, если вы используете его. Для некоторых навыков, таких как анализ OCR или изображения, мастер добавляет служебные навыки, которые объединяют содержимое изображения и текста, разделенное во время взлома документов.
После запуска мастера можно открыть каждый объект в портал Azure, чтобы просмотреть его определение JSON.
Попробуйте выполнить сеансы отладки для вызова набора навыков по целевому документу и проверить обогащенный документ, который создает набор навыков. Вы можете просматривать и изменять входные и выходные параметры и значения. Это полезное руководство. Руководство. Отладка набора навыков с помощью сеансов отладки.
Следующий шаг
Поля контекста и источника входных данных — это пути к узлам в дереве обогащения. На следующем шаге узнайте больше о синтаксисе пути для узлов в дереве обогащения.