本記事では、Azure Machine Learning(以下、AML)のPrompt Flowにある、評価フローの基本的な使い方について解説します。
評価フローを使用することによって、作成したフローの精度評価を簡単に行うことが可能になります。
AML Prompt Flow
AML Prompt Flowは、Microsoft公式サイトで以下のように説明されています。
AML Prompt Flow は、大規模言語モデル (LLM) によって動作する AI アプリケーションの開発サイクル全体を合理化するために設計された開発ツールです。 LLM ベースの AI アプリケーションの勢いが世界中で拡大し続ける中、AML Prompt Flowは、AI アプリケーションのプロトタイプ作成、実験、反復、デプロイのプロセスを簡素化する包括的なソリューションを提供します。 learn.microsoft.com
ここでは、このPrompt Flowの機能の一部である評価フローを使用して、精度の評価を行います。
評価するフローの準備
初めに、評価対象とするフローを作成する必要があります。
ここからは、Machine Learning Studio を開いて操作していきます。
接続とランタイムの作成
フローの中で Azure OpenAI のモデルを使用するための接続と、フローを実行するためのランタイムを作成します。
ここでは詳細な作成方法は省きますので、以下の記事を参考に作成してください。 blog.jbs.co.jp
フローの作成
評価するためのフローを作成します。
フロータブに移動して、作成を押下します。新しいフローの作成というウィンドウが開くので、Chat with Wikipedia をクローンします。
このフローは、質問した内容に関する情報を Wikipedia からクロールしてきて、その情報を基に ChatGPT に回答させるというものです。
ここでは、このフローの回答精度を評価します。
精度評価に用いるデータセット
フローの精度評価には、フローに適したデータセットを用意する必要があります。ここで評価するフローは、質問をインプットとして、その質問の回答をアウトプットするというフローです。
したがって、必要な項目は、「質問」「質問に対する回答」の2つになります。
データセットの作成
通常であれば、データセットは評価対象の技術を使用して作成するものではないのですが*1、ここではPrompt Flowの評価フローを実行してみることが目的なので、ChatGPT を使用してデータセットを作成します。
データセットの作成に使用したプロンプトは以下の通りです。このプロンプトは、トークン制限対策として20件だけ作成するように指示しています。
精度評価のためのデータセットを20件作成してください。 必要な項目は、「id」「question」「ground_truth」です。 以下に例を示すので参考にしてください。 """ id,question,ground_truth 001,日本の江戸時代について教えてください。, 日本の歴史の一時期で、1603年から1868年までの約260年間にわたり、徳川将軍家が政権を握っていた時代です。 002,マグネットとは何ですか?, マグネットは、鉄や他の特定の物質と相互作用する力を持つ物質です。磁石としても知られており、磁力を発生し、他の物体を引き寄せることができます。 """
以下に、作成されたデータセットを一部抜粋します。ここでは、上記のプロンプトを5回使用して、合計100件のデータを作成しました。
id,question,ground_truth 001,日本の江戸時代について教えてください。, 日本の歴史の一時期で、1603年から1868年までの約260年間にわたり、徳川将軍家が政権を握っていた時代です。 002,マグネットとは何ですか?, マグネットは、鉄や他の特定の物質と相互作用する力を持つ物質です。磁石としても知られており、磁力を発生し、他の物体を引き寄せることができます。 003,フランス革命とは何ですか?, フランス革命は1789年から1799年にかけてフランスで起こった大規模な社会的・政治的な変革です。フランス社会の不平等と不満により始まり、王政を転覆させ、共和政を確立しました。 004,エジプトのピラミッドはどのように建造されましたか?, エジプトのピラミッドは、巨大な石を積み重ねることによって建造されました。労働者たちは石を切り出し、組み立てるための大規模な作業を行いました。ピラミッドはエジプトのファラオの墓として使われました。 005,テクノロジーの進歩が社会にどのような影響を与えましたか?, テクノロジーの進歩は社会に多くの影響を与えました。例えば、コミュニケーションの改善、情報のアクセスの容易さ、効率の向上、新たな産業の創造などがあります。また、生活の質の向上や医療の進歩などもテクノロジーの進歩によってもたらされました。
最後に、生成されたデータセットをcsv形式のファイルとして保存します。
データセットのマウント
作成したデータセットをPrompt Flowで使用するために、Azure 上にアップロードしていきます。
左側のタブからデータを選択して、作成を押下します。そのあとは、流れに沿って作成したデータセットをアップロードしてください。
フローの精度評価
これから精度評価を行っていきます。まず、左側のタブからプロンプトフローを選択して、作成したフローを開いてください。
設定
以下のような画面が開くので、ランタイムに先ほど作成したものを選択します。
次に、ChatGPT を使用するための接続を設定します。「extract_query_from_question」を選択して、先ほど作成した接続を指定します。deployment_name は任意のデプロイモデルを使用してください。同じように、「augmented_chat」の方も設定します。
これで、このフローを実行する準備が完了しました。右上のチャットから、質問を投げることで回答を確認することができます。
バッチ実行 & 精度評価
右上の評価から精度評価を行っていきます。
実行表示名は任意に設定して、次へを押下します。
ランタイム、データは先ほど作成したものを選択します。入力マッピングは、「chat_history」は[]
、「question」は${data.question}
として、次へを押下します。
- chat_history は、バッチ実行では関係ないため常に空のリストを指定します。
- question は、データセットの question 列を参照しています。
評価実行の選択は、「QnA GPT Similarity Evaluation」「QnA Ada Similarity Evaluation」を選択して、次へを押下します。
2つの評価方法の違い
手法 | メトリック | 評価方法 | スコア値 |
---|---|---|---|
QnA GPT Similarity Evaluation | GPT類似性 | GPTモデルを使用して、データセットの教師データと、モデルが予測した回答の類似性を測定する | 1~5の整数値 |
QnA Ada Similarity Evaluation | Ada類似性 | Ada embeddingを使用して、データセットの教師データとモデルが予測した回答のベクトルを計算し、それらのコサイン類似度を計算する | 0~1の実数値 |
ここでは、例として上記の2つの評価フローを使用しますが、他にも多くの組み込み評価フローがあります。詳しくは以下の記事を参考にしてください。
それぞれの評価方法の設定を行います。評価用のデータ資産の選択はアップロードしたデータセットを選択します。ground_truth は${data.ground_truth}
、answerは${run.outputs.answer}
とします。同様に「QnA GPT Similarity Evaluation」の設定も行って次へを押下します。
最後に、送信を押下すると、バッチ実行と評価が開始されます。
結果
実行結果は、上のバッチ実行の表示から見ることができます。
得られた列の説明
- chat_history:チャット履歴(今回は空のリストを指定したので何もありません)
- question:質問
- 状態:実行状態
- answer:生成された回答
- ground_truth:教師データ(正解の回答)
- ***_similarity:精度の評価値
QnA GPT Similarity Evaluation
得られた結果をいくつか抜粋して、評価が適切にできているか確認してみます。
#4 と #5 は正しい回答ができていないので、「1」「2」という低い値が出てきているのに対して、#6 は教師データと同じような内容を回答できているので、高い値になっているのがわかります。
QnA Ada Similarity Evaluation
こちらも同様に、結果をいくつか抜粋して、評価が適切かどうか確認してみます。
Ada の場合も同様に、#4、#5 は値が低く、#6 は値が高くなっているのがわかります。
おわりに
本記事では、Azure Machine Learning の Prompt Flow にある、評価フローの実行方法について解説しました。
ここでは例として、「QnA GPT Similarity Evaluation」「QnA Ada Similarity Evaluation」を使用して精度評価を行いましたが、組み込みの評価フローは他にも多くあります。
また、評価フローをカスタマイズすることも可能なので、組み込みの評価フローでは精度評価できない場合は、カスタマイズしてみてください。
*1:正しい精度が得られないため