Partage via


Compétence cognitive Modélisation

La compétence Shaper est utilisée pour remodeler ou modifier la structure de l’arborescence d’enrichissement en mémoire créée par un ensemble de compétences. Si les sorties de compétence ne peuvent pas être mappées directement aux champs de recherche, vous pouvez ajouter une compétence Shaper pour créer la forme de données dont vous avez besoin pour votre index de recherche ou votre magasin de connaissances.

Les principaux cas d’usage de cette compétence sont les suivants :

  • Vous remplissez une base de connaissances. La structure physique des tables et objets d’une base de connaissances est définie par le biais de projections. Une compétence Shaper ajoute une granularité en créant des formes de données qui peuvent être envoyées aux projections.

  • Vous souhaitez mapper plusieurs sorties de compétence dans une structure unique dans votre index de recherche, généralement un type complexe, comme décrit dans le scénario 1.

  • Les compétences produisent plusieurs sorties, mais vous souhaitez combiner en un seul champ (il n’est pas obligatoire qu’il s’agit d’un type complexe), comme décrit dans le scénario 2. Par exemple, la combinaison de titres et d’auteurs en un seul champ.

  • Les compétences produisent plusieurs sorties avec des éléments enfants et vous souhaitez les combiner. Ce cas d’usage est illustré dans le scénario 3.

Le nom de sortie d’une compétence Shaper est toujours « output ». En interne, le pipeline peut mapper un autre nom, comme « analyzedText » comme indiqué dans les exemples ci-dessous, mais la compétence Modélisation elle-même retourne « output » dans la réponse. Cet aspect peut être important si vous effectuez un débogage de documents enrichis et notez la différence de nommage, ou si vous générez une compétence personnalisée et que vous structurez la réponse vous-même.

Remarque

Cette compétence n’est pas liée aux services Azure AI. Elle n’est pas facturable et aucune clé Azure AI services n’est requise.

@odata.type

Microsoft.Skills.Util.ShaperSkill

Scénario 1 : types complexes

Considérez un scénario dans lequel vous souhaitez créer une structure appelée analyzedText dotée de deux membres : text et sentiment. Dans un index, un champ en plusieurs parties pouvant faire l’objet d’une recherche est appelé un type complexe et il est souvent créé lorsque les données sources présentent une structure complexe correspondante qui mappe à ce champ.

Toutefois, une autre approche de la création de types complexes consiste à utiliser la compétence Modélisation. Lorsque vous incluez cette compétence dans un ensemble de compétences, les opérations en mémoire pendant le traitement de l’ensemble de compétences peuvent sortir des formes de données avec des structures imbriquées, qui peuvent alors être mappées à un type complexe dans votre index.

L’exemple de définition de compétence suivant fournit les noms de membre comme entrée.

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "context": "/document/content/phrases/*",
  "inputs": [
    {
      "name": "text",
      "source": "/document/content/phrases/*"
    },
    {
      "name": "sentiment",
      "source": "/document/content/phrases/*/sentiment"
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "analyzedText"
    }
  ]
}

Exemple d'index

Un ensemble de compétences est appelé par un indexeur, et un indexeur nécessite un index. Une représentation de champ complexe dans votre index peut se présenter comme dans l’exemple suivant.

"name":"my-index",
"fields":[
   { "name":"myId", "type":"Edm.String", "key":true, "filterable":true  },
   { "name":"analyzedText", "type":"Edm.ComplexType",
      "fields":[
         {
            "name":"text",
            "type":"Edm.String",
            "facetable":false,
            "filterable":false,
            "searchable":true,
            "sortable":false  },
         {
            "name":"sentiment",
            "type":"Edm.Double",
            "facetable":true,
            "filterable":true,
            "searchable":true,
            "sortable":true }
      }

Entrée de la compétence

Un document JSON entrant fournissant des données d’entrée exploitables pour cette compétence Modélisation pourrait ressembler à ceci :

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "text": "this movie is awesome",
                "sentiment": 0.9
            }
        }
    ]
}

Sortie de la compétence

La compétence Modélisation génère un nouvel élément appelé analyzedText avec les éléments combinés text et sentiment. Cette sortie est conforme au schéma d’index. Elle est importée et indexée dans un index Recherche Azure AI.

{
    "values": [
      {
        "recordId": "1",
        "data":
           {
            "analyzedText": 
              {
                "text": "this movie is awesome" ,
                "sentiment": 0.9
              }
           }
      }
    ]
}

Scénario 2 : regroupement des entrées

Dans un autre exemple, imaginez qu’à différents stades du traitement du pipeline, vous avez extrait le titre d’un livre et des titres de chapitre sur des pages différentes du livre. Vous pouvez maintenant créer une structure unique composée de ces différentes sorties.

La définition de la compétence Modélisation pour ce scénario peut se présenter comme dans l’exemple suivant :

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "context": "/document",
    "inputs": [
        {
            "name": "title",
            "source": "/document/content/title"
        },
        {
            "name": "chapterTitles",
            "source": "/document/content/pages/*/chapterTitles/*/title"
        }
    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "titlesAndChapters"
        }
    ]
}

Sortie de la compétence

Dans ce cas, la compétence Modélisation aplatit tous les titres de chapitre en un tableau unique.

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "titlesAndChapters": {
                    "title": "How to be happy",
                    "chapterTitles": [
                        "Start young",
                        "Laugh often",
                        "Eat, sleep and exercise"
                    ]
                }
            }
        }
    ]
}

Scénario 3 : regroupement des entrées à partir de contextes imbriqués

Imaginez que vous avez des titres de chapitre et des numéros de chapitre d’un livre et que vous avez exécuté la reconnaissance d’entité et les expressions clés sur le contenu, et que vous devez maintenant agréger les résultats des différentes compétences en une seule forme avec le nom de chapitre, les entités et les expressions clés.

Cet exemple ajoute une propriété facultative sourceContext à l’entrée « chapterTitles ». Les source propriétés et sourceContext les propriétés s’excluent mutuellement. Si l’entrée se trouve dans le contexte de la compétence, vous pouvez utiliser source. Si l’entrée se trouve dans un contexte différent du contexte de compétence, utilisez sourceContext. Vous sourceContext devez définir une entrée imbriquée, où chaque entrée a un source élément qui identifie l’élément spécifique utilisé pour remplir le nœud nommé.

La définition de la compétence Modélisation pour ce scénario peut se présenter comme dans l’exemple suivant :

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "context": "/document",
    "inputs": [
        {
            "name": "title",
            "source": "/document/content/title"
        },
        {
            "name": "chapterTitles",
            "sourceContext": "/document/content/pages/*/chapterTitles/*",
            "inputs": [
              {
                  "name": "title",
                  "source": "/document/content/pages/*/chapterTitles/*/title"
              },
              {
                  "name": "number",
                  "source": "/document/content/pages/*/chapterTitles/*/number"
              }
            ]
        }

    ],
    "outputs": [
        {
            "name": "output",
            "targetName": "titlesAndChapters"
        }
    ]
}

Sortie de la compétence

Dans ce cas, le modélisateur crée un type complexe. Cette structure existe en mémoire. Si vous souhaitez l’enregistrer dans une base de connaissances, vous devez créer une projection dans votre ensemble de compétences, définissant les caractéristiques de stockage.

{
    "values": [
        {
            "recordId": "1",
            "data": {
                "titlesAndChapters": {
                    "title": "How to be happy",
                    "chapterTitles": [
                      { "title": "Start young", "number": 1},
                      { "title": "Laugh often", "number": 2},
                      { "title": "Eat, sleep and exercise", "number: 3}
                    ]
                }
            }
        }
    ]
}

Voir aussi