Power Apps での AI Builder モデルの使用

オープンソースのローコード フォーミュラである Power Fx を利用することで、Power App により強力かつ柔軟に AI モデルの統合を追加することができます。 AI モデルの予測式は、Canvas アプリのあらゆるコントロールと統合することができます。 たとえば、以下のコントロールの存在するモデルを使用する セクションのように、テキスト入力コントロールのテキストの言語を検出し、その結果をラベル コントロールに出力することができます。

要件

AI Builder モデルで Power Fx を使用するには、次のものが必要です。

キャンバス アプリでモデルを選択する

Power Fx で AI モデルを使用するには、キャンバス アプリを作成し、コントロールを選択して、コントロールのプロパティに式を割り当てる必要があります。

Note

利用できる AI Builder モデルのリストについては、AI モデルとビジネス シナリオ をご参照ください。 独自のモデルを導入する 機能を使用して、Microsoft Azure 機械学習に内蔵されたモデルを使用することもできます。

  1. アプリを作成します。 詳細については、ゼロからキャンバス アプリを作成するを参照してください。

  2. データ>データの追加>AI モデル を選択します。

    モデルの選択方法のスクリーンショット。

  3. 追加する 1 つ以上のモデルを選択します。

    このリストにモデルが表示されない場合は、Power Apps でモデルを使用するアクセス許可がない可能性があります。 管理者に問い合わせてこの問題を解決してください。

コントロールの存在するモデルを使用する

Canvas アプリに AI モデルを追加したところで、コントロールから AI Builder モデルを呼び出す方法を見てみましょう。

次の例では、ユーザーがアプリに入力した言語を検出できるアプリを作成します。

  1. アプリを作成します。 詳細については、ゼロからキャンバス アプリを作成するを参照してください。

  2. データ>データの追加>AI モデル を選択します。

  3. 言語検出 AI モデルを検索して選択します。

    言語検出モデルのスクリーンショット。

    Note

    環境をまたいでアプリを移動する際には、新しい環境で再度手動でアプリにモデルを追加する必要があります。

  4. 左側のペインから + を選択し、続いて テキスト入力 コントロールを選択します。

  5. 前述の手順を繰り返して、テキスト ラベルコントロールを追加します。

  6. テキスト ラベルの名前を Language に変更します。

  7. 「言語」ラベルの隣に、別のテキストラベルを追加します。

    テキストと両方のラベル コントロールを含むアプリ コントロール。

  8. 前述の手順で追加したテキスト ラベルを選択します。

  9. テキストラベルの テキスト プロパティの数式バーに、以下の数式を入力します。

    'Language detection'.Predict(TextInput1.Text).Language
    

    ラベルは、ロケールに応じた言語コードに変更されます。 たとえば、en (英語) です。

    言語式は、ラベル テキストを変更します。

  10. 画面右上の 再生 ボタンを選択すると、アプリのプレビューが表示されます。

    アプリをプレビューします。

  11. テキスト ボックスに、bonjour と入力します。 テキスト ボックスの下にフランス語の言語 (fr) が表示されていることに注意してください。

    フランス言語検出の例。

  12. 同様に、他の言語のテキストも試してみてください。 たとえば、guten tag と入力すると、検出された言語がドイツ語の de に変わります。

ベスト プラクティス

  • AI Builder クレジットを効率的に使用するために、テキスト入力の OnChange アクションではなく、ボタンによる OnClick アクションのような特異なアクションからモデル予測をトリガーすることを試してみてください。

  • 時間とリソースを節約するには、モデル呼び出しの結果を保存して、複数の場所で使用できるようにします。 出力をグローバル変数に保存できます。 モデル結果を保存した後、アプリ内の他の場所で言語を使用すると、識別された言語とその信頼度スコアを 2 種類のラベルで表示することができます。

    Set(lang, 'Language detection'.Predict("bonjour").Language)
    

モデルタイプ別インプットとアウトプット

このセクションでは、モデル タイプごとにカスタム モデルとビルド済みモデルの入力と出力を提供します。

カスタム モデル

モデル タイプ 構文 出力
カテゴリ分類 'Custom text classification model name'.Predict(Text: String, Language?: Optional String) {AllClasses: {Name: String, Confidence: Number}[],TopClass: {Name: String,Confidence: Number}}
エンティティの抽出 'Custom entity extraction model name’.Predict(Text: String,Language?:String(Optional)) {Entities:[{Type: "name",Value: "Bill", StartIndex: 22, Length: 4, Confidence: .996, }, { Type: "name", Value: "Gwen", StartIndex: 6, Length: 4, Confidence: .821, }]}
物体検出 'Custom object detection model name'.Predict(Image: Image) { Objects: { Name: String, Confidence: Number, BoundingBox: { Left: Number, Top: Number, Width: Number, Height: Number }}[]}

事前構築済みモデル

注意

事前構築済みのモデル名は、環境のロケールで表示されます。 次の例は、英語 (en) のモデル名を示しています。

モデル タイプ 構文 出力
ビジネス カード リーダー ‘Business card reader’.Predict( Document: Base64 encoded image ) { Fields: { FieldName: { FieldType: "text", Value: { Text: String, BoundingBox: { Top: Number, Left: Number, Height: Number, Width: Number }}}}}
カテゴリ分類 'Category classification'.Predict( Text: String,Language?: Optional String, ) { AllClasses: { Name: String, Confidence: Number }[], TopClass: { Name: String, Confidence: Number }}
ID ドキュメント リーダー ‘Identity document reader’.Predict( Document: Base64 encoded image ) { Context: { Type: String, TypeConfidence: Number }, Fields: { FieldName: { FieldType: "text", Confidence: Number, Value: { Text: String, BoundingBox: { Top: Number, Left: Number, Height: Number, Width: Number }}}}}
請求書処理 ‘Invoice processing’.Predict( Document: Base64 encoded image ) { Fields: { FieldName: { FieldType: "text" | "date" | "number", Confidence: Number,Value: { Text: String, [Date: Date] | [Number: Number], BoundingBox: { Top: Number, Left: Number, Height: Number, Width: Number } } } }, Tables: { Items: { Rows: { FieldName: { FieldType: "text" | "date" | "number", Confidence: Number, Key: { Name: String, }, Value: { Text: String, [Date: Date] | [Number: Number], BoundingBox: { Top: Number, Left: Number, Height: Number, Width: Number } } } }[] } }}
キー フレーズ抽出 'Key phrase extraction'.Predict(Text: String, Language?: Optional String)) { Phrases: String[]}
言語検出 'Language Detection'.Predict(Text: String) { Language: String, Confidence: Number}
領収書の処理中 ‘Receipt processing’.Predict( Document: Base64 encoded image) { Context: { Type: String, TypeConfidence: Number }, Fields: { FieldName: { FieldType: "text" | "date" | "number", Confidence: Number, Value: { Text: String, [Date: Date] | [Number: Number], BoundingBox: { Top: Number, Left: Number, Height: Number, Width: Number } } } }, Tables: {Items: {Rows: {FieldName: { FieldType: "text" | "date" | "number", Confidence: Number, Key: { Name: String, }, Value: { Text: String, [Date: Date] | [Number: Number], BoundingBox: { Top: Number, Left: Number, Height: Number, Width: Number } } } }[] } } }
センチメント分析 'Sentiment analysis'.Predict( Text: String, Language?: Optional String ) { Document: { AllSentiments: [ { Name: "Positive", Confidence: Number }, { Name: "Neutral", Confidence: Number }, { Name: "Negative", Confidence: Number } ], TopSentiment: { Name: "Positive" | "Neutral" | "Negative", Confidence: Number } } Sentences: { StartIndex: Number, Length: Number, AllSentiments: [ { Name: "Positive", Confidence: Number }, { Name: "Neutral", Confidence: Number }, { Name: "Negative", Confidence: Number } ], TopSentiment: { Name: "Positive" | "Neutral" | "Negative", Confidence: Number } }[]}
テキスト認識 'Text recognition'.Predict( Document: Base64 encoded image) {Pages: {Page: Number,Lines: { Text: String, BoundingBox: { Left: Number, Top: Number, Width: Number, Height: Number }, Confidence: Number }[] }[]}
テキスト翻訳 'Text translation'.Predict( Text: String, TranslateTo?: String, TranslateFrom?: String) { Text: String, // Translated text DetectedLanguage?: String, DetectedLanguageConfidence: Number} }

使用例

どのモデルも predict 動詞を使って呼び出されます。 たとえば、言語検出モデルは入力としてテキストを受け取り、その言語のスコア順に並べられた考えられる言語のテーブルを返します。 スコアは、モデルが予測にどれだけ信頼度があるかを示します。

入力 出力
'Language detection'.Predict("bonjour") { Language: “fr”, Confidence: 1}
‘Text Recognition’.Predict(Image1.Image) { Pages: [ {Page: 1, Lines: [ { Text: "Contoso account", BoundingBox: { Left: .15, Top: .05, Width: .8, Height: .10 }, Confidence: .97 }, { Text: "Premium service", BoundingBox: { Left: .15, Top: .20, Width: .8, Height: .10 }, Confidence: .96 }, { Text: "Paid in full", BoundingBox: { Left: .15, Top: .35, Width: .8, Height: .10 }, Confidence: .99 } } ] }

参照