言葉が一致しなくても、関連する資料を探したい

前の節で、資料の本文と付随情報をDocumentへまとめ、長い文書をチャンクに分けました。この節では、そのまとまりを質問から探し出す方法を説明します。

利用者が「立て替えた電車代はどうするのか」と質問したとき、規程には「公共交通機関の利用に伴う旅費の精算」と書かれているかもしれません。質問と資料で同じ語を使っていなくても、意味が関連する箇所を探したい場面があります。Embeddingは、このような検索に使う文章の数値表現を作ります。

Embedding(エンベディング)モデルは、文章を数値の並び、つまりベクトルへ変換します。数値がいくつ並ぶかを次元と呼びます。同じ方式で文章を数値化しておくと、数値の並び同士を比較し、関連がありそうな文章を探せます。各数値を人が直接読んで、文章の意味を判断するためのものではありません。

検索では、質問と資料を対応するEmbeddingで数値化し、ベクトル同士の近さを手掛かりに候補を取得します。この近さを数値で表したものが類似度です。近いということは、その表現方法のもとで関連がありそうという意味で、文章の事実が正しいことや、回答に十分なことまで保証するものではありません。

Embeddingモデルと、回答を生成するモデルは別の役割

Embeddingモデルの出力は数値の並びで、会話モデルの主な出力は文章やツール要求です。どちらもモデルですが、担当する仕事が異なります。RAGでは、検索用にEmbeddingを使い、取得した資料から説明を作るために会話モデルを使う、といった組み合わせができます。

質問と文書で、異なるEmbeddingモデルや互換性のない設定を使うと、そのままでは近さを適切に比較できません。Embeddingを変更する場合は、保存している文書側のベクトルも作り直す必要があるかを確認します。回答用のモデルだけを差し替える場合とは、影響する範囲が違います。

Vector storeは、ベクトルと文書を関連づけて保持する

Vector storeは、文書のベクトルを保持し、近さに基づく検索を行うための部品です。元の文章やmetadataとの対応も扱います。LangChainには複数の製品・実装と接続するための共通インターフェースがあり、アプリケーション側から文書の追加や類似検索などを行えます。

第8節のStoreは、会話をまたぐ情報の保存・取得の窓口でした。ここでのVector storeは、とくに文章を数値化した情報と検索を扱う部品です。どちらも「保存する」という役割を含みますが、何を保存し、どの方法で取り出すかに注目して使い分けます。

ここで、検索用の索引を作る準備段階と、利用者の質問へ答える実行段階を分けます。準備段階では文書を分割し、Embeddingを作り、保存します。質問の段階では質問のEmbeddingを作り、候補を取得します。文書のEmbeddingを毎回すべて作り直す構成にする必要はありません。

ただし、規程を更新したら、検索対象にも更新を反映しなければなりません。新しい文書を追加するだけで古い版を残すと、内容のよく似た古い規程が候補になる場合があります。文書のIDや版の管理は、検索の品質にも関係します。

Retrieverは、質問から文書を返す窓口

Retrieverは、問い合わせを受け取り、関連するDocumentを返す部品です。Vector storeと似て見えますが、役割の範囲が違います。Vector storeは保存と検索を支える実装で、Retrieverは、アプリケーション側から見た「関連文書を取得する」入口です。

検索へ渡す問いや検索語は、クエリとも呼ばれます。利用者の質問文をそのまま使う場合もあれば、会話の文脈から省略された条件を補い、検索用のクエリを作る場合もあります。どんな問いを検索へ渡したかは、検索結果を理解するための大事な情報です。

Retrieverの内部が、必ずベクトル検索である必要はありません。キーワード検索、複数の検索方法を合わせる方法、既存の検索システムへの問い合わせなどでも構成できます。この窓口を分けることで、後ろのプロンプトやモデルを大きく変えず、検索方法を比較しやすくなります。

件数、絞り込み、検索方法で結果は変わる

検索件数を表すkは、候補を何件取得するかの設定としてよく登場します。件数を増やせば必要な情報を含む可能性は広がりますが、無関係な文章や似た候補も増えます。上位に出たというだけで、質問に回答できる資料だと判断することはできません。

文書の版や部署などをmetadataで絞り込む方法もあります。また、製品コードや規程番号のように文字の一致が重要な質問では、意味の近さだけよりキーワード検索を組み合わせる方法が適する場合があります。どの方法も、想定する質問で比較して選びます。

補足:候補の偏りを減らすMMR

上位の候補が同じ文章の繰返しばかりだと、別の重要な条件を取得できないことがあります。MMRは、質問との関連性に加え、候補どうしが似すぎないことも考慮する選び方です。たとえば通常ルールに似た文章ばかりを取る偏りを減らせる場合があります。ただし、必要な例外を必ず取得できると保証するものではありません。まず通常の検索の役割を理解し、改善方法の一つとして位置づけます。

Embedding、Vector store、Retrieverは、順に「数値表現を作る」「保存し検索する」「文書を取得する窓口になる」と整理できます。次の節では、取得した文書から回答する流れと、その改善の考え方を扱います。