コンテキスト圧縮
Context Compression
こんてきすとあっしゅく
解説
コンテキスト圧縮とは、長い入力を要点や必要情報に縮めて、トークンを節約しつつ精度を保つ工夫です。理解すると調整がしやすくなります。
RAGで検索した10件のチャンクをそのままLLMに渡すと、数千トークンを消費します。しかも、その大半はユーザーの質問に直接関係のない情報かもしれません。コンテキスト圧縮(Context Compression)とは、検索で取得した長い文書群から本当に必要な情報だけを抽出・要約し、LLMに効率的に渡す技術です。
なぜ圧縮が必要なのか
LLMのコンテキストウィンドウには限りがあり、入力トークン数はそのままコストに反映されます。また、研究では長いコンテキストの中間部分にある情報は見落とされやすい「Lost in the Middle」問題が知られています。関連性の低い情報が多いと、回答の焦点がぼけてしまうこともあります。コンテキスト圧縮は、トークンコストの削減と回答精度の向上を同時に実現するための技術です。
抽出型と要約型
コンテキスト圧縮には主に2つのアプローチがあります。抽出型は、検索結果から質問に関連する文やパラグラフだけを抜き出す方法です。LangChainのLLMChainExtractorは、各チャンクに対してLLMを使い「この質問に関連する部分だけを抜き出してください」と指示して不要部分を除去します。
要約型は、検索結果全体を要約して短縮する方法です。複数のチャンクにまたがる情報を統合し、質問に焦点を当てた簡潔な要約を生成します。情報の統合と圧縮が同時に行われるため、断片的な検索結果をまとまった文脈に再構成できる利点があります。
フィルタリングとの組み合わせ
圧縮の前段階として、関連度の低い文書をフィルタリングで除外する方法も効果的です。リランキングモデルでスコアが閾値以下のチャンクを除外し、残ったチャンクに対して圧縮を適用すれば、LLMの呼び出し回数も抑えられます。リランキング → フィルタリング → 圧縮 → 生成というパイプラインが、精度とコストの最適なバランスを実現します。
圧縮のリスクと対策
コンテキスト圧縮には注意すべき点もあります。圧縮の過程で重要な詳細や数値が失われるリスクがあります。また、圧縮自体にLLMを使う場合は追加の推論コストが発生します。そのため、圧縮の効果を定量的に測定し、圧縮なしの場合と回答品質を比較評価することが重要です。トークン削減量と回答精度のバランスを見ながら、圧縮の度合いを調整するのが実践的なアプローチです。