Conceitos de conjunto de competências no Azure Cognitive Search
Este artigo destina-se a programadores que precisam de uma compreensão mais aprofundada dos conceitos e composição do conjunto de competências e assumem familiaridade com os conceitos de alto nível de melhoramento de IA.
Um conjunto de competências é um recurso reutilizável no Azure Cognitive Search anexado a um indexador. Contém uma ou mais competências que chamam IA incorporada ou processamento personalizado externo através de documentos obtidos a partir de uma origem de dados externa.
O diagrama seguinte ilustra o fluxo de dados básico da execução de conjuntos de competências.
Desde o início do processamento de conjuntos de competências até à sua conclusão, as competências leem e escrevem num documento melhorado. Inicialmente, um documento melhorado é apenas o conteúdo não processado extraído de uma origem de dados (articulado como o "/document"
nó de raiz). Com cada execução de competências, o documento melhorado ganha estrutura e substância à medida que a competência escreve a sua saída como nós no gráfico.
Após a execução do conjunto de competências ser efetuada, a saída de um documento melhorado encontra o seu caminho para um índice através de mapeamentos de campos de saída. Qualquer conteúdo não processado que pretenda transferir intacto, da origem para um índice, é definido através de mapeamentos de campos.
Para configurar o melhoramento, irá especificar as definições num conjunto de competências e indexador.
Definição do conjunto de competências
Um conjunto de competências é uma matriz de uma ou mais competências que efetuam um melhoramento, como traduzir texto ou OCR num ficheiro de imagem. As competências podem ser as competências incorporadas da Microsoft ou as competências personalizadas para processar a lógica que aloja externamente. Um conjunto de competências produz documentos melhorados que são consumidos durante a indexação ou projetados para um arquivo de conhecimento.
As competências têm um contexto, entradas e saídas:
O contexto refere-se ao âmbito da operação, que pode ser uma vez por documento ou uma vez para cada item numa coleção.
As entradas têm origem em nós num documento melhorado, em que uma "origem" e um "nome" identificam um determinado nó.
A saída é enviada de volta para o documento melhorado como um novo nó. Os valores são o nó "nome" e o conteúdo do nó. Se um nome de nó estiver duplicado, pode definir um nome de destino para desambiguação.
Contexto de competência
Cada competência tem um contexto, que pode ser todo o documento (/document
) ou um nó inferior na árvore (/document/countries/*
). Um contexto determina:
O número de vezes que a competência é executada, sobre um único valor (uma vez por campo, por documento) ou para valores de contexto da coleção de tipos, em que adicionar um
/*
resultado na invocação de competências, uma vez para cada instância na coleção.Declaração de saída ou onde na árvore de melhoramento são adicionadas as saídas de competências. As saídas são sempre adicionadas à árvore como subordinados do nó de contexto.
Forma das entradas. Para coleções de vários níveis, definir o contexto para a coleção principal afetará a forma da entrada da competência. Por exemplo, se tiver uma árvore de melhoramento com uma lista de países/regiões, cada um enriquecido com uma lista de estados que contenham uma lista de códigos ZIP, a forma como define o contexto determinará a forma como a entrada é interpretada.
Contexto Entrada Forma de Entrada Invocação de Competências /document/countries/*
/document/countries/*/states/*/zipcodes/*
Uma lista de todos os códigos postais no país/região Uma vez por país/região /document/countries/*/states/*
/document/countries/*/states/*/zipcodes/*
Uma lista de códigos postais no estado Uma vez por combinação de país/região e estado
Dependências de competências
As competências podem ser executadas de forma independente e paralela ou sequencial se alimentar a saída de uma competência para outra competência. O exemplo seguinte demonstra duas competências incorporadas que são executadas em sequência:
A competência n.º 1 é uma competência de Divisão de Texto que aceita o conteúdo do campo de origem "reviews_text" como entrada e divide esse conteúdo em "páginas" de 5000 carateres como saída. Dividir texto grande em segmentos mais pequenos pode produzir melhores resultados para competências como a deteção de sentimentos.
A competência n.º 2 é uma competência de Deteção de Sentimentos que aceita "páginas" como entrada e produz um novo campo chamado "Sentimento" como saída que contém os resultados da análise de sentimentos.
Repare como o resultado da primeira competência ("páginas") é utilizado na análise de sentimentos, em que "/document/reviews_text/pages/*" é o contexto e a entrada. Para obter mais informações sobre a formulação de caminhos, veja Como referenciar anotações.
{
"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"
}
]
}
. . .
]
}
Árvore de melhoramento
Um documento melhorado é uma estrutura de dados temporária e semelhante a uma árvore criada durante a execução de conjuntos de competências que recolhe todas as alterações introduzidas através de competências. Coletivamente, os melhoramentos são representados como uma hierarquia de nós endereçáveis. Os nós também incluem quaisquer campos não agrupados que são transmitidos em texto literal a partir da origem de dados externa.
Existe um documento melhorado durante a execução de conjuntos de competências, mas pode ser colocado em cache ou enviado para um arquivo de conhecimento.
Inicialmente, um documento melhorado é simplesmente o conteúdo extraído de uma origem de dados durante a conversão de documentos, onde o texto e as imagens são extraídos da origem e disponibilizados para análise de idiomas ou imagens.
O conteúdo inicial é metadados e o nó de raiz (document/content
). Normalmente, o nó raiz é um documento inteiro ou uma imagem normalizada que é extraída de uma origem de dados durante a deteção de documentos. A forma como é articulada numa árvore de melhoramento varia para cada tipo de origem de dados. A tabela seguinte mostra o estado de um documento que entra no pipeline de melhoramento para várias origens de dados suportadas:
Origem de Dados\Modo de Análise | Predefinição | JSON, JSON Lines & CSV |
---|---|---|
Armazenamento de Blobs | /documento/conteúdo /document/normalized_images/* … |
/document/{key1} /document/{key2} … |
SQL do Azure | /document/{column1} /document/{column2} … |
N/D |
Azure Cosmos DB | /document/{key1} /document/{key2} … |
N/D |
À medida que as competências são executadas, a saída é adicionada à árvore de melhoramento como novos nós. Se a execução de competências estiver em todo o documento, os nós serão adicionados ao primeiro nível na raiz.
Os nós podem ser utilizados como entradas para competências a jusante. Por exemplo, as competências que criam conteúdo, como cadeias traduzidas, podem tornar-se contributos para competências que reconhecem entidades ou extraem expressões-chave.
Embora possa visualizar e trabalhar com uma árvore de melhoramento através do editor de elementos visuais de Sessões de Depuração, é principalmente uma estrutura interna.
Os melhoramentos são imutáveis: uma vez criados, os nós não podem ser editados. À medida que os conjuntos de competências se tornam mais complexos, também a sua árvore de melhoramento, mas nem todos os nós na árvore de melhoramento precisam de chegar ao índice ou ao arquivo de conhecimento.
Pode manter seletivamente apenas um subconjunto das saídas de melhoramento para que apenas mantenha o que pretende utilizar. Os mapeamentos de campos de saída na definição do indexador determinarão que conteúdo é realmente ingerido no índice de pesquisa. Da mesma forma, se estiver a criar um arquivo de conhecimento, pode mapear saídas em formas atribuídas a projeções.
Nota
O formato de árvore de melhoramento permite que o pipeline de melhoramento anexe metadados a tipos de dados primitivos. Os metadados não serão um objeto JSON válido, mas podem ser projetados num formato JSON válido em definições de projeção num arquivo de conhecimento. Para obter mais informações, veja Competência do Shaper.
Definição do indexador
Um indexador tem propriedades e parâmetros utilizados para configurar a execução do indexador. Entre essas propriedades estão mapeamentos que definem o caminho de dados para campos num índice de pesquisa.
Existem dois conjuntos de mapeamentos:
"fieldMappings" mapeia um campo de origem para um campo de pesquisa.
"outputFieldMappings" mapeia um nó num documento melhorado para um campo de pesquisa.
A propriedade "sourceFieldName" especifica um campo na sua origem de dados ou um nó numa árvore de melhoramento. A propriedade "targetFieldName" especifica o campo de pesquisa num índice que recebe o conteúdo.
Exemplo de melhoramento
Ao utilizar o conjunto de competências do hotel como ponto de referência, este exemplo explica como uma árvore de melhoramento evolui através da execução de competências através de diagramas conceptuais.
Este exemplo também mostra:
- Como funcionam as entradas e o contexto de uma competência para determinar quantas vezes uma competência é executada
- Qual é a forma da entrada com base no contexto
Neste exemplo, os campos de origem de um ficheiro CSV incluem revisões de clientes sobre hotéis ("reviews_text") e classificações ("reviews_rating"). O indexador adiciona campos de metadados do Armazenamento de blobs e as competências adicionam texto traduzido, classificações de sentimentos e deteção de expressões-chave.
No exemplo de revisões do hotel, um "documento" dentro do processo de melhoramento representa uma única revisão do hotel.
Dica
Pode criar um índice de pesquisa e um arquivo de conhecimento para estes dados no portal do Azure ou através do Postman e das APIs REST. Também pode utilizar Sessões de Depuração para obter informações sobre composição de conjuntos de competências, dependências e efeitos numa árvore de melhoramento. As imagens neste artigo são obtidas a partir de Sessões de Depuração.
Conceptualmente, a árvore de melhoramento inicial tem o seguinte aspeto:
O nó raiz para todos os melhoramentos é "/document"
. Quando estiver a trabalhar com indexadores de blobs, o "/document"
nó terá nós subordinados de "/document/content"
e "/document/normalized_images"
. Quando os dados são CSV, como neste exemplo, os nomes das colunas serão mapeados para nós abaixo de "/document"
.
Competência n.º 1: Dividir competência
Quando o conteúdo de origem consiste em grandes segmentos de texto, é útil quebrá-lo em componentes mais pequenos para uma maior precisão do idioma, sentimento e deteção de expressões-chave. Existem dois grãos disponíveis: páginas e frases. Uma página consiste em aproximadamente 5000 carateres.
Normalmente, uma competência de divisão de texto é a primeira num conjunto de competências.
"@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"
}
Com o contexto de competência de "/document/reviews_text"
, a competência de divisão é executada uma vez para o reviews_text
. A saída de competências é uma lista onde o reviews_text
é segmentado em segmentos de 5000 carateres. A saída da competência dividida tem o nome pages
e é adicionada à árvore de melhoramento. A targetName
funcionalidade permite-lhe mudar o nome de uma saída de competências antes de ser adicionada à árvore de melhoramento.
A árvore de melhoramento tem agora um novo nó colocado sob o contexto da competência. Este nó está disponível para qualquer mapeamento de campos de competência, projeção ou saída.
Para aceder a qualquer um dos melhoramentos adicionados a um nó por uma competência, é necessário o caminho completo para o melhoramento. Por exemplo, se quiser utilizar o texto do pages
nó como uma entrada para outra competência, terá de o especificar como "/document/reviews_text/pages/*"
. Para obter mais informações sobre caminhos, veja Anotações de referência.
Deteção de idiomas de competência n.º 2
Os documentos de revisão de hotéis incluem comentários de clientes expressos em vários idiomas. A competência de deteção de idioma determina que idioma é utilizado. Em seguida, o resultado será transmitido para extração de expressões-chave e deteção de sentimentos (não mostrado), tendo em consideração a linguagem ao detetar sentimentos e expressões.
Embora a competência de deteção de idioma seja a terceira competência (competência n.º 3) definida no conjunto de competências, é a próxima competência a executar. Não requer entradas, pelo que é executada em paralelo com a competência anterior. Tal como a competência de divisão que a precedeu, a competência de deteção de idiomas também é invocada uma vez para cada documento. A árvore de melhoramento tem agora um novo nó para a linguagem.
Competências n.º 3 e 4 (análise de sentimentos e deteção de expressões-chave)
O feedback dos clientes reflete uma variedade de experiências positivas e negativas. A competência de análise de sentimentos analisa o feedback e atribui uma classificação ao longo de um continuum de números negativos a positivos ou neutro se o sentimento for indeterminado. Paralelamente à análise de sentimentos, a deteção de expressões-chave identifica e extrai palavras e expressões curtas que parecem consequentes.
Tendo em conta o contexto de , as competências de /document/reviews_text/pages/*
análise de sentimentos e expressões-chave serão invocadas uma vez para cada um dos itens na pages
coleção. O resultado da competência será um nó no elemento de página associado.
Deverá agora poder olhar para o resto das competências no conjunto de competências e visualizar como a árvore de melhoramentos continuará a crescer com a execução de cada competência. Algumas competências, como a competência de intercalação e a competência do formador, também criam novos nós, mas utilizam apenas dados de nós existentes e não criam novos melhoramentos líquidos.
As cores dos conectores na árvore acima indicam que os melhoramentos foram criados por diferentes competências e que os nós terão de ser abordados individualmente e não farão parte do objeto devolvido ao selecionar o nó principal.
Competência n.º 5 Competência do Shaper
Se a saída incluir um arquivo de conhecimento, adicione uma competência shaper como último passo. A competência Shaper cria formas de dados a partir de nós numa árvore de melhoramento. Por exemplo, poderá querer consolidar vários nós numa única forma. Em seguida, pode projetar esta forma como uma tabela (os nós tornam-se as colunas numa tabela), passando a forma por nome para uma projeção de tabela.
A competência shaper é fácil de trabalhar porque foca a formatação sob uma única habilidade. Em alternativa, pode optar pela formatação em linha dentro de projeções individuais. A Competência do Shaper não adiciona nem desvia de uma árvore de melhoramento, pelo que não é visualizada. Em vez disso, pode pensar numa habilidade do Shaper como o meio pelo qual rearticula a árvore de melhoramento que já tem. Conceptualmente, isto é semelhante à criação de vistas a partir de tabelas numa base de dados.
{
"@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"
}
]
}
Passos seguintes
Com uma introdução e um exemplo atrás de si, experimente criar o seu primeiro conjunto de competências com competências incorporadas.