Поделиться через


Формирование данных для проекции в хранилище знаний

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

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

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

Подходы к созданию форм

Формировать обогащенное содержимое для проецирования в хранилище знаний можно двумя описанными ниже способами.

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

  • Форму также можно встроить в само определение проекции.

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

Эти подходы можно использовать вместе или отдельно. В этой статье рассматриваются оба варианта: навык формирователя для проекций таблицы и встроенное формирование с проецированием таблицы ключевых фраз.

Использование навыка формирователя

Навыки формирователя обычно размещаются в конце набора навыков и создают представление данных, которые необходимо передать в проекцию. В этом примере создается формат под названием tableprojection, содержащая следующие узлы: reviews_text, reviews_title и AzureSearch_DocumentKey, а также оценки тональности и ключевые фразы из страничных проверок.

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

В навыке формирователя входные данные могут содержать элемент sourceContext. Это же свойство также можно использовать во встроенных фигурах в проекциях.

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

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

Проецирование формы в несколько таблиц

С помощью узла tableprojection, определенного в разделе outputs выше, можно разделить части узла tableprojection на отдельные связанные таблицы:

"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/*"
            }
        ]
    }
]

Встроенная фигура для проекций таблиц

Встроенное формирование позволяет создавать новые формы в самом определении проекции. Встроенное формирование имеет следующие характеристики:

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

Встроенная форма создается с помощью sourceContext и inputs.

Свойство Description
sourceContext Задает корень проекции.
входные данные Каждый входной элемент является столбцом в таблице. Name — имя столбца. Source — это узел обогащения, содержащий значение.

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

"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/*"
                    }
                ]
            }
        ]
    }
]

Отличительной особенностью обоих этих подходов является то, как значения Keyphrases проецируются с использованием sourceContext. Узел Keyphrases, содержащий коллекцию строк, сам по себе является дочерним по отношению к тексту в объекте page. Однако поскольку для проекций требуется объект JSON, а page является примитивом (строкой), то для заключения ключевой фразы в объект с именованным свойством используется sourceContext. Этот метод позволяет независимо проектировать даже примитивы.

Встроенная фигура для проекций объектов

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

Встроенное формирование — это возможность создать новую фигуру в определении входных данных для проекции. Встроенное формирование создает анонимный объект, идентичный тому, который создал бы формирователь (в нашем случае projectionShape). Встроенное формирование полезно, если вы определяете фигуру, которую вы не планируете повторно использовать.

Свойство проекций представляет собой массив. В этом примере в массив добавляется новый экземпляр проекции, в котором определение knowledgeStore содержит встроенные проекции. При использовании встроенных проекций можно пропустить навык формирователя.

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

Следующие шаги

В этой статье описаны основные понятия и принципы формирования проекций. Далее вы узнаете, как они обычно применяются для проецирования таблиц, объектов и файлов.