"Projeções" do repositório de conhecimento no Azure AI Search

As projeções definem as tabelas físicas, objetos e arquivos em um repositório de conhecimento que aceitam conteúdo de um pipeline de enriquecimento da Pesquisa de IA do Azure. Se você estiver criando um repositório de conhecimento, a maior parte do trabalho será a definição e o shaping do trabalho.

Este artigo apresenta os conceitos de projeção e o fluxo de trabalho para você adquirir um pouco de experiência antes de começar a codificação.

As projeções são definidas nos conjuntos de habilidades do Azure AI Search, mas os resultados finais são as projeções de tabela, objeto e arquivo de imagem no Armazenamento do Azure.

Projections expressed in Azure Storage

Tipos de projeções e uso

Um repositório de conhecimento é uma construção lógica expressa fisicamente como uma coleção flexível de tabelas, objetos JSON ou arquivos de imagem binários no Armazenamento do Azure.

Projeção Armazenamento Uso
Tabelas Armazenamento de Tabelas do Azure Usado para dados que são mais bem representados como linhas e colunas ou sempre que são necessárias representações granulares dos dados (por exemplo, como quadros de dados). As projeções de tabela permitem que você defina uma forma esquematizada usando uma habilidade de shaper ou use o shaping embutido para especificar colunas e linhas. Você pode organizar o conteúdo em várias tabelas com base em princípios de normalização já conhecidos. As tabelas que estão no mesmo grupo são relacionadas automaticamente.
Objetos Armazenamento do Blobs do Azure Usado quando você precisa da declaração JSON completa dos dados e enriquecimentos em um documento JSON. Assim como acontece com as projeções de tabela, somente objetos JSON válidos podem ser projetados como objetos, e a formatação pode ajudar com isso.
Arquivos Armazenamento do Blobs do Azure Usado quando você precisa salvar arquivos de imagem binária normalizados.

Definição de projeção

As projeções são especificadas na propriedade "knowledgeStore" de um conjunto de habilidades. As definições de projeção são usadas durante a invocação do indexador para criar e carregar objetos no Armazenamento do Azure com conteúdo enriquecido. Se você não está familiarizado com esses conceitos, comece com o enriquecimento de IA para uma introdução.

O exemplo a seguir ilustra o posicionamento das projeções em knowledgeStore e a construção básica. O nome, o tipo e a fonte de conteúdo compõem uma definição de projeção.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
      {
        "tables": [
          { "tableName": "ks-museums-main", "generatedKeyName": "ID", "source": "/document/tableprojection" },
          { "tableName": "ks-museumEntities", "generatedKeyName": "ID","source": "/document/tableprojection/Entities/*" }
        ],
        "objects": [
          { "storageContainer": "ks-museums", "generatedKeyName": "ID", "source": "/document/objectprojection" }
        ],
        "files": [ ]
      }
    ]

Grupos de projeção

As projeções são uma matriz de coleções complexas, o que significa que você pode especificar vários conjuntos de cada tipo. É comum usar apenas um grupo de projeção, mas você pode usar vários quando os requisitos de armazenamento incluem o suporte a diferentes ferramentas e cenários. Por exemplo, você pode usar um grupo para design e depuração de um conjunto de habilidades, enquanto um segundo conjunto coleta a saída usada para um aplicativo online e um terceiro para cargas de trabalho de ciência de dados.

A mesma saída do conjunto de habilidades é usada para popular todos os grupos em projeções. O exemplo a seguir mostra dois.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [],
            "objects": [],
            "files": []
        }, 
        {
            "tables": [],
            "objects": [],
            "files": []
        }
    ]
}

Os grupos de projeção têm as seguintes características principais de parentesco e exclusividade mútua.

Princípio Descrição
Exclusividade mútua Cada grupo é totalmente isolado dos outros grupos para dar suporte a diferentes cenários de data shaping. Por exemplo, se você estiver testando diferentes estruturas de tabela e combinações, colocará cada conjunto em um grupo de projeção diferente para teste AB. Cada grupo obtém dados da mesma fonte (árvore de enriquecimento), mas é totalmente isolado da combinação de tabela-objeto-arquivo de qualquer grupo de projeção de mesmo nível.
Parentesco Dentro de um grupo de projeção, o conteúdo em tabelas, objetos e arquivos está relacionado. O repositório de conhecimento usa chaves geradas como pontos de referência para um nó pai comum. Por exemplo, considere um cenário em que você tenha um documento contendo imagens e texto. Você pode projetar o texto em tabelas e as imagens em arquivos binários, e as tabelas e os objetos têm uma coluna/propriedade contendo a URL do arquivo.

"Fonte" da projeção

O parâmetro de fonte é o terceiro componente de uma definição de projeção. Como as projeções armazenam dados de um pipeline de enriquecimento de IA, a fonte de uma projeção é sempre a saída de uma habilidade. Assim, a saída pode ser um só campo (por exemplo, um campo de texto traduzido), mas geralmente é uma referência a uma forma de dados.

As formas de dados vêm do seu conjunto de habilidades. Entre todas as habilidades internas fornecidas na Pesquisa de IA do Azure, há uma habilidade de utilitário chamada habilidade Shaper que é usada para criar formas de dados. Você pode incluir habilidades de shaper (quantas precisar) para dar suporte às projeções no repositório de conhecimento.

As formas são usadas frequentemente com as projeções de tabela, em que além de especificarem quais linhas vão para a tabela, elas também especificam quais colunas são criadas (você também pode passar uma forma para uma projeção de objeto).

As formas podem ser complexas e isso não será discutido em detalhes no escopo deste artigo, mas o exemplo a seguir ilustra rapidamente uma forma básica. A saída da habilidade de shaper é especificada como a origem de uma projeção de tabela. Dentro da projeção de tabela, haverá colunas para "metadata-storage_path", "reviews_text", "reviews_title" e assim por diante, conforme a especificação na forma.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "ShaperForTables",
    "description": null,
    "context": "/document",
    "inputs": [
        {
            "name": "metadata_storage_path",
            "source": "/document/metadata_storage_path",
            "sourceContext": null,
            "inputs": []
        },
        {
          "name": "reviews_text",
          "source": "/document/reviews_text"
        }, 
        {
          "name": "reviews_title",
          "source": "/document/reviews_title"
        },
        {
          "name": "reviews_username",
          "source": "/document/reviews_username"
        },
    ],
    "outputs": [
      {
        "name": "output",
        "targetName": "mytableprojection"
      }
    ]
}

Ciclo de vida da projeção

As projeções têm um ciclo de vida vinculado aos dados de origem em sua fonte de dados. À medida que os dados de origem são atualizados e reindexados, as projeções são atualizadas com os resultados dos enriquecimentos, garantindo que suas projeções sejam eventualmente consistentes com os dados em sua fonte de dados. No entanto, as projeções também são armazenadas de forma independente no Armazenamento do Azure. Eles não serão excluídos quando o indexador ou o próprio serviço de pesquisa for excluído.

Consumo em aplicativos

Depois que o indexador for executado, conecte-se com as projeções para que outros aplicativos e cargas de trabalho consumam os dados.

  • Use o portal do Azure para verificar a criação do objeto e o conteúdo no Armazenamento do Microsoft Azure.

  • Use o Power BI para exploração de dados. Essa ferramenta funciona melhor quando os dados estão no Armazenamento de Tabelas do Azure. No Power BI, você pode manipular os dados em novas tabelas mais fáceis de serem consultadas e analisadas.

  • Use os dados enriquecidos no contêiner de blob em um pipeline de ciência de dados. Por exemplo, você pode carregar os dados de blobs em um quadro de dados do Pandas.

  • Por fim, se você precisar exportar seus dados do repositório de conhecimento, o Azure Data Factory terá conectores para exportar os dados e colocá-los no banco de dado de sua escolha.

Lista de verificação para começar

Lembre-se de que as projeções são exclusivas para lojas de conhecimento e não são usadas para estruturar um índice de pesquisa.

  1. No Armazenamento do Azure, obtenha uma cadeia de conexão das Chaves de Acesso e verifique se a conta é StorageV2 (uso geral V2).

  2. Enquanto estiver no Armazenamento do Azure, familiarize-se com o conteúdo existente em contêineres e tabelas para escolher nomes não conflitantes para as projeções. Um repositório de conhecimento é uma coleção flexível de tabelas e contêineres. Considere a adoção de uma convenção de nomenclatura para controlar os objetos relacionados.

  3. No Azure AI Search, habilite o cache de enriquecimento (versão prévia) no indexador e depois execute o indexador para executar os conjuntos de habilidades e popular o cache. Esse é um recurso em versão prévia, portanto, certifique-se de usar a API REST da versão prévia (api-version=2020-06-30-preview ou posterior) na solicitação do indexador. Depois que o cache for preenchido, você poderá modificar as definições de projeção em um repositório de conhecimento gratuitamente (desde que as habilidades em si não sejam modificadas).

  4. No código, todas as projeções são definidas exclusivamente em um conjunto de habilidades. Não há nenhuma propriedade do indexador (como mapeamentos de campo ou mapeamentos de campo de saída) que se aplica a projeções. Dentro de uma definição de conjunto de habilidades, você se concentrará em duas áreas: propriedade knowledgeStore e matriz de habilidades.

    1. Em knowledgeStore, especifique as projeções de tabela, objeto e arquivo na seção projections. O tipo de objeto, o nome do objeto e a quantidade (de acordo com o número de projeções definidas) são determinados nessa seção.

    2. A partir da matriz de habilidades, determine quais saídas de habilidades devem ser referenciadas no source de cada projeção. Todas as projeções têm uma fonte. A fonte pode ser a saída de uma habilidade upstream, mas geralmente é a saída de uma habilidade de shaper. A composição da projeção é determinada por meio de formas.

  5. Se você estiver adicionando projeções a um conjunto de habilidades existente, atualize o conjunto de habilidades e execute o indexador.

  6. Verifique os resultados no Armazenamento do Azure. Nas próximas execuções, evite colisões de nomenclatura excluindo objetos no Armazenamento do Azure ou alterando nomes de projeto no conjunto de habilidades.

  7. Se você estiver usando projeções de tabela, marque Noções básicas sobre o modelo de dados do Serviço de Tabela e Escalabilidade e metas de desempenho para armazenamento de tabela para verificar se seus requisitos de dados estão dentro dos limites documentados de armazenamento de tabela.

Próximas etapas

Examinar a sintaxe e os exemplos de cada tipo de projeção.