分享方式:


Azure AI 搜尋服務中的知識存放區「投影」

投影定義了知識存放區中的實體資料表、物件和檔案,可接受 Azure AI 搜尋服務擴充管線中的內容。 如果您要建立知識存放區,大部分的工作皆是定義和成形投影。

本文介紹投影概念和工作流程,讓您在開始撰寫程式碼之前先了解一些背景知識。

投影是在認知搜尋技能集中定義,但最終結果是 Azure AI 儲存體中的資料表、物件和影像檔投影。

在 Azure 儲存體中表示的投影

投影和使用方式的類型

知識存放區是邏輯建構,實際表示為 Azure 儲存體中資料表、JSON 物件或二進位影像檔的鬆散集合。

Projection 儲存體 使用方式
表格 Azure 資料表儲存體 用於最能表示為資料行和資料行的資料,或當您需要資料細微表示時 (例如,資料框架)。 資料表投影可讓您使用塑形器技能定義架構化圖形,或使用內嵌塑形來指定資料行和資料列。 您可以根據熟悉的正規化原則,將內容組織成多個資料表。 相同群組中的資料表會自動相關。
物件 Azure Blob 儲存體 當您需要在一個 JSON 文件中完整 JSON 表示資料和擴充時使用。 如同資料表投影,只有有效的 JSON 物件可以投影為物件,而塑形可協助您執行此動作。
檔案 Azure Blob 儲存體 當您需要儲存正規化二進位影像檔時使用。

投影定義

投影是在技能集的「knowledgeStore」屬性下指定。 投影定義會在索引子調用期間使用,以擴充內容在 Azure 儲存體中建立和載入物件。 如果您不熟悉這些概念,請從 AI 擴充開始參閱簡介。

下列範例說明在 knowledgeStore 下投影的位置,以及基本建構。 名稱、類型和內容來源構成投影定義。

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
      {
        "tables": [
          { "tableName": "ks-museums-main", "generatedKeyName": "ID", "source": "/document/tableprojection" },
          { "tableName": "ks-museumEntities", "generatedKeyName": "ID","source": "/document/tableprojection/Entities/*" }
        ],
        "objects": [
          { "storageContainer": "ks-museums", "generatedKeyName": "ID", "source": "/document/objectprojection" }
        ],
        "files": [ ]
      }
    ]

投影群組

投影是複雜集合的陣列,這表示您可以指定每個類型的多個集合。 通常只使用一個投影群組,但如果儲存體需求包含支援不同的工具和案例,您可能會使用多個投影群組。 例如,您可以使用一個群組來設計和偵錯技能集,第二組收集用於線上應用程式的輸出,而第三組則用於資料科學工作負載。

相同的技能集輸出可用來填入投影下的所有群組。 以下範例顯示兩個項目。

"knowledgeStore" : {
    "storageConnectionString": "DefaultEndpointsProtocol=https;AccountName=<Acct Name>;AccountKey=<Acct Key>;",
    "projections": [
        {
            "tables": [],
            "objects": [],
            "files": []
        }, 
        {
            "tables": [],
            "objects": [],
            "files": []
        }
    ]
}

投影群組具有下列相互獨佔性和相關性的主要特性。

準則 描述
相互獨佔性 每個群組會與其他群組完全隔離,以支援不同的資料成形案例。 例如,如果您要測試不同的資料表結構和組合,您可以將每個集合放在不同的投影群組中以進行 AB 測試。 每個群組都會從相同的來源 (擴充樹狀結構) 取得資料,但與任何對等投影群組的資料表-物件-檔案組合完全隔離。
相關性 在投影群組中,資料表、物件和檔案中的內容都有相關。 知識存放區會使用產生的索引鍵作為通用父節點參考點。 例如,假設您有包含影像和文字的文件。 您可以將文字投影到資料表,並將影像投影到二進位檔案,而且資料表和物件都有包含檔案 URL 的資料行/屬性。

投影「來源」

來源參數是投影定義的第三個元件。 因為投影會儲存來自 AI 擴充管線的資料,所以投影的來源一律是技能的輸出。 因此,輸出可能是單一欄位 (例如翻譯的文字欄位),但通常是資料圖形的參考。

資料圖形來自您的技能集。 在 Azure AI 搜尋服務中提供的所有內建技能中,有一個稱為塑形器技能的公用程式技能,可用來建立資料圖形。 您可以包含塑形器技能 (數目視您需要而定),以支援知識存放區中的投影。

圖形經常與表格投影搭配使用,其中圖形不僅指定哪些資料列會進入資料表,也指定會建立哪些資料行 (您也可以將圖形傳遞至物件投影)。

圖形可能很複雜,而且不在本次深入討論的範圍內,但下列範例會簡短說明基本圖形。 塑形器技能輸出會指定為資料表投影的來源。 在資料表投影本身內,將會是「metadata-storage_path」、「reviews_text」、「reviews_title」等資料行,如圖形中所指定。

{
    "@odata.type": "#Microsoft.Skills.Util.ShaperSkill",
    "name": "ShaperForTables",
    "description": null,
    "context": "/document",
    "inputs": [
        {
            "name": "metadata_storage_path",
            "source": "/document/metadata_storage_path",
            "sourceContext": null,
            "inputs": []
        },
        {
          "name": "reviews_text",
          "source": "/document/reviews_text"
        }, 
        {
          "name": "reviews_title",
          "source": "/document/reviews_title"
        },
        {
          "name": "reviews_username",
          "source": "/document/reviews_username"
        },
    ],
    "outputs": [
      {
        "name": "output",
        "targetName": "mytableprojection"
      }
    ]
}

投影生命週期

投影生命週期會繫結至資料來源中的來源資料。 當來源資料更新並重新編制索引時,會使用擴充的結果來更新投影,以確保您的預測最終與您資料來源中的資料一致。 不過,投影也會獨立儲存在 Azure 儲存體中。 刪除索引子或搜尋服務本身時,將不會刪除這些投影。

在應用程式中取用

執行索引子之後,請連線至投影,並取用其他應用程式和工作負載中的資料。

  • 使用 Azure 入口網站,驗證在 Azure 儲存體中的物件建立。

  • 使用 Power BI 進行資料探索。 當資料位於 Azure 資料表儲存體時,此工具最適合使用。 在 Power BI 中,您可以將資料操作為更容易查詢和分析的新資料表。

  • 在資料科學管線中使用 Blob 容器中的擴充資料。 例如,您可以將 Blob 中的資料載入 Pandas DataFrame

  • 最後,如果您需要從知識存放區匯出資料,Azure Data Factory 具有連接器可匯出資料,並將其放入您選擇的資料庫中。

開始使用的檢查清單

回想一下,投影專屬於知識存放區,而且不會用來建構搜尋索引。

  1. 在 Azure 儲存體中,從存取金鑰取得連接字串,並確認帳戶是 StorageV2 (一般用途 V2)。

  2. 在 Azure 儲存體中,請熟悉容器和資料表中現有的內容,以便您為投影選擇非衝突名稱。 知識存放區是資料表和容器的鬆散集合。 請考慮採用命名慣例來追蹤相關物件。

  3. 在 Azure AI 搜尋服務中,在索引子中啟用擴充快取 (預覽),然後執行索引子來執行技能集並填入快取。 這是預覽功能,因此請務必在索引子要求上使用預覽 REST API。 填入快取之後,您就可以免費修改知識存放區中的投影定義 (只要技能本身未修改)。

  4. 在您的程式碼中,所有投影只會在技能集中定義。 沒有套用至投影的索引子屬性 (例如欄位對應或輸出欄位對應)。 在技能集定義中,您將著重於兩個領域:knowledgeStore 屬性和技能陣列。

    1. 在 knowledgeStore 下,指定 projections 區段中的資料表、物件、檔案投影。 本節中會 (依您定義的投影數目) 決定物件類型、物件名稱和數量。

    2. 從技能陣列中,判斷每個投影的 source 中應參考哪些技能輸出。 所有投影都有來源。 來源可以是上游技能的輸出,但通常是塑形器技能的輸出。 投影的組合是透過圖形來決定。

  5. 如果您要將投影新增至現有的技能集,請更新技能集執行索引子

  6. 在 Azure 儲存體中檢查您的結果。 後續執行時,請刪除 Azure 儲存體中的物件或變更技能集中的專案名稱,以避免命名衝突。

  7. 如果您使用資料表投影,請檢查了解表格服務資料模型資料表儲存體的延展性和效能目標,以確定您的資料需求位於資料表儲存體的文件限制內。

下一步

檢閱每個投影類型的語法和範例。