分類プロジェクトの種類を理解する

完了

カスタム テキスト分類により、Azure AI Language サービスで開発者が定義する "クラス" であるラベルが、テキスト ファイルに割り当てられます。 たとえば、ビデオ ゲームの概要は、"Adventure"、"Strategy"、"Action"、"Sports" などに分類されます。

カスタム テキスト分類は、2 種類のプロジェクトに分類されます。

  • 単一ラベル分類 - 各ファイルにはクラスを 1 つだけ割り当てることができます。 上の例では、ビデオ ゲームの概要は "Adventure" や "Strategy" だけに分類できます。
  • 複数ラベル分類 - 各ファイルに複数のクラスを割り当てることができます。 この種類のプロジェクトでは、ビデオ ゲームの概要を "Adventure" や "Adventure and Strategy" などと分類できます。

カスタム テキスト分類プロジェクトを作成するときに、どちらのプロジェクトを構築するかを指定できます。

単一ラベルと複数ラベルのプロジェクト

ファイルを複数の分類に分ける機能以外に、複数ラベル分類プロジェクトとの主な違いは、ラベル付け、モデルの改善に関する考慮事項、分類タスクの API ペイロードです。

データのラベル付け

単一ラベル プロジェクトでは、ラベル付けプロセスの間に各ファイルに 1 つのクラスが割り当てられます。Azure AI Language のクラスの割り当てでは、ユーザーは 1 つのクラスのみを選択できます。

複数ラベル プロジェクトのラベルを付けるとき、ユーザーはファイルごとに必要な数だけいくつでもクラスを割り当てることができます。 複雑さが増すことの影響とは、データのわかりやすさを保ち、モデルの学習の元になる可能性のある入力が適切に分散されるようにする必要があることを意味します。

単一ラベルと複数ラベルの分類でのドキュメントからラベルへのマップを示す概念図、

データにラベルを正しく付けることは、特に複数ラベル プロジェクトの場合、モデルのパフォーマンスに直接関係します。 データ セットの品質、明確さ、バリエーションが高いほど、モデルの精度が高くなります。

モデルの評価と改善

モデルの予測パフォーマンスの測定は、正しい予測の数だけではありません。 正しい分類とは、実際のラベルが x のときに、モデルでラベルが x と予測される場合です。 実際には、分類が正しくない場合のドキュメントのエラーにはさまざまな種類があります。

  • 偽陽性 - モデルによる予測は x ですが、ファイルには x というラベルが付けられていません。
  • 偽陰性 - モデルによる予測はラベル x ではありませんが、ファイルには実際には x というラベルが付けられています。

これらのメトリックは、Azure AI Language によって提供される 3 つのメジャーに変換されます。

  • リコール - すべての実際のラベルのうち、識別された数。ラベル付けされたすべてのものに対する真陽性の割合。
  • 精度 - 予測されたラベルのうち正しいものの数。識別されたすべての陽性に対する真陽性の割合。
  • F1 スコア - 各コンポーネントのバランスを最大化するために 1 つのスコアを提供することを目的とした、"リコール" と "精度" の関数

ヒント

これらのメトリックの正確な計算方法などについて詳しくは、Azure AI Language の評価メトリックに関する記事をご覧ください

単一ラベル プロジェクトでは、他より正しく分類されないクラスを識別し、より質の高いデータを見つけてモデルのトレーニングに使用できます。 複数ラベル プロジェクトでは、結合されたラベルで可能な並べ替えの行列により、高品質のデータの把握がより複雑になります。

たとえば、あるモデルでは、"Action" ゲームと一部の "Action and Strategy" ゲームは正しく分類されますが、"Strategy" ゲームは正しく分類されないとします。 モデルを改善するには、"Action and Strategy" ゲームと "Strategy" ゲームの両方についてのより高品質で多様な要約を見つけて、モデルに 2 つを区別する方法を教える必要があります。 この課題は、モデルで分類できるクラスが増えると指数関数的に増加します。

API ペイロード

Azure AI Language には、モデルを構築して操作するために、JSON 本文を使って要求を指定する REST API が用意されています。 この API は複数の言語固有の SDK に抽象化されていますが、このモジュールでは、基本的な REST API での例に注目します。

API で分類タスクを送信するには、実行するタスクを指定する JSON 本文が必要です。 REST API については次のユニットでさらに詳しく学習しますが、必要な本文の各部分について理解しておくと役に立ちます。

単一ラベル分類モデルでは、customSingleLabelClassification のプロジェクト タイプを指定します。

{
  "projectFileVersion": "<API-VERSION>",
  "stringIndexType": "Utf16CodeUnit",
  "metadata": {
    "projectName": "<PROJECT-NAME>",
    "storageInputContainerName": "<CONTAINER-NAME>",
    "projectKind": "customSingleLabelClassification",
    "description": "Trying out custom multi label text classification",
    "language": "<LANGUAGE-CODE>",
    "multilingual": true,
    "settings": {}
  },
  "assets": {
    "projectKind": "customSingleLabelClassification",
        "classes": [
            {
                "category": "Class1"
            },
            {
                "category": "Class2"
            }
        ],
        "documents": [
            {
                "location": "<DOCUMENT-NAME>",
                "language": "<LANGUAGE-CODE>",
                "dataset": "<DATASET>",
                "class": {
                    "category": "Class2"
                }
            },
            {
                "location": "<DOCUMENT-NAME>",
                "language": "<LANGUAGE-CODE>",
                "dataset": "<DATASET>",
                "class": {
                    "category": "Class1"
                }
            }
        ]
    }
}

複数ラベル分類モデルでは、CustomMultiLabelClassification のプロジェクト タイプを指定します。

{
  "projectFileVersion": "<API-VERSION>",
  "stringIndexType": "Utf16CodeUnit",
  "metadata": {
    "projectName": "<PROJECT-NAME>",
    "storageInputContainerName": "<CONTAINER-NAME>",
    "projectKind": "customMultiLabelClassification",
    "description": "Trying out custom multi label text classification",
    "language": "<LANGUAGE-CODE>",
    "multilingual": true,
    "settings": {}
  },
  "assets": {
    "projectKind": "customMultiLabelClassification",
    "classes": [
      {
        "category": "Class1"
      },
      {
        "category": "Class2"
      }
    ],
    "documents": [
      {
        "location": "<DOCUMENT-NAME>",
        "language": "<LANGUAGE-CODE>",
        "dataset": "<DATASET>",
        "classes": [
          {
            "category": "Class1"
          },
          {
            "category": "Class2"
          }
        ]
      },
      {
        "location": "<DOCUMENT-NAME>",
        "language": "<LANGUAGE-CODE>",
        "dataset": "<DATASET>",
        "classes": [
          {
            "category": "Class2"
          }
        ]
      }
    ]
  }
}