【RAG】RAFT解説：回答生成において、無関係なドキュメントを無視するには？

# はじめに
RAGを使用する際、Contextにはどうしても無関係なドキュメントが入ってしまいます。そのため、RAGで使用するLLMは、このようなノイズに対して頑健である必要があります。また、LLMは無関係なドキュメントを無視し、ゴールデンドキュメント(回答の根拠が含まれるドキュメント)を正確に抽出する必要があります。
では、どうやって実現すれば良いのでしょうか？このような精度や頑健性を向上させるための手法として **RAFT** があります。

今回は、LLMをトレーニングする手法であるRAFT (Retrieval Augmented Fine-Tuning) について解説します。RAFTの原論文である *[RAFT: Adapting Language Model to Domain Specific RAG](https://arxiv.org/abs/2403.10131)* をベースに解説していきます。

>本記事はRAGに関する知識を前提としています。RAGに関して不安のある方は、[【RAG入門】RAGって何？なぜRAGが注目を浴びるのか？](https://qiita.com/batakeee/items/781ebe0d71d16c6b112d)を読んでみてください！

# 目次
1. [RAFTのモチベーション](#raftのモチベーション)
1. [RAFTの手法](#raftの手法)
1. [実験詳細](#実験詳細)
1. [結果](#結果)
1. [CoT (Chain-of-Thought) に効果はあるのか](#cot-chain-of-thought-に効果はあるのか)
1. [ゴールデンドキュメントを常に含めるべきか？](#ゴールデンドキュメントを常に含めるべきか)
1. [RAGへの応用](#ragへの応用)
1. [所感](#所感)
1. [参考文献](#参考文献)


# RAFTのモチベーション
なぜ、RAFTという手法を開発しようと思ったのか、その背景について説明します。

近年、LLMは医療や法律などの専門領域で活用される機会が増えてきています。これらの領域では一般知識への推論能力はそれほど重要ではなく、事実性を担保した状態での正確な回答が重要となります。実際、LLMを専門領域に適応させることは多くの新しいアプリケーションにとって不可欠です。
では、実際に開発する際に、**RAGを専門的な領域に適応させるには、事前学習済みのLLMをどのようにチューニングすればよいのでしょうか？**

LLMを専門領域に適応させる一般的な方法は以下の2つです。
1. **RAGを用いたインコンテキスト学習**
1. **教師ありファインチューニング**

RAGを用いたインコンテキスト学習では、**固定されたドメイン環境やテストドキュメントへの事前アクセスによる学習機会を活かすことができません。** 一方で、教師ありファインチューニングでは、ドキュメント内のより一般的なパターンを学習し、最終的なタスクやユーザーの好みに適合させることができます。しかし、**「テスト時にドキュメントを活用しない（RAGを統合していない）」「学習時に検索プロセスを考慮していない」といった課題があります。**

**これらの課題を克服するための手法がRAFTです。**

# RAFTの手法
RAFTは、**LLMをファインチューニングする際に、専門領域の知識を獲得しながら、RAGの性能を向上させる**ことを目的としています。
ここにおけるRAGの性能向上とは、
1. 誤った検索結果(ディストラクタードキュメント)に対しても頑健な推論ができるようになること
1. LLMの推論精度の向上

を指します。つまり、**RAFTは**
1. **LLMが適切なドキュメントと不要なドキュメントを識別して推論できるようになるためのトレーニング**
1. **LLM本体の推論精度を向上させるようなトレーニング**

**を行います。**

ここから、具体的な手法の話をしていきますが、小難しい話はしません。なぜなら、RAFTは特別なトレーニング手法を行っていないからです。実際に、**標準的な教師ありファインチューニングの手法を用いています。** では、どうやって「専門領域の知識を獲得しながら、RAGの性能を向上させる」のでしょうか？
その答えは、**トレーニングデータの工夫にあります。**
まず、RAFTのトレーニングデータは以下の構成になっています。
- 質問（$Q$）
- ドキュメントセット（$D_k$）
    - ゴールデンドキュメント ($D*$)
    - ディストラクタードキュメント($D_i$)
- Chain-of-Thought形式の回答（$A*$）

ただし、ゴールデンドキュメントは必ずしも1つではなく、データセットによっては複数のドキュメントから成ることもあります。
### 適切なドキュメントと不要なドキュメントを識別するためのトレーニング
適切なドキュメントと不要なドキュメントを識別するためのトレーニングは、以下のようなトレーニングセットで行われます。

```math
\displaylines{
P\% \: of \: data: Q+D*+D_1+D_2+...+D_k → A*\\
(1-P)\% \: of \: data: Q+D_1+D_2+...+D_k → A*
}
```
つまり、$P$%のトレーニングセットにはゴールデンドキュメントが存在し、残りの($1-P$)%のトレーニングセットはディストラクタードキュメントのみで構成されるように設計しています。実際には、$P$%のトレーニングセットにおいては、ゴールデンドキュメント+４つのディストラクタードキュメントで構成されています。
また、テスト時には、質問（$Q$）と、RAGパイプラインで検索されたトップ$K$のドキュメントを使用します。**ポイントは、RAFTが特定のRetriever（検索システム）に依存しないという点です。** というのも、あくまで学習しているのは、「適切なドキュメントと不要なドキュメントを識別すること」なので、Retrieverが何で、どんなドキュメントを持ってこようが関係ないといった具合です。
> Retrieverの品質は、質問に対して「わからない」という回答ではなく、意味ある回答をする上では極めて重要です。しかし、RAFTの本質はそこではありません。

### LLM本体の推論精度を向上させるためのトレーニング
LLM本体の推論精度を向上については**トレーニングデータの回答形式をChain-of-Thought形式の回答（$A*$）にすることで実現します** 。$A*$にCoTを組み込むことで、
1. 完全な推論チェーンの生成
1. *##begin_quote##* タグと *##end_quote##* タグを用いた回答の根拠となるドキュメントの明示的な引用

をトレーニングするよう促します。そうすることで、**元のContextを適切に参照しながら推論チェーンを形成するようになり、回答の説明性と正確性を向上させているのです。**

トレーニングデータのイメージとしては、以下の図のようになります。

![トレーニングデータ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967909/8cd44e5e-c7f7-431f-9e29-3e1840eac942.png)
<font color="#808080">*Tianjun Zhang et al.(2024) RAFT: Adapting Language Model to Domain Specific RAG*</font>

# 実験詳細
ここでは、実験で使用したデータセットとRAFTモデルおよび各ベースラインモデルについて説明します。
### データセット
Wikipedia・コーディング/APIドキュメント・医療文書に関する質問応答のデータセットを用いて評価しています。Wikipediaベースのデータセットは、主に映画やスポーツなどの一般知識が含まれます。一方で、コーディング/APIドキュメントと医療文書のデータセットに関しては、専門領域のドキュメントであり、専門領域における応答性能を測るために使用しています。
- **Wikipediaベースのオープンドメイン質問応答データセット**
    - Natural Questions
    - Trivia QA
    - HotpotQA
- **コーディング/APIドキュメントのデータセット**
    - APIBenchに含まれるHuggingFace・Torch Hub・TensorFlow Hub
- **医療文書に関する質問応答のデータセット**
    - PubMed QA

### RAFTモデルおよびベースラインモデル
RAFTには、**LLaMA2-7B-chatモデルを使用します。** このモデルは、LLaMA2-7Bに対して質問応答タスク向けにInstruction Tuningが施されたモデルです。
**ベースラインモデルとしては4種類用意されています。**
- LLaMA2-7B-chatモデルを0-shot promptingで使用
- LLaMA2-7B-chatモデルにRAGを組み合わせたLLama2 + RAGモデル
- ドメイン固有のファインチューニングを施したモデル（DSF: Domain-Specific Fine-Tuning）
- ドメイン固有のファインチューニングを施したモデルにRAGを組み合わせたDSF + RAGモデル

DSFモデルには、おそらくLLaMA2-7B-chatモデルが使用されていると思いますが、明記されていませんでした。また、DSFを使用する理由としては、特定のドメインのContextに慣れさせることが目的です。一般的には、DSFモデルの方が精度は良くなります。
これらのベースラインモデルに加えて、本実験では参考としてGPT-3.5+RAGでの評価も行っています。やはり評価を行ううえで、GPTシリーズの結果は皆さん気になりますし、無視できないモデルになってきている印象です。

# 結果
![結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967909/93095615-df0a-4734-a982-e7767c1a0842.png)
<font color="#808080">*Tianjun Zhang et al.(2024) RAFT: Adapting Language Model to Domain Specific RAG*</font>

ここからは、ベースラインとRAFTを比較し、RAFTの有効性について説明します。
まず、上記の表から**RAFTが一貫してベースラインを上回っている**ことがわかります。
>※全てのデータセットにおける結果が載っているわけではありません。以降、上図をもとに議論していきます。

次に、個々のベースラインと比較します。全体として、**LLaMA-7B-chatは、RAGを用いるかどうかに関係なく、回答スタイルのズレにより、単体では十分な性能を発揮しなかったようです。**(※表からは読み取れません。論文から引用しています) 
しかし、**ドメイン固有のファインチューニングを適用することで、性能が大幅に向上することが確認できます。** 一方で、RAGをDSFモデルに適用しても、必ずしも性能向上にはつながらないことが確認できます。これは、**モデルがContextからゴールデンドキュメントを抽出できていない可能性を示唆しています。**
したがって、RAFTでは
- **適切な回答スタイルの学習**
- **ドキュメントの抽出能力の向上とディストラクタードキュメントに対する耐性の強化**

を実現できるということがわかります。
最後にGPT-3.5+RAGとの比較では、HotPot QAについては差が開いていますが、他のデータセットでは上回っています。モデルサイズが異なることを踏まえて考えると、RAFTに大きな優位性があるように思えます。


# CoT (Chain-of-Thought) に効果はあるのか
![CoT.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967909/8b37e16f-34d3-498b-be05-4e1b4469db32.png)
<font color="#808080">*Tianjun Zhang et al.(2024) RAFT: Adapting Language Model to Domain Specific RAG*</font>

[結果](#結果)からRAFTがモデルの性能向上に寄与していることがわかりました。ここでは、トレーニングデータの回答($A*$)をChain-of-Thought形式にしたことがどの程度有効だったのかを評価します。
上図から、**単純に質問に対する回答を提供するだけでは、十分な性能を発揮できない**場合があることがわかります(w.oはwithoutの略です)。
少し技術的な話になりますが、CoTなしの回答形式ではLossの急激な低下が生じ、モデルが短い回答に過度に適応してしまうそうです。つまり、ファインチューニングの本質である知識の学習ではなく、回答形式に過度に適応してしまう状況に陥ります。例えば、Yes/Noであれば、2~3文字を出力することを学習し、本当にYes/Noであったかどうかは学習していないといった感じです。
繰り返しになりますが、上図から回答にCoTを組み込むことで全体的な精度が向上していることがわかります。つまり、CoT形式の回答はモデルが適切な学習を行う上で、極めて重要な要素であることがわかります。

# ゴールデンドキュメントを常に含めるべきか？
本研究のトレーニングセットは、
```math
\displaylines{
P\% \: of \: data: Q+D*+D_1+D_2+...+D_k → A*\\
(1-P)\% \: of \: data: Q+D_1+D_2+...+D_k → A*
}
```
でした。この$P$は何％にするべきなのでしょうか？

一見すると、RAGタスクにおいてゴールデンドキュメントを抽出する能力を向上させるためには、トレーニング時に常にゴールデンドキュメントを含めるべき（$P = 100%$）だと考えられるでしょう。
しかし、結果は私たちの予想に反して、**必ずしもそうとは限らない**そうです。具体的には、最適な$P$%はデータセットごとに異なり、40%、60%、100%といった範囲で変動します。したがって、モデルは完全な正解情報がない状況でも推論を行う能力を養い、より頑健な回答生成が可能になると考えられます。

![GD.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967909/2de153e2-0c04-46de-b688-041b1fc78d83.png)
<font color="#808080">*Tianjun Zhang et al.(2024) RAFT: Adapting Language Model to Domain Specific RAG*</font>

# RAGへの応用
ここでは、RAGのRetrieveにおける次の問いについて考えます。

**RAFTにおけるディストラクタードキュメントの数がRAGの$Top$-$K$検索にどのような影響を与えるのでしょうか？**

>前提として、これまでの研究でLLMが無関係なテキストを入れると効率性と性能に問題が生じると指摘されています。(*[Shi et al.(2023) Large Language Models Can Be Easily Distracted by Irrelevant Context](https://arxiv.org/abs/2302.00093); [Weston & Sukhbaatar (2023) System 2 Attention (is something you might need too)](https://arxiv.org/abs/2311.11829); [Liu et al.(2023) Lost in the middle: How language models use long contexts.](http://arxiv.org/abs/2307.03172)*)

結果は下図の通りです。この図では、トレーニング時に異なる数のディストラクタードキュメントを含めたモデルが、テスト時のドキュメント数の変化に対してどのような反応をするのか示しています。結果としては、**トレーニング時にディストラクタードキュメントを含めた場合、テスト時のドキュメント数の変動に対してモデルの性能がより安定することがわかりました。**
この結果は、RAFTの頑健性を裏付けるものであり、**テスト時に遭遇するドキュメント数が変化しても、モデルの性能が大きく低下しない**ことを示しています。

ただし、データセットによって必要となるディストラクタードキュメントの数は異なるそうで、場合によってはゴールデンドキュメントのみの場合より性能が低下しています。ディストラクタードキュメント数の見極めが大切ですね。

![Top-k.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3967909/1d6d4e38-8fe5-40f6-925a-d26f39564c99.png)
<font color="#808080">*Tianjun Zhang et al.(2024) RAFT: Adapting Language Model to Domain Specific RAG*</font>

# 所感
LLMにRAFTを適用することで、無関係なドキュメントに対してより頑健なモデルを手に入れることができるようになります。これはRAGにおいて非常に重要です。なぜなら、Retrieveにおいてほぼ確実に無関係なドキュメントが含まれてしまうからです。
また、私個人としての大きな発見として、
- ゴールデンドキュメントを含めないデータセットを作った方が精度が上がる
- CoT形式の回答が過学習に対して効果的であった
- 実際にRAGに適応した際にも安定して精度向上が見られた

というものがありました。PrePrintということもあり、少し荒さも見えましたが、非常に有益な結果を示していると思います。(※記事執筆時の2025/3/1現在)
私自身、LLMのファインチューニングにおいて、過学習にかなり悩まされたためCoT形式の回答は打開策になりそうです！

# 参考文献
- [Tianjun Zhang and Shishir G. Patil and Naman Jain and Sheng Shen and Matei Zaharia and Ion Stoica and Joseph E. Gonzalez. RAFT: Adapting Language Model to Domain Specific RAG. 2024](https://arxiv.org/abs/2403.10131)
- [Freda Shi and Xinyun Chen and Kanishka Misra and Nathan Scales and David Dohan and Ed Chi and Nathanael Schärli and Denny Zhou. Large Language Models Can Be Easily Distracted by Irrelevant Context. 2023](https://arxiv.org/abs/2302.00093)
- [Jason Weston and Sainbayar Sukhbaatar. System 2 Attention (is something you might need too). 2023](https://arxiv.org/abs/2311.11829)
- [Nelson F. Liu and Kevin Lin and John Hewitt and Ashwin Paranjape and Michele Bevilacqua and Fabio Petroni and Percy Liang. Lost in the middle: How language models use long contexts. 2023](http://arxiv.org/abs/2307.03172)
- [batakeee.【RAG入門】RAGって何？なぜRAGが注目を浴びるのか？. 2025](https://qiita.com/batakeee/items/781ebe0d71d16c6b112d)