RAG:検索拡張生成
RAG は、言語モデルが答える前に検索を加えます。質問をベクトルへ変換し、コサイン類似度が高い k 個の文書チャンクをプロンプトへ入れ、それを根拠に回答するよう指示します。モデルを再訓練する必要はありませんが、「文脈だけで答える」という指示が必ず守られる保証もありません。
資料を選ぶ係のいる持ち込み試験に似ています。検索側が資料を選び、回答側が読みます。選んだ内容の関連性と十分さが答えを左右し、生成側にも誤読や創作の余地があります。この教材は検索結果と回答を並べて見せます。
RAG の仕組み
質問前に索引を作り、文書変更時に更新します。 数文ずつのチャンクへ分け、埋め込みモデルでベクトル化します。本例は実 MiniLM の 384 次元です。意味が近い文は違う語でも近くなりやすいものの、学習した近さは完全な意味判定ではありません。文とベクトルの集合が索引です。
質問ごとに検索します。 本例は同じモデルで質問を埋め込みます。一般には質問と文書のエンコーダーが互換の空間を持つ必要があり、無関係なモデルは混ぜられません。共同訓練した質問用・文書用エンコーダーなら異なっても構いません。質問と全チャンクのコサインを計算し、上位 k 個を選び、「以下の文脈だけで答える」という指示と質問の間へ入れてから回答します。
最高得点さえ関連性しきい値未満なら生成しません。答えがない資料にも最も近いチャンクはあります。最近傍は順位であって、関連する保証ではありません。
RAG のステップ
初期設定は架空のスマートランプのヘルプ 10 チャンク、k = 3、質問は My lamp won't connect to my phone.。得点は実埋め込みから計算し、後の回答は固定シナリオで、ライブモデル出力ではありません。
- 索引。 返金、口座間送金、Bluetooth ペアリング、ファームウェア、初期化、保証条項 2 件、ストアクレジット、電話アプリ、明るさの 10 チャンクです。各ベクトルを 2 次元へ投影して描きます。
- 質問を埋め込む。 同じモデルで作った質問ベクトルを星で示します。
- 得点計算。 全 10 件とコサインを計算します。
Pair the lamp over Bluetooth: hold the base button five seconds...は症状の connect、phone を使わなくても 0.55、1 位。phone を含むアプリ文書は予定や日没時の減光を扱い、0.14、5 位です。比は約 4 倍でも、正答率や確率が 4 倍という意味ではありません。 - 上位 k 件。 ペアリング 0.55、初期化 0.50、ファームウェア 0.28 を選びます。最良の 1 件以外も入ります。
- プロンプトを拡張。 3 件を規則と質問の間へ置きます。
- 回答と引用。 「底のボタンを 5 秒押し、青く点滅するまで待つ。ペアリングは Bluetooth を使う」と示し、チャンク 3 を引用します。モデルの事前知識を推測せず、取得した文で根拠を確認できます。
検索が答えへ及ぼす影響
Split fact は Can I still get my money back after two months? と尋ねます。返金期限のチャンクが 0.53、1 位で、返金は 30 日以内と書かれています。別チャンクには未開封品ならいつでもストアクレジットに交換できる条件がありますが、ギフト包装と同じ塊に入って関連性が弱まり、0.24、4 位です。
k = 3 では一般保証が 0.29、2 位、口座間送金が 0.26、3 位を取り、money back の語が後者へ引っ張ります。表示回答は「購入後 30 日以内だけ返金できる」。現金返金の期限は支持されても、別の解決策であるストアクレジットを落としています。ストアクレジット自体も現金返金とは区別します。
k を 3 から 4 にすると欠けた条件が入り、同じ質問への表示回答が両方を説明し、2 出典を引用します。変えたのはモデルの訓練ではなく、渡す根拠です。
Not in docs は Do you sell replacement bulbs?。電球の文書はなく、最高 0.16 がしきい値 0.35 を下回るので回答しません。しきい値を Off にすると同じ低関連順位を渡し、固定回答は「交換用電球は 2 年保証の対象」と述べます。引用付きでも根拠のない創作です。無関係な文脈から生成する失敗の一例であり、RAG 幻覚の原因割合を測ったものではありません。
Keyword trap は Can I trade in an unwanted present through the app?。関連するのはストアクレジットですが、app の語が口座送金を 0.49、1 位へ押し、必要な条件は 0.48、2 位になります。k = 1 の表示回答は家族間送金を説明し、k ≥ 2 なら交換条件も取得します。埋め込みは単語への偏りを減らしても、なくせません。
Paraphrase は How do I erase all my settings and start the lamp like new?。文書に erase、settings、like new はなくても、初期化が 0.67 で勝ちます。この教材で最も高い 1 位スコアです。
境界条件
- 互換の埋め込み空間。 無関係なエンコーダーの座標は比較できず、空間変更には文書の再埋め込みが必要です。共同訓練した二重エンコーダーまで同じ重みである必要はありません。
- 負のコサイン。 一部は負になり、ベクトルの角度が 90° を超えることを示します。共通の意味が負の量という意味ではありません。
- しきい値は調整対象。 0.35 はこの資料での設定です。実システムは資料・モデルに合わせるか、再ランキングの判定を使います。Not in docs の On/Off は同じ順位のまま生成分岐だけを変えます。
- k は予算。 10 件から 5 件選ぶと低スコアの資料も入り得ます。Split fact は k=4 で必要情報がそろい、k=10 も含められますが、雑音と入力費用が増えます。
- 分割の設計。 粗すぎると話題が混ざり、細かすぎると条件を失います。本例の欠落は 1 チャンクに 2 話題があることから起きます。
よくある間違い
- 根拠を取得できないのに生成だけ調整する。 温度や言い回し、強いモデルに変えても、省いたチャンクが検索根拠として現れるわけではありません。まず順位と切り捨て位置を調べます。
- 引用を正しさの証明とする。 引用は出典へのポインターです。主張を支持するか、資料が十分かを確認します。返金期限の引用だけでは全選択肢を示せません。
- grep と同じに考える。 ベクトル近傍では phone のあるアプリ文書が別表現のペアリングに負け、逆にキーワードが無関係な候補を押し上げることもあります。
- 回答しない分岐をなくす。 常に回答させれば無関係な最近傍を使い得ます。しきい値は本例を止めても、全回答の正しさを保証しません。
- 文脈追加を無料と考える。 各チャンクは文脈窓と入力予算を使います。文脈とメモリでその制約を扱います。
モデルの簡略化
MiniLM の 384 次元埋め込みとコサインは実計算ですが、資料は 10 件だけで総当たり検索です。大規模システムは近似最近傍索引を使い、重なり付き分割、キーワードとベクトルの混合検索、再ランキング、質問書き換えも加えます。
平面は PCA 投影で、得点は全 384 次元から計算します。図上の距離より表の値を見てください。回答は検索差に焦点を当てるための脚本です。実モデルが必ず同じ答えを出すとは示していません。
続けて学ぶ
同じ手法につながるレッスンや、次の概念への入口です。
鍵マークのあるレッスンの操作には有料アクセスが必要です。解説はすべて無料で読めます。
誤りや気になる点を見つけましたか? フィードバックを送る。