Azure 認知搜尋中的技能集概念 \(部分機器翻譯\)

本文適用于需要更深入瞭解技能集概念和組合的開發人員,並假設熟悉 AI 擴充的高階概念。

技能集是附加至索引子之Azure 認知搜尋中可重複使用的資源。 它包含一或多個技能,可呼叫內建 AI 或外部自訂處理,以透過從外部資料源擷取的檔。

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

顯示技能集資料流程的圖表,著重于輸入、輸出和對應。

從技能集處理到其結論,從技能讀取和寫入 擴充檔。 一開始,擴充的檔只是從資料來源擷取的原始內容, (清楚說明為 "/document" 根節點) 。 隨著每個技能執行,擴充的檔會隨著技能將輸出寫入為圖形中的節點而獲得結構和實質。

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

若要設定擴充,您會在技能集和索引子中指定設定。

技能集定義

技能集是一或多個執行擴充的 技能 陣列,例如在影像檔上翻譯文字或 OCR。 技能可以是 Microsoft 的內建技能 ,或用於處理您外部裝載之邏輯的 自訂技能 。 技能集會產生擴充的檔,這些檔會在編制索引期間取用,或投影到知識存放區。

技能具有內容、輸入和輸出:

此圖顯示技能集建立資料路徑的屬性。

  • 內容 是指作業的範圍,此範圍可以是每份檔一次,或集合中每個專案一次。

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

  • 輸出會以新節點的形式傳回擴充的檔。 值是節點 「名稱」和節點內容。 如果節點名稱重複,您可以設定目標名稱來厘清。

技能內容

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

  • 技能執行次數、針對每個欄位、每份檔) 或類型集合的內容值,透過單一值 (一次,其中會針對集合中的每個實例新增 /* 結果叫用一次。

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

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

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

技能相依性

如果您將某個技能的輸出饋送至另一個技能,則技能可以獨立且平行執行,或循序執行。 下列範例示範兩個依序執行的 內建技能

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

  • 技能 #2 是 情感偵測技能 接受「頁面」做為輸入,並產生稱為「情感」的新欄位作為包含情感分析結果的輸出。

請注意,第一個技能 ( ) 「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 格式。 如需詳細資訊,請參閱 Shaper 技能

索引子定義

索引子具有用來設定索引子執行的屬性和參數。 這些屬性中的對應會將資料路徑設定為搜尋索引中的欄位。

此圖顯示索引子哪些屬性會建立索引中欄位的資料路徑。

有兩組對應:

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

擴充範例

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

此範例也會顯示:

  • 技能的內容和輸入如何運作,以判斷技能執行次數
  • 輸入的形狀是以內容為基礎

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

在旅館評論範例中,擴充程式中的「檔」代表單一旅館評論。

提示

您可以在Azure 入口網站或透過Postman 和 REST API建立此資料的搜尋索引和知識存放區。 您也可以使用偵錯 會話 來深入瞭解技能集組合、相依性和對擴充樹狀結構的影響。 本文中的映射會從偵錯會話提取。

在概念上,初始擴充樹狀結構看起來如下:

檔破解檔之後的擴充樹

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

技能 #1:分割技能

當來源內容包含大量文字時,將它分成較小的元件會很有説明,以提升語言、情感和關鍵字組偵測的精確度。 有兩個可用的粒紋:頁面和句子。 頁面包含大約 5000 個字元。

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

"@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 分成 5000 個字元區段。 分割技能的輸出會命名 pages 為 ,並新增至擴充樹狀結構。 targetName 功能可讓您先將技能輸出重新命名,再新增至擴充樹狀結構。

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

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

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

技能 #2 語言偵測

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

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

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

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

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

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

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

所有技能之後的擴充

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

技能 #5 塑形器技能

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

塑形器技能很容易使用,因為它著重于一個技能的成形。 或者,您可以選擇在個別投影內進行內嵌成形。 Shaper 技能不會從擴充樹狀結構新增或減去,因此不會視覺化。 相反地,您可以將 Shaper 技能視為重新排列您已擁有之擴充樹狀結構的方法。 在概念上,這類似于在資料庫中從資料表建立檢視。

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

後續步驟

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