將數據成形成知識存放區

在 Azure AI 搜尋中,「成形數據」描述知識存放區工作流程中的步驟,該工作流程會建立您想要投影到數據表、對象和檔案中之數據表示法 Azure 儲存體。

當技能執行時,輸出會寫入至節點階層中的擴充樹狀結構,而雖然您可能想要完整檢視和使用擴充樹狀結構,但您更有可能想要更精細的粒度,為不同的案例建立節點子集,例如將與翻譯文字或擷取實體相關的節點放在特定數據表中。

擴充樹狀結構本身不會包含可告知其內容在知識存放區中呈現方式的邏輯。 數據圖形會藉由提供每個數據表、對象和檔案投影的架構來填滿此空白。 您可以將資料圖形視為擴充數據的自定義定義或檢視。 您可以視需要建立多個圖形,然後將它們指派給 知識存放區定義中的投影

建立圖形的方法

有兩種方式可將擴充內容塑造成可投影到知識存放區:

  • 使用 Shaper 技能,在明確用於投影的擴充樹狀結構中建立節點。 大部分的技能都會建立新的內容。 相反地,Shaper 技能會使用現有的節點,通常可將多個節點合併成單一複雜物件。 這適用於數據表,您希望多個節點的輸出實際表示為數據表中的數據行。

  • 使用投影定義本身內的內嵌圖形。

使用 Shaper 技能將圖形外部化,讓圖形可供多個投影或甚至是其他技能使用。 它也可確保擴充樹狀結構的所有突變都包含在技能內,而且輸出是可重複使用的物件。 相反地,內嵌成形可讓您建立所需的圖形,但是匿名物件,而且只能用於其定義的投影。

方法可以一起使用或個別使用。 本文說明這兩者:表格投影的 Shaper 技能,以及使用關鍵片語數據表投影進行內嵌成形。

使用 Shaper 技能

Shaper 技能通常會放在技能集的結尾,以建立您想要傳遞至投影的數據檢視。 此範例會建立名為 「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 屬性

在 Shaper 技能內,輸入可以有 元素 sourceContext 。 這個相同的屬性也可以在投影中的內嵌圖形中使用。

sourceContext 是用來在擴充管線中建構多層級的巢狀物件。 如果輸入位於 與技能內容不同的 內容,請使用 sourceContextsourceContext 會要求您定義巢狀輸入,並將特定元素尋址為來源。

在上述範例中,情感分析和關鍵詞組擷取是在分割成頁面的文字上執行,以便更有效率的分析。 假設您想要將分數和片語投影到資料表中,您現在必須將內容設定為巢狀輸入,以提供分數和片語。

將圖形投影到多個數據表中

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

表格投影的內嵌圖形

內嵌成形是能夠在投影定義本身內形成新圖形的能力。 內嵌成形具有下列特性:

  • 圖形只能由包含圖形的投影使用。
  • 圖形可以與 Shaper 技能所產生的相同。

使用 sourceContextinputs建立內嵌圖形。

屬性 說明
sourceContext 設定投影的根。
輸入 每個輸入都是數據表中的數據行。 Name 是資料行名稱。 來源是提供值的擴充節點。

若要投影與上一個範例相同的數據,內嵌投影選項看起來會像這樣:

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

這兩種方法的其中一個觀察是如何使用 「sourceContext」 投影 「Keyphrases」 的值。 包含字串集合的 「Keyphrases」 節點本身是頁面文字的子系。 不過,由於投影需要 JSON 物件,而且頁面是基本類型(字串),因此 「sourceContext」 是用來將關鍵片語包裝成具有具名屬性的物件。 這項技術可讓偶數基本類型獨立投影。

物件投影的內嵌圖形

您可以使用 Shaper 技能產生新圖形,或使用物件投影的內嵌成形。 雖然數據表範例示範建立圖形和切割的方法,但此範例示範如何使用內嵌成形。

內嵌成形是在投影輸入定義中建立新圖形的能力。 內嵌成形會建立與 Shaper 技能所產生的匿名物件相同(在此案例中為 projectionShape)。 如果您正在定義不打算重複使用的圖形,內嵌成形會很有用。

投影屬性是陣列。 這個範例會將新的投影實例新增至陣列,其中 knowledgeStore 定義包含內嵌投影。 使用內嵌投影時,您可以省略 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": []
        }
    ]
}

下一步

本文說明投影圖形的概念和原則。 在下一個步驟中,請參閱如何在數據表、對象和檔案投影的模式中套用這些專案。