ベクトルデータベースVector Database
数字の束を近いもの同士探せるよう保管する場所
- ベクトルデータベースは数字の束を入れておき、最も近いものを素早く取り出してくれる保管場所です。
- ふつうのデータベースがまったく同じ値を探すのに対し、ここは最も似た値を探します。質問と文字が一つも重ならなくても見つけ出します。
- 全部と見比べたりしません。あらかじめ似たものどうしを区域にまとめておき、関係のある区域だけを探します。
- そのため答えがほんの少しずれることがあります。 精度を少し譲って速さを大きく得る取引です。
- AIが社内文書やマニュアルを参考にして答える仕組みで資料を取り出す役目を担います。
目次
1たとえで理解する
冷蔵庫を開けたとききゅうりがどこにあるか知っている人は、扉を開けた瞬間に野菜室へ手が伸びます。上の段から下の段まで全部探したりしません。野菜は野菜どうし、おかずはおかずどうし、飲み物は飲み物どうしにまとめてあるので、その段だけ開ければよいからです。ベクトルデータベースはこうして似たものどうしを区画にした冷蔵庫です。
区画を分けてあるおかげで、物がどれだけ増えても探す時間は大きく伸びません。冷蔵庫が二倍に大きくなっても野菜室一つだけ見ればよいからです。反対に何も考えず積んでおいたら、物が増えた分だけ探す時間もそのまま延びます。
ただし区画を信じて一段だけ開けたら、隣の段に入ったきゅうりを見落とすこともあります。速い代わりにたまに見落とすのが、この方式の性格です。
2くわしく
同じものではなく近いものを探します
私たちがふだん使うデータベースは条件にぴったり合う行を探してきます。名前が「山」で始まる人、価格が一万円以下の商品というようにです。文字が一つでも違うと見つけられません。
ベクトルデータベースは違う聞き方をします。「この数字の束と最も近いものを十個ください」と聞くのです。だから「返金規定」として保存された文書を「お金を返してもらうにはどうすればいいですか」という質問で見つけ出せます。二つの文章の埋め込みが近い位置にあるからです。
見つかった結果には順位と一緒に、どれだけ近いかを示すスコアが付きます。このスコアを見て、遠すぎるものは捨てるよう絞り込めます。
全部測らず区域から絞ります
保存された項目が百万個あるなら、質問一つごとに百万回距離を測るのはあまりに遅すぎます。そこで入れるときにあらかじめ似たものどうしをまとめて地図を作っておきます。隣どうしを道でつないだ網を作っておき、検索するときは適当な地点から出発してより近い隣へ次々と移りながら目的地の近くまで進む方式が広く使われます。
この方式は全部を測るより数十倍から数百倍速いです。その代わり、本当の一位をたまに見逃します。だからこうした検索を「近いものをおおよそ正確に探す」という意味で呼び、どれだけ丁寧に見て回るかを取っ手で調節できるようにしてあります。丁寧に見るほど正確になり、遅くなります。
入れる前に切って数字に変えます
文書を丸ごと入れることはしません。長い文書一つを丸ごと数字の束一つにすると、内容がつぶれて何についての文章かだけが残り、細かい内容は消えてしまいます。
そこで文書を段落や節の単位に細かく切り分けたあと、断片ごとに埋め込みを作って保存します。断片を細かく切りすぎると前後の文脈が途切れ、大きく切りすぎると焦点がぼやけます。この大きさを決めることが実際の性能を大きく左右します。
断片ごとに原文、出典、作成日といった情報を一緒に付けておきます。あとで答えに出典を付けたり、古い文書を除いたりするにはこの情報が必要です。
条件を付けて使います
意味で探すだけでは足りないことがよくあります。「去年以降の文書の中で」「この部署の資料の中で」のように条件を付ける必要がある場合です。そのためほとんどのベクトルデータベースは、一緒に保存しておいた情報であらかじめ範囲を絞ってから、その中で近いものを探す機能を持っています。
単語が正確に一致するかを見る古い方式と組み合わせて使うこともあります。製品番号や人名のように文字どおり一致する必要があるものは、意味で探す方式のほうがかえって弱いからです。二つの方式の結果を合わせて順位を付け直す構成が実務ではよく見られます。
どこで使われるのでしょうか
最も多く使われる場所は、AIに自分たちの資料を参考にさせて答えを作らせる仕組みです。質問が来ると、まずベクトルデータベースから関係する段落をいくつか取り出し、その段落を質問と一緒にモデルに入れて答えを作らせます。モデルが学んでいない社内規定や最新資料を扱えるようになるわけです。
似た商品や記事をすすめる場所、ほぼ同じ内容の重複文書を見つけ出す場所、写真で写真を探す場所にも同じ仕組みが使われます。
3もう少し正確に
ベクトルデータベースは高次元ベクトルを保存し、最近傍探索を提供するシステムです。全部を比較する代わりに近似で探す方式を使い、隣どうしを何層もの網でつなげておく方式と、空間をいくつもの区域に分けておく方式が代表的です。
似ている度合いはふつうコサイン類似度か距離で測ります。どんな尺度で索引を作ったかと検索時に使う尺度が同じでないと結果が合いません。専用の製品を使うこともあれば、既存のデータベースにベクトル機能を載せて使うこともあります。
たとえがずれる点もあります。冷蔵庫の段は人が「ここは野菜」と決めた場所ですが、ベクトルデータベースの区域は数字どうしの距離で自動に分かれます。人が見て一種類のものが複数の区域に散らばっていることもあります。また冷蔵庫から取り出したきゅうりはきゅうりに間違いありませんが、ベクトル検索が取り出してきた段落は質問と方向が似ているだけで、正解を含んでいる保証はありません。
4やってみる
5よくある誤解
ベクトルデータベースが答えを作ってくれると思われがちですが、実際には関係ありそうな資料を取り出すだけで、答えを書くのは言語モデルです。
検索結果は常に最も近いものだと考えられがちですが、実際には速さを得るために近くだけを見て回るので、本当の一位をたまに見逃します。
資料を入れておけばモデルがそれを学ぶと思われがちですが、実際にはモデルはそのままで、質問のたびに資料を改めて探して入れているだけです。
7ひとこと要約
つまりベクトルデータベースは似たものどうし区画にした冷蔵庫のように、意味が近い資料を素早く取り出してくれる保管場所です。
誤りや、もっと良いたとえがありますか? 修正を提案する · 最終更新2026-09-02