RAGで大事なキーワードを無視させない手法
導入
こんにちは、株式会社ナレッジセンスの須藤英寿です。
今回は、多段階のRAGで最初に入力した質問の大事なキーワードを、忘れないようにする手法「ActiShade」について紹介します。

複雑な質問に回答する際に、RAGを複数回繰り返すことで精度を上げることは一般的な手法として確立されています。しかし、検索回数が増えるごとに情報量が増えていき、ハルシネーションのリスクが高くなります。その中でも、特に致命的なのがユーザーの質問そのものの一部を忘れてしまうことです。
ActiShadeは「無視されたキーワード」に焦点をあてた手法です。「ActiShade」では、LLMの入力にノイズを紛れ込ませることで、LLMがキーワードを無視していないかを判定します。無視されている単語を見つけたら、その単語を強調して次のRAGを実行することで、最後までユーザーの質問を忘れない多段式RAGを実現しています。
課題意識
長いコンテキストと単語の重要度
LLMの進化によって、長いコンテキストの中であっても重要な単語を見極める能力は飛躍的に向上しています。とはいえ、コンテキストが長くなるほど、コンテキスト内の重要な単語の見極めが難しくなっていき、最終的にユーザーの入力の一部すら抜けてしまうこともありえます。
この問題が発生すると、「ActiShadeを論文で紹介した作者の、地元にある一番大きな建物の名前は?」と質問して、しばらくRAGを繰り返すうちに、「ActiShade」の名前を勘違いして、AntiShade, Shadeなど別の名前を使い始めてしまう、といった問題が起こりえます。
手法

ActiShadeは、検索で重要視されなくなった単語を見つけ出し、それを再度重要視されるように調整する手法です。具体的には以下の手順がRAGを繰り返すたびに動作します。
- クエリに含まれるキーフレーズを見つける。
- 入力トークンのEmbeddingのうち、キーフレーズが該当する部分にノイズを加えて、トークン出力時の確率分布を確認する。
- ノイズを加える前後で、変化が小さいものを「忘れられたキーフレーズ」として扱う。
- 忘れられたキーフレーズを強調して、検索を行い関連するドキュメントを取得。
- LLMで検索結果の重要性を判定する。
ポイントは、検索時に無視されてしまっている単語を明確にし、強調することです。
長い検索の過程で単語が埋もれてしまう可能性を防ぎ、最後まで一貫した検索を実現します。
評価

各種マルチターンのRAG手法とActiShadeの精度を比較した結果です。すべての基準でBaselineを超えており、最大で7%程度、精度が改善されています。
まとめ
今回は、RAGの繰り返しの過程で発生する、重要単語の喪失を防ぐ手法「ActiShade」について紹介しました。単語が無視されていないかや、ドキュメントごとの重要性を測る際にLLMを使わないといけない都合上、運用時の速度の問題はありますが、ユーザーのクエリの喪失という重大な課題を防ぐことができるようになっています。複雑なAgentを構築する際に、ユーザーの質問から段々とそれてしまう問題が発生している場合に、役立つ手法かと思うので、ぜひ参考にしていただければと思います。
Discussion