埋め込みとベクトル検索
中級
埋め込み(embedding)は、テキストの一片を、その意味を捉えた数値のリスト(ベクトル)に変換します。意味が似たテキストは、たとえ共通する単語がなくても、互いに近いベクトルになります。これがセマンティック検索とRAGの背後にある仕掛けです。
- 埋め込みを、似た意味が互いに近くに並ぶように配置された空間内の一点として思い描く
- キーワード検索とセマンティック検索を見分け、ハイブリッド検索が通常は勝つ理由を知る
- チャンク分割から最近傍探索まで、ベクトル検索の4つのステップをたどる
- 検索品質を静かに損なう3つの失敗を避ける:不適切なチャンクサイズ、埋め込みモデルの混在、メタデータフィルタの欠如
- ベクトルデータベースが本当に必要な場面と、不要な場面を判断する
直感的なイメージ
すべての文が、巨大な多次元空間の中の一点として配置されていると想像してください。似た意味は互いに近くに並ぶように配置されています。「パスワードをリセットするには?」は「ログイン情報を忘れた」の近くに、「ローマで一番おいしいピザ」からは遠くに位置します。
セマンティック検索とキーワード検索
- キーワード検索は文字どおりの単語に一致します(「password」は「password」を見つけます)。
- セマンティック検索は意味に一致します — 「サインインできない」と検索すると、「パスワード」という単語がなくてもパスワードリセットの文書が見つかります。
多くの場合、両方を組み合わせる(ハイブリッド検索)と最良の結果が得られます。
ベクトル検索の仕組み
Guided walkthrough1 of 4
- まず各文書をチャンクに分割し、次に各チャンクを埋め込んでベクトルをベクトルデータベースに保存します。これは事前に一度だけ行うステップです。
- クエリ時には、ユーザーの質問を同じ埋め込みモデルに通し、チャンクと同じ空間に配置されるようにします。
- クエリのベクトルを保存済みのベクトルとコサイン類似度または距離で比較し、最も近い一致を残します。
- 通常は RAG に渡され、取得したテキストがモデルの回答のコンテキストになります。
実践上のメモ
- チャンク分割は重要です。 大きすぎるとノイズの多い一致になり、小さすぎると文脈が失われます。調整しましょう。
- 埋め込みモデルは一貫して1つを使う — 異なるモデルのベクトルは比較できません。
- メタデータ + フィルタ(日付、ソース、種類)で、検索の精度が大きく上がります。
- ベクトルDBが常に必要なわけではありません — 小さなコーパスなら、単純なインメモリ検索で十分です。
1 / 9
Check yourself
0/3- 埋め込みとは、空間内の一点としての意味である — 近さは、共通する単語ではなく、似た意味を表す。
- セマンティック検索はキーワード検索が見逃すものを見つけるが、ハイブリッド検索は通常どちらか一方より優れる。
- 4つのステップ:チャンクを埋め込んで保存し、クエリを埋め込み、最近傍ベクトルを探し、チャンクを返す。
- 埋め込みモデルは1つを、両側で一貫して使う。異なるモデルのベクトルは比較できない。
- 検索品質には、ベクトルデータベースの選択よりも、チャンクサイズとメタデータフィルタのほうが効く。
- 小さなコーパスなら、単純なインメモリ検索で十分 — ベクトルDBは必須ではない。