この記事では、カスタム NER を開始するための要件を設定し、プロジェクトを作成する方法について説明します。
前提条件
カスタム NER の使用を開始する前に、次のものが必要です。
- Azure サブスクリプション。無料で作成できます。
言語リソースを作成する
カスタム NER の使用を開始する前に、Foundry Tools リソースの Azure 言語が必要です。 言語リソースを作成し、Azure portal でストレージ アカウントをそれに接続することをお勧めします。 Azure portal でリソースを作成すると、必要なすべてのアクセス許可が事前に構成された Azure ストレージ アカウントを同時に作成できます。 また、既存のリソースを使用し、カスタムの名前付きエンティティ認識を使用するように構成する方法については、記事の詳細を参照してください。
また、エンティティを抽出するためにモデルをトレーニングするために使用される .txt ドキュメントをアップロードする Azure ストレージ アカウントも必要です。
Note
- 言語リソースを作成するには、リソース グループに所有者ロールが割り当てられている必要があります。
- 既存のストレージ アカウントを接続する場合は、所有者ロールが割り当てられている必要があります。
言語リソースを作成し、ストレージ アカウントを接続する
リソースは次の方法で作成できます。
- Azure ポータル
- PowerShell
Note
Azure Language リソースにリンクされた後は、ストレージ アカウントを別のリソース グループまたはサブスクリプションに移動しないでください。
Azure portal から新しいリソースを作成する
Azure portal にサインインして、Foundry Tools リソースで新しい Azure 言語を作成します。
ウィンドウが表示されるので、カスタム機能から [カスタム テキスト分類とカスタム固有表現認識] を選びます。 画面の下部にある [リソースの作成を続行する] を選択します。
次の詳細を使用して言語リソースを作成します。
名前 説明 サブスクリプション Azure サブスクリプション。 リソースグループ リソースを含むリソース グループ。 既存のものを使用するか、新しく作成することができます。 リージョン 言語リソースのリージョン。 たとえば、"米国西部 2" などです。 名前 リソースの名前。 価格階層 言語リソースの価格レベル。 Free (F0) レベルを利用してサービスを試用できます。 Note
"サインイン アカウントは、選択したストレージ アカウントのリソース グループの所有者ではありません" というメッセージが表示された場合は、言語リソースを作成する前に、アカウントにリソース グループに所有者ロールが割り当てられている必要があります。 Azure サブスクリプションの所有者に問い合わせてください。
[カスタム テキスト分類とカスタム固有表現認識] セクションで、既存のストレージ アカウントを選択するか、[新しいストレージ アカウント] を選択します。 これらの値は作業を開始するのに役立ちます。運用環境で使用する ストレージ アカウントの値 であるとは限りません。 プロジェクトのビルド中の待機時間を回避するには、言語リソースと同じリージョンのストレージ アカウントに接続します。
ストレージ アカウントの値 推奨値 ストレージ アカウント名 任意の名前 ストレージ アカウントの種類 Standard 地域冗長ストレージ (LRS) [責任ある AI の通知] がオンになっていることを確認します。 ページの下部にある [確認と作成] を選択して、[作成] を選択します。
PowerShell を使用して新しい言語リソースを作成する
新しいリソースとストレージ アカウントは、GitHub でホストされる次の CLI テンプレートとパラメーター ファイルを使って作成できます。
パラメーター ファイルで次の値を編集します。
| パラメーター名 | 値の説明 |
|---|---|
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 テンプレートのドキュメントを参照してください。
Note
- ストレージ アカウントを言語リソースに接続するプロセスは元に戻すことができません。 後で切断することはできません。
- 言語リソースは 1 つのストレージ アカウントにのみ接続できます。
既存の言語リソースの使用
既存の言語リソースを使用してカスタム NER の使用を開始できますが、このリソースが以下の要件を満たしている必要があります。
| 要件 | 説明 |
|---|---|
| リージョン | サポートされているリージョンのいずれかで既存のリソースがプロビジョニングされていることを確認します。 そうでない場合は、これらのリージョンのいずれかに新しいリソースを作成する必要があります。 |
| 価格階層 | サポートされている価格レベルに関する詳細情報。 |
| マネージド ID | リソースのマネージド ID 設定が有効になっていることを確認します。 これが行われていない場合、次のセクションを参照してください。 |
カスタムの名前付きエンティティ認識を使用するには、 Azure ストレージ アカウント がまだない場合は作成する必要があります。
リソースの ID 管理を有効にする
Azure portal を使用して言語リソースを有効にするには、そのリソースに ID 管理が必要です。
- 言語リソースに移動します
- 左側のメニューの [リソース管理] セクションで、[ID] を選択します
- [システム割り当て済み] タブで、必ず [状態] を [オン] に設定します
カスタム固有表現認識機能を有効にする
Azure portal からカスタムテキスト分類/カスタム固有表現認識機能を有効にしてください。
- Azure portal で言語リソースに移動します。
- 左側のメニューの [リソース管理] セクションで、[機能] を選択します。
- カスタム テキスト分類、またはカスタム固有表現認識機能を有効にします。
- ご自分のストレージ アカウントに接続します。
- [ 適用] を選択します。
重要
ストレージ BLOB データ共同作成者 ロールを変更しているユーザーが、これに割り当てられていることを確認します。
必要なロールを追加する
言語リソースとストレージ アカウントに必要なロールを設定するには、次の手順に従います。
Foundry Tools リソースでの Azure 言語のロール
Azure portal でストレージ アカウントまたは言語リソースに移動します。
左側のウィンドウで [アクセス制御 (IAM)] を選択します。
[追加] を選択してロールの割り当ての追加を行い、アカウントに適切なロールを選択します。
所有者または共同作成者のロールが言語リソースに割り当てられている必要があります。
[アクセスの割り当て先] 内で、[ユーザー、グループ、またはサービス プリンシパル] を選択します
[メンバーの選択] を選択します
ユーザー名を選択します。 [選択] フィールドでユーザー名を検索できます。 すべてのロールに対してこれを繰り返します。
このリソースへのアクセスが必要なすべてのユーザー アカウントに対して、これらの手順を繰り返します。
ストレージ アカウントのロール
- Azure portal でストレージ アカウントのページに移動します。
- 左側のウィンドウで [アクセス制御 (IAM)] を選択します。
- [追加] を選択して [ロールの割り当ての追加] を行い、ストレージ アカウントに対して [ストレージ BLOB データ所有者] ロールを選択します。
- [アクセス権の割り当て先] 内で [マネージド ID] を選択します。
- [メンバーの選択] を選択します
- サブスクリプションを選択し、マネージド ID として [言語] を選択します。 [選択] フィールドでユーザー名を検索できます。
ユーザーのロール
重要
この手順をスキップした場合、カスタム プロジェクトに接続しようとすると 403 エラーが発生します。 自分がストレージ アカウントの所有者であっても、現在のユーザーがストレージ アカウント BLOB データにアクセスするためにこのロールを持っていることが重要です。
- Azure portal でストレージ アカウントのページに移動します。
- 左側のウィンドウで [アクセス制御 (IAM)] を選択します。
- [追加] を選択して [ロールの割り当ての追加] を行い、ストレージ アカウントに対して [ストレージ BLOB データ所有者] ロールを選択します。
- [アクセスの割り当て先] 内で、[ユーザー、グループ、またはサービス プリンシパル] を選択します。
- [メンバーの選択] を選択します
- ユーザーを選択します。 [選択] フィールドでユーザー名を検索できます。
重要
仮想ネットワークまたはプライベート エンドポイントがある場合は、Azure portal で [信頼されたサービスの一覧にある Azure サービスがこのストレージ アカウントにアクセスすることを許可します] を選択してください。
自身のストレージ アカウントに対して CORS を有効にする
クロスオリジン リソース共有 (CORS) を有効にする場合は、必ず (GET、PUT、DELETE) メソッドを許可してください。
許可されたオリジン フィールドを https://language.cognitive.azure.com に設定します。 許可されたヘッダー値に * を追加してすべてのヘッダーを許可し、最大有効期間を 500 に設定します。
カスタムの名前付きエンティティ認識プロジェクトを作成する (REST API)
リソースとストレージ コンテナーを構成したら、新しいカスタム NER プロジェクトを作成します。 プロジェクトは、データに基づいてカスタム AI モデルを構築するための作業領域です。 使用されている Azure リソースにアクセスできる他のユーザーと共にプロジェクトにアクセスできるのは、自分だけです。 データにラベルを付けた場合は、それを使用して プロジェクトのインポートを開始できます。
カスタム固有表現認識モデルの作成を開始するには、プロジェクトを作成する必要があります。 プロジェクトを作成すると、データのラベル付け、モデルのトレーニング、評価、改善、デプロイを行うことができます。
Note
プロジェクト名は、すべての操作で大文字と小文字が区別されます。
プロジェクトを作成するには、次の 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 |
要求ヘッダー
要求を認証するには、次のヘッダーを使います。
| 鍵 | 必須 | タイプ | 値 |
|---|---|---|---|
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}"
}
| 鍵 | プレースホルダー | 値 | 例 |
|---|---|---|---|
| projectName | {PROJECT-NAME} |
プロジェクトの名前。 この値は、大文字と小文字が区別されます。 | myProject |
| 言語 | {LANGUAGE-CODE} |
プロジェクトで使用されるドキュメントの言語コードを指定する文字列。 プロジェクトが多言語プロジェクトの場合は、ドキュメントで最も頻繁に表される言語のコードを選択します。 サポートされている言語コードの詳細については、言語サポートをご覧ください。 | en-us |
| プロジェクトの種類 | CustomEntityRecognition |
プロジェクトの種類。 | CustomEntityRecognition |
| multilingual | true |
データセットで複数の言語のドキュメントを得ることを可能とするブール値であり、モデルがデプロイされる場合に、サポートする任意の言語 (必ずしもトレーニング ドキュメントに含まれているとは限りません) でモデルに関するクエリを実行することができます。 多言語サポートの詳細については、言語サポートをご覧ください。 | true |
| ストレージ入力コンテナ名 | {CONTAINER-NAME |
ドキュメントがアップロードされた Azure ストレージ コンテナーの名前。 | myContainer |
この要求は 201 応答を返します。つまり、プロジェクトが作成されます。
この要求は、次の場合にエラーを返します。
- 選んだリソースに、ストレージ アカウントに対する適切なアクセス許可がありません。
プロジェクトのインポート (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 |
ヘッダー
要求を認証するには、次のヘッダーを使います。
| 鍵 | 値 |
|---|---|
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
}
]
}
]
}
]
}
}
| 鍵 | プレースホルダー | 値 | 例 |
|---|---|---|---|
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 |
{コンテナーの名前} | アップロードしたドキュメントを含む Azure ストレージ コンテナーの名前。 | myContainer |
entities |
プロジェクト内に存在し、ドキュメントから抽出したすべてのエンティティ型を含む配列。 | ||
documents |
プロジェクト内のすべてのドキュメントと、各ドキュメント内のラベル付けされたエンティティのリストを含む配列。 | [] | |
location |
{DOCUMENT-NAME} |
ストレージ コンテナー内のドキュメントの場所。 | doc1.txt |
dataset |
{DATASET} |
トレーニングの前に分割する場合にこのファイルが移動するテスト セット。 詳細については、「モデルをトレーニングする方法」を参照してください。 このフィールドで使用できる値は Train および Test です。 |
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 |
ヘッダー
要求を認証するには、次のヘッダーを使います。
| 鍵 | 値 |
|---|---|
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 要求を送信すると、プロジェクトの詳細と共に成功と JSON 応答本文を示す 200 応答を受け取ります。
プロジェクトの削除 (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 |
ヘッダー
要求を認証するには、次のヘッダーを使います。
| 鍵 | 値 |
|---|---|
| Ocp-Apim-Subscription-Key | リソースへのキー。 API 要求の認証に使われます。 |
API 要求を送信すると、成功を示す 202 応答が返されます。これは、プロジェクトが削除されていることを意味します。 呼び出しが成功すると、ジョブの状態を確認するために使用する Operation-Location ヘッダーが返されます。
次のステップ
データのラベル付けに使用する プロジェクト スキーマ を把握しておく必要があります。
プロジェクトが作成されたら、 データのラベル付けを開始できます。 このプロセスにより、エンティティ抽出モデルにテキストの解釈方法が通知され、トレーニングと評価に使用されます。