Когнитивный навык формирователя

Навык фигуры используется для изменения структуры дерева обогащения в памяти, созданного набором навыков. Если выходные данные навыка не могут быть сопоставлены непосредственно с полями поиска, можно добавить навык фигуры фигуры для создания фигуры данных, необходимой для индекса поиска или хранилища знаний.

Ниже приведены основные варианты использования для этого навыка.

  • Вы заполняете хранилище знаний. Физическая структура таблиц и объектов хранилища знаний определяется с помощью проекций. Навык фигуры добавляет степень детализации, создавая фигуры данных, которые можно отправить в проекции.

  • Вы хотите сопоставить несколько выходных данных навыка с одной структурой в индексе поиска, как правило, сложным типом, как описано в сценарии 1.

  • Навыки создают несколько выходных данных, но вы хотите объединить в одно поле (это не обязательно сложный тип), как описано в сценарии 2. Например, объединение заголовков и авторов в одно поле.

  • Навыки создают несколько выходных данных с дочерними элементами, и вы хотите объединить их. Этот вариант использования показан в сценарии 3.

Выходное имя навыка фигуры всегда является выходным. На внутреннем уровне конвейер может сопоставить другое имя, например analyzedText, как в указанных ниже примерах, однако сам навык Формирователя возвращает output в ответ. Это может оказаться важным при обнаружении несоответствия имен во время отладки обогащенных документов или при создании пользовательского навыка с самостоятельным структурированием отклика.

Примечание.

Этот навык не привязан к службам ИИ Azure. Она не взимается с оплатой и не имеет ключевого требования к службам искусственного интеллекта Azure.

@odata.type

Microsoft.Skills.Util.ShaperSkill

Сценарий 1: сложные типы

Рассмотрим сценарий, где требуется создать структуру analyzedText с двумя членами: text и sentiment, соответственно. В индексе многокомпонентное поле с возможностью поиска называется сложным типом и часто создается, когда исходные данные имеют соответствующую сложную структуру, сопоставленную с ней.

Однако, имеется и другой подход к созданию сложных типов — с помощью навыка Формирователь. Благодаря включению этого навыка в набор навыков операции оперативной памяти во время обработки набора навыков могут выводить формы данных с вложенными в них структурами, которые затем сопоставляются со сложным типом в индексе.

Приведенный ниже пример определения навыка предоставляет имена членов в качестве входных данных.

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

Пример индекса

Набор навыков вызывается индексатором, а для индексатора требуется индекс. Поле сложного типа в вашем индексе может выглядеть так, как представлено в следующем примере.

"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 }
      }

Ввод навыка

Документ JSON, предоставляющий полезные входные данные для навыка Формирователь, может иметь следующий вид:

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

Выходные данные навыка

Навык формирователя создает элемент analyzedText с объединенными элементами text и sentiment. Эти выходные данные соответствуют схеме индекса. Он будет импортирован и индексирован в индексе поиска ИИ Azure.

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

Сценарий 2: консолидация входных данных

В другом примере предположим, что на различных этапах обработки конвейера вы извлекли название книги и заголовки глав на разных страницах книги. Теперь можно создать одну структуру, состоящую из этих различных выходных данных.

Определение навыка Формирователь для этого сценария может выглядеть так, как представлено в следующем примере:

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

Выходные данные навыка

В этом случае Формирователь преобразует все заголовки глав в плоскую структуру, чтобы создать один массив.

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

Сценарий 3: консолидация входных данных из вложенных контекстов

Представьте, что у вас есть названия глав и номера глав книги, а также есть распознавание сущностей и ключевые фразы о содержимом, а теперь необходимо объединить результаты из различных навыков в одну фигуру с именем главы, сущностями и ключевыми фразами.

В этом примере в входные данные "chapterTitles" добавляется необязательное sourceContext свойство. sourceContext Свойства source являются взаимоисключающими. Если входные данные отображаются в контексте навыка, можно использовать source. Если входные данные отличаются от контекста навыка, используйте sourceContext. Требуется sourceContext определить вложенные входные данные, где каждый вход имеет source определенный элемент, используемый для заполнения именованного узла.

Определение навыка Формирователь для этого сценария может выглядеть так, как представлено в следующем примере:

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

Выходные данные навыка

В этом случае Формирователь создает сложный тип. Эта структура содержится в оперативной памяти. Если вы хотите сохранить его в Хранилище знаний, в наборе навыков необходимо создать проекцию, которая определяет характеристики хранилища.

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

См. также