QAボットの回答を評価する

Azure AI Search などを利用することで、RAG(検索拡張生成)の構築が簡単になりました。
これをベースとした社内QAボットのようなものを構築されている会社も多いかと思います。
ボットがドキュメントを検索して、それっぽく回答してくれるものの、その回答の精度がどのくらいか評価してみたくなります。回答精度が悪い場合は、チューニングが必要になりますが、人がその都度正解を判定するには大変なので、機械的に判定する仕組みを試してみます。
回答評価の手法はいろいろありますが、今回は Azure AI Studio の評価機能を用いて、回答を評価してみます。
これをベースとした社内QAボットのようなものを構築されている会社も多いかと思います。
ボットがドキュメントを検索して、それっぽく回答してくれるものの、その回答の精度がどのくらいか評価してみたくなります。回答精度が悪い場合は、チューニングが必要になりますが、人がその都度正解を判定するには大変なので、機械的に判定する仕組みを試してみます。
回答評価の手法はいろいろありますが、今回は Azure AI Studio の評価機能を用いて、回答を評価してみます。
評価用のデータを用意する
ボットの回答精度を確認するためには、
「質問」と「ボットの回答」に加えて、「期待する回答」を用意する必要があります。
正解(期待する回答)が無いと、ボットの回答が正しいか判断できないため、最初は正確な回答を用意してあげる必要があります。質問が多くなると大変ですが、2回目以降はボットが出力した回答と合わせて機械的に実行できるため、チューニング後の再評価に役立ちます。
今回は、以下のデータを用意してみました。
ファイル形式は、CSV形式とし、「質問」「ボットの回答」「期待する回答」列を用意します。
評価の違いを見るため、単純な同じ質問文と期待する回答を用意し、ボットの回答だけを変えたパターン用意しました。
1行目は、ヘッダ行です。
【サンプルデータ】
このデータを投入して、評価してみます。
「質問」と「ボットの回答」に加えて、「期待する回答」を用意する必要があります。
正解(期待する回答)が無いと、ボットの回答が正しいか判断できないため、最初は正確な回答を用意してあげる必要があります。質問が多くなると大変ですが、2回目以降はボットが出力した回答と合わせて機械的に実行できるため、チューニング後の再評価に役立ちます。
今回は、以下のデータを用意してみました。
ファイル形式は、CSV形式とし、「質問」「ボットの回答」「期待する回答」列を用意します。
評価の違いを見るため、単純な同じ質問文と期待する回答を用意し、ボットの回答だけを変えたパターン用意しました。
1行目は、ヘッダ行です。
【サンプルデータ】
質問,ボットの回答,期待する回答 今日の天気は?,晴れです。,晴れです。 今日の天気は?,晴れるかもしれません。,晴れです。 今日の天気は?,快晴です。,晴れです。 今日の天気は?,天晴です。,晴れです。 今日の天気は?,雨です。,晴れです。 今日の天気は?,晴れ時々くもりです。,晴れです。 今日の天気は?,雨のちくもりです。,晴れです。 今日の天気は?,雲一つない青空です。,晴れです。 今日の天気は?,どんよりしています。,晴れです。 今日の天気は?,晴れじゃないです。,晴れです。 今日の天気は?,雨じゃないです。,晴れです。 今日の天気は?,雨の反対です。,晴れです。 今日の天気は?,降水確率0%です。,晴れです。 今日の天気は?,降水確率90%です。,晴れです。 今日の天気は?,私は元気です。,晴れです。
このデータを投入して、評価してみます。
評価を実行する
Azure AI Studio で評価するための設定は、以下の通りです。
※本記事は、2024/10/28 時点で Azureの機能をもとに作成しています。
(1) Azure AI Studio を開き、使用するプロジェクトを選択します。
※Azure AI Studio を使用するためにはプロジェクトの作成が必要です。
(参考)Azure AI Studio でプロジェクトを作成する
(2) 「評価」をクリックします。
(3) 「New evaluation」をクリックし、新しい評価の定義を作成します。
(4) 評価のタイプを選択します。今回は用意したCSVファイルのデータを評価するため「Dataset」を選択します。
(5) 評価の基本情報を設定します。評価名は自動で名称が設定されるため、そのまま進められますが、分かりづらいため別の名称を入力し、「次へ」をクリックします。
(6) 評価するデータセットを選択します。今回は初めてのため、「データセットの追加」をクリックし、下部に表示される「ファイルをアップロードする」で用意したファイルをアップロードします。
ファイル形式は、記載の通り「CSV」または「JSONL」形式のみが有効となります。今回はCSV形式のデータを用意していますので、CSVファイルをアップロードします。
拡張子も見ているようなので、ファイルの内容がCSV形式であっても、[.txt」などのファイルをアップロードするとエラーになってしまいます。ご注意ください。
例)拡張子が [.txt] のファイルをアップロードした場合
正しくアップロードされると、以下のように先頭の数行が表示されます。
CSVファイルの項目中に改行が含まれる場合は、現時点で対応していないようです。改行を含むカラムを "" で囲った状態でも正しく取り込まれません。
この場合、取込みエラーとならないことにご注意ください。プレビュー表示される先頭の方に該当行があれば良いですが、表示されない箇所に改行を含む行がある場合は、見落とすかもしれません。
(参考)改行コードを含むカラムがあるCSVファイルのアップロード時
(7) 評価する項目を選択します。
「質問文」「ボットの回答」「期待する回答」の3つの項目で評価できるメトリックは、「コヒーレンス」「流暢性」「GPTの類似性」「F1スコア」になります。
「根拠性」「関連性」については、追加の情報(context)が必要となるため、今回は無視します。
各メトリックの概要は、画面にも記載されていますが以下のようになります。
入力できたら、「次へ」をクリックします。
(8) これまでに設定した内容を確認し、「送信」をクリックします。
(9) テストの評価が開始されます。用意したデータ数により変わってきますが、時間がかかるため完了するまで待ちます。
(10) 処理が完了すると [Status] が [完了] になり、下部に結果が表示されます。
スコアの分布を示したグラフがダッシュボード欄に表示され、下部に評価の詳細が表示されます。各メトリックのスコアは、赤枠部分に記載されています。
QESでは、「AIチャットボット構築サービス」をはじめとして、各AIサービスを利用したシステム導入のお手伝いをしております。それ以外でも様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度 お問い合わせ ください。
※本記事は、2024/10/28 時点で Azureの機能をもとに作成しています。
(1) Azure AI Studio を開き、使用するプロジェクトを選択します。
※Azure AI Studio を使用するためにはプロジェクトの作成が必要です。
(参考)Azure AI Studio でプロジェクトを作成する
(2) 「評価」をクリックします。
![]() |
(3) 「New evaluation」をクリックし、新しい評価の定義を作成します。
![]() |
(4) 評価のタイプを選択します。今回は用意したCSVファイルのデータを評価するため「Dataset」を選択します。
![]() |
(5) 評価の基本情報を設定します。評価名は自動で名称が設定されるため、そのまま進められますが、分かりづらいため別の名称を入力し、「次へ」をクリックします。
![]() |
(6) 評価するデータセットを選択します。今回は初めてのため、「データセットの追加」をクリックし、下部に表示される「ファイルをアップロードする」で用意したファイルをアップロードします。
ファイル形式は、記載の通り「CSV」または「JSONL」形式のみが有効となります。今回はCSV形式のデータを用意していますので、CSVファイルをアップロードします。
拡張子も見ているようなので、ファイルの内容がCSV形式であっても、[.txt」などのファイルをアップロードするとエラーになってしまいます。ご注意ください。
例)拡張子が [.txt] のファイルをアップロードした場合
![]() |
正しくアップロードされると、以下のように先頭の数行が表示されます。
![]() |
CSVファイルの項目中に改行が含まれる場合は、現時点で対応していないようです。改行を含むカラムを "" で囲った状態でも正しく取り込まれません。
この場合、取込みエラーとならないことにご注意ください。プレビュー表示される先頭の方に該当行があれば良いですが、表示されない箇所に改行を含む行がある場合は、見落とすかもしれません。
(参考)改行コードを含むカラムがあるCSVファイルのアップロード時
![]() |
(7) 評価する項目を選択します。
「質問文」「ボットの回答」「期待する回答」の3つの項目で評価できるメトリックは、「コヒーレンス」「流暢性」「GPTの類似性」「F1スコア」になります。
「根拠性」「関連性」については、追加の情報(context)が必要となるため、今回は無視します。
各メトリックの概要は、画面にも記載されていますが以下のようになります。
メトリック | 説明 |
---|---|
コヒーレンス | 生成されたテキストの一貫性と自然性を評価します。これは、言語モデルが、スムーズに流れ、自然に読み取られ、人間のような言語に似た出力を生成できる程度を測定します。 評価に必要な項目:query / response |
流暢性 | 生成的 AI の予測された回答の言語能力を評価するために使用されるメトリックです。生成されたテキストが文法規則、構文構造、ボキャブラリの適切な使用方法にどの程度準拠しているかを評価し、言語的に正しく自然に聞こえる応答を生成します。 評価に必要な項目:query / response |
GPTの類似性 | 正解の文 (またはドキュメント) と AI モデルによって生成された予測文の類似性を定量化する測定値です。これは、最初に埋め込み API を使用して文レベルの埋め込みを計算し、正解とモデルの予測の両方を計算することによって計算されます。これらの埋め込みは、文の高次元ベクトル表現を表し、セマンティックな意味とコンテキストを捉えています。 評価に必要な項目:query / response / ground_truth |
F1スコア | 生成された文章と期待する回答の間で共有している単語数の割合を測定します。 評価に必要な項目:response / ground_truth |
※ 今回の記事中の表記では、query=質問文、response=ボットの回答、ground_truth=期待する回答 となります。
ボットの回答と期待する回答の差異を比較しますので、今回は「GPTの類似性」の評価に着目します。
評価項目では、Azure OpenAIも使用しますので、Azure OpenAI 欄には 作成済の Azure OpenAIリソースとデプロイ名を選択してください。
今回は、GPT-4o モデルを使用して評価を進めます。
データソース(取り込んだCSVデータファイル)の項目は、内部的な項目と対応付ける必要があります。対応付けは、画面下部に表示されているマップ設定で行います。
今回の場合は、以下でマッピングします。
query | 質問 |
response | ボットの回答 |
ground_truth | 期待する回答 |
入力できたら、「次へ」をクリックします。
![]() |
(8) これまでに設定した内容を確認し、「送信」をクリックします。
![]() |
(9) テストの評価が開始されます。用意したデータ数により変わってきますが、時間がかかるため完了するまで待ちます。
![]() |
(10) 処理が完了すると [Status] が [完了] になり、下部に結果が表示されます。
スコアの分布を示したグラフがダッシュボード欄に表示され、下部に評価の詳細が表示されます。各メトリックのスコアは、赤枠部分に記載されています。
![]() |
評価を確認する
評価結果を見てみます。結果は、画面で見るだけでなく「結果のエクスポート」からダウンロードすることができます。
【エクスポートした結果】
ボットの回答と評価項目の「GPT類似性」だけ抜き出してみました。
単純な評価結果ではあるものの、概ね正しそうな評価結果となりました(人によって評価が分かれるところもあると思いますが…)。
同様に少し複雑な質問を用意して試しました。架空の経費精算システムに対する質問となります。
回答評価は、以下のようになりました。
記載内容によりますが手順的に同等と思われれば、[5] の評価が得られています。
一部情報が欠落していたりすると、少し落ちて「4」になりました。
Azure AI Studio では、もっと複雑だったり、自動化した評価も構築可能ですが、また別の機会にでも試してみたいと思います。
【エクスポートした結果】
inputs.ground_truth,inputs.query,inputs.response,gpt_coherence,gpt_fluency,gpt_similarity,f1_score,index,status "晴れです。","今日の天気は?","晴れです。","5","5","5","1","0","Completed" "晴れです。","今日の天気は?","晴れるかもしれません。","1","5","3","0","1","Completed" "晴れです。","今日の天気は?","快晴です。","5","5","5","0","2","Completed" "晴れです。","今日の天気は?","天晴です。","1","5","1","0","3","Completed" "晴れです。","今日の天気は?","雨です。","1","5","1","0","4","Completed" "晴れです。","今日の天気は?","晴れ時々くもりです。","5","5","3","0","5","Completed" "晴れです。","今日の天気は?","雨のちくもりです。","5","5","1","0","6","Completed" "晴れです。","今日の天気は?","雲一つない青空です。","5","5","5","0","7","Completed" "晴れです。","今日の天気は?","どんよりしています。","1","5","1","0","8","Completed" "晴れです。","今日の天気は?","晴れじゃないです。","1","5","1","0","9","Completed" "晴れです。","今日の天気は?","雨じゃないです。","1","5","1","0","10","Completed" "晴れです。","今日の天気は?","雨の反対です。","1","5","1","0","11","Completed" "晴れです。","今日の天気は?","降水確率0%です。","1","5","2","0","12","Completed" "晴れです。","今日の天気は?","降水確率90%です。","1","5","1","0","13","Completed" "晴れです。","今日の天気は?","私は元気です。","1","1","1","0","14","Completed"
ボットの回答と評価項目の「GPT類似性」だけ抜き出してみました。
ボットの回答 | GPT類似性 | 評価結果を見た筆者の感想 |
---|---|---|
晴れです。 | 5 | 期待する回答通り。 |
晴れるかもしれません。 | 3 | 晴れ要素はあるが、確定的じゃない。 |
快晴です。 | 5 | 言い方違いますが、晴れてますね。 |
天晴です。 | 1 | 会話が成立していない。 |
雨です。 | 1 | 雨ですからね。 |
晴れ時々くもりです。 | 3 | 半分晴れ要素ありなので、妥当? |
雨のちくもりです。 | 1 | 晴れ要素が無い。 |
雲一つない青空です。 | 5 | 意味合い的には、晴れてる。 |
どんよりしています。 | 1 | 曇っているので晴れてない。 |
晴れじゃないです。 | 1 | 否定は拾ってくれた。 |
雨じゃないです。 | 1 | 雨じゃないけど、晴れとは限らない。 |
雨の反対です。 | 1 | 反対が何か分からない。 |
降水確率0%です。 | 2 | 雨が降らないからといって、晴れとは言えない。 |
降水確率90%です。 | 1 | 雨降りそうですからね。 |
私は元気です。 | 1 | 会話が成立していない。 |
単純な評価結果ではあるものの、概ね正しそうな評価結果となりました(人によって評価が分かれるところもあると思いますが…)。
同様に少し複雑な質問を用意して試しました。架空の経費精算システムに対する質問となります。
質問 | 期待する回答 |
---|---|
経費精算システムで、経費を精算する手順を教えてください。 | 以下に経費精算の手順を説明します。 1. 経費精算システムへのログイン: まず、自身のユーザー名とパスワードを使って経費精算システムにログインします。 2. 新規経費精算作成: ダッシュボードから「新規精算」または「新規経費報告」をクリックし、新たな経費を作成します。 3. 経費種別の選択: 画面に表示される経費種別の中から、精算する経費の種類を選択します。例えば、食事代、宿泊費、オフィス用品など。 4. 経費詳細の入力: 選択した経費種別に関する詳細情報を入力します。日付、金額、使用目的などが含まれます。 5. 領収書のアップロード: 購入した商品やサービスの領収書をスキャンまたは写真に撮り、システムにアップロードします。 6. 経費の保存と提出: 全ての情報を入力した後、経費を保存し、精算を申請します。 7. 承認待ち: 申請した経費が承認されるのを待ちます。 8. 承認と返還: 経費が承認されると、指定した口座に返金されます。 |
回答評価は、以下のようになりました。
ボットの回答の設定 | ボットの回答 | GPT類似性 |
---|---|---|
期待する回答と完全一致 | 以下に経費精算の手順を説明します。 1. 経費精算システムへのログイン: まず、自身のユーザー名とパスワードを使って経費精算システムにログインします。 2. 新規経費精算作成: ダッシュボードから「新規精算」または「新規経費報告」をクリックし、新たな経費を作成します。 3. 経費種別の選択: 画面に表示される経費種別の中から、精算する経費の種類を選択します。例えば、食事代、宿泊費、オフィス用品など。 4. 経費詳細の入力: 選択した経費種別に関する詳細情報を入力します。日付、金額、使用目的などが含まれます。 5. 領収書のアップロード: 購入した商品やサービスの領収書をスキャンまたは写真に撮り、システムにアップロードします。 6. 経費の保存と提出: 全ての情報を入力した後、経費を保存し、精算を申請します。 7. 承認待ち: 申請した経費が承認されるのを待ちます。 8. 承認と返還: 経費が承認されると、指定した口座に返金されます。 |
5 |
回答の簡略化(詳細手順の除外) | 以下に経費精算の手順を説明します。 1. 経費精算システムへのログインします。 2. 新規経費精算を作成します。 3. 経費種別を選択します。 4. 経費詳細を入力します。 5. 領収書をアップロードします。 6. 経費申請を保存し提出します。 7. 承認されるのを待ちます。 8. 承認されると返金されます。 |
5 |
回答の簡略化(手順タイトルの削除) | 以下に経費精算の手順を説明します。 1. 自身のユーザー名とパスワードを使って経費精算システムにログインします。 2. 「新規精算」または「新規経費報告」をクリックし、新たな経費を作成します。 3. 画面に表示される経費種別の中から、精算する経費の種類を選択します。 4. 選択した経費種別に関する詳細情報を入力します。日付、金額、使用目的などが含まれます。 5. 購入した商品やサービスの領収書をスキャンまたは写真に撮り、システムにアップロードします。 6. 全ての情報を入力した後、経費を保存し、精算を申請します。 7. 申請した経費が承認されるのを待ちます。 8. 経費が承認されると、指定した口座に返金されます。 |
5 |
領収書提出の欠落 | 以下に経費精算の手順を説明します。 1. 経費精算システムへのログイン: まず、自身のユーザー名とパスワードを使って経費精算システムにログインします。 2. 新規経費精算作成: ダッシュボードから「新規精算」または「新規経費報告」をクリックし、新たな経費を作成します。 3. 経費種別の選択: 画面に表示される経費種別の中から、精算する経費の種類を選択します。例えば、食事代、宿泊費、オフィス用品など。 4. 経費詳細の入力: 選択した経費種別に関する詳細情報を入力します。日付、金額、使用目的などが含まれます。 5. 経費の保存と提出: 全ての情報を入力した後、経費を保存し、精算を申請します。 6. 承認待ち: 申請した経費が承認されるのを待ちます。 7. 承認と返還: 経費が承認されると、指定した口座に返金されます。 |
4 |
経費を交通費に限定 | 1.経費精算システムへログイン: まずは、自身のユーザー名とパスワードを使用して経費精算システムにログインします。 2.新規経費精算作成: ダッシュボードから「新規精算」または「新規経費報告」ボタンをクリックして、新たな精算項目を作成します。 3.経費種別の選択: 画面に表示される経費種別の中から「交通費」を選択します。 4. 経費詳細の入力: 交通費に関する詳細情報を入力します。これには、日付、交通手段(電車、バス、タクシーなど)、出発地と目的地、金額などが含まれます。 5.レシートのアップロード: 交通費のレシートをスキャンまたは写真に撮り、システムにアップロードします。これは、経費が正当であることを証明するために必要です。 6.経費の保存と提出: 全ての情報を入力したら、経費を保存し、精算を申請します。通常は、この申請が承認されると、経費はあなたの口座に返還されます。 7.承認待ち: 経費が承認されるのを待ちます。承認プロセスには時間がかかる場合があります。 8.承認と返還: 経費が承認され、指定された口座に返還されます。 |
5 |
手順は似ているが別システム | 1.売上管理システムへログイン: まずは、自身のユーザー名とパスワードを使用して売上管理システムにログインします。 2.新規売上作成: ダッシュボードから「新規」ボタンをクリックして、新たな売上シートを作成します。 3.売上種別の選択: 画面に表示される売上種別の中から「システムサポート」を選択します。 4.売上詳細の入力: 案件の詳細情報を入力します。これには、日付、内容、売上金額などが含まれます。 5.情報を入力したら、シートを保存し、売上情報を申請します。通常は、この申請が承認されると、売上が確定されます。 6.承認待ち: 売上申請が承認されるのを待ちます。承認プロセスには時間がかかる場合があります。 |
1 |
記載内容によりますが手順的に同等と思われれば、[5] の評価が得られています。
一部情報が欠落していたりすると、少し落ちて「4」になりました。
全く別のシステムの場合は、想定通り [1] がつきました。
このケースにおいては、問題無い評価ができたように思えます。
細かいところでどこまで正確に判断できるか?という課題があるため、どこまでボットの回答をチューニングするか決める必要がありますが、低評価(少なくとも1-2くらいのもの)をリストアップして、集中的にチューニングしていくという手法は取れそうです。
細かいところでどこまで正確に判断できるか?という課題があるため、どこまでボットの回答をチューニングするか決める必要がありますが、低評価(少なくとも1-2くらいのもの)をリストアップして、集中的にチューニングしていくという手法は取れそうです。
おわりに
いかがだったでしょうか。今回は、QAボットの回答を評価する仕組みを試してみました。これは Azure AI Studioにある評価の中で一番単純な機能を実行しただけになりますが、これだけでもQAボットを構築した後の評価サイクルの作業が楽になりそうです。Azure AI Studio では、もっと複雑だったり、自動化した評価も構築可能ですが、また別の機会にでも試してみたいと思います。
QESでは、「AIチャットボット構築サービス」をはじめとして、各AIサービスを利用したシステム導入のお手伝いをしております。それ以外でも様々なアプリケーションの開発・導入を行っております。提供するサービス・ソリューションにつきましては こちら に掲載しております。
システム開発・構築でお困りの問題や弊社が提供するサービス・ソリューションにご興味を抱かれましたら、是非一度 お問い合わせ ください。
※このブログで参照されている、Microsoft、Microsoft 365、Microsoft Copilot for Microsoft 365、Microsoft Teams、Azure OpenAI、その他のマイクロソフト製品およびサービスは、米国およびその他の国におけるマイクロソフトの商標または登録商標です。
※その他の会社名、製品名は各社の登録商標または商標です。