« Projections » de base de connaissances dans Recherche Azure AI

Les projections définissent les tables physiques, les objets et les fichiers d’une base de connaissances qui acceptent le contenu d’un pipeline d’enrichissement Azure AI Search. Si vous créez une base de connaissances, la définition et la mise en forme de projections constituent la majeure partie du travail.

Cet article présente les concepts de projection et le flux de travail afin que vous disposiez d’un arrière-plan avant de commencer le codage.

Les projections sont définies dans l’ensemble de compétences de Recherche Azure AI, mais les résultats finaux sont les projections de tables, d’objets et de fichiers image dans Stockage Azure.

Projections expressed in Azure Storage

Types de projections et d’utilisation

Une base de connaissances est une construction logique exprimée physiquement sous la forme d’un regroupement relâché de tables, d’objets JSON ou de fichiers image binaires dans Stockage Azure.

Projection Stockage Utilisation
Tables Stockage Table Azure Utilisé pour les données qui sont le mieux représentées sous la forme de lignes et de colonnes, ou chaque fois que vous avez besoin de représentations précises de vos données (par exemple, en tant que trames de données). Les projections de table vous permettent de définir une forme schématisée, à l’aide d’une Compétence Modélisateur ou de la mise en forme incluse pour spécifier des colonnes et des lignes. Vous pouvez organiser le contenu en plusieurs tables selon des principes de normalisation familiers. Les tables qui se trouvent dans le même groupe sont automatiquement liées.
Objets Stockage Blob Azure Utilisé lorsque vous avez besoin de la représentation JSON complète de vos données et de vos enrichissements dans un document JSON. Comme pour les projections de table, seuls les objets JSON valides peuvent être projetés en tant qu’objets, et la modélisation peut vous aider à le faire.
Fichiers Stockage Blob Azure Utilisé quand vous devez enregistrer des fichiers image binaires normalisés.

Définition de la projection

Les projections sont spécifiées sous la propriété « knowledgeStore » d’une propriété d’un ensemble de compétences. Les définitions de projection sont utilisées lors de l’appel de l’indexeur pour créer et charger des objets dans Stockage Azure avec un contenu enrichi. Si vous ne connaissez pas ces concepts, commencez par l’enrichissement par IA pour une introduction.

L’exemple suivant illustre l’emplacement des projections sous knowledgeStore et la construction de base. Le nom, le type et la source de contenu constituent une définition de projection.

"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": [ ]
      }
    ]

Groupes de projections

Les projections sont un tableau de collections complexes, ce qui signifie que vous pouvez spécifier plusieurs ensembles de chaque type. Il est courant d’utiliser un seul groupe de projection, mais vous pouvez en utiliser plusieurs si les besoins en matière de stockage incluent la prise en charge de différents outils et scénarios. À titre d’exemple, vous pouvez utiliser un groupe pour la conception et le débogage d’un ensemble de compétences, tandis qu’un deuxième ensemble collecte la sortie utilisée pour une application en ligne et qu’un troisième est utilisé pour les charges de travail de science des données.

La sortie des mêmes compétences est utilisée pour remplir tous les groupes sous projections. L’exemple suivant en montre deux.

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

Les groupes de projection disposent des principales caractéristiques d’exclusivité mutuelle et de parenté suivantes.

Principe Description
Exclusivité mutuelle Chaque groupe est totalement isolé des autres groupes afin de prendre en charge différents scénarios de mise en forme des données. Par exemple, si vous testez différentes structures de table et combinaisons, vous placez chaque ensemble dans un groupe de projection différent pour les tests AB. Chaque groupe obtient des données de la même source (arborescence d’enrichissement), mais il est totalement isolé de la combinaison table-objet-fichier de tout groupe de projection appairé.
Parenté Au sein d’un groupe de projection, le contenu des tables, des objets et des fichiers est lié. La base de connaissances utilise des clés générées comme points de référence pour un nœud parent commun. Par exemple, imaginez un scénario dans lequel vous avez un document contenant des images et du texte. Vous pouvez projeter le texte dans des tables et les images dans des fichiers binaires, et les tables et les objets ont une colonne/propriété contenant l’URL du fichier.

« Source » de projection

Le paramètre source est le troisième composant d’une définition de projection. Étant donné que les projections stockent les données d’un pipeline d’enrichissement de l’IA, la source d’une projection est toujours le résultat d’une compétence. Par conséquent, la sortie peut être un champ unique (par exemple, un champ de texte traduit), mais il s’agit souvent d’une référence à une forme de données.

Les formes de données proviennent de vos compétences. Parmi toutes les compétences intégrées fournies dans Azure AI Search, il existe une compétence utilitaire appelée compétence Shaper utilisée pour créer des formes de données. Vous pouvez inclure des compétences de modélisateur (autant que nécessaire) pour prendre en charge les projections dans la base de connaissances.

Les formes sont fréquemment utilisées avec des projections de table, où la forme spécifie non seulement les lignes qui sont placées dans la table, mais également les colonnes qui sont créées (vous pouvez également transformer une forme en une projection d’objet).

Les formes peuvent être complexes et il est impossible de les aborder en détail ici, mais l’exemple suivant illustre brièvement une forme de base. La sortie de la compétence de modélisateur est spécifiée comme source d’une projection de table. Dans la projection de table elle-même se trouve les colonnes « metadata-storage_path », « reviews_text », « reviews_title », et ainsi de suite, tel que spécifié dans la forme.

{
    "@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"
      }
    ]
}

Cycle de vie de projection

Les projections ont un cycle de vie qui est lié aux données sources de votre source de données. Lorsque les données sources sont mises à jour et réindexées, les projections sont mises à jour avec les résultats des enrichissements, ce qui garantit que vos projections sont cohérentes avec les données de votre source de données. Toutefois, les projections sont également stockées de manière indépendante dans Stockage Azure. Ils ne seront pas supprimés lorsque l’indexeur ou le service de recherche lui-même est supprimé.

Consommer dans les applications

Après l’exécution de l’indexeur, connectez-vous aux projections et consommez les données dans d’autres applications et charges de travail.

  • Utilisez le portail Azure pour vérifier la création des objets et le contenu dans Stockage Azure.

  • Utilisez Power BI pour l’exploration des données. Cet outil fonctionne mieux lorsque les données se trouvent dans le Stockage Table Azure. Dans Power BI, vous pouvez manipuler des données dans de nouvelles tables qui sont plus faciles à interroger et à analyser.

  • Utilisez des données enrichies dans un conteneur d’objets BLOB dans un pipeline de science des données. Par exemple, vous pouvez charger les données à partir d’objets BLOB dans un DataFrame Pandas.

  • Enfin, si vous devez exporter vos données de la base de connaissances, Azure Data Factory comprend des connecteurs pour exporter les données et les placer dans la base de données de votre choix.

Liste de contrôle pour la prise en main

Rappelez-vous que les projections sont exclusives aux magasins de connaissances et ne sont pas utilisées pour structurer un index de recherche.

  1. Dans Stockage Azure, obtenez une chaîne de connexion à partir des Clés d’accès et vérifiez que le compte est StorageV2 (usage général V2).

  2. Dans Stockage Azure, familiarisez-vous avec le contenu existant dans les conteneurs et les tables afin de choisir des noms nonconflicants pour les projections. Une base de connaissances est une collection libre de tables et de conteneurs. Envisagez d’adopter une convention d’affectation de noms pour effectuer le suivi des objets connexes.

  3. Dans Recherche Azure AI, activez le mise en cache d’enrichissement (préversion) dans l’indexeur, puis exécutez l’indexeur pour exécuter l’ensemble de compétences et remplir le cache. Il s’agit d’une fonctionnalité en préversion. Veillez donc à utiliser l’API REST en préversion (api-version=2020-06-30-preview ou version ultérieure) sur la demande de l’indexeur. Une fois le cache rempli, vous pouvez modifier les définitions de projection dans une base de connaissances gratuitement (tant que les compétences elles-mêmes ne sont pas modifiées).

  4. Dans votre code, toutes les projections sont définies uniquement dans une ensemble de compétences. Il n’existe aucune propriété d’indexeur (comme les mappages de champs ou les mappages de champs de sortie) qui s’appliquent aux projections. Dans une définition d’ensemble de compétences, vous allez vous concentrer sur deux domaines : la propriété knowledgeStore et le tableau de compétences.

    1. Sous knowledgeStore, spécifiez les projections de table, d’objet et de fichier dans la section projections. Le type d’objet, le nom d’objet et la quantité (selon le nombre de projections que vous définissez) sont déterminés dans cette section.

    2. Dans le tableau de compétences, déterminez les sorties des compétences qui doivent être référencées dans la source projection. Toutes les projections ont une source. La source peut être la sortie d’une compétence en amont, mais il s’agit souvent de la sortie d’une compétence de modélisateur. La composition de votre projection est déterminée à l’aide de formes.

  5. Si vous ajoutez des projections à un ensemble de compétences existant, mettez à jour l’ensemble de compétences et exécutez l’indexeur.

  6. Vérifiez vos résultats dans stockage Azure. Lors des exécutions suivantes, évitez de nommer des collisions en supprimant des objets dans Stockage Azure ou en modifiant les noms de projet dans les compétences.

  7. Si vous utilisez des projections de table case activée Comprendre le modèle de données de service de table et les objectifs de scalabilité et de performances pour le stockage Table afin de vous assurer que vos besoins en données sont dans les limites documentées du stockage Table.

Étapes suivantes

Passez en revue la syntaxe et les exemples pour chaque type de projection.