共用方式為


Azure AI 搜尋服務中的技能集概念

本文適用於需要更深入瞭解技能集概念和組合的開發人員,並假設熟悉 Azure AI 搜尋中應用 AI 的高階概念

技能集是連結至 索引器之 Azure AI 搜尋服務中可重複使用的物件。 其中包含一或多個技能,可呼叫內建 AI 或外部自訂項目來處理擷取自外部資料的文件。

下圖說明技能集執行的基本資料流程。

顯示技能集數據流的圖表,著重於輸入、輸出和對應。

從技能集處理的開始到其結論,技能會讀取和寫入記憶體 中存在的擴充檔 。 擴充的文件一開始只是從資料來源 (表示為 "/document" 根節點) 擷取的原始內容。 隨著每個技能執行,擴充的檔會取得結構和實質內容,因為每個技能都會將其輸出寫入圖形中的節點。

完成技能集執行之後,擴充文件的輸出會透過使用者定義的 輸出字段對應,找到索引的方式。 從來源到索引,您想要完整傳輸的任何原始內容都是透過欄位對應來定義。

若要設定套用的 AI,請在技能集和索引器中指定設定。

技能集定義

技能集是執行擴充的一或多個 技能 數位,例如在圖像檔上翻譯文字或光學字元辨識(OCR)。 技能包括 Microsoft 的內建技能,或是您外部裝載處理邏輯的自訂技能。 技能集會產生擴充的文件,在編制索引或投影到知識存放區時會用到這些文件。

技能包含內容、輸入和輸出:

此圖顯示技能集建立數據路徑的屬性。

  • 內容是指作業的範圍,每次可能包含一份文件,或集合中一個項目。

  • 輸入源自擴充文件中的節點,其中「source」和「name」會識別指定的節點。

  • 輸出會傳回擴充文件並成為新的節點。 值為節點「name」和節點內容。 如果節點名稱重複,您可以設定目標名稱進行區分。

技能內容

每個技能都有一個內容,可以是整個文件 (/document) 或樹狀結構 (/document/countries/*) 中的節點。

內容會決定:

  • 技能執行次數、針對單一值(每個字段、每份檔一次),或集合,其中會為集合中的每個實例新增 /* 技能調用結果。

  • 輸出宣告,或是在擴充樹狀結構中新增技能輸出的位置。 系統一律將輸出作為內容節點的子系來新增至樹狀結構中。

  • 輸入的圖形。 對於多層級集合,將內容設定為父集合會影響技能輸入的形狀。 例如,如果您有包含國家/地區清單的擴充樹狀結構,則每個擴充都有包含郵遞郵編碼清單的狀態清單,您設定內容的方式會決定輸入的解譯方式。

    上下文 輸入 輸入的圖形 技能引動過程
    /document/countries/* /document/countries/*/states/*/zipcodes/* 國家/地區中所有郵遞區號的清單 每個國家/地區一次
    /document/countries/*/states/* /document/countries/*/states/*/zipcodes/* 該州/省中的郵遞區號清單 每個國家/地區和州/省的組合一次

技能相依性

技能可以個別和平行執行,如果要將某個技能的輸出饋送至另一個技能,也可以採用循序執行。 下列範例示範依序執行的兩個內建技能

  • Skill #1 是文字 分割技能 ,可接受 「reviews_text」來源字段的內容做為輸入,並將該內容分割成輸出為 5,000 個字元的「頁面」。 將大量文字分割成較小的區塊,可讓情感偵測等技能產生更好的結果。

  • 技能 #2 是情感偵測技能,接受「pages」作為輸入,並產生名為「Sentiment」的新欄位作為輸出,當中包含情感分析的結果。

請注意第一個技能的輸出 (「pages」) 用於情感分析的方式,其中「/document/reviews_text/pages/*」同時是內容和輸入。 如需路徑公式的詳細資訊,請參閱如何參考擴充

{
    "skills": [
        {
            "@odata.type": "#Microsoft.Skills.Text.SplitSkill",
            "name": "#1",
            "description": null,
            "context": "/document/reviews_text",
            "defaultLanguageCode": "en",
            "textSplitMode": "pages",
            "maximumPageLength": 5000,
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/reviews_text"
                }
            ],
            "outputs": [
                {
                    "name": "textItems",
                    "targetName": "pages"
                }
            ]
        },
        {
            "@odata.type": "#Microsoft.Skills.Text.SentimentSkill",
            "name": "#2",
            "description": null,
            "context": "/document/reviews_text/pages/*",
            "defaultLanguageCode": "en",
            "inputs": [
                {
                    "name": "text",
                    "source": "/document/reviews_text/pages/*",
                }
            ],
            "outputs": [
                {
                    "name": "sentiment",
                    "targetName": "sentiment"
                },
                {
                    "name": "confidenceScores",
                    "targetName": "confidenceScores"
                },
                {
                    "name": "sentences",
                    "targetName": "sentences"
                }
            ]
        }
      . . .
  ]
}

擴充樹狀結構

擴充的文件是在技能集執行期間建立的暫時樹狀結構,可收集透過技能導入的所有變更。 整體上,擴充會表示為可定址節點的階層。 節點也會包含來自外部資料源的原始未擴充欄位。

擴充的文件只會在技能集執行期間存在,但可以快取或傳送至知識存放區

擴充的文件最初只有文件萃取期間從資料來源擷取的內容,這些擷取自來源的文字和影像可供語言或影像分析使用。

初始內容是中繼資料以及「根節點」(document/content)。 根節點通常是在文件萃取期間從資料來源擷取的完整文件或標準化影像。 這些內容在擴充樹狀結構中的呈現方式會因資料來源類型而有所不同。 下表針對幾種支援的資料來源,說明進入擴充管線的文件狀態:

資料來源\剖析模式 預設 JSON、JSON 行與 CSV
Blob 儲存體 /document/content
/document/normalized_images/*
 
/document/{key1}
/document/{key2}
 
Azure SQL /document/{column1}
/document/{column2}
 
N/A
Azure Cosmos DB /document/{key1}
/document/{key2}
 
N/A

執行技能時,輸出會新增至擴充樹狀結構作為新節點。 如果技能是在整份文件上執行,則會在根目錄下的第一個層級新增節點。

節點可作為下游技能的輸入。 例如,技能建立的內容 (例如翻譯字串),可能會成為辨識實體或擷取關鍵片語技能的輸入。

從擴充樹狀結構讀取和寫入技能

雖然您可以透過偵錯工作階段視覺化編輯器來視覺化和使用擴充樹狀結構,但其主要是內部結構。

擴充不是可變動的:節點一旦建立就無法編輯。 隨著您的技能變得更複雜,您的擴充樹狀結構也會更加複雜,但並非擴充樹狀結構中的所有節點都需要將它設為索引或知識存放區。

您可以選擇保存擴充輸出的特定子集,以便留下想要使用的內容。 索引器定義中的輸出字段對應會決定搜尋索引中實際擷取的內容。 同樣地,如果要建立知識存放區,您可以將輸出對應到指派給投影的圖形

注意

擴充樹狀結構格式可讓擴充管線將中繼資料附加至均等基本資料類型。 中繼資料不是有效的 JSON 物件,但可以投影至知識存放區投影定義中的有效 JSON 格式。 如需詳細資訊,請參閱塑形器技能

索引子定義

索引子具有屬性和參數,用於設定索引子的執行。 這些屬性包括在搜尋索引中設定欄位資料路徑的對應。

此圖顯示索引器哪些屬性會建立索引中欄位的數據路徑。

共有兩組對應:

「sourceFieldName」屬性會指定資料來源中的欄位,或擴充樹狀結構中的節點。 「targetFieldName」屬性會指定索引中接收內容的搜尋欄位。

擴充範例

此範例使用旅館評論技能集作為參考點,說明擴充樹狀結構如何透過使用概念圖表的技能執行發展。

此範例也會展示:

  • 技能內容和輸入如何判斷技能執行的次數
  • 根據內容所產生的輸入圖形

在此範例中,CSV 檔案的來源欄位包含客戶針對旅館的評論 (「reviews_text」) 和評等 (「reviews_rating」)。 索引子會從 Blob 儲存體新增中繼資料欄位,而技能會新增翻譯的文字、情感分數和關鍵片語偵測。

在旅館評論範例中,擴充流程中的「document」代表一則旅館評論。

提示

您可以在 Azure 入口網站 或 REST API建立此資料的搜尋索引和知識存放區。 您也可以使用偵錯工作階段來深入解析技能集組合、相依性以及對擴充樹狀結構的影響。 本文中的影像提取自偵錯工作階段。

在概念上,初始擴充樹狀結構會如下所示:

檔破解之後的擴充樹狀結構

所有擴充的根節點都是 "/document"。 當您使用 Blob 索引器時,"/document"節點具有 和 "/document/normalized_images""/document/content"子節點。 當數據是 CSV 時,如本範例所示,數據行名稱會對應至 下方 "/document"的節點。

技能 #1:分割技能

當來源內容包含大量文字時,將其分割為較小的部分會很有幫助,可有效提升語言、情感和關鍵片語偵測的精確度。 可用的精細度有兩種:頁面和句子。 頁面包含大約5,000個字元。

文字分割技能通常是技能集中的第一個。

"@odata.type": "#Microsoft.Skills.Text.SplitSkill",
"name": "#1",
"description": null,
"context": "/document/reviews_text",
"defaultLanguageCode": "en",
"textSplitMode": "pages",
"maximumPageLength": 5000,
"inputs": [
    {
        "name": "text",
        "source": "/document/reviews_text"
    }
],
"outputs": [
    {
        "name": "textItems",
        "targetName": "pages"
    }
]

透過 "/document/reviews_text" 的技能內容,分割技能會針對 reviews_text 執行一次。 技能輸出是一份清單,其中 reviews_text 分成 5,000 個字元區段。 來自分割技能的輸出會命名為 pages,並新增至擴充樹狀結構。 targetName 功能可讓您先將技能輸出重新命名,再新增至擴充樹狀結構。

現在擴充樹狀結構在技能內容之下有了新的節點。 這個節點適用於任何技能、投影或輸出欄位對應。

技能之後的擴充樹狀結構 #1

若要存取由技能新增至節點的任何擴充內容,則需要擴充內容的完整路徑。 例如,如果您要使用節點中的文字做為另一個技能的 pages 輸入,請將它指定為 "/document/reviews_text/pages/*"。 如需路徑的詳細資訊,請參閱參考擴充

技能 #2 語言偵測

旅館評論文件包含多種語言的客戶意見反應。 語言偵測技能會決定要使用哪一種語言。 結果接著會傳遞至關鍵片語擷取和情感偵測 (未顯示),並在偵測情感和片語時納入語言考量。

雖然語言偵測技能是技能集所定義的第三個技能 (技能 #3),但會是下一個要執行的技能。 此技能不需要任何輸入,因此會與先前的技能平行執行。 如同之前進行的分割技能,系統也會針對每個文件叫用語言偵測技能一次。 擴充樹狀結構現在具有語言的新節點。

技能之後的擴充樹狀結構 #2

技能 #3 和 #4 (情感分析和關鍵片語偵測)

客戶意見反應會反映一系列正面和負面體驗。 情感分析技能會分析意見反應,並指派從負數到正數的連續分數,如果未決定情感則為中性。 關鍵片語偵測會與情感分析平行執行,負責識別並擷取出現的文字和簡短片語。

根據的內容 /document/reviews_text/pages/*,針對集合中的每個 pages 項目,都會叫用情感分析和關鍵片語技能一次。 技能的輸出將會是相關聯頁面元素下方的節點。

您現在應該能夠查看技能集中的其餘技能,並可視化擴充樹狀結構如何隨著每個技能的執行而繼續成長。 有些技能 (例如合併技能和塑形器技能) 也會建立新的節點,但只會使用現有節點的資料,而不會建立全新的擴充。

所有技能之後的擴充樹狀結構

上述樹狀結構中連接器的色彩表示擴充是由不同的技能所建立,而且節點必須個別尋址,而且不會是選取父節點時傳回之物件的一部分。

技能 #5 塑形器技能

如果輸出包含知識存放區,請新增塑形器技能作為最後一個步驟。 塑形器技能會根據擴充樹狀結構中的節點建立資料圖形。 例如,您可能想要將多個節點合併成單一圖形。 接著,您可以將此圖形投影為資料表 (節點成為資料表中的資料行),依名稱將圖形傳遞至資料表投影。

塑形器技能專注於一個技能的成形,因此非常易於使用。 或者,您可以選擇在個別投影內進行內嵌成形。 塑形器技能不會新增或減去擴充樹狀結構,因此沒有視覺化。 相對地,您可以將塑形器技能視為一種重新排列現有擴充樹狀結構的方法。 在概念上,這類似於在資料庫中使用資料表建立檢視。

{
  "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
  "name": "#5",
  "description": null,
  "context": "/document",
  "inputs": [
    {
      "name": "name",
      "source": "/document/name"
    },
    {
      "name": "reviews_date",
      "source": "/document/reviews_date"
    },
    {
      "name": "reviews_rating",
      "source": "/document/reviews_rating"
    },
    {
      "name": "reviews_text",
      "source": "/document/reviews_text"
    },
    {
      "name": "reviews_title",
      "source": "/document/reviews_title"
    },
    {
      "name": "AzureSearch_DocumentKey",
      "source": "/document/AzureSearch_DocumentKey"
    },
    {
      "name": "pages",
      "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/*"
        },
        {
          "name": "keyphrase",
          "sourceContext": "/document/reviews_text/pages/*/Keyphrases/*",
          "inputs": [
            {
              "name": "Keyphrases",
              "source": "/document/reviews_text/pages/*/Keyphrases/*"
            }
          ]
        }
      ]
    }
  ],
  "outputs": [
    {
      "name": "output",
      "targetName": "tableprojection"
    }
  ]
}

下一步

在看過簡介和範例後,請嘗試使用內建技能來建立您的第一個技能集。