Criar um conjunto de competências na Pesquisa de IA do Azure
Um conjunto de habilidades define operações que geram conteúdo textual e estrutura a partir de documentos que contêm imagens ou texto não estruturado. Exemplos são reconhecimento ótico de caracteres (OCR) para imagens, reconhecimento de entidade para texto indiferenciado e tradução de texto. Um conjunto de habilidades é executado depois que o texto e as imagens são extraídos de uma fonte de dados externa e depois que os mapeamentos de campo são processados.
Este artigo explica como criar um conjunto de habilidades usando APIs REST, mas os mesmos conceitos e etapas se aplicam a outras linguagens de programação.
As regras para a definição do conjunto de competências incluem:
- Deve ter um nome exclusivo dentro da coleção skillset. Um conjunto de habilidades é um recurso de nível superior que pode ser usado por qualquer indexador.
- Deve ter pelo menos uma habilidade. Três a cinco habilidades são típicas. O máximo é 30.
- Um conjunto de habilidades pode repetir habilidades do mesmo tipo. Por exemplo, um conjunto de habilidades pode ter várias habilidades de Shaper.
- Um conjunto de habilidades suporta operações encadeadas, looping e ramificação.
Os indexadores impulsionam a execução do conjunto de habilidades. Você precisa de um indexador, fonte de dados e índice antes de poder testar seu conjunto de habilidades.
Gorjeta
Habilite o cache de enriquecimento para reutilizar o conteúdo que você já processou e reduza o custo de desenvolvimento.
Adicionar uma definição de conjunto de competências
Comece pela estrutura básica. Na API REST Create Skillset, o corpo da solicitação é criado em JSON e tem as seguintes seções:
{
"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":{ }
}
Após o nome e a descrição, um conjunto de habilidades tem quatro propriedades principais:
skills
array, uma coleção desordenada de habilidades. As habilidades podem ser utilitárias (como dividir texto), transformacionais (com base na IA dos serviços de IA do Azure) ou habilidades personalizadas que você fornece. Um exemplo de uma matriz de habilidades é fornecido na próxima seção.cognitiveServices
é usado para habilidades faturáveis que chamam APIs de serviços de IA do Azure. Remova esta seção se você não estiver usando habilidades faturáveis ou Pesquisa de entidade personalizada. Se estiver, anexe um recurso multisserviço do Azure AI.knowledgeStore
(opcional) especifica uma conta de Armazenamento do Azure e configurações para projetar a saída do conjunto de habilidades em tabelas, blobs e arquivos no Armazenamento do Azure. Remova esta seção se não precisar dela, caso contrário , especifique um armazenamento de conhecimento.encryptionKey
(opcional) especifica um Cofre de Chaves do Azure e chaves gerenciadas pelo cliente usadas para criptografar conteúdo confidencial (descrições, cadeias de conexão, chaves) em uma definição de conjunto de habilidades. Remova essa propriedade se você não estiver usando criptografia gerenciada pelo cliente.
Adicionar competências
Dentro da definição do conjunto de habilidades, a matriz de habilidades especifica quais habilidades executar. Três a cinco habilidades são comuns, mas você pode adicionar quantas habilidades forem necessárias, sujeitas a limites de serviço.
O resultado final de um pipeline de enriquecimento é o conteúdo textual em um índice de pesquisa ou em um repositório de conhecimento. Por esse motivo, a maioria das habilidades cria texto a partir de imagens (texto OCR, legendas, tags) ou analisa o texto existente para criar novas informações (entidades, frases-chave, sentimento). As competências que operam de forma independente são processadas em paralelo. As habilidades que dependem umas das outras especificam o resultado de uma habilidade (como frases-chave) como a entrada de uma segunda habilidade (como tradução de texto). O serviço de pesquisa determina a ordem de execução de habilidades e o ambiente de execução.
Todas as habilidades têm um tipo, contexto, entradas e saídas. Uma habilidade pode, opcionalmente, ter um nome e uma descrição. O exemplo a seguir mostra duas habilidades internas não relacionadas para que você possa comparar a estrutura básica.
"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"
}
]
}
]
Cada habilidade é única em termos de seus valores de entrada e os parâmetros que ela toma. A documentação de referência de habilidade descreve todos os parâmetros e propriedades de uma determinada habilidade. Embora existam diferenças, a maioria das habilidades compartilha um conjunto comum e tem padrões semelhantes.
Nota
Você pode construir conjuntos de habilidades complexas com looping e ramificação usando a habilidade cognitiva condicional para criar as expressões. A sintaxe é baseada na notação de caminho de ponteiro JSON, com algumas modificações para identificar nós na árvore de enriquecimento. A "/"
atravessa um nível mais baixo na árvore e "*"
atua como um operador para cada um no contexto. Numerosos exemplos neste artigo ilustram a sintaxe.
Definir contexto de habilidades
Cada habilidade tem uma propriedade de contexto que determina o nível em que as operações ocorrem. Se a context
propriedade não estiver definida explicitamente, o padrão será "/document"
, onde o contexto é todo o documento (a habilidade é chamada uma vez por documento).
"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": []
}
]
A context
propriedade geralmente é definida como um dos seguintes exemplos:
Exemplo de contexto | Description |
---|---|
context : /document |
(Padrão) As entradas e saídas estão no nível do documento. |
context : /document/pages/* |
Algumas habilidades, como análise de sentimento, têm melhor desempenho em pedaços menores de texto. Se você estiver dividindo um campo de conteúdo grande em páginas ou frases, o contexto deverá estar sobre cada parte do componente. |
context : /document/normalized_images/* |
Para o conteúdo da imagem, as entradas e saídas são uma por imagem no documento pai. |
O contexto também determina onde as saídas são produzidas na árvore de enriquecimento. Por exemplo, a habilidade Reconhecimento de Entidade retorna uma propriedade chamada organizations
, capturada como orgs
. Se o contexto for "/document"
, então um organizations
nó é adicionado como filho de "/document"
. Se você quiser fazer referência a esse nó em habilidades a jusante, o caminho é "/document/orgs"
.
Definir inputs
Habilidades de leitura e escrita em um documento enriquecido. As entradas de habilidades especificam a origem dos dados recebidos. Muitas vezes, é o nó raiz do documento enriquecido. Para blobs, uma entrada de habilidade típica é a propriedade content do documento.
A documentação de referência de habilidades para cada habilidade descreve os insumos que ela pode consumir. Cada entrada tem um name
que identifica uma entrada específica e um source
que especifica o local dos dados no documento enriquecido. O exemplo a seguir é da habilidade Reconhecimento de Entidade:
"inputs": [
{
"name": "text",
"source": "/document/content"
},
{
"name": "languageCode",
"source": "/document/language"
}
]
As habilidades podem ter várias entradas. O
name
é o input específico. Para Reconhecimento de Entidade, as entradas específicas são text e languageCode.A
source
propriedade especifica qual campo ou linha fornece o conteúdo a ser processado. Para habilidades baseadas em texto, a fonte é um campo no documento ou linha que fornece texto. Para habilidades baseadas em imagem, o nó que fornece a entrada são imagens normalizadas.Exemplo de fonte Description source
:/document
Para um conjunto de dados tabulares, um documento corresponde a uma linha. source
:/document/content
Para blobs, a fonte geralmente é a propriedade content do blob. source
:/document/some-named-field
Para habilidades baseadas em texto, como reconhecimento de entidade ou extração de frases-chave, a origem deve ser um campo que contenha texto suficiente para ser analisado, como uma descrição ou resumo. source
:/document/normalized_images/*
Para conteúdo de imagem, a fonte é a imagem que foi normalizada durante a quebra de documentos.
Se a habilidade iterar em uma matriz, tanto o contexto quanto a fonte de entrada devem ser incluídos /*
nas posições corretas.
Definir saídas
Cada habilidade é projetada para emitir tipos específicos de saída, que são referenciados pelo nome no conjunto de habilidades. Uma saída de habilidade tem um name
e um opcional targetName
.
A documentação de referência de habilidades para cada habilidade descreve os resultados que ela pode produzir. O exemplo a seguir é da habilidade Reconhecimento de Entidade:
"outputs": [
{
"name": "persons",
"targetName": "people"
},
{
"name": "organizations",
"targetName": "orgs"
},
{
"name": "locations",
"targetName": "places"
}
]
As habilidades podem ter vários resultados. A
name
propriedade identifica uma saída específica. Por exemplo, para o Reconhecimento de Entidades, a saída pode ser pessoas, locais, organizações, entre outros.A
targetName
propriedade especifica o nome que você gostaria que esse nó tivesse no documento enriquecido. Isso é útil se os resultados de habilidades tiverem o mesmo nome. Se você tiver várias habilidades que retornam a mesma saída, usetargetName
para desambiguação de nome em caminhos de nó de enriquecimento. Se o nome de destino não for especificado, a propriedade name será usada para ambos.
Algumas situações exigem a referência de cada elemento de uma matriz separadamente. Por exemplo, suponha que você queira passar cada elemento separadamente "/document/orgs"
para outra habilidade. Para fazer isso, adicione um asterisco ao caminho: "/document/orgs/*"
.
A saída de habilidades é gravada no documento enriquecido como um novo nó na árvore de enriquecimento. Pode ser um valor simples, como uma pontuação de sentimento ou código de idioma. Também pode ser uma coleção, como uma lista de organizações, pessoas ou locais. A saída de habilidades também pode ser uma estrutura complexa, como é o caso da habilidade Shaper. As entradas da habilidade determinam a composição da forma, mas a saída é o objeto nomeado, que pode ser referenciado em um índice de pesquisa, uma projeção de armazenamento de conhecimento ou outra habilidade por seu nome.
Adicionar uma habilidade personalizada
Esta seção inclui um exemplo de uma habilidade personalizada. O URI aponta para uma Função do Azure, que, por sua vez, invoca o modelo ou a transformação que você fornece. Para obter mais informações, consulte Adicionar uma habilidade personalizada a um pipeline de enriquecimento do Azure AI Search.
Embora a habilidade personalizada execute código externo ao pipeline, em uma matriz de habilidades, é apenas outra habilidade. Como as habilidades internas, ele tem um tipo, contexto, entradas e saídas. Ele também lê e escreve em uma árvore de enriquecimento, assim como as habilidades incorporadas. Observe que o context
campo está definido com um asterisco, o "/document/orgs/*"
que significa que a etapa de enriquecimento é chamada para cada organização em "/document/orgs"
.
A saída, como a descrição da empresa neste exemplo, é gerada para cada organização identificada. Ao se referir ao nó em uma etapa a jusante (por exemplo, na extração de frase-chave), você usaria o caminho "/document/orgs/*/companyDescription"
para fazer isso.
{
"@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"
}
]
}
Enviar saída para um destino
Embora a saída de habilidades possa ser opcionalmente armazenada em cache para fins de reutilização, geralmente é temporária e existe apenas enquanto a execução de habilidades está em andamento.
Para enviar a saída para um campo em um índice de pesquisa, crie um mapeamento de campo de saída em um indexador.
Para enviar a saída para um repositório de conhecimento, crie uma projeção.
Para enviar a saída para uma habilidade downstream, faça referência à saída pelo nome do nó, como
"/document/organization"
, na propriedade input source da habilidade downstream. Consulte Fazer referência a uma anotação para obter exemplos.
Dicas para um primeiro conjunto de habilidades
Experimente o assistente Importar dados ou o assistente Importar e vetorizar dados.
Os assistentes automatizam várias etapas que podem ser desafiadoras na primeira vez. Ele define o conjunto de habilidades, índice e indexador, incluindo mapeamentos de campo e mapeamentos de campo de saída. Ele também define projeções em um repositório de conhecimento, se você estiver usando um. Para algumas habilidades, como OCR ou análise de imagem, o assistente adiciona habilidades de utilidade que mesclam o conteúdo de imagem e texto que foi separado durante a quebra de documentos.
Depois que o assistente for executado, você poderá abrir cada objeto no portal do Azure para exibir sua definição JSON.
Tente Depurar sessões para invocar a execução do conjunto de habilidades sobre um documento de destino e inspecione o documento enriquecido que o conjunto de habilidades cria. Você pode visualizar e modificar configurações e valores de entrada e saída. Este tutorial é um bom lugar para começar: Tutorial: Depurar um conjunto de habilidades usando sessões de depuração.
Próximo passo
Os campos de contexto e de origem de entrada são caminhos para nós em uma árvore de enriquecimento. Como próxima etapa, saiba mais sobre a sintaxe de caminho para nós em uma árvore de enriquecimento.