ゴールデンデータセットによるカスタム Copilot の品質評価の導入

Microsoft では皆さんが開発した独自のカスタム Copilot つまり LLM アプリケーションの品質評価を行うための様々なベストプラクティスを公開しています。その中の一つが、ゴールデンデータセットを準備して継続的に LLM アプリケーションを評価する仕組みの導入です。

次々と新モデルの発表が続く中、ゴールデンデータセットを1つ用意しておき、さらに自動評価ワークフローを構築・運用しておけば、毎度評価するエンジニアの負荷を軽減させる助けになるかと思います。

# ゴールデンデータセット
「ゴールデンデータセット」は、LLM を活用した Copilot の品質保証を提供するために使用される、**現実的なユーザーの質問と専門家の回答を集めたもの**です。

ゴールデンデータセットは、LLM から返される応答の品質を評価するためだけに使用されるデータです。これは、LLM をトレーニングまたはファインチューニングしたり、プロンプトにコンテキストを挿入したりするためのソースデータとしては使用できません。ゴールデンデータセットを使用すると、LLM がユーザーの質問にどの程度適切に応答しているかについてのインサイトを得ることができます。これは、コード内の単体テストで期待どおりに動作することを確認する方法と比較でき、動作が逸脱したり失敗したりした場合に通知を受け取ることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/ba248453-54fd-e8a9-fb89-ddb3a6c0646e.png)

# 構成例
- `question`: 必須。実際のユーザーからの質問（をシミュレートしたもの）
- `answer(ground_truth)`: 必須。専門家が作成した回答
- `context`: オプション。RAG を使用する場合のコンテキスト

# データ量
ドメインに関して統計的に関連する数値を取得するには、ドメインに応じて少なくとも 100 個の質問と回答のペアのデータセットが必要です。大規模なドメインの場合は 150 を目指すことが良いとされています。

# 評価方法
評価についてはゴールデンデータセット内の各質問を 1 つ以上の LLM に送信し、Copilot の回答と専門家の回答を比較することによって行います。それらが類似している場合、LLM の品質は高くなっています。そうでない場合は、LLM またはそのパラメータのいずれかを調整するか、評価対象の LLM から除外する必要が出てくる可能性があります。現実的には、プロンプトエンジニアリングや RAG の精度チューニングなどを実施します。

# 評価メトリクス
- QnA GPT Similarity Evaluation： 推奨目標: 3+
- QnA Relevance Scores Pairwise Evaluation: 推奨目標: 60+
- QnA Groundedness Evaluation: 推奨目標: 3+
など。Coherence と Fluency はほぼ 5 になってしまうので除外することが多いです。また、プロンプトベースのメトリクスは数値が実行ごとに変わる可能性があるのでその点も注意が必要です（複数回の平均を取る等）。類似性はコサイン類似度を利用したり、より堅牢なメトリクスと組み合わせて利用したいです。

https://qiita.com/nohanaga/items/b68bf5a65142c5af7969

# 評価ツール
[Azure AI Studio](https://azure.microsoft.com/products/ai-studio) のプロンプトフローを使ってゴールデンデータセットの評価を行います。例えば `gpt-35-turbo` と `gpt-4-0125-preview` の比較を行います。

1. 評価対象のフローにバリアント 1 として `gpt-35-turbo` を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/1a422393-b943-889e-6683-4956eb008305.png)
1. バリアント 2 として `gpt-4-0125-preview` を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/cdda1526-2b6b-a606-7f29-aaab310eb9e1.png)
1. カスタム評価を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/5b87eb85-d3c8-ba0a-7fd3-bb67e6a8b5ba.png)
1. バリアントを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/7a345455-3ea8-40ba-abe1-3a0ccdda6a8f.png)
1. 評価メトリクスを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/a950adf9-b8c5-f58a-6369-ebfabd5a24c1.png)
1. 評価用データのマッピング。質問と正解をゴールデンデータセットから、回答をフローからの出力にセットする。評価に使用するモデルもここでセット。（評価基準をずっと統一できるモデルを使いたい…）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/b1e0ec09-4a8a-5c74-bee7-cb0d2487f895.png)
1. 評価結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/674344/e39aaa22-9cfd-f66f-9438-a103968659f5.png)

プロンプトフローを用いることで異なるモデル同士でも横軸で比較できます。ゴールデンデータセットは、初期段階のテストのみで使用されるだけではなく、グラウンディングに利用するソースデータ（コンテキスト）、LLM のバージョン、プロンプトの構築方法が変化するにつれて、生成された回答の品質を継続的に比較できます。

# LLMOps, プロンプトフローのコードファースト解説
プロンプトフローは画面 UI だけではありません。**CLI, SDK が提供されています**。

https://youtu.be/tVnj-Weas5E?feature=shared&t=4302

# 参考
https://learn.microsoft.com/azure/machine-learning/prompt-flow/how-to-bulk-test-evaluate-flow

https://github.com/microsoft/promptflow-resource-hub/blob/main/sample_gallery/golden_dataset/copilot-golden-dataset-creation-guidance.md