機械学習のカスタム スキル

完了

機械学習カスタム スキルの使用は、他のカスタム スキルを検索インデックスに追加する場合と同じように動作します。

ここでは、AmlSkill カスタム スキルの使用方法の違いを確認し、それを効果的に使用する方法の考慮事項を調べます。

カスタム Azure Machine Learning スキル スキーマ

Azure Machine Learning (AML) カスタム スキルを使用して検索インデックスをエンリッチすると、エンリッチメントはドキュメント レベルで行われます。 ドキュメント インデクサーで使用されるスキルセットには、AmlSkill が含まれている必要があります。 このスキルのスキーマは次のとおりです。

{
      "@odata.type": "#Microsoft.Skills.Custom.AmlSkill",
      "name": "AML name",
      "description": "AML description",
      "context": "/document",
      "uri": "https://[Your AML endpoint]",
      "key": "Your AML endpoint key",
      "resourceId": null,
      "region": null,
      "timeout": "PT30S",
      "degreeOfParallelism": 1,
      "inputs": [
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },
        {
          "name": "field name in the AML model",
          "source": "field from the document in the index"
        },

      ],
      "outputs": [
        {
          "name": "result field from the AML model",
          "targetName": "result field in the document"
        }
      ]
    }

重要

URI には HTTPS エンドポイントを使用する必要があります。 これには、Microsoft によって提供されるマネージド カスタム URL アドレスか、独自のドメイン名と証明書を使用できます。

AML モデルでは一度に 1 つのドキュメントが処理されるため、カスタム スキルには batchSize の設定が含まれないことに注意してください。 スキルのパフォーマンスを制御する残りの設定は timeoutdegreeOfParallelism です。 上記のスキーマでは、タイムアウト値として 30 秒が設定されています。 並列処理の次数は 1 から始まる必要があります。 インフラストラクチャによっては、この数を増やせる場合があります。

AML スキルの効率を管理する最善の方法は、ワークロードを管理するために Kubernetes 推論クラスターを適切にスケールアップすることです。

ドキュメントのインデックスには、AML モデルの結果を格納するためのフィールドが必要です。 次に、出力フィールド マッピングを追加して、カスタム スキル セットの結果をインデックス内のドキュメントのフィールドに格納します。

この出力フィールド マッピングを実行する JSON は次のとおりです。

"outputFieldMappings": [
    {
      "sourceFieldName": "/result field in the document",
      "targetFieldName": "result field from the AML model"
    }
  ]

Azure Machine Learning モデルの作成には、Python SDK、REST API、Azure CLI などの開発者ツールを使用します。 もう 1 つのオプションは、Azure AI Machine Learning スタジオを利用することです。これはコードを記述せずにモデルを作成、トレーニング、デプロイできるグラフィカル ユーザー インターフェイスです。

Azure AI Machine Learning スタジオ モデルを使用して検索インデックスをエンリッチする手順を示す図。

モデルが作成されたら、カスタム検索スキルでそのモデルを使用できるようにするために、それをスコアリング コードから呼び出す方法を変更します。

最後のステップでは、モデルのエンドポイントをホストする Kubernetes クラスターを作成します。

AML ワークスペースを作成する

AML ワークスペースを作成すると、Azure によってストレージ アカウント、キー ストア、およびアプリケーション分析情報のリソースも作成されます。 AML ワークスペースの [概要] ペインに、Azure AI Machine Learning スタジオを起動するためのリンクが表示されます。

Azure Machine Learning スタジオでモデルを作成してトレーニングする

Azure AI Machine Learning スタジオでは、モデルを作成およびトレーニングするパイプラインを、デザイナーのドラッグ アンド ドロップを使用して作成できます。 事前構築済みのテンプレートを使用すれば、モデルの作成はさらに簡単になります。

Azure AI Machine Learning スタジオのすべての事前構築済みコンポーネントのスクリーンショット。

ただし、モデルを作成することを選択した場合でも、モデルは、Web サービスにデプロイできるように Azure AI Machine Learning スタジオに登録する必要があります。

AML カスタム スキルによってモデルを呼び出すことができるようにモデルの動作を変更する

通常、トレーニングするモデルでは、データのさまざまな例が使用されます。 データセットは、行を多数含むことになります。分割して使用することで、モデルのトレーニングおよびテストが行えるようになります。 このデータを処理してモデルに渡すコードは、単一行を処理するように変更する必要があります。

また、モデルからの JSON 応答には、出力予測のみを含める必要があります。

たとえば、データが JSON オブジェクトの配列である場合:

[ 
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    },
    {
        "attribute-1": null,
        "attribute-2": null
    }
]

Python スコアリング コードでは、データを一度に 1 行ずつ処理する必要があります。

data = json.loads(data)
for row in data:
    for key, val in row.items():
        input_entry[key].append(decode_nan(val))

入力データセットを 1 つのレコードに変更するには:

{
    "attribute-1": null,
    "attribute-2": null
}

Python コードを次のように変更する必要があります。

data = json.loads(data)
for key, val in data.items():
    input_entry[key].append(decode_nan(val))

スコアリング コードからの応答の場合、既定のコードによって返されるのは JSON ドキュメント全体です。

return json.dumps({"result": result.data_frame.values.tolist()})

カスタム スキルには、モデルからの 1 つの応答をマップできることが求められます。 したがって、コードからは唯一の最後の属性である JSON が返される必要があります。

output = result.data_frame.values.tolist()
# return the last column of the the first row of the dataframe
return {
    "predicted_outcome": output[0][-1]
}

使用するモデル用のエンドポイントを作成する

モデルはエンドポイントにデプロイされます。 Azure AI Machine Learning スタジオでは、リアルタイム エンドポイント、バッチ エンドポイント、または Web サービスにモデルをデプロイすることがサポートされています。 現時点では、Azure AI 検索内のカスタムの AmlSkill スキルは Web サービス エンドポイントのみをサポートしています。

もう 1 つの制限事項は、エンドポイントは Azure Kubernetes Service (AKS) クラスターでなければならないことです。 コンテナー インスタンスはサポートされていません。

AKS クラスターの作成と管理に関する経験がある場合は、Azure portal でクラスターを手動で作成し、エンドポイントの作成時にそれらを参照することができます。 ただし、Azure AI Machine Learning スタジオでクラスターを自動的に作成して管理できるようにするという、より簡単なオプションもあります。

スタジオのコンピューティング セクションに移動する場合は、推論クラスターを作成できます。 AML スタジオでは次に、クラスターのサイズを選択する方法を案内し、さらに自動的に HTTPS を有効にしてドメイン名を作成します。 location.cloudapp.azure.com:443 の形式になります。

AML カスタム スキルをエンドポイントに接続する

上記のすべてが整った状態で、Azure AI 検索サービスを更新する必要があります。 それを行う手順はこのモジュールで示す例に似ているので、ここでは詳しくは説明しませんが、一連のステップを次に示しておきます。

  1. まず、使用する検索インデックスを強化するには、モデルの出力を含めるために新しいフィールドをインデックスに追加します。
  2. 次に、インデックス スキルセットを更新し、#Microsoft.Skills.Custom.AmlSkill カスタム スキルを追加します。
  3. 次に、カスタム スキルからの出力を、インデックス上に作成したフィールドにマップします。
  4. 最後のステップでは、AML モデルでインデックスを強化するためにインデクサーを再実行します。