RAGAs: Retrieval Augmented Generationパイプラインを評価するためのフレームワーク

# はじめに

https://arxiv.org/pdf/2309.15217.pdf

https://note.com/npaka/n/nc70d33764018

https://github.com/explodinggradients/ragas


一番上の論文を落合フォーマットにまとめたものになります。

# どんなもの？

## 検索拡張生成システムの自動評価のフレームワークを作成

# 先行研究と比べてどこがすごい？

検索拡張システムの自動評価が最も重要です。 参照コーパス(retriver)のパープレキシティを測定することによって評価されることがよくあります。 ただし、そのような評価は常にdownstreamのパフォーマンスを予測できるわけではありません[]。ChatGPT や GPT4 などではアクセスできない。RAGAsは、RAG（Retrieval Augmented Generation）パイプラインを参照なしで評価できる。

## 詳しく

GPTScore []は、考慮される側面 (流暢さなど) を指定するプロンプトを使用し、指定された自己回帰 LM に従って、生成されたトークンの平均確率に基づいてパッセージをスコア付けします。プロンプトを使用しスコアを算出した論文もある。[]ただし、より小規模な微調整された LM (つまり BART) が使用され、プロンプトの使用による明確な利点は観察されませんでした。

ChatGPT に、0 から 100 までのスコアを提供するか、5 つ星スケールで評価を提供することによって、指定された回答の特定の側面を評価するよう直接要求する論文もある。[4]しかし、プロンプトのデザインに敏感になるという制限があります。

# 技術や手法のキモはどこ？

3つの品質側面に重きを置いている。

## Faithfulness（忠実性）:

忠実性とは、生成された答えが与えられたコンテキストから導き出されるべきである、という概念です。つまり、答えに含まれる主張がコンテキストから推論できる場合、その答えは忠実であると言えます。

1. **ステートメントの抽出**：
最初に、大規模言語モデル（LLM）を使用して、答えから一連のステートメントS(as(q))を抽出します。これにより、長い文がより短く、焦点が絞られた主張に分解されます。このステップでは、以下のようなプロンプトが使用されます。
2. **ステートメントの検証**：
次に、LLMは各ステートメントsiがコンテキストc(q)から推論できるかどうかを判断します。この検証ステップでは、以下のプロンプトが使用されます。

```less

与えられたコンテキストと以下のステートメントを考慮し、それらがコンテキストに存在する情報によって支持されているかどうかを判断してください。各ステートメントについて簡単な説明を提供し、最終的な判定（Yes/No）を行ってください。指定された形式から逸脱しないでください。
ステートメント: [statement 1]
...
ステートメント: [statement n]

Consider the given context and following
statements, then determine whether they
are supported by the information present
in the context. Provide a brief explanation for each statement before arriving
at the verdict (Yes/No). Provide a final
verdict for each statement in order at the
end in the given format. Do not deviate
from the specified format.
statement: [statement 1]
...
statement: [statement n]
```

1. **忠実性スコアの計算**：
最後に、忠実性スコアFは、LLMによって支持されたステートメントの数|V|を、ステートメントの総数|S|で割ることで計算されます。すなわち、F = |V| / |S|です。

具体例として、質問が「東京タワーの高さは何メートルですか？」、コンテキストが「東京タワーは、東京都港区に位置する通信・展望塔で、高さは333メートルです。」、答えが「東京タワーの高さは333メートルです。」の場合、この答えはコンテキストから推論できるため、忠実性スコアは1（100%）となります。

具体例として、質問が「東京タワーの高さは何メートルですか？」、答えが「東京タワーの高さは333メートルです。」の場合、LLMによって生成された潜在的な質問が「東京タワーは何メートルありますか？」などであれば、元の質問と高い類似度が計算され、回答の関連性スコアは高くなります。

## Context Relevance（コンテキストの関連性）:

コンテキストの関連性は、コンテキストc(q)が質問に答えるために必要な情報のみを含んでいる程度を評価する指標です。特に、このメトリックは、冗長な情報の含まれることをペナルティとしています。

コンテキストの関連性を評価する手順は以下の通りです：

1. **関連する文の抽出**：
与えられた質問qとそのコンテキストc(q)に基づいて、LLMはc(q)から質問qに答えるために不可欠な文のサブセットSextを抽出します。このステップでは、以下のようなプロンプトが使用されます。

```python
以下の質問に答えるのに役立つ可能性がある、提供されたコンテキストから関連する文を抽出してください。関連する文が見つからない場合、または与えられたコンテキストから質問に答えることができないと思われる場合は、「情報不足」のフレーズを返してください。候補文を抽出する際、与えられたコンテキストの文を変更することは許されません。

Please extract relevant sentences from
the provided context that can potentially
help answer the following question. If no
relevant sentences are found, or if you
believe the question cannot be answered
from the given context, return the phrase
"Insufficient Information". While extracting candidate sentences you’re not allowed to make any changes to sentences
from given context.
```

1. **コンテキストの関連性スコアの計算**：
コンテキストの関連性スコアCRは、以下の式で計算されます。

具体例として、質問が「東京タワーの高さは何メートルですか？」、コンテキストが「東京タワーは、東京都港区に位置する通信・展望塔で、高さは333メートルです。このタワーは1958年に開業し、多くの観光客が訪れます。」の場合、LLMは「高さは333メートルです。」という文を抽出し、コンテキストの関連性スコアは1/2、すなわち0.5となります。

# どうやって有効だと検証した？

新しいデータセット「[WikiEval](https://huggingface.co/datasets/explodinggradients/WikiEval)」を使用している。

このデータセットの作成プロセスは以下の通りです：

1. 2022年以降の出来事を扱った50のWikipediaページを選択。
2. 選択した各ページに対して、ChatGPTにページの導入部分に基づいた質問を提案させる。
3. ChatGPTに、提案された質問に対して導入部分をコンテキストとして使用し回答させる。

質問の提案には、以下のルールが適用されました：

- 質問は、与えられたコンテキストから完全に回答できるものでなければならない。
- 質問は、非自明な情報を含む部分から作成される。
- 回答にはリンクを含めない。
- 質問は適度な難易度であること。
- 質問は合理的で、人間に理解・回答可能であること。
- 質問に「provided context」のようなフレーズを使用しない。

全ての質問は、2人の英語堪能な注釈者によって、3つの品質次元（信頼性、回答の関連性、コンテキストの関連性）に沿って注釈されました。信頼性とコンテキストの関連性において、注釈者間で約95%の一致が見られ、回答の関連性では約90%の一致がありました。意見の不一致は注釈者間の議論によって解決されました。

1. **Faithfulness（忠実性）**:
    - ChatGPTに追加のコンテキストなしで質問に答えさせ、アノテーターにどちらの答えが最も忠実か判断させました。
2. **Answer Relevance（回答の関連性）**:
    - ChatGPTに不完全な方法で質問に答えさせ、アノテーターにどちらの答えが最も関連性があるか比較させました。
3. **Context Relevance（コンテキストの関連性）**:
    - 対応するWikipediaページへのバックリンクをスクレイピングしてコンテキストに追加の文を加え、関連性が低い情報をコンテキストに加えました。バックリンクがないページの場合、ChatGPTにコンテキストを完成させるよう依頼しました。

結果を文脈に置くために、提案されたメトリクス（Table 1においてRAGAsとして示される）を、2つのベースラインメソッドと比較します。最初の方法は、GPT Scoreとして示され、ChatGPTに3つの品質次元に対して0から10のスコアを割り当てるように頼みます。例えば、信頼性を評価するために、以下のようなプロンプトが使用されました：

```css

信頼性は、回答の情報が与えられたコンテキストと一致している度合いを測ります。コンテキストから導き出せない主張が回答に含まれている場合、ペナルティが適用されます。コンテキストと回答が与えられた場合、信頼性に対して0-10の範囲でスコアを割り当ててください。
コンテキスト：[context]
回答：[answer]

```

2つの回答候補に同じスコアが割り当てられた場合、ランダムに決定されました。2つ目のベースライン、GPT Rankingは、ChatGPTに優れた回答/コンテキストを選択するように頼みます。この場合も、プロンプトには考慮される品質メトリクスの定義が含まれます。例えば、回答の関連性を評価するために、以下のプロンプトが使用されました：

```css

回答の関連性は、回答が与えられた質問に直接対応し、適切である度合いを測ります。冗長な情報の存在や、質問に対する不完全な回答はペナルティとなります。質問と回答が与えられた場合、回答の関連性に基づいて各回答をランク付けしてください。
質問：[question]
回答1：[answer 1]
回答2：[answer 2]

```

# 議論はある？

- 新しいデータセット「WikiEval」が本当に正しいかどうか？データセットでRAGASに精度がよく出るように設定できそう

# 関連論文

[1]****KNN-LM Does Not Improve Open-ended Text Generation**** https://arxiv.org/abs/2305.14625

[2]****GPTScore: Evaluate as You Desire**** https://arxiv.org/abs/2302.04166

[3]****BARTScore: Evaluating Generated Text as Text Generation**** https://proceedings.neurips.cc/paper/2021/hash/e4d2b6e6fdeca3e60e0f1a62fee3d9dd-Abstract.html

[4]****Is ChatGPT a Good NLG Evaluator? A Preliminary Study**** https://arxiv.org/abs/2303.04048