構築したRAGの性能を評価はどうしたらよいでしょうか。RAGを使ったシステムを改善のサイクルを回すには評価が重要になります。RAGの評価はRAGAsをはじめとして複数の方法が提案されています。それらの方法を整理して包括的で体系的に理解できるような説明を試みました。読んでいただいた方の理解の助けになれば幸いです。
- 1 自然言語生成 (NLG) の評価の難しさ
- 2 NLGの評価方法
- 3 RAGの評価手法
- 4 RAGのテストデータ生成手法
- 5 LLMのテストフレームワーク
- 6 まとめ
- 7 【宣伝】生成AI ネクストテックソリューションのご紹介
- 8 参考文献
自然言語生成 (NLG) の評価の難しさ
自然言語生成 (NLG) の評価は従来のシステムのテストとは大きく異なるものです。自然言語の表現は多様で同じ内容であっても表現方法が複数あります。当然、LLMの性能評価はプログラムの関数をユニットテストするようにはできません。
例えば、「世界一高い山は?」という質問を考えます。例えば、次のような回答のパターンが考えられます。
「世界一番でエベレストで。」
という回答はエベレストであることは正解ですが日本語がおかしいため、適切な回答とはいえません。
「世界で一番高い山はエベレストの可能性があります。」
答えは正しいものの曖昧な回答となっており、これも適切な回答ではありません。
「世界で一番高い山はエベレストで、標高は3,776mです。」
答えは正解ですが、補足情報が間違っています。
「世界で一番高い山は富士山です。」
これは完全に誤答です。このような誤答をあたかも正解のように回答することは特にハルシネーションと呼ばれています。正解ではあるものの不適切な表現を含む有害な回答が混ざる可能性もあります。
当然このようなモデルの生成した文章に対して評価するのは、従来の単純な文字列のようなテストではうまくいきません。回答の文章を認識して判断する必要があります。また、このような文章での回答は正解か不正解かに単純に分類できず、悪い回答から良い回答までグラデーションがあるともいえます。簡潔に回答して欲しい時もあれば、補足情報をたくさん含んで欲しいこともあります。
評価者はNLGについて再現性があり納得のいく方法で評価し提示しなくてはなりません。
NLGの評価方法
この章では、RAGに限らずLLMの自然言語生成 (NLG) をどう評価するのかについて説明します。
評価のアプローチ
NLGの評価のアプローチは大きく分けて3つあります。
- 人手評価
- 模範解答ありの自動評価
- 模範解答なしの自動評価 (LLM as a judge)
人手評価
人手評価は文字通り人がモデルの回答を評価する方法です。人間が直接テキストをみて判断するため、適切な回答であるかを直感的に判断できます。その一方で評価は人間が行うためテストの作業規模が増大します。主に小規模なシステムで実施するのがよいといえます。
模範回答(注釈)ありの自動評価
人間が用意した模範回答とLLMの回答の一致度を測定して評価する方法です。テキスト中の単語の一致度を計算するなどの方法で評価されます。この方法ではLLMがある程度決まった回答をしてくれるかどうかを比較的確実に評価することができ、再現性が高い評価が可能です。しかし、模範解答のデータセットを準備するコストが高かったり、回答の自由度が高いようなバラつきが大きくなる質問ではスコアが低くなってしまい適切に評価できないという課題があります。
模範回答(注釈)なしの自動評価 (LLM as a judge)
模範解答を用意せず、LLMに回答の評価を評価する方法もあります。このような方法はLLM as a judge [1] と呼ばれています。LLMによる評価は人手評価に近い評価ができると言われています。一方で、実行ごとに評価が変わってしまうなど再現性がやや低いといった課題もあります。
評価アプローチの比較
上記の評価指標を表1で比較しました。
(表1: 評価アプローチの比較)
評価アプローチ | テスト実施コスト | テスト実装コスト | テストの再現性 | 回答のバラつきの許容度 |
人手評価 | 大きい | なし | 低い | 高い |
模範回答ありの自動評価 | 小さい | 大きい | 高い | 低い |
模範解答なしの自動評価 | 小さい | 中程度 | 中程度 | 高い |
模範回答ありの自動評価では、汎用的なモデルに対しては既存のデータセットが存在するため、評価指標を用いた自動評価が可能ですが、RAGの場合は独自のデータを用いた回答が期待されるため、データセットの準備にはコストがかかります。一方で、模範解答なしの自動評価は注釈(模範解答)をつける労力はかからないもののテストの再現性がやや低かったり、本当に人が期待している回答とは比較しないので乖離が発生する可能性があるというトレードオフがあります。現在、主流のRAGの評価では模範回答ありの自動評価のアプローチが提案されています。詳しくは後述しますが、RAGではコンテキスト(検索された文書)が利用できるため、なるべく注釈をつけないで評価できるような方法も提案されています。
評価のタイミング
評価方法は評価タイミングによっても2つに分けることができます。
- オンライン評価
- オフライン評価
オフライン評価
予め用意されたテストデータを使ってモデルの性能をテストする方法です。単体テストや結合テストにあたる本番運用前にテストします。今回はこのオフライン評価について主に説明します。
オンライン評価
本番運用段階で実際のユーザの入力やフィードバックを使った評価です。例えば、OpenAIのChatGPTでユーザに対しLLMの回答に👍や👎を付けるように促しているのもその一例です。
RAGの評価手法
ここではRAGの評価はNLGの評価に加えて、検索された文章 (コンテキスト) を使うことでより多角的な評価が可能となります。RAGの評価手法ではこのコンテキストも含めて、総合的に評価する手法が提案されています。
RAG評価に必要なパラメータ
RAGの評価では次の4つのをパラメータ用いて評価が行われます。
- 質問 (ユーザの質問。クエリ。)
- コンテキスト (検索された文書。チャンク。)
- 回答 (モデルの回答。実際の回答。レスポンス。)
- Ground Truth (模範回答。注釈。リファレンス。期待する回答。GT。)
質問はユーザがRAGに対して質問する文章のことです。
コンテキストはLLMが検索ツールでクエリを実行した結果得られた文章(チャンクとして分割された文書の断片)のことです。コンテキストは通常は複数取得され、それらのコンテキスト全てが評価に利用されます。
回答はコンテキストをもとにLLMが生成した回答の文章です。
Ground TruthはRAGに期待する回答で、質問に対して回答すべき内容を正確に記述した文章です。Ground Truthは人が作成したり、LLMにより自動生成する方法があります。
RAGAsによる質問・文書・評価を使った評価
現在、RAGの評価として最も有名なのがRAGAs (Retrieval Augmented Generation Assessment) [2] です。現在のRAGの評価手法の基本的な考え方となっています。RAGAsの評価指標をベースとして改善や派生の指標が提案されています。この章ではRAGAsを説明します。
RAGAsの考え方
RAGAsは3つの指標を使うことでGround Truth不要で評価できるように設計されています。まずは、その核となる次の3つ指標を用いて説明します。
- Context Relevance (文脈の関連性)
- Faithfulness (忠実性)
- Answer Relevance (回答の関連性)
Context Relevance (文脈の関連性) は質問とコンテキストの間にどれだけが関連性があるか確認する指標です。RAGでは質問に対して関連性が高いコンテキストが取得できれば、LLMが適切に回答できる可能性が高まります。
Faithfulness (忠実性) はコンテキストに基づいて回答が生成されているかどうかを確認する指標です。これはコンテキストが回答に役立つものが取得できているかやコンテキストに基づかない回答をしてハルシネーションしていないかを判断に有効な指標です。
Answer Relevance (回答の関連性) は最終的な質問と回答が関連しているかについて確認する指標です。質問に対して回答の情報が不足していたり、逆に不必要な情報を含んでいないかを確認することができます。
図1に各指標とRAGの入出力(質問・文書・回答)との関連を示します。
このように入出力を互いに評価することでGround Truthなしで評価できる方法となっています。このような評価では人手評価と近い評価が実現できると報告されています [2] 。
RAGAsの指標
RAGAsの指標について説明します。ここの指標には論文に説明されている指標以外にもRagasとして公開されているOSSで実装されているもの説明します。Ground Truthを使った評価も含まれており、そのような指標を用いてより精緻に評価することができます。Ragasの指標はかなり頻繁に見直しされており、指標は今後も変更がある可能性があります。
Context Relevance (コンテキストの関連性)
Context Relevance (Context Relevancy) はRAGAsの考え方で説明した通り、RAGAsにより最初に提案された基本的な指標の1つです。Context Relevanceは検索により取得されたコンテキストが質問とどの程度関連するかを測る指標です。取得したコンテキストを文単位に分割し、各文が質問と関連しているかをLLMに判定させ、その中で関連すると判断された文章の割合です。従って、Context Relevanceは0から1の値をとり、0は関連のある回答が存在せず、1が全ての文において質問と関連があると判定されたことになります。1に近いほど良好です。
ただし、現在、この指標はRagasから削除され、Context Precision (文脈の精度) に置き換えられました。
Context Precision (コンテキストの精度)
Context Precisionはコンテキストが質問とどの程度適合するかを測る指標です。質問と関連性が高いコンテキストが取得できていれば、この指標は1に近くなります。一方で、関連性が低いコンテキストばかりの場合は指標は0に近くなります。
Context Relevanceと似ていますが、少し評価方法が異なります。Context Relevanceはどの文も均して評価されますが、Context Precisionは検索されたチャンクごとに精度を一度計算し、最後にチャンクごとの精度の平均をとります。Context Relevanceは削除されContext Precision (文脈の精度) に置き換えられました。おそらくContext Precisionの方が適切に評価できると判断されたことが理由だと思われます。
Context Recall (コンテキストの再現率)
Context Recallは回答に必要な情報(クレーム)がコンテキストに「もれなく」含まれているかを測る指標です。Context RecallではGround Truthに含まれる情報のうちがどれだけコンテキストに含まれるかの割合を算出します。包括的に取得できているほど1に近く、取得できていないほど0に近い値となります。1であればLLMはGround Truthと同等の内容を回答できるだけの情報を取得できたことになります。逆に0に近ければ回答に必要な情報が不足しているということになり、LLMが期待している回答をできる可能性が低くなります。
1. 検査結果が陽性で本当に陽性 (True Positive、TP、真陽性)。
2. 検査結果が陽性で本当は陰性 (False Positive、FP、偽陽性)。
3. 検査結果が陰性で本当に陰性 (True Negative、TN、真陰性)。
4. 検査結果が陰性で本当は陽性 (False Negative、FN、偽陰性)。
このとき、精度は陽性と判定され本当に陽性である割合を表します。つまり、誤って陰性のものを拾ってきてしまっていないかが分かります。精度は適合率ということもあります。
再現率は本当に陽性であるもののうち、陽性と判断されたものの割合を表します。つまり、陽性を取りこぼさずに拾ってこれたかが分かる指標です。
日常で「精度」という言葉は比較的ラフに使われがちですが、機械学習やAIの領域ではきちんとした定義があり、よく出てくる言葉なので覚えておくと役立ちます。
Context Entities Recall (コンテキストのキーワードの再現率)
Context Entities Recallは回答に必要な「エンティティ」がコンテキストにもれなく含まれているかを測る指標です。エンティティとは文章におけるキーワードのことです。例えば、「日本で一番高い山は富士山で、標高は3,776mです。」という文章では、「日本」「富士山」「3,776m」などがキーワードとなります。Context Entities RecallではGround Truthに出現するキーワードのうち、コンテキストに出現するキーワードがどれだけあったかの割合を算出します。1に近いほど、Ground Truthに出現するキーワードがコンテキストにも出現していることになり、Ground Truthに近い回答ができる可能性が高まります。逆に0に近いとGround Truthに出現するキーワードが存在せず、LLMへ与える情報が不足していることになります。
Context Recallは「情報(クレーム)」をベースとした再現率を計算しますが、Context Entities Recallは「キーワード (エンティティ) 」をベースとした再現率を計算するという違いがあります。観光案内デスクや歴史的な質問応答などの固有名詞の扱いが重要なユースケースでの評価で有効とされています。
Noise Sensitivity (ノイズへの敏感性)
Noise Sensitivityはコンテキストに含まれる誤った情報 (クレーム) を取り込んでしまっているかを測る指標です。コンテキストに含まれているが、Ground Truthに含まれていない情報を回答には必要がない情報なので「ノイズ」と定義します。その上で、回答に含まれる情報のうち、ノイズの割合を算出します。0に近いほどLLMはノイズをひろっていないので良好と言えます。逆に1に近いほど、回答にノイズを取り込んでしまっているということになります。
Answer Relevance (回答の関連性)
Answer Relevance (Response Relevancy) はRAGAsの考え方で説明した通り、RAGAsにより最初に提案された基本的な指標の1つです。質問に対する回答として関連が見られるかを測る指標です。この指標により最終的にきちんと質問に対して回答したかを確認することができます。
Answer Relevanceの計算は少し特殊です。例えば、「日本の最高峰は?」と質問をし「日本で一番高い山は富士山で、標高は3,776mです。」という回答を得られた状況を考えます。評価は、まず、LLMにこの回答に対する質問は何かを逆に生成させます。その結果、「日本で一番高い山は?」と「日本で標高が最も高い山は?」などが得られます。これらを疑似質問といいます。これらの疑似質問を本来の質問とコサイン類似度を計算します。それぞれ類似度を計算すると類似度(「日本の最高峰は?」,「日本で一番高い山は?」 ) = 0.9、類似度(「日本の最高峰は?」,「日本で標高が最も高い山は?」 ) = 0.7(値は例です)となったときその平均の0.8が回答の関連性となります。
Answer Faithfulness (回答の忠実性)
Answer Faithfulness (Faithfulness) はRAGAsの考え方で説明した通り、RAGAsにより最初に提案された基本的な指標の1つです。Answer FaithfulnessはLLMがコンテキストに忠実に回答を生成したかどうかを表す0から1をとる指標です。単にFaithfulnessとも呼ばれることがあります。回答をシンプルな情報を含む複数の文章に分割します。この分割された文章のそれぞれがコンテキストから回答可能なのか判定します。コンテキストから回答可能であると判定された文章の割合がAnswer Faithfulnessの値となります。
コンテキストからだけ導かれた回答であるほど1に近い値となり、コンテキスト以外の情報が回答に含まれるほど0に近い値となります。そのため、この値が低いとハルシネーションを起こしている可能性があると判断できます。ただし、モデルが事前に学習している知識で正しく回答している可能性もあるため、結果の吟味には注意が必要です。
RAGAsによるテスト実装
基本的にはRagasを用いることでテストを実装することができます。さらに、RagasはRAGの評価で広く使われているため、多くのフレームワークにも取り入れられています。例えば、LangChain社によるLangSmithやConfident AI社のDeepEvalでも指標が実装されており実装にあたっては複数のアプローチがとれます。
RAGCheckerによるクレームベースの評価
Amazon AWS AI、上海交通大学、西湖大学のグループにより提案されたRAGChecker はクレームと呼ばれる単一の情報のレベルで分解して算出することができる評価指標です[4]。クレームレベルに分解することでより複雑な文書、回答であってもより正しく評価できることを目指しています。
RAGCheckerではRAGAs等の既存の評価手法に比べて、人間の評価とより高い相関が見られると報告されています[4]。比較的新しい手法ですが、注目を集めつつあります。
RAGCheckerの考え方
図2のように模範解答、モデルの回答、チャンクに含まれる正しい/誤った/喪失した/関連のないクレームの数をベースとして指標が算出されます。RAGCheckerの指標は体系的に整理され、粒度が揃っているという特徴があります。また、RAGCheckerではこれらの指標の傾向からどのように改善すべきかの方針も示しており参考になります。
RAGAsとRAGChekcerは類似点も多いですが、考え方の点では次が異なります。
- RAGAsでは質問を評価に使うが、RAGCheckerでは質問は評価に使わない。
- RAGAsでは文章/文/キーワード/クレーム単位の評価方法が混在するが、RAGCheckerではクレーム単位で統一されている。
- RAGAsではGround Truthなしでも評価できるよう設計されているが、RAGCheckerでは模範解答をベースに評価を行う。
RAGCheckerの指標
RAGCheckerの指標には図2のようなものがあります。
Overall Metricsは最終的な回答を評価する指標です。RAGシステムとして最終的な結果がどうかという観点を確認します。
Retriever Metricsは検索ツールの検索結果を評価する指標です。うまく検索できているかという観点を確認します。
Generator MetricsはLLMの回答を評価する指標です。LLMがうまく回答を生成できているかという観点を確認します。
これらの指標をそれぞれ説明していきます。
Precision (精度)
モデルからの回答にGround Truthのクレーム「だけ」を含むか測る指標です。モデルの回答にGround Truthに含まれないクレームが少ないほど良好な数値となります。数値が高いほど良好です。
Recall (再現率)
モデルからの回答にGround Truthのクレームを「網羅的に」含むか測る指標です。モデルの回答にGround Truthのクレームが含まれているほど良好な数値となります。数値が高いほど良好です。
Context precision (文書の精度)
全てのチャンクのうち、文書にGround Truthのクレームを含むチャンクがどれだけあるかを測る指標です。この指標に関してはクレームではなくチャンクの数が使われます。数値が高いほど良好です。1つでも関連のあるクレームが含まれていれば、関連のあるチャンクとみなされます。
RAGAsのContext precisionはチャンクごとに集約された精度を平均しますが、RAGCheckerはチャンクの数で割合を計算するという点で異なります。
Claim Recall (クレームの再現率)
モデルからの回答にGround Truthのクレームを「網羅的に」含むか測る指標です。RAGAsのContext Recallと同等の指標です。
Context utilization (文脈の利用率)
コンテキストとして取得できている必要なクレームのうちどれだけが利用されたかを測る指標です。この割合が高いとLLMはコンテキストを活用できていることがわかります。
Noise Sensitivity (ノイズへの敏感性)
Noise SensitivityはRagasのものと同じ評価指標です。RagasのドキュメントにはRAGCheckerにNoise Sensitivityが導入されたと記載があり、持ち込まれた指標ということのようです。
Credits: Noise senstivity was introduced in RAGChecker
(https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/noise_sensitivity/ より引用)
Hallucination (ハルシネーション)
モデルの回答のクレームのうちで、コンテキストに含まれない誤ったクレームの割合です。つまり、モデルが勝手に誤った情報を回答に出力した割合を表します。0に近いほど良好で、0を超える値で何らかのハルシネーションを起こしていることを表します。
Self-knowledge (自己知識)
モデルの回答のクレームのうちで、コンテキストに含まれない正しいクレームの割合です。つまり、モデルがコンテキストにない情報を補った割合を表します。0から1の値をとりますが、どの値が良好かはユーザ次第です。根拠がある回答のみを求めている場合はこの値は低い方がよく、根拠がなくとも正しい情報であれば提示して欲しければ高い値がよいということになります。
Faithfulness (忠実性)
モデルの回答のうちで、コンテキストに含まれるクレームが利用された割合です。Context utilizationと異なり、誤ったクレームも割合に含まれます。1に近いほどコンテキストに忠実に回答したことになり良好です。
RAGCheckerによるテスト実装
RAGCheckerを用いることでテストを実装することができます。現在のところ普及度はあまり高くないので、公式以外のツールにはサポートされていないようです。今後の動きとして、AWSの標準的なRAG評価機能として、取り入れられる可能性は考えられます。
RAGの構成要素としてのLLMの評価 (RGB)
RGBの考え方
RAGの全体的で外部的な挙動についての評価以外にもRAGを構成するコンポーネントごとの性能を評価するという考え方も存在します。RAGは検索ツールやLLMといった複数のコンポーネントからできているシステムであり、そのコンポーネントの単体を評価するという考え方です。
とりわけその中でもLLMの存在は中核となります。RGB (Retrieval-Augmented Generation Benchmark) [5] では「RAGの構成要素として」のLLMの能力を測る4つの指標を提案しています。その指標をご紹介します。
RGBの指標
RGBでは図3の4つの指標を提案しています。これらについて説明します。
Noise Robustness (ノイズへの頑健性)
Noise Robustnessはコンテキストの中に回答に不必要な情報(ノイズ)が含まれている場合に、回答に必要な文書のみを参考に回答を生成できるかの能力を測ります。検索ツールは通常チューニングしても一定のノイズが含まれるため、LLMが情報を取捨選択する能力が必要となります。例えば、次のような関係のないコンテキストが検索結果に含まれていても適切に回答できる能力です。
★質問
Who was awarded the 2022 Nobel prize in literature? (和訳: 2022 年のノーベル文学賞の受賞者は誰ですか?)
★コンテキスト
【関連するコンテキスト】The Novel Prize in Literature for 2022 is awarded to the Franch author Annie Ernaux, … (和訳: 2022年のノーベル文学賞はフランスの作家アニー・エルノーに授与される、・・・)
【関連しないコンテキスト】The Novel Prize in Literature for 2021 is awarded to the Franch author Abdulrazak Gurnah, … (和訳:2021年のノーベル文学賞はフランスの作家アブドゥルラザク・グルナに授与される、・・・)
★回答
Annie Ernaux
([5]より引用、改変。)
類似の指標として既に紹介しているRagasやRAGCheckerもNoise Sensitivity (ノイズへの敏感性) という同様の指標を持っています。Noise SensitivityとNoise Robustnessは逆の指標となっていて、Noise Sensitivityは低く、Noise Robustnessは高い方が良好です。
Negative Rejection (回答不能な質問の却下)
Negative Rejectionは検索された文書の中に回答に必要な情報が含まれていない場合に、回答を拒否する能力を測ります。通常、検索ツールは回答に無関係なコンテキストしか取得できない場合やそもそもコンテキストを取得できない場合があり、そのような場合にハルシネーションを起こすことなく回答を拒否できる必要があります。例えば、次のようなコンテキストにノイズのみが含まれている場合は回答できないと出力する能力のことです。
★質問
Who was awarded the 2022 Nobel prize in literature? (和訳: 2022 年のノーベル文学賞の受賞者は誰ですか?)
★コンテキスト
【ノイス】The Novel Prize in Literature for 2022 is awarded to the Franch author Annie Ernaux, … (和訳: 2022年のノーベル文学賞はフランスの作家アニー・エルノーに授与される、・・・)
【ノイズ】The 2020 Nobel Laureate in Literature, poet Louise Gluck, … (和訳: 2020年ノーベル文学賞受賞者、詩人ルイーズ・グラック氏、・・・)
★回答
I can not answer the question because of the insufficient information in documents (和訳: 資料の情報が不足しているため、質問にはお答えできません)
([5]より引用、改変。)
Information Integration (情報の統合)
Information Integrationは回答に必要なコンテキストが複数ある場合にそれらの回答を統合して回答する能力を測ります。複数の情報を加味した上で回答しなくてならない複雑な質問では重要は指標となります。例えば、次のようにそれぞれのコンテキストに回答に必要な情報が含まれている場合にそれらを統合する能力です。
★質問
When were the ChatGPT app for iOS and ChatGPT api launched? (和訳: iOS 用 ChatGPT アプリと ChatGPT API はいつリリースされましたか?)
★コンテキスト
On May 18th, 2023, OpenAI introduced its own ChatGPT app for iOS… (和訳: 2023 年 5 月 18 日、OpenAI は iOS 用の独自の ChatGPT アプリを導入しました・・・)
That changed on March 1, when OpenAI announced the release of API access to ChatGPT and Whisper, … (和訳: OpenAI が ChatGPT と Whisper への API アクセスのリリースを発表した 3 月 1 日に状況は変わりました、・・・)
★回答
May 18 and March 1. (和訳: 5月18日と3月1日。)
([5]より引用、改変。)
Counterfactual Robustness (反事実への頑健性)
Counterfactual Robustnessは検索されたコンテキストに事実と反する情報が含まれていた場合に、LLMがそのことを検知し提示する能力を測ります。情報源となる文書の品質が悪い場合には特に重要な指標となります。例えば、次のようにコンテキストの内容が事実誤認がある旨を報告できる能力のことです。
★質問
Which city hosted the Olympic games in 2004? (和訳: 2004 年にオリンピックを開催した都市はどこですか?)
★コンテキスト
【反事実】The 2004 Olympic Games returned home to New York, birthplace of the … (和訳:2004 年のオリンピックは、ニューヨークに戻ってきました、・・・)
【反事実】After leading all voting rounds, New York easily defeated Rome in the fifth and vote … (和訳: すべての投票ラウンドでリードした後、ニューヨークは5位でローマを簡単に破り、投票しました…、・・・)
★回答
There are factual errors in the provided documents. The answer should be Athens. (和訳: 提供された文書には事実誤認があります。答えはアテネでしょう。)
([5]より引用、改変。)
G-EvalによるCoTを用いた評価
G-Eval [6] はCoT (Chain-of-Thoughts) を用いた評価手法で、NLGの評価全体に使える手法です。多くのユースケースに適用できる汎用性が高さが特徴です。RAG限定ではないですが、RAGの文脈でもよく登場します。G-Evalでは評価のステップについてLLMに指示し指標を定義します。LLMはその指示に従って、質問、コンテキスト、回答、Ground Truthなどのを使って評価をすることができます。RAGの評価においてもしばしば使われます。評価の自由度が高いため、RAGAs等に含まれていない指標をチェックしたいときに、独自にチェックしたい指標を追加することができます。
例えば、G-Evalによる評価指標の定義は次のようになります。Correctness(正確さ)という指標を定義しています。
(コード: DeepEvalによるG-Evalの実装例。https://docs.confident-ai.com/docs/metrics-llm-evals より引用)
from deepeval.metrics import GEval
from deepeval.test_case import LLMTestCaseParams
correctness_metric = GEval(
name="Correctness",
criteria="Determine whether the actual output is factually correct based on the expected output.",
# NOTE: you can only provide either criteria or evaluation_steps, and not both
evaluation_steps=[
"Check whether the facts in 'actual output' contradicts any facts in 'expected output'",
"You should also heavily penalize omission of detail",
"Vague language, or contradicting OPINIONS, are OK"
],
evaluation_params=[LLMTestCaseParams.INPUT, LLMTestCaseParams.ACTUAL_OUTPUT, LLMTestCaseParams.EXPECTED_OUTPUT],
)
RAGのテストデータ生成手法
質問やGround Truthを人手で用意するには非常に手間がかかるため、自動生成したり、少数の注釈のみで評価が可能となるような手法も提案されています。例えば、Ragasではコーパスを使ったテストデータの生成機能を提供しています。ARES (An Automated Evaluation Framework for Retrieval-Augmented Generation Systems) は少数の注釈のみでRAGを評価できる方法を提案しています [7] 。
LLMのテストフレームワーク
RAGAs、RAGChecker、RGB、G-Evalなどの手法はそれぞれ論文と共に実装も提供されているので、個別のツールを使うことも可能ですが、テストフレームワークも使うことができます。サポーツされている指標には制約がありますが、テストツールとしてテストの管理がしやすいというメリットがあります。
LangSmith
LangChain社が提供するLLMOpsのためのツールであり、有料(無料プランあり)のWebサービスとして提供されています。無料の場合は1ユーザのみでの利用が可能です。一部の機能に制約がありますが、ほとんどの機能は利用可能です。チーム開発では複数人での利用が前提となるので、ライセンスを購入して利用する必要があります。LangChainとの統合が容易であるという特徴があります。
DeepEval
DeepEvalはConfident AI社が提供するLLMのテスト用のOSSのフレームワークです。Pytestと同じようなユニットテスト風にテスト実装ができ、テストケースの管理、データセットの生成、モデルの評価のLLMにおけるテスト全般をカバーしているのが特徴です。幅広い評価指標を取り込んでおり、Ragasを中心としてRAGの評価指標も実装されています。本番環境におけるオンライン評価も可能です。
SaaSとして提供されているLLM評価プラットフォームであるConfident AIとの統合によって評価や回帰テスト、監視が可能になります。
まとめ
今回は次のような内容をご紹介しました。
- NLGの評価のアプローチ
- 人手評価
- 模範解答ありの自動評価
- 模範解答なしの自動評価 (LLM as a judge)
- NLGの評価のタイミング
- オフライン評価
- オンライン評価
- RAGの評価手法
- RAGAs
- RAGChecker
- RGB
- G-Eval
- LLMのテストフレームワーク
- LangSmith
- DeepEval
現在までにRAGの評価では多くの手法が提案されており、RAGAsなどある程度の信頼がおける手法も出てきており、それらの手法を用いてRAGの評価を定量的にできるようになってきました。一方で、既存手法は少なくない課題が指摘されており、現時点で高いレベルで信用できる手法が存在しないのも事実です。評価の課題を解決するために頻繁に手法の提案や改善がされている状況であり、今後成熟していくことが期待される領域です。
最後までお読みいただきありがとうございました。このブログがお役に立てば幸いです。
RAGの改善手法については⇩のブログにご紹介していますので、こちらもぜひご覧になってください。
RAGはどのように進化しているのか?RAGのパラダイムと改善手法を体系的にご紹介!
【宣伝】生成AI ネクストテックソリューションのご紹介
弊社サイオステクノロジーでは生成AIを用いたトレーニング、コンサルティング、アプリケーション開発のソリューションを提供しています。ご興味のある方はぜひお問い合わせください!
https://nextech-solutions.sios.jp/genai/
参考文献
- Lianmin Zheng, Wei-Lin Chiang, Ying Sheng, Siyuan Zhuang, Zhanghao Wu, Yonghao Zhuang, Zi Lin, Zhuohan Li, Dacheng Li, Eric P. Xing, Hao Zhang, Joseph E. Gonzalez, Ion Stoica, Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena, 2023.
- Shahul Es, Jithin James, Luis Espinosa-Anke, Steven Schockaert, RAGAS: Automated Evaluation of Retrieval Augmented Generation, 2023.
- 山田 育矢, 鈴木 正敏, 西川 荘介, 藤井 一喜, 山田 康輔, 李 凌寒, 大規模言語モデル入門Ⅱ 生成型LLMの実装と評価, 技術評論社, 2024.
- Dongyu Ru, Lin Qiu, Xiangkun Hu, Tianhang Zhang, Peng Shi, Shuaichen Chang, Jiayang Cheng, Cunxiang Wang, Shichao Sun, Huanyu Li, Zizhao Zhang, Binjie Wang, Jiarong Jiang, Tong He, Zhiguo Wang, Pengfei Liu, Yue Zhang, Zheng Zhang, RAGChecker: A Fine-grained Framework for Diagnosing Retrieval-Augmented Generation, 2024.
- Jiawei Chen, Hongyu Lin, Xianpei Han, Le Sun, Benchmarking Large Language Models in Retrieval-Augmented Generation, 2023.
- Yang Liu, Dan Iter, Yichong Xu, Shuohang Wang, Ruochen Xu, Chenguang Zhu, G-Eval: NLG Evaluation using GPT-4 with Better Human Alignment, 2023.
- Jon Saad-Falcon, Omar Khattab, Christopher Potts, Matei Zaharia, ARES: An Automated Evaluation Framework for Retrieval-Augmented Generation Systems, 2024.
- Sirui Xia, Xintao Wang, Jiaqing Liang, Yifei Zhang, Weikang Zhou, Jiaji Deng, Fei Yu, Yanghua Xiao, Ground Every Sentence: Improving Retrieval-Augmented LLMs with Interleaved Reference-Claim Generation, 2024.