カスタムモデルを作成し、ナレッジベースに統合する方法を説明します。
注意: GeneXus 16 Upgrade 6 では、カスタムモデルは 画像分類問題にのみ使用できます。しかし、ここで説明するプロセスは一般的で、任意の 予測問題に適用できるものになっています (住宅の特徴に基づく価格の予測など)。今後、より多くのシナリオがサポートされる予定です。
人工知能 (AI) のモデルを作成するときは、経験に基づく予測の方法をコンピューターに「教える」ことになります。ここでいう経験とは過去のデータを意味します。コンピューターはこのデータからパターンを導き出し、それを新しい (未知の) データに適用して一定の確度で推論を行います。学習プロセスには主に 2 つの段階があります: トレーニング (データを確認して学習) とテスト (モデルの動作の評価) です。
注: 人間にとって不可能な推論はカスタムモデルにも不可能です。したがって、特定の入力 (オーディオ、画像、テキスト、ビデオなど) にタグを割り当てるよう人を訓練できない場合は、コンピューターに同じ、あるいはそれ以上の作業ができると期待しないでください。
カスタムモデルの作成と使用のサイクルを図 1 に示します。
最初に、モデルのトレーニング用にタグ付きデータを入手する必要があります。データセットは、図 2 に示すようにトレーニング用セット (80%) とテスト用セット (20%) に 2 分割すると役立つ場合があります。分割しない場合、データセットはプロバイダーによって自動的に分割されます。
次に、モデルの動作に満足できるまでモデルのトレーニングとテストを繰り返します (「評価の重要性」のセクションを参照)。十分なスコアに達したらデプロイできます。
最後に、デプロイしたモデルを使用して、新しいデータの入力と予測が可能になります (必要に応じてモデルの削除や再トレーニングも可能)。
次の作業を行います:
- 目的に応じたデータを入手します (犬や猫の画像など)。
- 出力クラスを選択します ('dog'、'cat' など)。
- データのタグ付けを行います ("image1.jpg > dog"、"image2.png > cat" など)。
この作業の完了後、トレーニング用データセットが完成します。
注: ヒントとベストプラクティスは次のとおりです。
1. トレーニング用データは、予測を行うデータとできるだけ似ているものにします。
2. 予測したいクラスごとに少なくとも 10 件のサンプルを用意し (推奨は 1 クラスあたり 1,000 サンプル)、テスト用と検証用を少なくとも 1 件ずつ含めます。
3. 頻度の低いクラスは避けるようにします (一般的なクラスに加えるか、破棄します)。
4. その他のカテゴリとして NONE というタグを含め、モデルの動作を高めます。
次の作業を行います:
- 入力データセットを使用してモデルのトレーニングを行います (非同期処理は長時間がかかる可能性があります)。
- モデルをテストし、期待どおりの動作をするかどうかを判断します。
- モデルをデプロイして使用します。
この 3 つのステップは次の 2 とおりの方法で行うことができます:
A) プロバイダーのバックオフィスを使用する
- プロバイダーのバックオフィスにアクセスします。
- 条件に従ってデータセットをアップロードします。
- トレーニングを開始します。
- トレーニングが完了したら、評価指標を確認します。
- 問題がなければモデルをデプロイします。
- モデルの識別子、バージョン、資格情報を入手します。
B) SDK (Standard Development Kit) を使用する
- GeneXusAI.Custom モジュール (または正式な SDK) をトレーニング、テスト、デプロイのプロセスに使用します。
- モデルの識別子、バージョン、資格情報を入手します。
(B) の方法で GeneXusAI.Custom モジュールを使用する場合は、図 1 に示すフローチャートの実装例として次のコードを使用できます (&definition 変数のロードについては、こちらの例を参照してください)。
//トレーニングプロセスのトリガー
&model = GeneXusAI.Custom.Train(&definition, &provider, &Messages)
//進捗の確認
do while True
&ret = sleep(60) // wait 1 min until re-poll
&state = GeneXusAI.Custom.Check(&model,&provider,&Messages)
if &state <> GeneXusAI.Custom.State.Training OR &Messages.Count > 0
exit //ループのブレーク
endIf
endDo
//モデルの評価
&Measure = GeneXusAI.Custom.Evaluate(&model, &provider, &Messages)
if &Measure.Score < 0.85 //しきい値
return
endIf
//モデルのデプロイ
GeneXusAI.Custom.Deploy(&model, &provider, &Messages)
この作業の完了後、カスタムモデルへの参照を取得します。
注: ヒントとベストプラクティスは次のとおりです。
1. モデルはデプロイ前に必ず評価するようにします。
2. モデルが予期しない値を予測する場合は、トレーニング用データを再度チェックします。
3. 高い適合率が、優れた予測を保証するものではありません。モデルに 過剰適合の問題がある可能性もあります。
次の作業を行います:
- モデルのプロパティをプロバイダーにロードします (識別子、バージョン、資格情報)。
- GeneXusAI の適切なタスクを呼び出します。
たとえば、モデルに対して画像分類のトレーニングを行った場合は、Classify プロシージャーを呼び出します。GeneXusAI.Custom モジュールを使用してトレーニングを行った場合は Predict プロシージャーを呼び出します。
- 新しいデータで予測を開始します。
このようにシンプルです。
次の 2 つのクラスを区別する分類器のトレーニングを想定します:
分類器では実際の値を予測できることが理想です (つまり、実際に P の場合に P と予測し、N の場合は N と予測する)。この概念を図 3a に示します。しかし、偏ったデータ (現実世界のデータ) を使用してモデルをトレーニングするため、理想どおりにいかないこともあります。この場合、実際の分類器は、期待する分類器から逸脱します (図 3b を参照)。
モデルは新しいデータ (トレーニング中は未知) の値に対する予測に使用するため、この逸脱は問題にならないことを考慮に入れるようにします。そうしないと、過剰適合の問題が生じる可能性があります。重要なのは、モデルが期待から「どの程度逸脱しているか」です。
モデルを評価するとき、結果は次の 4 つのいずれかになります:
- 真陽性 (TP)
正しく正と分類された値の数。
- 真陰性 (TN)
正しく負と分類された値の数。
- 偽陽性 (FP)
誤って正と分類された負の値の数。
- 偽陰性 (FN)
誤って負と分類された正の値の数。
これらの値により、混同行列が決まります。そしてそこから、モデルの動作を評価するための計算が可能です。たとえば、特によく使用する指標は次のように計算されます:
- 正解率 (ACC)
ACC = |
TP + TN |
TP + TN + FP + FN |
- 適合率 (P)
- 再現率 (R)
- F1 値 (F1、適合率と再現率の調和平均)
同じ概念を多クラス分類器にも当てはめることができます。正解率 100% が、新しいデータ (未知のデータ) の分類に対するモデルの正しい動作を保証するものではありません。
次に、サポート対象のプロバイダーのオンライントレーニング Web サイト一覧を示します。
- .NET Core ジェネレーターは Google プロバイダーに対応していません。
このドキュメントは、GeneXus 16 Upgrade 6 以降に適用されます。
|