有効な情報が常に必要な情報とは限らない。


検証を通過した情報が1,000件ある

機械的検証が機能したとする。

フォーマットは正しく、 必須フィールドが存在し、 識別子は有効で、 型は適切で、 参照整合性も保たれている – 1,000件の記述が残っている。

すべて有効な情報である。 仕様に適合している。拒否する理由はない。

しかしコンテキストウィンドウには300件しか入らない。

どの300件を入れるか。

これがフィルタリングの問題である。


検証とフィルタリングは異なる問いを発する

検証が問うこと: 「この情報は有効か?」 フィルタリングが問うこと: 「この情報は今必要か?」

検証は情報そのものの属性を見る。 フォーマットは正しいか。フィールドは存在するか。参照は有効か。 その情報が何についてのものか、どんな目的で使われるかは関係ない。

フィルタリングは情報と状況の関係を見る。 今のこの推論に関連するか。 この情報は信頼できるか。 十分に新しいか。

検証はコンテキストなしで可能である。仕様だけがあればよい。 フィルタリングはコンテキストなしでは不可能である。「今何が必要か」を知る必要がある。

検証は決定的である。有効か無効か。 フィルタリングは判断である。関連性には度合いがあり、信頼性には閾値があり、新しさには文脈がある。

検証は安価である。 フィルタリングは比較的高コストである。

だから検証が先に来て、フィルタリングが後に来る。 検証が先にフィルタリングすれば、フィルタリングはより小さな集合を判断する。 高コストな判断のコストが減少する。


フィルタリングが判断する三つのこと

フィルタリングは主に三つのことを見る。

関連性: この推論に必要か

ユーザーが「サムスン電子の2024年第3四半期の営業利益」について質問した。

検証を通過した有効な記述の中に:

  • サムスン電子の2024年第3四半期の営業利益は9.18兆ウォンであった。
  • サムスン電子の2024年第3四半期の売上高は79兆ウォンであった。
  • サムスン電子の2023年第3四半期の営業利益は2.43兆ウォンであった。
  • サムスン電子の半導体設備投資計画は2025年時点で53兆ウォンである。
  • サムスン電子の本社は水原にある。

すべて有効である。すべてサムスン電子についてである。 すべてをコンテキストに入れるか。

本社所在地は無関係である。 設備投資計画は関連性が低い。 2023年の営業利益は比較に有用かもしれない。 売上高は営業利益と密接に関連している。

自然言語RAGでは、この判断は埋め込み類似度に委ねられる。 「サムスン電子 営業利益」とのベクトル距離で順位付けされる。 しかしすでに議論した通り、類似は関連ではない。

構造化表現では、関連性の判断に異なる入力がある。 その記述はどの個体を指しているか。サムスン電子。 どのプロパティか。営業利益。 いつか。2024年第3四半期。

個体・プロパティ・時間がフィールドとして存在すれば、 「同一個体・同一プロパティ・同一時間」を正確に見つけられる。 そして「同一個体・同一プロパティ・異なる時間」を意図的に含めたり除外したりできる。 ベクトル距離ではなく、フィールドマッチングである。

関連性は依然として判断である。決定的ではない。 しかしその判断への入力がベクトル距離か構造化フィールドかで、精度に差が出る。

信頼性: この情報は信じられるか

同一内容について二つの記述が存在する。

  • 出典: サムスン電子IR開示。確信度: 1.0。「2024年第3四半期の営業利益: 9.18兆ウォン。」
  • 出典: 匿名ブログ。確信度: 0.3。「2024年第3四半期の営業利益: 約10兆ウォン。」

どちらをコンテキストに入れるか。

当然、前者である。

しかしこの判断が「当然」であるためには、 出典と確信度が読み取れる形で存在しなければならない。

自然言語チャンクでは、出典はテキストのどこかに埋もれているか存在しない。 確信度は表現されたことがない。 二つのチャンクを比較してどちらがより信頼できるか判断するには、 LLMが読んで推論しなければならない。

構造化表現では、出典と確信度はフィールドである。 「確信度0.5未満を除外する」は比較一つで済む。 「一次情報のみ含める」はフィールドマッチングで済む。

信頼性フィルタリングのコストはLLM推論からフィールド比較へ移行する。

新鮮さ: この情報は十分に最新か

「サムスン電子の代表取締役は誰か?」

  • 時間: 2024年3月。「サムスン電子代表取締役: 慶桂顕。」
  • 時間: 2022年12月。「サムスン電子共同代表取締役: 韓鍾熙、慶桂顕。」

両方とも有効である。フォーマットは正しく、出典もある。 しかし最新のものが必要である。

自然言語では、時間がテキスト中に記載されているかもしれないし、されていないかもしれない。 「昨年時点で」と書かれていれば、「昨年」がいつだったかも計算しなければならない。

構造化表現では、時間はフィールドである。 ISO 8601の日付である。 「最新の記述のみ含める」はソート操作一つで済む。

さらに重要なのは、新鮮さの基準はコンテキストに依存するということである。 代表取締役を聞かれれば、最新のエントリが必要である。 歴代の代表取締役を聞かれれば、すべてのエントリが必要である。 売上高の推移を聞かれれば、直近8四半期分が必要である。

時間がフィールドとして存在すれば、これらの条件はクエリとして表現できる。 時間が自然言語に埋もれていれば、毎回抽出しなければならない。


なぜフィルタリングは機械的検証ではないのか

ここに重要な区別がある。

フィルタリングの三つの基準 – 関連性・信頼性・新鮮さ – のうち、 信頼性と新鮮さは構造化表現において大部分を機械的に処理できる。 フィールド比較、値のソート、範囲フィルタリング。

では、なぜこれを「検証」ではなく「フィルタリング」と呼ぶのか。

検証は情報そのものの属性だけを見る。 「この記述に時間フィールドがあるか?」 あるかないか。コンテキストは不要である。

フィルタリングは情報と状況の関係を見る。 「この記述の時間はこの質問に対して適切か?」 質問が何かを知らなければ答えられない。

両方とも同じ時間フィールドを調べるが、 検証は「存在」をチェックし、 フィルタリングは「適切さ」を判断する。

存在はコンテキストを必要としない。 適切さはコンテキストを必要とする。

この違いが、パイプラインで二つの段階を分離する理由である。


フィルタリングのコスト構造

フィルタリングは検証より高コストである。しかしどの程度高コストかは表現に依存する。

自然言語パイプラインでのフィルタリング: 関連性判断 – LLM推論または埋め込み類似度計算。 信頼性判断 – LLMがテキストから出典情報を抽出して評価。 新鮮さ判断 – LLMがテキストから時間情報を抽出して比較。 すべて推論。すべて高コスト。

構造化表現でのフィルタリング: 関連性判断 – 個体/プロパティのフィールドマッチング + コンテキストベースの判断。 信頼性判断 – 確信度フィールドの比較。出典フィールドのマッチング。 新鮮さ判断 – 時間フィールドのソート。範囲比較。 信頼性と新鮮さはフィールド操作である。判断が必要なのは関連性だけである。

つまり、構造化によってフィルタリングの三基準のうち二つが機械的操作に変換される。 残るのは関連性のみである。 関連性すらも、「このテキストの塊は質問に似ているか」から「この個体のこのプロパティはこの質問に関連するか」へと狭まり、判断がより明確になる。

フィルタリングの総コストは大幅に下がる。


フィルタリングがない場合に何が起こるか

検証はするが、フィルタリングなしにすべてをコンテキストに入れた場合。

有効な情報1,000件がすべて入る。 そのうち今必要なのは30件だけである。

LLMは1,000件すべてを読む。 読むのにコストがかかる。 不要な970件が注意を分散させる。 研究によれば、コンテキスト内の無関係な情報が多いほど、ハルシネーションの可能性が高まる。 本当に重要な30件に対する推論品質が低下する。

ウィンドウも無駄になる。 1,000件が占める空間のうち、970件分は浪費である。 その空間には他のより関連性の高い情報を入れられたはずである。

フィルタリングとは有限なウィンドウを有限に管理することである。 検証が「入る資格があるか」を確認するなら、 フィルタリングは「入る理由があるか」を判断する。

資格はフォーマットの問題である。理由はコンテキストの問題である。 両方が必要である。


フィルタリングはポリシーである

もう一つ重要な点がある。

フィルタリングの基準は固定ではない。 コンテキストによって変わる。

医療相談エージェントのフィルタリング: 信頼性の閾値が高い。確信度0.9未満は除外する。 新鮮さの基準が厳格である。3年以上前の医療情報は除外する。 査読付き学術誌以外の出典は除外する。

カジュアルな会話エージェントのフィルタリング: 信頼性の閾値が低い。おおよその情報で構わない。 新鮮さの基準が柔軟である。文脈によっては古い情報も含めてよい。 出典の制約が緩い。

同じ情報が一方のエージェントでは通過し、他方では拒否される。 情報は変わっていない。ポリシーが異なるのである。

これはフィルタリングが単なる技術的問題ではなく、 設計の問題であることを意味する。 「コンテキストに何を入れるか」は 「このエージェントをどのような基準で運用したいか」と同じ問いである。

構造化表現では、このポリシーは宣言的に表現される。 「confidence >= 0.9, time >= 2022, source_type = peer-reviewed。」 クエリ一行である。

自然言語では、このポリシーはプロンプト内に自然言語で書かれる。 「信頼性の高い最新の情報のみを参照してください。」 LLMがこれを一貫して守るかどうかは確率の問題である。


まとめ

検証を通過した情報のすべてが必要なわけではない。 有限なコンテキストウィンドウには、現在の推論に必要なものだけを入れるべきである。

フィルタリングは三つのことを判断する。 関連性 – この情報は現在の質問に必要か。 信頼性 – この情報は信じられるか。 新鮮さ – この情報は十分に最新か。

検証とフィルタリングは異なる問いを発する。 検証は「有効か」を問い、フィルタリングは「必要か」を問う。 検証はコンテキストなしで可能であり、フィルタリングはコンテキストを必要とする。 検証が先に来て、フィルタリングが後に来る。

構造化表現では、フィルタリングの三基準のうち二つ – 信頼性と新鮮さ – がフィールド操作に変換される。残るのは関連性のみであり、それすらも構造的フィールドマッチングによってより明確になる。

フィルタリングはポリシーである。 同じ情報がコンテキストによって含まれたり除外されたりする。 構造化表現では、このポリシーはクエリとして宣言される。 自然言語では、このポリシーはプロンプトに希望として書かれる。