🖋️

Azure AI Foundryを利用した5分でできる生成AI評価方法

2025/01/24に公開

前置き

生成AIの精度評価って難しいですよね?要約、翻訳などのタスクごとに評価指標も違うし、データセットも違うし、そもそも定量評価なんて信用ならん、人の評価が絶対必要って話にもなりがちかなと。

基本的にはロジックで評価する定量評価と人の評価って役割が違うので、社内のユーザーが使う業務マニュアルを使ったチャットボットとかの評価だと、使う人の前提知識、質問の仕方、システムの誘導、回答の精度、回答方法など全部加味して使える使えないかの判断は、人が評価すべきだし、正解が人によって変わるならGood/Badとか、星の数とかで統計的な評価をするしかないかなと。

インデックス更新時やモデル更新時に精度が落ちていないとか、他のモデルとの相対評価がしたいなら、ある程度自動化した定量評価で良いと思います。

で、定量評価しようとなった上で、どんな評価指標が適切かはRAGASのxxxを使うべきだとか、LLMの評価で良いのではないかと言う話になって、そこを擦り合わせていくことが実務的には結構大変な作業だと思います。

そんな前提は置いておいて、まずは評価指標とか決まってないけど、爆速で生成AIの評価をしてみようって話です。

本題

Azure AI Foundryに評価という機能があり、これを使って爆速で生成AIの定量評価をしてみます。

自動評価、手動評価、エバリュエーターライブラリとありますが、自動評価で新しい評価を作成します。

3つある内の「データセット」を選択します。
「既存の出力データセットを評価します。」の記載通り、今回は正解の回答、質問、コンテキスト、生成された回答を用意した状態で、その回答精度の評価をします。

デフォルトで進めないところだけ書くと、次にデータセットの追加をします。

サンプルのjsonlファイルです。内容はGPTo1に作成してもらいました。inference_resultがとある生成AIで作成した結果です。

サンプルjsonl

{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 50代男性。高血圧の既往歴があり、フライト中に強い胸痛を訴える。2. 発生状況・経緯: 酸素投与と医師のバイタル測定を行い、到着後に救急搬送。客室乗務員はレポートを作成し社内へ報告。","response":null,"context":"【フライト詳細】・日付: 2025年10月10日・便名: AA123 (羽田→福岡)【急病人情報】・50代男性、搭乗中に強い胸痛を訴える・事前の持病歴: 高血圧と診断あり【乗務員対応】・酸素ボトルを使用し、客室アナウンスで医療従事者を募集・幸い医師が同乗しておりバイタル測定を実施・機長へ連絡し、到着後に救急搬送を手配【結果】・福岡空港到着時に救急隊へ引き渡し・客室乗務員はインシデントレポートを作成し、社内へ報告","inference_result":"### 患者情報\n- 性別・年齢: 50代男性\n- 既往歴: 高血圧\n\n### 発生状況・経緯\n- 発症状態: フライト中に強い胸痛を訴える\n- 応急処置: 客室乗務員が酸素投与を行い、医師によるバイタル測定を実施\n- 搬送: 到着後、救急搬送される\n- 報告: 客室乗務員がレポートを作成し、社内へ報告<|end_header_id|>","inference_time":67.6005086899}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 30代女性。嘔吐と意識混濁があり、低血糖を疑われる。2. 発生状況・経緯: 看護師が名乗り出てブドウ糖を補給。症状が落ち着き、予定通り着陸し空港医療センターへ搬送。","response":null,"context":"【フライト詳細】・日付: 2025年11月2日・便名: BB456 (新千歳→成田)【急病人情報】・30代女性、離陸後に嘔吐を繰り返す・意識やや混濁、既往症は不明【乗務員対応】・機内アナウンスにより看護師が名乗り出る・低血糖の可能性を考慮し、甘い飲料とブドウ糖補給・機長へ報告し、緊急度を相談【結果】・症状が落ち着いたため予定通り成田へ到着・到着後に空港医療センターへ搬送し、経過観察","inference_result":"### 患者情報\n- 性別・年代: 30代女性\n- 主訴: 嘔吐と意識混濁\n- 初期診断: 低血糖を疑う\n\n### 発生状況・経緯\n- 対応: 看護師がブドウ糖を補給し、患者の症状が落ち着いた。\n- 移動: 予定通りの飛行により、空港医療センターへ搬送。","inference_time":59.0762562752}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 90代男性。めまいと呼吸困難感があり、心不全歴を持つ。2. 発生状況・経緯: 離陸直後に症状が出て酸素マスクを使用。医療従事者不在だったが経過を観察し、羽田到着後に医務室へ。","response":null,"context":"【フライト詳細】・日付: 2025年12月15日・便名: AA789 (関西→羽田)【急病人情報】・90代男性、離陸直後にめまいと呼吸困難感・家族から聞いた過去の既往症: 心不全歴あり【乗務員対応】・酸素マスク装着、座席をリクライニングし安静に・医療従事者の同乗有無を確認したが不在・機長と相談し、状態が悪化しなければ継続飛行する方針【結果】・体位変換で症状やや改善・羽田到着後に医務室で診察を受ける","inference_result":"### 1. 患者情報\n- 性別・年齢: 90代男性\n- 主訴: めまいと呼吸困難感\n- 既往歴: 心不全\n\n### 2. 発生状況・経緯\n- 症状発現時期: 飛行機の離陸直後\n- 初期対応: 酸素マスクを使用して酸素投与\n- 医療従事者の存在: 初期段階では医療従事者が搭乗していなかったため、症状の経過を観察\n- 到着後の対応: 羽田空港到着後、医務室へ搬送し、診察を受けた<|end_header_id|>","inference_time":79.5919618607}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 40代男性。発熱(38.5度)と悪寒を訴え、インフルエンザの可能性を指摘される。2. 発生状況・経緯: 体温測定と解熱剤準備。空席に隔離し、到着後に空港クリニック受診。","response":null,"context":"【フライト詳細】・日付: 2025年12月20日・便名: CC101 (成田→ロサンゼルス)【急病人情報】・40代男性、離陸1時間後に悪寒と関節痛を訴え・体温を測定したところ38.5度【乗務員対応】・機内備え付けの体温計と解熱剤を準備・周囲への感染懸念から後方の空席へ移動してもらう・到着地の医療施設で診察を受けるよう手配【結果】・到着後に空港クリニックを受診・インフルエンザ疑いで経過観察を指示","inference_result":"1. 患者情報:\n- 患者は40代の男性です。\n- 発熱(38.5度)と悪寒を訴えています。\n- インフルエンザの可能性が指摘されています。\n\n2. 発生状況・経緯:\n- 患者の体温を測定し、解熱剤の準備を行いました。\n- 空席で隔離し、到着後に空港クリニックを受診することになっています。","inference_time":55.0656480789}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 20代男性。過度の飲酒による嘔吐と脱水症状が疑われる。2. 発生状況・経緯: 水分補給と休息をとらせ、緊急着陸は行わず到着後に医療機関を案内。","response":null,"context":"【フライト詳細】・日付: 2026年1月3日・便名: DD202 (福岡→羽田)【急病人情報】・20代男性、離陸後すぐに嘔吐・同行者が直前まで空港で飲酒していたと証言【乗務員対応】・水分補給させ、アルコールの影響について様子見・酩酊状態で周囲の乗客に迷惑がないか確認【結果】・脱水症状が軽減され、意識は安定・羽田到着後、医療センターへ誘導し診察","inference_result":"1. 患者情報: 20代の男性で、過度の飲酒により嘔吐と脱水症状が疑われています。\n\n2. 発生状況・経緯: 患者に水分補給と休息を取らせ、緊急着陸は行わずに飛行を続行しました。到着後、医療機関を案内しました。<|eot|>","inference_time":50.3392353058}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 8歳男児。ナッツアレルギーがあり、顔面に蕁麻疹。2. 発生状況・経緯: 機内の抗ヒスタミン薬を使用し、同乗医師がチェック。症状悪化なく到着後に再度医師が診察。","response":null,"context":"【フライト詳細】・日付: 2026年2月10日・便名: EE303 (那覇→関西)【急病人情報】・8歳男児、搭乗中にナッツ入り菓子を食べた後、顔面に蕁麻疹・母親から落花生アレルギーの既往歴ありと告げられる【乗務員対応】・乗務員が機内にある医療用抗ヒスタミン薬を用意・同乗していた医師が呼吸状態や血圧をチェック【結果】・症状が大きく悪化しなかったためフライト続行・到着後、空港で再度医師が診察し応急対応","inference_result":"患者情報: 8歳の男児で、ナッツアレルギーを持っています。機内で顔面に蕁麻疹が現れました。\n\n発生状況・経緯: 機内で抗ヒスタミン薬を使用し、同乗医師によるチェックが行われました。症状の悪化はなく、到着後に再度医師が診察を行いました。","inference_time":52.5036404133}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 女性乗客、離陸時の恐怖により過呼吸。2. 発生状況・経緯: 紙袋呼吸で安定し、フライトは続行。到着後に保健室で休む。","response":null,"context":"【フライト詳細】・日付: 2026年3月1日・便名: FF404 (仙台→羽田)【急病人情報】・女性乗客、離陸のG感で恐怖を感じパニック・過呼吸となり呼吸が乱れる【乗務員対応】・紙袋呼吸で落ち着かせるよう誘導・同席の友人が声掛け【結果】・症状が落ち着いたため緊急着陸はせず予定運航・到着後に保健室で安静を取らせる","inference_result":"### 1. 患者情報\n- 患者の特定: 女性乗客\n- 症状: 離陸時の恐怖による過呼吸\n\n### 2. 発生状況・経緯\n- 状況: 離陸時に恐怖が原因で過呼吸を起こした。\n- 対応: 紙袋を用いた呼吸法で症状が安定し、フライトは予定通り続行された。\n- 到着後: 保健室で休息を取るようアドバイスされた。","inference_time":59.1266126633}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 複数名が機内食後に嘔吐・下痢。食中毒の疑い。2. 発生状況・経緯: 該当メニューを提供中止し水分補給を促す。到着地で保健所と連携し全員を医療機関へ案内。","response":null,"context":"【フライト詳細】・日付: 2026年4月5日・便名: GG505 (羽田→香港)【急病人情報】・複数の乗客が食事後に下痢や嘔吐・食中毒の可能性あり【乗務員対応】・該当メニューの提供を即時停止・症状がある乗客には水分補給と機内備品で対応・保健所と連絡を取り、到着後の検査を依頼【結果】・香港到着後に全症状者が医療機関受診・航空会社は機内食会社と調査開始","inference_result":"以下は、日本語で患者情報と発生状況・経緯の要約です。\n\n---\n\n### 患者情報\n- 件数: 複数名\n- 症状: 機内食後に嘔吐と下痢が発生。\n- 原因の疑い: 食中毒\n\n### 発生状況・経緯\n- 対応措置:\n - 該当するメニューの提供を中止。\n - 乗客に対して水分補給を促進。\n- 到着後の対応:\n - 保健所と連携し、患者を医療機関へ案内。\n\n---","inference_time":69.4992537498}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 乗客が足を捻挫。2. 発生状況・経緯: 機内移動中に踏み外し。冷却パックで応急処置し、離陸が30分遅延。到着後に空港医師が固定処置を実施。","response":null,"context":"【フライト詳細】・日付: 2026年5月15日・便名: HH606 (名古屋→羽田)【急病人情報】・乗客が機内移動中に足を踏み外し、右足首を捻挫【乗務員対応】・冷却パックで応急処置・離陸前に機長へ報告し、地上医療スタッフへ問い合わせ・30分遅れで出発【結果】・羽田到着後、空港医師に診てもらい固定処置・インシデント扱いで社内報告を行う","inference_result":"1. 患者情報: 乗客が足を捻挫しました。\n\n2. 発生状況・経緯: 機内移動中に踏み外し、足を捻挫しました。その場で応急処置として冷却パックが使用され、離陸が30分遅延しました。到着後、空港医師が固定処置を行いました。<|eot|>","inference_time":47.5201630592}
{"query":"レポートの要約をして","system_prompt":"必ず日本語で1. 患者情報、2. 発生状況・経緯に要約してください。","ground_truth":"1. 患者情報: 70代女性。トイレ移動中に転倒し腰を強打。2. 発生状況・経緯: シートベルトサイン点灯中に移動したため、揺れで転倒。通常着陸後に車椅子で救護チームが対応し打撲を確認。","response":null,"context":"【フライト詳細】・日付: 2026年6月1日・便名: II707 (羽田→札幌)【急病人情報】・70代女性がシートベルトサイン点灯中にトイレへ移動して転倒・腰を強打し痛みを訴える【乗務員対応】・応急的に毛布やクッションで負担軽減・機長と相談し、優先着陸の必要性を検討【結果】・通常着陸し、到着後に車椅子で救護チームが対応・腰の打撲と診断される見込み","inference_result":"1. 患者情報: 70代の女性患者。トイレに移動中に転倒し、腰を強打した。\n\n2. 発生状況・経緯: シートベルトサインが点灯している状態での移動が原因で、飛行機の揺れにより転倒した。飛行機が通常着陸した後、救護チームが車椅子で対応し、腰の打撲を確認した。","inference_time":56.996060133}

次に評価メトリクスの選択です。現在、生成AIで5段階の定性評価をするAI支援とNLPでの定量評価が5つずつ指標で選べます。

AI 品質 (AI 支援) AI 品質 (NLP) リスクと安全性に関するメトリック
根拠性、関連性、一貫性、流暢さ、GPT 類似性 F1 スコア、ROUGE スコア、BLEU スコア、GLEU スコア、METEOR スコア 自傷行為に関連するコンテンツ、ヘイトフルで不公平なコンテンツ、暴力的コンテンツ、性的コンテンツ、保護された素材、間接攻撃

データセットの項目と評価対象項目の紐付けですが、今回のサンプルデータだとresponseだけinference_resultに変更します。

評価を実行すると、下記のように評価が出てきます。

AI支援の評価

NLPの評価

コヒーレンスや類似度などの定性評価とBLEUスコア、GLEUスコア、METEORスコア、ROUGE F1スコアなどが、ポチポチでできました。

一件ずつの評価結果も出てきます。

まとめ

データ更新後のRAGシステムの精度が落ちていないかや、量子化したモデルの精度を比較する際には、簡単に評価できて便利だと思いました。

10件の評価に12分30秒もかかってしまいましたが、評価方法が多かったということで。。

ヘッドウォータース

Discussion