LoginSignup
17
14

最近話題になっている「Self-RAG」について説明します

Posted at

Self-RAGは最近非常に話題となっている最新RAG技術です。
日本語で調べるとなかなか相関記事がないので、今日はSelf-RAGの中身を共有したいと思います。
特徴としては、モデルがRAGする前に、RAGの必要性を判断してからRAGする/しないということです。

RAGをよく使うと気づくと思いますが、2つ大きな問題点があります。
一つはどんな質問に対しても強制的に検索することです。
極端的な例でいうと、例えば「こんにちは」とか非常にシンプルな内容をモデルに投げても、モデルが「こんにちは」をvectorstoreで検索していくつかの情報を持ってくるですね。
それらの情報を「こんにちは」と合わせてモデルに再inputすると、「こんにちは」すらもうまく回答できない時もあります。

もう一つはRAGで検索してきた情報はモデルのoutputに有益かどうかがわからないことです。
RAGで返した内容は、モデルのoutputに本当に有益なのか中身見れないので、実はoutputの生成に全然役に立たない、むしろoutputの質を悪くなってしまう可能性もあると思います。

Self-RAGは⇧の2つ問題点をある程度解決できてます。
コアになっているのは、RAGを評価するための小さなモデルC(Critic model)をトレニンーグしました。(chatgpt4を使って)
そのモデルをRAGとLLMの間に内装します。
イメージとしは:Vectorstore-Critic model-LLMみたいな感じです。
まずCはすべてのdecoderに対して、検索マークを付けて、RAGが必要かどうかを判断します。
RAGが必要ではないと判断した場合は、RAGなしでモデルがそのまま回答をoutputします。
RAGが必要と判断した場合は、複数個のRAG結果を並行で探して、それぞれプロンプトと合わせてLLMに渡します。
それでLLMが複数個の回答をoutputしますので、その中から一番良いRAG結果を決めて、最終的なoutputはこれにします。

11-14-2.png

Self-RAGを提出した方はSelfRAGでトレニンーグしたllama2もhuggingfaceに公開しています。
私も試して見たですが、処理時間が少し長くなったですが、RAGの精度が高くなったことは実感できます。

SelfRAG-llama-7bにつて:

github:

論文:

17
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
14