カスタム固有表現認識について理解する

完了

カスタム NER は、ドキュメントを調べ、識別し、ユーザーが定義したエンティティを抽出する Azure API サービスです。 これらのエンティティとしては、銀行明細書の氏名や住所から、検索結果を改善するためのナレッジ マイニングまであらゆるものが考えられます。

カスタム NER は、Azure AI サービスの Azure AI Language の一部です。

カスタム NER と組み込み NER

Azure AI Language は、人、場所、組織、URL などを認識するための特定の組み込みエンティティ認識を提供します。 組み込み NER を使用すると、最小限の構成でサービスを設定し、エンティティを抽出することができます。 組み込み NER を呼び出すには、サービスを作成し、次のようにその NER サービスのエンドポイントを呼び出します。

<YOUR-ENDPOINT>/language/analyze-text/jobs?api-version=<API-VERSION>
プレースホルダー
<YOUR-ENDPOINT> API 要求のエンドポイント https://<your-resource>.cognitiveservices.azure.com
<AIP-VERSION> 呼び出している API のバージョン 2023-05-01

その呼び出しの本文には、エンティティを抽出するドキュメントが含まれ、ヘッダーにはサービス キーが含まれます。

上記の呼び出しから返される応答には、次のような認識されたエンティティの配列が含まれます。

<...>
"entities":[
    {
        "text":"Seattle",
        "category":"Location",
        "subcategory":"GPE",
        "offset":45,
        "length":7,
        "confidenceScore":0.99
    },
    {
        "text":"next week",
        "category":"DateTime",
        "subcategory":"DateRange",
        "offset":104,
        "length":9,
        "confidenceScore":0.8
    }
]
<...>

組み込み NER を使用する場合の例としては、長いテキスト ドキュメント内での場所、名前、または URL の検索などがあります。

ヒント

認識されるエンティティのカテゴリの完全な一覧については、NER のドキュメントを参照してください。

このモジュールの以降の部分で重点的に説明するカスタム NER は、抽出したいエンティティが組み込みサービスの対象ではない場合、または特定のエンティティを抽出したい場合にのみ使用できます。 アプリの要件に応じて単純または複雑なカスタム NER モデルを作成できます。

カスタム NER を使用する必要がある場合の例としては、特定の法律または銀行データ、カタログ検索を強化するためのナレッジ マイニング、監査ポリシーの特定のテキストの検索などがあります。 これらのプロジェクトでは、それぞれ固有のエンティティおよびデータ セットを抽出する必要があります。

Azure AI Language プロジェクト ライフ サイクル

Conceptual diagram showing a project steps to define entities, tag data, train model, view model, improve model, deploy model, and extract entities.

エンティティ抽出モデルの作成は、通常、ほとんどの Azure AI Language サービス機能と同様の手順に従います。

  1. エンティティの定義: 識別するデータとエンティティを理解し、それらを可能な限り明確にします。 たとえば、銀行明細書で抽出する必要がある部分を正確に定義します。
  2. データにタグを付ける: 既存のデータにラベルつまりタグを付け、データセット内のテキストがどのエンティティに対応するかを指定します。 間違ったラベルを付けたり、ラベルを付けなかったりすると、トレーニング後のモデルの有効性が低下するため、このステップを正確かつ完全に行うことが重要です。 使用できる入力ドキュメントの適切なばらつきが有用です。 たとえば、銀行名、顧客名、顧客の住所、特定のローンまたは口座の用語、ローンまたは口座の金額、口座番号にラベルを付けます。
  3. モデルをトレーニングする: エンティティにラベルを付けたら、モデルをトレーニングします。 トレーニングでは、ラベルが付けられたエンティティを認識する方法をモデルに教えます。
  4. モデルの表示: モデルをトレーニングしたら、モデルの結果を表示します。 このページには、テストされたデータの適合率と再現率に基づいた 0 から 1 までのスコアが含まれます。 どのエンティティがうまく機能し (顧客名など)、どのエンティティを改善する必要があるか (口座番号など) を確認できます。
  5. モデルの改善: 識別できなかったエンティティや、正しく抽出されなかったエンティティを確認して、モデルを改善します。 パフォーマンスを向上させるためにモデルのトレーニングに追加する必要があるデータを確認します。 このページには、エンティティの失敗内容と、他の同様のエンティティ (ローン金額など) と区別する必要があるエンティティ (口座番号など) が表示されます。
  6. モデルのデプロイ: モデルが要望どおりに機能したら、API を使って利用できるようにモデルをデプロイします。 この例では、モデルがデプロイされた時点でモデルに要求を送信して、銀行明細書のエンティティを抽出できます。
  7. エンティティの抽出: エンティティの抽出にモデルを使用します。 このラボでは、API の使用方法について説明します。詳細については、API のリファレンスを参照してください。

データの選択とエンティティの調整に関する考慮事項

最高のパフォーマンスを得るためには、モデルのトレーニングに高品質のデータを使用し、かつ明確に定義されたエンティティ型を使用する必要があります。

高品質のデータを使用することにより、調整に要する時間を短縮でき、モデルの結果も向上します。

  • 多様性 - 実際のデータで想定される現実的な分布を損なうことなく、可能な限り多様なデータセットを使用します。 使用するサンプル データは、独自の形式とエンティティ数を含む可能な限り多くのソースから収集する必要があります。 可能な限り多くの異なるソースを表すデータセットを使用することをお勧めします。
  • 分布 - ドキュメントの種類の適切な分布を使用します。 モデルをトレーニングするためのデータセットが多様性に富んでいると、モデルがデータ内の誤った関係を学習するのを防ぐのに役立ちます。
  • 正確性 - 可能な限り実際のデータに近いデータを使用します。 偽のデータでもトレーニング プロセスを開始できますが、実データとは異なるために、モデルが正しく抽出できない原因となる可能性があります。

エンティティについても慎重に検討した上で、可能な限り明確に定義する必要があります。 モデルが区別に苦労するため、あいまいなエンティティ (銀行明細書で隣り合う 2 つの名前など) は避けてください。 あいまいなエンティティが必要な場合は、モデルが違いを理解できるように、学習できる例を増やします。

エンティティを区別しておくことも、モデルのパフォーマンスを向上させるのに大いに役立ちます。 たとえば、電話番号、ソーシャル メディア ハンドル、メール アドレスなどの "連絡先情報" のようなものを抽出しようとする場合、モデルに正しく教えるためにいくつかの例が必要になります。 代わりに、"電話"、"メール"、"ソーシャル メディア" などのより具体的なエンティティに分割し、見つかった連絡先情報の種類に関係なく、モデルでラベルを付けるようにしてみてください。

エンティティの抽出方法

API で抽出タスクを送信するには、JSON 本文で、実行するタスクを指定する必要があります。 カスタム NER の場合、JSON プレイロードのタスクは CustomEntityRecognition です。

ペイロードは次の JSON のようになります。

{
    "displayName": "string",
    "analysisInput": {
        "documents": [
            {
                "id": "doc1", 
                "text": "string"
            },
            {
                "id": "doc2",
                "text": "string"
            }
        ]
    },
    "tasks": [
        {
            "kind": "CustomEntityRecognition",
            "taskName": "MyRecognitionTaskName",
            "parameters": {
            "projectName": "MyProject",
            "deploymentName": "MyDeployment"
            }
        }
    ]
}

プロジェクトの制限

Azure AI Language サービスでは、次の制限が適用されます。

  • トレーニング - 10 ファイル以上、100,000 ファイル以下
  • デプロイ - プロジェクトあたり 10 個のデプロイ名
  • API
    • オーサリング - この API では、プロジェクトの作成、モデルのトレーニングとデプロイを行います。 1 分あたり 10 個の POST と 100 個の GET に制限
    • 分析 - この API では、エンティティを実際に抽出する作業を行います。これはタスクを要求し、結果を取得します。 GET または POST を 20 個に制限
  • プロジェクト - プロジェクトあたり 1 個のストレージ アカウント、リソースあたり 500 のプロジェクト、プロジェクトあたり 50 のトレーニング済みモデル
  • エンティティ - 各エンティティは最大 500 文字です。 最大 200 個のエンティティ型を使用できます。

詳細については、「Azure AI Language のサービス制限」ページを参照してください。