Zenn
💡

【RAG】文書をパラメータ化してLLMに直接注入する手法

に公開
34

本記事では、RAGの性能を高めるための「DyPRAG」という手法について、ざっくり理解します。株式会社ナレッジセンスは、エンタープライズ企業向けにRAGを提供しているスタートアップです。

この記事は何

この記事は、RAGの新手法である「DyPRAG」の論文[1]について、日本語で簡単にまとめたものです。

https://arxiv.org/abs/2503.23895

今回も「そもそもRAGとは?」については、知っている前提で進みます。確認する場合は以下の記事もご参考下さい。
https://zenn.dev/knowledgesense/articles/47de9ead8029ba

(すみません、ちょっと今回、玄人向けの記事です...🙏)

本題

ざっくりサマリー

RAGする際、文書をパラメータ化してLLMに直接注入する手法

DyPRAGは、中国科学院自動化研究所の研究者らによって2025年3月に提案されました。

通常のRAGでは、ユーザーの質問に関連する文書を「会話のコンテキスト」としてLLMに渡します(=「In-context learning」)。ただ、このとき文字数が多すぎると、LLMがハルシネーションを起こしたり、入力内容をLLMが「忘れて」しまったりなど、問題が起きます。[2]

DyPRAGでは、関連文書をLLMのパラメータに変換して、LLMに直接注入します。こうすることで、LLMは、文書の内容を、より忠実に理解して回答できるようになります。

(※ちなみに当然ですが、LLMにパラメータレベルで干渉できなければいけないので、GPT-4oのような重み非公開のモデルでは、この手法は使えません...)

問題意識

従来のRAGでは、入力内容が長かったり複雑だったりすると、一定の確率でLLMがハルシネーションを起こすという課題がありました。

実際、僕の感覚でも、「GPT-4o」のような強いモデルを使ったRAGでも、そこそこの確率でハルシネーションを起こします。(入力文書が専門的だと、特に起きやすい。)

そこでまず、2025年1月に、「PRAG」という手法が提案されました[3]

この手法は「DyPRAG」の前身です。「検索された文書をパラメータ化して、LLMに直接渡す」という手法ですが、事前に全ての文書についてLoRA学習が必要になるなど、「運用コストが高すぎる」という課題がありました。

このような流れで、「DyPRAG」が発表されました。DyPRAGでは、毎回の学習は必要としない形で、「検索された文書をパラメータ化してLLMに直接渡す」を実現し、RAGの精度を向上させます。

手法

RAGする際、文書をパラメータ化してLLMに直接注入する手法

【事前にやっておくこと】

  1. あらかじめ文書をパラメータ化しておく
    • 上記画像の「Stage 1」部分
    • 回答ソースにしたい文書を、質問応答(QA)ペアの形式に変換する
    • QAペアに変換された文書をもとに、小さなLoRAのパラメータを生成する
    • このような「文書→パラメータ」ペアを大量に保管しておく(480件くらい)
  2. パラメータ変換器を訓練する
    • 上記画像の「Stage 2」部分
    • 1のペアを学習データとして、文書をパラメータ化するための小さなMLP(ニューラルネットワーク)を事前訓練
    • (これにより、新しい文書を瞬時にパラメータへ変換できる)

【ユーザーが質問を入力して来たとき】

  1. 関連する文書を検索(通常通り)
  2. 文書をパラメータに変換
    • 検索した文書を、上記の「パラメータ変換器」に入力し、パラメータを得る
    • それをLoRAパラメータとしてLLM内部に注入
  3. 最終的な回答を生成

DyPRAGという手法のキモは、「文書をパラメータに変換する変換器」の部分です。外部情報を直接パラメータに変換してモデルの内部表現に統合することによって、LLMの内部知識(事前に学習している知識)と外部のソースを、自然な形で融合させて回答することができます。これは、論文では 知識融合 (=「knowledge fusion」) と表現されています。

成果

RAGする際、文書をパラメータ化してLLMに直接注入する手法

  • DyPRAG-Combine(※パラメータとしても、コンテキストとしてもダブルでLLMに渡す手法)が最も高性能
  • PRAG(従来手法)より圧倒的に軽量(PRAG比でストレージは0.04%)
  • わずか480件のDoc-Paramペアだけで、汎化性能が得られる(1件あたり数秒で生成可能)

  • OOD(未知の質問)にも強く、従来のRAGより20%以上スコア改善

まとめ

弊社では普段から、エンタープライズ向けにRAGサービスを開発しています。その中で、大企業の文書、専門性高すぎるという問題があります。文書の専門性が高いと、RAGは回答精度が落ちやすいです。

RAGのハルシネーションを防ぐ手法は、他にも色々あります[4]が、上記で触れた「知識融合」を発生させることで回答精度を上げるというのは、ユニークな手法だなと思いました。

この手法を使うことで最も恩恵を受けるのは、小さいモデルを使ったRAGです。もちろん、大きいモデル(GPT-4oなど)を使ったRAGでも性能は上がります。しかし、「DyPRAG」の性質は「内部知識を外付けで注入できる」ということなので、そもそもの「内部知識」が乏しい(小さい)モデルに対してこの手法を使った方が、インパクトが大きいです。

みなさまが業務でRAGシステムを構築する際も、選択肢として参考にしていただければ幸いです。今後も、RAGの回答精度を上げるような工夫や研究について、記事にしていこうと思います。我々が開発しているサービスはこちら

脚注
  1. "Better wit than wealth: Dynamic Parametric Retrieval Augmented Generation for Test-time Knowledge Enhancement", Tan et al. ↩︎

  2. 例えば「Lost in the Middle」問題は有名です。入力される文字数が多すぎると、LLMは、真ん中の方に書かれていることを無視してしまうというLLMの問題です。 ↩︎

  3. "Parametric Retrieval Augmented Generation", Su et al. ↩︎

  4. 例えば『RAGのハルシネーションを尤度で防ぐ』や『Astute RAG』など。 ↩︎

34
ナレッジセンス - AI知見共有ブログ

Discussion

ログインするとコメントできます