183 Views
January 09, 25
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2024年度後期輪読会第12回[LLM] 第13章 RAG 京都大学 経済学部 1回 大澤 衡正 0
アジェンダ 13.1 RAGとは 1
アジェンダ ◼ RAGの必要性 ◼ RAGの基本的なシステム構成 ◼ RAGが解決を目指す5つの課題 2
アジェンダ ◼ RAGの必要性 ◼ RAGの基本的なシステム構成 ◼ RAGが解決を目指す5つの課題 3
RAGの必要性 LLMは一般的な知識をパラメータ内に保持しているが、それだけでは不都合なことも多い 純粋なLLMだけでは不十分な理由 ◼ 新しい知識に対応することが難しい ⇒ファインチューニングを施すことで知識を更新できるが、計算量の観点から現実的でない ◼ 個人や企業が独自に持つデータに対して回答させたい ⇒ファインチューニングの非効率さだけでなく、データの機密性保持も重要 〇実験:RAGを用いない純粋なLLMに質疑応答させてみる Q:日本で一番高い山は? A:日本で一番高い山は富士山で、標高は3,776メートルです。 ←これは正解 Q:四国地方で一番高い山は? A:日本の四国地方で最も高い山は、徳島県と高知県の県境に位置する剣山(略) ↑誤った情報が出力されておりハルシネーションが発生している 4
アジェンダ ◼ RAGの必要性 ◼ RAGの基本的なシステム構成 ◼ RAGが解決を目指す5つの課題 5
RAGの基本的なシステム構成 前スライドの問題を解決するために提案された手法が RAG (Retrieval-Augmented-Generation, 検索拡張生成) である ⚫ LLMとは別に回答させたい内容に関するデータ集めたデータストアを構築 ⚫ 検索器を用いて質問に関連する参考文書をデータストアから抽出する ⚫ LLMには質問と参考文書を与えて回答を行わせる 6
アジェンダ ◼ RAGの必要性 ◼ RAGの基本的なシステム構成 ◼ RAGが解決を目指す5つの課題 7
RAGが解決を目指すLLMの5つの課題 RAGを用いることで、以下の5つの課題を解決することを目指す ⚫ LLMが事実に基づかない出力をしてしまう ⇒「RAGの必要性」スライドで確認したようなハルシネーションが起こりうる ⚫ LLMの出力の根拠を調べることが困難 ⇒LLMの知識はパラメータ内に存在しており、これを解析して出力の根拠を得るのは困難 ⚫ LLMが学習する情報の制御が困難 ⇒機密性の高いデータをLLMに学習させることはセキュリティ上のリスクを伴う ⚫ より新しいデータや異分野への適応が困難 ⇒追加学習は膨大な計算リソースを必要とし、多くの場合現実的でない ⚫ 知識を扱うために大規模なモデルが必要 ⇒知識の量を増やすには多くのパラメータが要求されるが、 これはより多くの計算リソースが必要となることを意味する 8
アジェンダ 13.2 基本的なRAGシステムの実装 9
LangChain LangChainというライブラリを用いて効率的にRAGの実装を行う LangChainではLLM, 分埋め込みモデル等の様々な要素がコンポーネントとして抽象化されており、 これらを組み合わせることでLLMを活用したアプリケーションを容易に構築できる 今回、RAGの実装においては以下のコンポーネントを使用する ⚫ Chat Modelコンポーネント ⚫ Prompt Templateコンポーネント ⚫ Embedding Modelコンポーネント ⚫ Document Loaderコンポーネント ⚫ Text Splitterコンポーネント ⚫ Vector Storeコンポーネント ⚫ Retrieverコンポーネント 次スライド以降で、各コンポーネントの実装例を紹介します ※今回の実装及び動作確認はローカル環境で行ったため、書籍のコードと異なる部分が存在します 10
コンポーネントの実装(1) RAGの実装の上で重要なLLM本体と埋め込みモデル関連のコンポーネントの実装例です Embedding Modelコンポーネント Chat Modelコンポーネント Chat Templateコンポーネント 11
コンポーネントの実装(1) 次に文書検索システムの実装に必要な各種コンポーネントの実装例を紹介します Document Loaderコンポーネント: これを用いてドキュメントを読み込みます Vector Storeコンポーネント: 前処理したドキュメントと埋め込みモデルを 用いてベクトルインデックスを構築します Retrieverコンポーネント: データストアとベクトルインデックスに基づいて 検索を行うコンポーネントです Text Splitterコンポーネント: 続いてドキュメントに前処理を施します 12
LangChainにおけるRAGの実装 右の構成図に則ってRAGの実装を行う 既に紹介したコンポーネントを用いて、 この構成は以下のように実装できます ※実装の全体像は参考書籍のgithub またはスライド末尾のgithubを参考にしてください 13
アジェンダ 13.3 RAG向けにLLMを 指示チューニングする 14
アジェンダ ◼ 指示チューニングの実行及び、RAGの再実装 ◼ 実験 15
指示チューニングの実行及び、RAGの再実装 指示チューニングを行って、さらにRAGの精度を向上させる これまで使用していたLLMではRAGを構築しても欲しい回答を安定的にあることが難しいです そのため、指示チューニングを行うことでさらに精度を向上させていきます。 指示チューニングの具体的な手法については11章を参照してください。 今回はNvidia RTX 3060ti(vram16GB)を用いて指示チューニングを行いました。 TransformersのTraining Argumentsを修正する必要があったので、 動作した設定を共有します。 ⇨ 学習は10分程度で完了しました。 このモデルを保存し、 RAGで使用するモデルを切り替えることで、 指示チューニングを行ったモデルをRAGで使用できます。 ※私の環境では指示チューニング済モデルを動かすには “max_new_tokens”: 64 を設定する必要がありました。 16
アジェンダ ◼ 指示チューニングの実行及び、RAGの再実装 ◼ 実験 17
実験 指示チューニングを行う前と後のモデルに AI王データセットの問題を解かせ、 正答率を評価します 指示チューニング前モデル: 正答率:51.65% 正答率(書籍):52.3% 指示チューニング後モデル: 正答率:81.48% 正答率(書籍):82.1% 指示チューニングによって 性能が向上していることがわかります。 書籍上の検証結果とも整合性のある 結果が得られました 指示チューニングを行う前と後のモデルで RAGを構築し、回答を評価します Q:四国地方で一番高い山は? 指示チューニング前モデル: A(書籍): 日本の四国地方で最も高い山は、 愛媛県と高知県の県境にある石鎚山です。 標高は(略) 指示チューニング後モデル: A(書籍):石鎚山 指示チューニングによって より望ましい回答を得られるようにりました 18
アジェンダ 13.4 RAGの性能評価 19
アジェンダ ◼ RAGの性能評価における3つの観点 ◼ RAGの性能評価を自動で行う方法 ◼ RAGの構成要素としてのLLMの能力評価 20
アジェンダ ◼ RAGの性能評価における3つの観点 ◼ RAGの性能評価を自動で行う方法 ◼ RAGの構成要素としてのLLMの能力評価 21
RAGの性能評価における3つの観点 RAGの性能評価を行う主な観点としては以下の3つが挙げられています ⚫ 文脈の関連性(Context Relevance) ⇒質問に対して検索器が検索した文書が質問の内容に関連しているか ⚫ 回答の忠実性(Answer Faithfulness) ⇒LLMが文書の内容に基づいているか ⚫ 回答の関連性(Answer Relevance) ⇒LLMが生成した回答が質問の内容に適合しているか 22
アジェンダ ◼ RAGの性能評価における3つの観点 ◼ RAGの性能評価を自動で行う方法 ◼ RAGの構成要素としてのLLMの能力評価 23
RAGの性能評価を自動で行う方法 RAGの性能評価を自動で行う方法としてRAGAs(RAG Assessment)が提案されています ◼ Context Relevance 1. 文書cを文単位に分割する 2. LLMを用いてcに含まれる各文が質問qと関連しているかを判定する 3. cに含まれる分のうち、質問qと関連していると判定された文の割合をスコアとする ◼ Answer Faithfulness 1. LLMを用いて回答aの内容をそれぞれが単一の情報を含むような複数の文章に分割し、 S(a)とする 2. LLMを用いてS(a)に含まれる各文章が文書cから導けるかを判定する 3. S(a)に含まれる文書のうち、導出可能と判定されたものの割合をスコアとする ◼ Answer Relevance 1. LLMを用いて回答aをもとにn個の擬似質問を生成する 2. 分埋め込みモデルを用いて質問と擬似質問の類似度を計算する 3. n個の擬似質問に対する類似度の平均をスコアとする 24
アジェンダ ◼ RAGの性能評価における3つの観点 ◼ RAGの性能評価を自動で行う方法 ◼ RAGの構成要素としてのLLMの能力評価 25
RAGの構成要素としてのLLMの能力の評価 RAGの構成要素としてのLLMに求められる能力として以下の4つが挙げられています ⚫ ノイズへの頑強性(Noise Robustness) ⇒回答に役立つ文書のみを選択して回答する能力 ⚫ 回答不能な質問の却下(Negative Rejection) ⇒回答に必要な情報が与えられなかった場合、 回答を出力しないことを選択する能力 ⚫ 情報の統合(Information Integration) ⇒回答に必要な情報が複数の文書に跨っている場合、 情報を統合して回答する能力 ⚫ 反事実への頑強性(Counterfactual Robustness) ⇒事実に反する文書を指摘する能力 既存のLLMは一定のノイズ頑強性はあるものの、 他3つに関しては改善の余地が大きい 26
APPENDIX 一連の動作確認に用いたコードは以下のgithubレポジトリで公開しています 特にローカル環境での実行に興味がある方の参考になれば幸いです OsawaKousei/rag_base 27