Partilhar via


Moldando dados para projeção em um repositório de conhecimento

No Azure AI Search, "modelar dados" descreve uma etapa no fluxo de trabalho do repositório de conhecimento que cria uma representação de dados do conteúdo que você deseja projetar em tabelas, objetos e arquivos no Armazenamento do Azure.

À medida que as habilidades são executadas, as saídas são gravadas em uma árvore de enriquecimento em uma hierarquia de nós e, embora você queira visualizar e consumir a árvore de enriquecimento em sua totalidade, é mais provável que você queira um grão mais fino, criando subconjuntos de nós para diferentes cenários, como colocar os nós relacionados ao texto traduzido ou entidades extraídas em tabelas específicas.

Por si só, a árvore de enriquecimento não inclui lógica que informaria como seu conteúdo é representado em um armazenamento de conhecimento. As formas de dados preenchem essa lacuna fornecendo o esquema do que entra em cada tabela, objeto e projeção de arquivo. Você pode pensar em uma forma de dados como uma definição personalizada ou exibição dos dados enriquecidos. Você pode criar quantas formas precisar e, em seguida, atribuí-las a projeções em uma definição de armazenamento de conhecimento.

Abordagens para criar formas

Há duas maneiras de moldar o conteúdo enriquecido para que ele possa ser projetado em um repositório de conhecimento:

  • Use a habilidade Shaper para criar nós em uma árvore de enriquecimento que são usados expressamente para projeção. A maioria das competências cria novos conteúdos. Em contraste, uma habilidade Shaper trabalha com nós existentes, geralmente para consolidar vários nós em um único objeto complexo. Isso é útil para tabelas, onde você deseja que a saída de vários nós seja fisicamente expressa como colunas na tabela.

  • Use uma forma embutida dentro da própria definição de projeção.

Usar a habilidade Shaper externaliza a forma para que ela possa ser usada por várias projeções ou até mesmo outras habilidades. Ele também garante que todas as mutações da árvore de enriquecimento estejam contidas na habilidade, e que a saída seja um objeto que pode ser reutilizado. Em contraste, a modelagem em linha permite que você crie a forma que você precisa, mas é um objeto anônimo e só está disponível para a projeção para a qual está definida.

As abordagens podem ser utilizadas em conjunto ou separadamente. Este artigo mostra ambos: uma habilidade Shaper para as projeções de tabela e modelagem embutida com as frases-chave projeção de tabela.

Use uma habilidade Shaper

As habilidades de modelador geralmente são colocadas no final de um conjunto de habilidades, criando uma visão dos dados que você deseja passar para uma projeção. Este exemplo cria uma forma chamada "tableprojection" contendo os seguintes nós: "reviews_text", "reviews_title", "AzureSearch_DocumentKey" e pontuações de sentimento e frases-chave de avaliações paginadas.

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "#5",
    "description": null,
    "context": "/document",
    "inputs": [        
        {
            "name": "reviews_text",
            "source": "/document/reviews_text",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "reviews_title",
            "source": "/document/reviews_title",
            "sourceContext": null,
            "inputs": []
        },
        {
            "name": "AzureSearch_DocumentKey",
            "source": "/document/AzureSearch_DocumentKey",
            "sourceContext": null,
            "inputs": []
        },  
        {
            "name": "pages",
            "source": null,
            "sourceContext": "/document/reviews_text/pages/*",
            "inputs": [
                {
                    "name": "Sentiment",
                    "source": "/document/reviews_text/pages/*/Sentiment",
                    "sourceContext": null,
                    "inputs": []
                },
                {
                    "name": "LanguageCode",
                    "source": "/document/Language",
                    "sourceContext": null,
                    "inputs": []
                },
                {
                    "name": "Page",
                    "source": "/document/reviews_text/pages/*",
                    "sourceContext": null,
                    "inputs": []
                },
                {
                    "name": "keyphrase",
                    "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
                    "inputs": [
                        {
                            "source": "/document/reviews_text/pages/*/Keyphrases/*",
                            "name": "Keyphrases"
                        }
                    ]
                }
            ]
        }
    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "tableprojection"
        }
    ]
}

SourceContext propriedade

Dentro de uma habilidade Shaper, uma entrada pode ter um sourceContext elemento. Essa mesma propriedade também pode ser usada em formas embutidas em projeções.

sourceContext é usado para construir objetos aninhados de vários níveis em um pipeline de enriquecimento. Se a entrada estiver em um contexto diferente do contexto de habilidade, use sourceContext. O sourceContext requer que você defina uma entrada aninhada com o elemento específico sendo abordado como a fonte.

No exemplo acima, a análise de sentimento e a extração de frases-chave foram realizadas em texto que foi dividido em páginas para uma análise mais eficiente. Supondo que você queira que as pontuações e frases sejam projetadas em uma tabela, agora você precisará definir o contexto para a entrada aninhada que fornece a pontuação e a frase.

Projetar uma forma em várias tabelas

Com o tableprojection nó definido na outputs seção acima, você pode dividir partes do tableprojection nó em tabelas individuais relacionadas:

"projections": [
    {
        "tables": [
            {
                "tableName": "hotelReviewsDocument",
                "generatedKeyName": "Documentid",
                "source": "/document/tableprojection"
            },
            {
                "tableName": "hotelReviewsPages",
                "generatedKeyName": "Pagesid",
                "source": "/document/tableprojection/pages/*"
            },
            {
                "tableName": "hotelReviewsKeyPhrases",
                "generatedKeyName": "KeyPhrasesid",
                "source": "/document/tableprojection/pages/*/keyphrase/*"
            }
        ]
    }
]

Forma embutida para projeções de tabela

Inline shaping é a capacidade de formar novas formas dentro da própria definição de projeção. A modelagem em linha tem estas características:

  • A forma só pode ser usada pela projeção que a contém.
  • A forma pode ser idêntica ao que uma habilidade Shaper produziria.

Uma forma embutida é criada usando sourceContext e inputs.

Property Description
sourceContext Define a raiz da projeção.
Insumos Cada entrada é uma coluna na tabela. Nome é o nome da coluna. Source é o nó de enriquecimento que fornece o valor.

Para projetar os mesmos dados do exemplo anterior, a opção de projeção embutida teria esta aparência:

"projections": [
    {
        "tables": [
            {
                "tableName": "hotelReviewsInlineDocument",
                "generatedKeyName": "Documentid",
                "sourceContext": "/document",     
                "inputs": [
                    {
                        "name": "reviews_text",
                        "source": "/document/reviews_text"
                    },
                    {
                        "name": "reviews_title",
                        "source": "/document/reviews_title"
                    },
                    {
                        "name": "AzureSearch_DocumentKey",
                        "source": "/document/AzureSearch_DocumentKey"
                    }                             
                ]
            },
            {
                "tableName": "hotelReviewsInlinePages",
                "generatedKeyName": "Pagesid",
                "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/*"
                    }
                ]
            },
            {
                "tableName": "hotelReviewsInlineKeyPhrases",
                "generatedKeyName": "KeyPhraseId",
                "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
                "inputs": [
                    {
                        "name": "Keyphrases",
                        "source": "/document/reviews_text/pages/*/Keyphrases/*"
                    }
                ]
            }
        ]
    }
]

Uma observação de ambas as abordagens é como os valores de "Keyphrases" são projetados usando o "sourceContext". O nó "Keyphrases", que contém uma coleção de strings, é ele próprio um filho do texto da página. No entanto, como as projeções exigem um objeto JSON e a página é uma primitiva (string), o "sourceContext" é usado para encapsular a frase-chave em um objeto com uma propriedade nomeada. Esta técnica permite que até mesmo primitivos sejam projetados de forma independente.

Forma embutida para projeções de objetos

Você pode gerar uma nova forma usando a habilidade Shaper ou usar a modelagem embutida da projeção de objeto. Enquanto o exemplo de tabelas demonstrou a abordagem de criação de uma forma e fatiamento, este exemplo demonstra o uso de modelagem embutida.

Inline shaping é a capacidade de criar uma nova forma na definição das entradas para uma projeção. A modelagem em linha cria um objeto anônimo que é idêntico ao que uma habilidade Shaper produziria (neste caso, projectionShape). A formatação em linha é útil se estiver a definir uma forma que não planeia reutilizar.

A propriedade projections é uma matriz. Este exemplo adiciona uma nova instância de projeção à matriz, onde a definição knowledgeStore contém projeções embutidas. Ao usar projeções embutidas, você pode omitir a habilidade Shaper.

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
            {
            "tables": [ ],
            "objects": [
                {
                    "storageContainer": "sampleobject",
                    "source": null,
                    "generatedKeyName": "myobject",
                    "sourceContext": "/document",
                    "inputs": [
                        {
                            "name": "metadata_storage_name",
                            "source": "/document/metadata_storage_name"
                        },
                        {
                            "name": "metadata_storage_path",
                            "source": "/document/metadata_storage_path"
                        },
                        {
                            "name": "content",
                            "source": "/document/content"
                        },
                        {
                            "name": "keyPhrases",
                            "source": "/document/merged_content/keyphrases/*"
                        },
                        {
                            "name": "entities",
                            "source": "/document/merged_content/entities/*/name"
                        },
                        {
                            "name": "ocrText",
                            "source": "/document/normalized_images/*/text"
                        },
                        {
                            "name": "ocrLayoutText",
                            "source": "/document/normalized_images/*/layoutText"
                        }
                    ]

                }
            ],
            "files": []
        }
    ]
}

Próximos passos

Este artigo descreve os conceitos e princípios das formas de projeção. Como próxima etapa, veja como eles são aplicados em padrões para projeções de tabela, objeto e arquivo.