AI モデル(ChatGPT や Claude など)は汎用的な知識を持っていますが、特定の会社の情報や専門的なドキュメントについては知りません。例えば:
これらの情報を AI に「教えて」正確に回答させるための技術が RAG であり、その改良版が今回紹介される Contextual Retrieval です。
RAG = Retrieval-Augmented Generation(検索拡張生成)
簡単に言うと:「質問に関連する情報をデータベースから検索して、それを AI に渡してから回答させる」という仕組みです。
方法1:全部プロンプトに入れる
方法2:RAG を使う
何をするか: 文章の「意味」を数値ベクトルに変換して、意味的に似ている文章を見つける
例:
得意なこと: 言い換えや類義語を使った検索に強い
苦手なこと: 固有名詞や特定のコードなど、完全一致が必要な検索
BM25とは: Best Matching 25の略。単語の一致度に基づいてランキングする古典的な検索アルゴリズム
基盤技術:TF-IDF
BM25はTF-IDFを改良し、文書の長さを考慮し、用語頻度に飽和関数を適用することでこれを改良し、一般的な単語が結果の大部分を占めるのを防ぎます。
例:
ユーザーが「エラーコード TS-999」で検索した場合
得意なこと: 固有名詞、製品コード、専門用語の完全一致

【前処理(事前準備)】
1. ドキュメントを小さな「チャンク」に分割
例:1つのPDF → 数百個の短いテキスト断片
2. 各チャンクに対して以下を作成:
- TF-IDFエンコーディング(BM25用)
- セマンティック埋め込み(Embedding用)
【実行時(ユーザーが質問したとき)】
3. BM25で単語の完全一致に基づくTop候補を取得
4. Embeddingで意味的類似性に基づくTop候補を取得
5. 両方の結果をランクフュージョン技術で統合・重複除去
6. 上位Kチャンクをプロンプトに追加してAIが回答生成
ドキュメントを小さなチャンクに分割すると、そのチャンクだけでは何の話かわからなくなるという問題が発生します。
具体例:SEC(米国証券取引委員会)への提出書類
【元の文書】
ACME社 2023年第2四半期 業績報告書
前四半期の売上高は3億1400万ドルでした。
今四半期、会社の売上は前四半期比3%成長しました。
...
【チャンクに分割後】
チャンク#47: 「会社の売上は前四半期比3%成長しました。」
問題点:
結果:
「ACME社のQ2 2023の売上成長率は?」と質問しても、このチャンクが正しく検索されない可能性が高い
各チャンクに「文脈説明」を追加してからEmbeddingとBM25インデックスを作成する
【Before:従来のチャンク】
「会社の売上は前四半期比3%成長しました。」
【After:文脈化されたチャンク】
「このチャンクはACME社の2023年Q2業績に関するSEC提出書類からの
抜粋です。前四半期の売上高は3億1400万ドルでした。
会社の売上は前四半期比3%成長しました。」
数千〜数百万のチャンクを人手で注釈するのは不可能です。そこでClaudeを使って自動生成します。
使用するプロンプト:
<document>
{{ドキュメント全体}}
</document>
以下のチャンクをドキュメント全体の中で位置づけてください
<chunk>
{{チャンクの内容}}
</chunk>
検索精度向上のため、このチャンクを文脈づける簡潔な説明を
書いてください。説明のみを回答してください。
生成される文脈は通常50〜100トークン(数十語程度)で、チャンクの先頭に追加されます。

各チャンクに文脈を生成するには、「ドキュメント全体」を毎回読み込む必要があります。
数百チャンクがあると、同じドキュメントを数百回読み込むことに…
Claudeの「プロンプトキャッシング」機能を使うと:
結果:100万トークンあたり約$1.02という低コストで文脈化が可能
| 手法 | 検索失敗率 | 改善率 |
|---|---|---|
| 従来のEmbedding | 5.7% | — |
| Contextual Embedding | 3.7% | 35%改善 |
| Contextual Embedding + Contextual BM25 | 2.9% | 49%改善 |
| 上記 + Reranking | 1.9% | 67%改善 |
初期検索で大量のチャンク(例:150個)を取得した後、関連性が薄いチャンクまで取得され、後の回答生成 AI モデルが混乱を招く恐れがあります。これを防ぐため専用のモデルで再評価して本当に関連性の高いものだけを残す技術です。
1. 初期検索 → Top 150チャンクを取得
2. Rerankingモデルに150チャンク + ユーザークエリを再ランキングモデルに渡す
3. 各チャンクに関連性スコアを付与
4. Top 20のみを選抜 → 回答生成 AI に渡す
メリット:
トレードオフ: