RAGで文書を圧縮して速度を5倍にする手法
導入
こんにちは、株式会社ナレッジセンスの須藤英寿です。
今回は、取得したドキュメントを圧縮することでLLMの生成速度を最大5倍高速化する手法「OSCAR」について紹介します。速度はもちろん、入力するデータ自体も小さくできるので費用も抑えることができるようになっています。
サマリー
RAGは必要な情報を収集して、その情報を元に回答を生成する機能をもっていますが、多くの場合で無関係な情報を含めてLLMに渡します。これにより、LLMへの入力トークンが増加してしまい、文章の生成が完了するまでの速度と料金がより多くかかることになります。
今回紹介する「OSCAR」はLLMに渡す文章を「圧縮」することで入力トークンを抑え、かかる時間と料金を抑えることができます。加えて、精度についてもそのままLLMに検索結果を渡す場合と比べて同程度の精度を実現しています。
問題意識
大量の文章を追加することの悪影響
最近はLLMの入力コンテキストが増えてきているため、入力する文章の量に関する問題が曖昧になりがちですが、文章の量が多ければコストも文章の生成速度にも悪い影響が出ます。そして、膨大な文章はLLMの判断力に悪影響を及ぼします。この判断力の低下はToolを用いたLLM Agentを利用する際に顕著に影響が出るようになります。なので、LLMに渡す文章は重要度の高い部分に可能な限り絞る必要があります。
手法
OSCARとは
OSCARはRAGの一連の処理のうち、ファイル検索が完了した後に動作します。ユーザーが入力したクエリと検索されたファイルとを組み合わせて、リアルタイムでファイルの圧縮を行います。さらにこの圧縮の過程で再ランキング処理も同時に稼働するため、OSCARは文章の圧縮だけではなく、検索性能の低下も抑えることに成功しています。
OSCARの学習過程
OSCARは既存のLLMを蒸留することで実現します。そして学習過程では、圧縮と回答生成の2つの目的を持ったLLMを用意して互いに協調しながら学習を進めていきます。
圧縮を担当するLLMは、「質問」「文書」のセットを入力として、文章を圧縮することを学びます。対して回答生成を担当するLLMは「圧縮を担当するLLMが生成した結果」と「質問」を入力として、出力があらかじめ用意した正解データと一致するように学習します。
この圧縮から回答生成までの処理をまとめて同時に学習を進めており、これにより精度の高い圧縮に成功しています。
成果
OSCARは、LLMにわたすファイルを決定した後に動作し、LLMの回答の生成にかかる時間を短縮することができます。以下の表では、渡す文書が決定したあとから各手法で回答の生成が完了するまでの時間と生成された回答がどの程度正確かを表しています。
まず精度の面で比較してみると、非圧縮のパターンと比較すると小さいモデルであればわずかに高い精度、大きなモデルになるに従ってわずかに非圧縮のほうが精度が高そうです。時間に関しては圧縮していない場合と比較して3倍以上高速になっており、大きなモデルでは5倍程度となっています。表の中のPISCO
は速度面で最も高速で、この手法は事前に文書を圧縮する手法で検索時の圧縮が無いためにより高速になっていそうです。一方で精度の面ではOSCARのほうが優位なようです。
まとめ
検索したファイルを圧縮して、LLMによる回答の速度とコストを改善する手法「OSCAR」について紹介しました。この手法はそれだけではなく、既存のRAGのシステム比較的簡単に組み込むことが簡単な点もプラスだと考えています。ただし、実際に利用するうえでは、日本語への対応力の確認はもちろんのこと、前段でいわゆるRerankモデルを使っても問題ないのか検証が必要だと考えています。現時点ではモデルが非公開になってしまっているのですぐに試せる状態では無いですが、皆様の業務の参考になれば幸いです。
Discussion