共用方式為


如何建立自訂具名實體辨識 (NER) 專案

使用本文以了解如何設定這些需求以開始使用自訂 NER 並建立專案。

先決條件

在開始使用自訂 NER 之前,您需要:

建立語言資源

在開始使用自訂 NER 之前,你需要一個 Foundry Tools 裡的 Azure 語言資源。 建議您在 Azure 入口網站中建立語言資源,並將儲存體帳戶連線到該資源。 在 Azure 入口網站中建立資源可讓您同時建立 Azure 儲存體帳戶,並預先設定所有必要的許可權。 您也可以進一步閱讀本文,以瞭解如何使用預先存在的資源,並將其設定為使用自訂具名實體辨識。

您也需要 Azure 儲存體帳戶,您會將 .txt 文件上傳到其中,以用於訓練模型來擷取實體。

附註

  • 您必須在資源群組上指派擁有者角色,才能建立語言資源。
  • 如果您要連線現有的儲存體帳戶,則應該已為其指派擁有者角色。

建立語言資源並連線儲存體帳戶

您可以利用下列方式建立資源:

  • Azure 入口網站
  • PowerShell

附註

一旦與 Azure 語言資源連結,你不應該把儲存帳號移到其他資源群組或訂閱。

從 Azure 入口網站建立新的資源

  1. 登入 Azure 入口網站 ,建立新的 Foundry Tools Azure 語言資源。

  2. 在出現的視窗中,從自訂功能選取 [自訂文字分類和自訂具名實體辨識]。 選取畫面底部的 [繼續建立您的資源]

    螢幕擷取畫面顯示 Azure 入口網站中的自訂文字分類自訂具名實體辨識。

  3. 使用下列詳細資料建立語言資源。

    名稱 描述
    訂用帳戶 您的 Azure 訂用帳戶。
    資源群組 一個包含你資源的資源群組。 您可以使用現有群組或建立新的群組。
    區域 語言資源的區域。 例如,「美國西部2號公路」。
    名稱 您的資源名稱。
    定價層 語言資源的定價層。 您可使用免費 (F0) 層來試用服務。

    附註

    如果你收到訊息說「你的登入帳號不是所選儲存帳號資源群組的擁有者」,那麼你的帳號必須在資源群組中被指派擁有者角色,才能建立語言資源。 請連絡您的 Azure 訂閱擁有者以取得協助。

  4. 在 [自訂文字分類和自訂具名實體辨識] 區段中,選取現有的儲存體帳戶,或選取 [新的儲存體帳戶]。 這些數值是幫助你入門的,不一定是你想在生產環境中使用的 儲存帳號數 值。 為了避免建置專案延遲,請連接與語言資源相同區域的儲存帳號。

    儲存體帳戶值 建議值
    儲存體帳戶名稱 任何名稱
    記憶體帳戶類型 標準本地冗餘儲存(LRS)
  5. 請確定已核取負責任 AI 通知。 選取頁面底部的 [檢閱 + 建立] 按鈕,然後選取 [建立]

使用 PowerShell 建立新的語言資源

您可以使用下列 CLI 範本參數檔案 (裝載於 GitHub) 來建立新的資源和儲存體帳戶。

在參數檔案中編輯下列值:

參數名稱 值說明
name 語言資源的名稱
location 資源裝載所在的區域。 如需詳細資訊,請參閱服務限制
sku 資源的定價層
storageResourceName 儲存體帳戶的名稱
storageLocation 儲存體帳戶裝載所在的區域。
storageSkuType 儲存體帳戶的 SKU。
storageResourceGroupName 儲存體帳戶的資源群組

使用下列 PowerShell 命令,以您編輯的檔案來部署 Azure Resource Manager (ARM) 範本。

New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup `
  -TemplateFile <path-to-arm-template> `
  -TemplateParameterFile <path-to-parameters-file>

如需有關部署範本參數檔案的資訊,請參閱 ARM 範本文件。

附註

  • 將儲存帳戶連線到語言資源的過程是無法復原的。 以後就無法斷開連線了。
  • 您只能將語言資源連線至一個儲存體帳戶。

使用預先存在的語言資源

只要此資源符合以下需求,您就可以使用現有的語言資源來開始使用自訂 NER:

需求 描述
區域 請確定您已在下列其中一個支援的區域中佈建現有的資源。 如果沒有,您必須在其中一個區域中建立新資源。
定價層 深入了解支援的定價層
受控識別 請確定已啟用資源的受控識別設定。 否則,請閱讀下一節。

若要使用自訂具名實體辨識,如果您還沒有 Azure 儲存體帳戶,則必須建立 Azure 儲存體帳戶

為資源啟用身分識別管理

您的語言資源必須具有身分識別管理,才能使用 Azure 入口網站將其啟用:

  1. 移至您的語言資源
  2. 從左側功能表的 [資源管理] 區段底下,選取 [身分識別]
  3. 從 [系統指派] 索引標籤中,請務必將 [狀態] 設定為 [開啟]

啟用自訂具名實體辨識功能

請務必從 Azure 入口網站啟用自訂文字分類/自訂具名實體辨識功能。

  1. 移至您在 Azure 入口網站中的語言資源。
  2. 從左側功能表的 [資源管理] 區段底下,選取 [功能]
  3. 啟用 [自訂文字分類 / 自訂具名實體辨識] 功能。
  4. 連線您的儲存體帳戶。
  5. 選取 [套用]

重要事項

請確定進行變更的使用者已變更指派給他們的儲存體 Blob 資料參與者角色。

新增必要角色

使用下列步驟來設定語言資源和儲存體帳戶的必要角色。

顯示如何在 Azure 入口網站中設定角色的動畫影像。

Foundry Tools 資源中的 Azure 語言角色

  1. 移至您在 Azure 入口網站中的儲存體帳戶或語言資源。

  2. 選取左窗格中的 [存取控制][IAM ]。

  3. 選取 [新增]新增角色指派,然後選擇您帳戶的適當角色。

    您應該在語言資源上指派擁有者參與者角色。

  4. 在 [存取權指派對象為] 內,選取 [使用者、群組或服務主體]

  5. 選取 [+選取成員]

  6. 選取您的使用者名稱。 您可以在 [選取] 欄位中搜尋使用者名稱。 針對所有角色重複此操作。

  7. 針對需要存取此資源的所有使用者帳戶重複這些步驟。

儲存體帳戶的角色

  1. 移至您在 Azure 入口網站中的儲存體帳戶頁面。
  2. 選取左窗格中的 [存取控制][IAM ]。
  3. 選取 [新增]新增角色指派,然後選擇儲存體帳戶上的儲存體 Blob 資料參與者角色。
  4. 在 [存取權指派對象為]中,選取 [受控識別]
  5. 選取 [+選取成員]
  6. 選取您的訂用帳戶,然後選取 [語言] 作為受控識別。 您可以在 [選取] 欄位中搜尋使用者名稱。

使用者的角色

重要事項

如果您略過此步驟,嘗試連線到您的自訂專案時,將發生 403 錯誤。 即使您是儲存體帳戶的擁有者,您目前的使用者必須仍擁有此角色,才能存取儲存體帳戶 Blob 資料。

  1. 移至您在 Azure 入口網站中的儲存體帳戶頁面。
  2. 選取左窗格中的 [存取控制][IAM ]。
  3. 選取 [新增]新增角色指派,然後選擇儲存體帳戶上的儲存體 Blob 資料參與者角色。
  4. 在 [存取權指派對象為] 內,選取 [使用者、群組或服務主體]
  5. 選取 [+選取成員]
  6. 選取您的使用者。 您可以在 [選取] 欄位中搜尋使用者名稱。

重要事項

如果您使用虛擬網路或私人端點,請務必在 Azure 入口網站中選取 [允許可信服務清單上的 Azure 服務加存取此儲存體帳戶]

為您的儲存體帳戶啟用 CORS

啟用跨原始來源資源共用 (CORS) 時,請務必允許 (GET、PUT、DELETE) 方法。 將允許的來源欄位設定為 https://language.cognitive.azure.com。 透過將 * 新增至允許的標頭值以允許所有標頭,並將最長存留期設定為 500

螢幕擷取畫面:顯示如何在儲存體帳戶中使用 CORS。

建立一個自訂命名實體識別專案(REST API)

設定好資源和儲存體容器之後,請建立新的自訂 NER 專案。 專案是一個工作區域,可根據您的資料建置自訂 AI 模型。 只有您可以與其他有權存取所用 Azure 資源的人一起存取您的專案。 如果您標記了資料,則可以使用它來 開始匯入專案

若要開始建立自訂具名實體辨識模型,您需要建立一個專案。 建立專案可讓您標記數據、定型、評估、改善及部署模型。

附註

所有作業的專案名稱皆區分大小寫。

使用下列 URL、標頭和 JSON 本文來建立 PATCH 要求,以建立您的專案。

要求 URL

使用下列 URL 來建立專案。 將下列預留位置取代為您自己的值。

{Endpoint}/language/authoring/analyze-text/projects/{projectName}?api-version={API-VERSION}
預留位置 範例
{ENDPOINT} 用於驗證 API 要求的端點。 https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} 您專案的名稱。 此值區分大小寫。 myProject
{API-VERSION} 您所呼叫 API 的版本。 參考的值適用於最新發行的版本。 欲了解更多資訊, 請參閱模型生命週期 2022-05-01

要求標頭

使用下列標頭來驗證您的要求。

Key 為必填項目 類型
Ocp-Apim-Subscription-Key 字串 資源的金鑰。 用於驗證 API 要求。
Content-Type 字串 application/merge-patch+json

請求主體

在您的要求中使用下列 JSON。 將下列預留位置取代為您自己的值。

{
  "projectName": "{PROJECT-NAME}",
  "language": "{LANGUAGE-CODE}",
  "projectKind": "CustomEntityRecognition",
  "description": "Project description",
  "multilingual": "True",
  "storageInputContainerName": "{CONTAINER-NAME}"
}

Key 預留位置 範例
projectName {PROJECT-NAME} 您專案的名稱。 此值區分大小寫。 myProject
語言 {LANGUAGE-CODE} 字串,指定專案中所用文件的語言代碼。 如果您的專案是多語系專案,請選取檔中最常表示之語言的程序代碼。 若要深入了解支援的語言代碼,請參閱語言支援 en-us
專案類型 CustomEntityRecognition 您的專案種類。 CustomEntityRecognition
多語系 true 布林值可讓您在資料集中包含多種語言的文件,並且在部署模型後,您可以使用任何支援的語言(不一定包含在訓練文件中)查詢模型。 若要深入了解多語系支援,請參閱語言支援 true
storageInputContainerName {CONTAINER-NAME 作為文件上傳位置的 Azure 儲存體容器名稱。 myContainer

此要求會傳回 201 回應,這表示專案已建立。

如果下列狀況,此要求會傳回錯誤:

  • 選取的資源沒有儲存體帳戶的適當權限。

Import project (REST API)

如果您已標記資料,則可以使用它來開始使用服務。 請確定您加標籤的資料遵循接受的資料格式

使用下列 URL、標頭和 JSON 本文來提交 POST 要求,以匯入標籤檔案。 請確定您的標籤檔案遵循接受的格式

如果具有相同名稱的專案已經存在,則會取代該專案的資料。

{Endpoint}/language/authoring/analyze-text/projects/{projectName}/:import?api-version={API-VERSION}
預留位置 範例
{ENDPOINT} 用於驗證 API 要求的端點。 https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} 您專案的名稱。 此值區分大小寫。 myProject
{API-VERSION} 您所呼叫 API 的版本。 此處參考的值適用於發行的最新版本。 欲了解更多資訊, 請參閱模型生命週期 2022-05-01

headers

使用下列標頭來驗證您的要求。

Key
Ocp-Apim-Subscription-Key 資源的金鑰。 用於驗證 API 要求。

body

在您的要求中使用下列 JSON。 以您自己的值取代預留位置值。

{
    "projectFileVersion": "{API-VERSION}",
    "stringIndexType": "Utf16CodeUnit",
    "metadata": {
        "projectName": "{PROJECT-NAME}",
        "projectKind": "CustomEntityRecognition",
        "description": "Trying out custom NER",
        "language": "{LANGUAGE-CODE}",
        "multilingual": true,
        "storageInputContainerName": "{CONTAINER-NAME}",
        "settings": {}
    },
    "assets": {
    "projectKind": "CustomEntityRecognition",
        "entities": [
            {
                "category": "Entity1"
            },
            {
                "category": "Entity2"
            }
        ],
        "documents": [
            {
                "location": "{DOCUMENT-NAME}",
                "language": "{LANGUAGE-CODE}",
                "dataset": "{DATASET}",
                "entities": [
                    {
                        "regionOffset": 0,
                        "regionLength": 500,
                        "labels": [
                            {
                                "category": "Entity1",
                                "offset": 25,
                                "length": 10
                            },
                            {
                                "category": "Entity2",
                                "offset": 120,
                                "length": 8
                            }
                        ]
                    }
                ]
            },
            {
                "location": "{DOCUMENT-NAME}",
                "language": "{LANGUAGE-CODE}",
                "dataset": "{DATASET}",
                "entities": [
                    {
                        "regionOffset": 0,
                        "regionLength": 100,
                        "labels": [
                            {
                                "category": "Entity2",
                                "offset": 20,
                                "length": 5
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
Key 預留位置 範例
api-version {API-VERSION} 您所呼叫 API 的版本。 此處所使用的版本必須是 URL 中的相同 API 版本。 深入了解其他可用的 API 版本 2022-03-01-preview
projectName {PROJECT-NAME} 您專案的名稱。 此值區分大小寫。 myProject
projectKind CustomEntityRecognition 您的專案種類。 CustomEntityRecognition
language {LANGUAGE-CODE} 字串,指定專案中所用文件的語言代碼。 如果您的專案是多語言專案,請選擇大多數文件的 語言代碼 en-us
multilingual true 布林值,可讓您在資料集中具有多種語言的文件,而且當部署模型時,您可以使用任何支援的語言 (不一定包含在定型文件中) 查詢模型。 如需多語系支援的相關資訊,請參閱語言支援 true
storageInputContainerName {CONTAINER-NAME} 包含您上傳文件的 Azure 儲存體容器名稱。 myContainer
entities 陣列,包含您在專案中擁有並從文件中擷取的所有實體類型。
documents 陣列,其中包含專案中的所有文件,以及每個文件內標記的實體清單。 []
location {DOCUMENT-NAME} 文件在儲存體容器中的位置。 doc1.txt
dataset {DATASET} 此檔案在定型前分割時要移至的測試集。 如需詳細資訊, 請參閱如何定型模型。 此欄位的可能值為 TrainTest Train

傳送 API 請求後,您會收到回應 202 ,指出任務已正確提交。 在回應標頭中,擷取 operation-location 值。 以下是格式的範例:

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}/import/jobs/{JOB-ID}?api-version={API-VERSION}

{JOB-ID} 用來識別您的要求,因為此為非同步作業。 您可以使用此 URL 來取得匯入工作狀態。

此要求的可能錯誤案例:

  • 選取的資源沒有儲存體帳戶的適當權限
  • 指定的 storageInputContainerName 不存在。
  • 使用了無效的語言代碼,或語言代碼類型不是字串。
  • multilingual 值是字串,而不是布林值。

取得專案細節(REST API)

使用下列 GET 要求來取得您的專案詳細資料。 以您自己的值取代預留位置值。

{ENDPOINT}/language/authoring/analyze-text/projects/{PROJECT-NAME}?api-version={API-VERSION}
預留位置 範例
{ENDPOINT} 用於驗證 API 要求的端點。 https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} 您專案的名稱。 此值區分大小寫。 myProject
{API-VERSION} 您所呼叫 API 的版本。 欲了解更多資訊, 請參閱模型生命週期 2022-05-01

headers

使用下列標頭來驗證您的要求。

Key
Ocp-Apim-Subscription-Key 資源的金鑰。 用於驗證 API 要求。

回應主體

    {
        "createdDateTime": "2021-10-19T23:24:41.572Z",
        "lastModifiedDateTime": "2021-10-19T23:24:41.572Z",
        "lastTrainedDateTime": "2021-10-19T23:24:41.572Z",
        "lastDeployedDateTime": "2021-10-19T23:24:41.572Z",
        "projectKind": "CustomEntityRecognition",
        "storageInputContainerName": "{CONTAINER-NAME}",
        "projectName": "{PROJECT-NAME}",
        "multilingual": false,
        "description": "Project description",
        "language": "{LANGUAGE-CODE}"
    }
預留位置 描述 範例
projectKind CustomEntityRecognition 您的專案種類。 CustomEntityRecognition
storageInputContainerName {CONTAINER-NAME} 你上傳文件的 Azure 儲存容器名稱。 myContainer
projectName {PROJECT-NAME} 您專案的名稱。 此值區分大小寫。 myProject
multilingual true 布林值,可讓您在資料集中具有多種語言的文件,而且當部署模型時,您可以使用任何支援的語言 (不一定包含在定型文件中) 查詢模型。 如需多語系支援的詳細資訊,請參閱語言支援 true
language {LANGUAGE-CODE} 字串,指定專案中所用文件的語言代碼。 如果你的專案是多語言專案,請選擇大多數文件的 語言代碼 en-us

一旦你發送 API 請求,就會收到 200 一個表示成功的回應,以及包含專案細節的 JSON 回應內容。

刪除專案(REST API)

當您不再需要專案時,可以使用下列 DELETE 要求將其刪除。 以您自己的值取代預留位置值。

{Endpoint}/language/authoring/analyze-text/projects/{projectName}?api-version={API-VERSION}
預留位置 範例
{ENDPOINT} 用於驗證 API 要求的端點。 https://<your-custom-subdomain>.cognitiveservices.azure.com
{PROJECT-NAME} 您專案的名稱。 此值區分大小寫。 myProject
{API-VERSION} 您所呼叫 API 的版本。 所引用的值為最新版本。 欲了解更多資訊, 請參閱模型生命週期 2022-05-01

headers

使用下列標頭來驗證您的要求。

Key
Ocp-Apim-Subscription-Key 資源的金鑰。 用於驗證 API 要求。

一旦你發送 API 請求,就會收到 202 一個表示成功的回應,這表示你的專案會被刪除。 成功呼叫的結果是用於檢查作業狀態的 Operation-Location 標頭。

後續步驟

  • 您應該瞭解用來標記資料的 專案結構描述

  • 建立專案後,您可以開始 標記資料。 此程序會通知您的實體擷取模型如何解譯文字,並用於定型和評估。