ベクトルデータベースとは?仕組みやRAGとの関係、従来のデータベースとの違いをわかりやすく解説

AI
B!

生成AIやRAGについて調べていると、「ベクトルデータベース(Vector Database)」という言葉を目にすることがあります。

ベクトルデータベースは、文章や画像などから生成された「ベクトル」と呼ばれる数値データを保存し、似ているデータを効率よく検索するためのデータベースです。

従来のキーワード検索とは異なり、「意味が近い情報」を探せることが大きな特徴です。

この記事では、ベクトルデータベースとは何か、ベクトルやEmbedding(埋め込み)の仕組み、RAGとの関係などをわかりやすく解説します。

ベクトルデータベースとは

ベクトルデータベースとは、高次元のベクトルデータを保存し、類似度に基づいて効率的に検索できるように設計されたデータベースです。

生成AIの分野では、文章、画像、音声などのデータをEmbeddingモデルによって数値の配列へ変換し、そのベクトルを保存・検索する用途で利用されます。

例えば、文章をEmbeddingモデルへ入力すると、概念的には次のような数値の配列へ変換されます。

[0.12, -0.83, 0.44, 0.27, ...]

この数値の配列が「ベクトル」です。

似た意味を持つデータはベクトル空間上でも近い位置に配置されるようにEmbeddingモデルが設計されているため、ベクトル同士の距離や類似度を計算することで、意味的に関連する情報を検索できます。

ベクトルとは

数学におけるベクトルは、複数の数値によって表現される量です。

機械学習や生成AIでは、文章や画像などの特徴を多数の数値によって表現したものが利用されます。

例えば、

「今日は東京で雨が降っています」

という文章をEmbeddingモデルへ入力すると、

[0.12, -0.83, 0.44, ...]

のようなベクトルへ変換されます。

一方、

「東京都内は悪天候です」

という文章もベクトル化します。

2つの文章には完全に同じ単語が並んでいるわけではありませんが、意味的には関連しています。

適切なEmbeddingモデルでは、このような意味的な関係を反映したベクトル表現を生成できます。

Embeddingとは

Embedding(埋め込み)とは、文章、画像、音声などのデータを、機械学習モデルで扱いやすい数値ベクトルとして表現する技術です。

例えば、次のような処理が行われます。

文章
↓
Embeddingモデル
↓
ベクトル

ベクトルデータベースそのものが文章の意味を解析してベクトルを作るとは限りません。

一般的にはEmbeddingモデルによってベクトルを生成し、その結果をベクトルデータベースへ保存します。

そのため、Embeddingモデルとベクトルデータベースは別の役割を持っています。

Embeddingモデルは「データをベクトルへ変換する仕組み」、ベクトルデータベースは「生成されたベクトルを保存・検索する仕組み」と考えるとわかりやすいでしょう。

ベクトルデータベースでは何を検索するのか

ベクトルデータベースで重要なのが「類似度検索」です。

通常のデータベースでは、

商品ID = 100

のような条件による検索や、

名前 = "山田"

といった一致検索がよく利用されます。

一方、ベクトル検索では、

このベクトルと似ているベクトルを探す

という検索を行います。

例えば、

「会社の有給休暇について知りたい」

という質問をベクトル化し、社内文書から生成したベクトルと比較します。

すると、

「年次有給休暇は勤続期間に応じて付与する」

といった意味的に関連する文章を検索できる可能性があります。

単純なキーワード一致だけではなく、ベクトル表現を利用して関連性の高い情報を探せるのが特徴です。

ベクトルの近さはどうやって調べる?

ベクトル検索では、ベクトル同士の距離や類似度を計算します。

代表的な指標には次のようなものがあります。

指標概要
コサイン類似度ベクトルの方向がどれくらい似ているかを評価する
ユークリッド距離ベクトル空間上の距離を計算する
ドット積ベクトル同士の内積を利用して関連性を評価する

どの指標が適しているかは、利用するEmbeddingモデルや検索システムの設計によって異なります。

KNNとANNとは

大量のベクトルから似ているデータを探す方法として、KNNやANNがあります。

KNNは「K-Nearest Neighbors」の略で、検索対象となるベクトルに近いK個のベクトルを探す考え方です。

一方、非常に大量のベクトルを扱う場合、すべてのベクトルを厳密に比較すると検索コストが大きくなることがあります。

そこで利用されるのがANN(Approximate Nearest Neighbor:近似最近傍探索)です。

ANNでは完全な厳密検索ではなく、近似的に近いベクトルを効率よく探すことで、大規模なデータに対して検索速度と検索精度のバランスを取ります。

HNSWなどはANNを実現するために利用される代表的な手法の一つです。

従来のデータベースとの違い

一般的なリレーショナルデータベースとベクトルデータベースでは、得意とする検索方法が異なります。

項目一般的なデータベースベクトルデータベース
主なデータ文字列、数値、日時など高次元ベクトル
主な検索完全一致、条件検索、範囲検索など類似度検索
検索例IDが100の商品この文章と意味的に近い文章
主な用途業務システム、顧客管理などセマンティック検索、RAG、推薦など

ただし、「ベクトル検索をするには専用のベクトルデータベースが必須」というわけではありません。

現在では、既存のデータベースや検索エンジンにもベクトル検索機能が実装されており、通常の構造化データとベクトルを同じシステムで管理する構成もあります。

キーワード検索とベクトル検索の違い

従来の検索では、入力されたキーワードと文書内の文字列を照合する方法が広く使われています。

例えば、

「有給休暇」

と検索すれば、「有給休暇」という単語を含む文書を見つけることができます。

一方、

「会社を休める日数を知りたい」

という検索では、「有給休暇」という単語が含まれていません。

ベクトル検索では検索文自体をベクトル化し、文書のベクトルとの類似度を調べることで、キーワードが一致していなくても意味的に関連する情報を見つけられる可能性があります。

このような検索は「セマンティック検索」と呼ばれます。

ベクトルデータベースとRAGの関係

ベクトルデータベースが注目されている理由の一つが、RAGとの相性の良さです。

RAGは「Retrieval-Augmented Generation」の略で、日本語では「検索拡張生成」などと呼ばれます。

LLMへ質問を渡す前に外部の情報源から関連情報を検索し、その情報をコンテキストとしてLLMへ渡して回答を生成する仕組みです。

代表的な構成は次のようになります。

文書
↓
適切な単位に分割
↓
Embeddingモデル
↓
ベクトル化
↓
ベクトルデータベースへ保存

ユーザーから質問された場合は、

ユーザーの質問
↓
Embeddingモデル
↓
質問をベクトル化
↓
ベクトルデータベースで類似検索
↓
関連する文書を取得
↓
質問+取得した文書
↓
LLM
↓
回答

という流れになります。

つまり、ベクトルデータベースはRAGにおける「関連情報を検索する部分」で利用できます。

RAGにベクトルデータベースは必須?

RAGを理解するときに注意したいのが、「RAG=ベクトルデータベース」というわけではないことです。

RAGで重要なのは、回答生成の前に外部情報を検索・取得し、その情報をLLMへ提供することです。

検索方法としてベクトル検索が広く利用されていますが、用途によっては全文検索、キーワード検索、SQLによる検索、検索エンジンなどを利用することもできます。

さらに、キーワード検索とベクトル検索を組み合わせる「ハイブリッド検索」もあります。

そのため、ベクトルデータベースはRAGを構築するための有力な技術の一つですが、RAGそのものではありません。

ベクトルデータベースの主な用途

ベクトルデータベースは生成AI以外にも利用できます。

代表的な用途としては、セマンティック検索があります。

ユーザーが入力した文章と意味的に近い文書を検索できるため、社内検索やFAQ検索などに活用できます。

また、商品の特徴やユーザーの嗜好などをベクトルとして表現すれば、類似した商品やコンテンツを探すレコメンデーションシステムにも応用できます。

画像をベクトル化すれば、入力した画像と特徴が似ている画像を探す類似画像検索にも利用できます。

このように、ベクトル検索は「完全一致ではなく、似ているものを探したい」という用途で力を発揮します。

ベクトルデータベースを使えば検索精度が必ず上がるわけではない

ベクトルデータベースを導入しただけで、高精度なAI検索システムが完成するわけではありません。

検索品質には、Embeddingモデルの選択、文書を分割する方法、検索件数、検索アルゴリズム、メタデータによる絞り込み、ランキング方法など、さまざまな要素が影響します。

特にRAGでは、LLMへ渡す情報を適切に取得できなければ、最終的な回答品質にも影響します。

そのため、ベクトルデータベースだけではなく、Embeddingや検索設計を含めたシステム全体で考えることが重要です。

ベクトルデータベースを簡単に理解すると

ベクトルデータベースについて難しく感じる場合は、

「意味や特徴を数値化したデータを保存して、似ているものを高速に探すためのデータベース」

と考えるとわかりやすいでしょう。

文章の場合は、

文章
↓
Embedding
↓
ベクトル
↓
ベクトルデータベース
↓
類似度検索

という関係になります。

さらに生成AIのRAGでは、

ユーザーの質問
↓
ベクトル検索
↓
関連情報を取得
↓
LLMへ渡す
↓
回答生成

という形で利用できます。

まとめ

ベクトルデータベースは、文章や画像などをEmbeddingによって表現した高次元ベクトルを保存し、類似度検索を効率的に行うためのデータベースです。

従来のキーワード検索では文字列の一致が重要になりますが、ベクトル検索ではデータをベクトル化することで、意味や特徴の近さを利用した検索が可能になります。

生成AIでは特にRAGの検索部分で利用されることが多く、大量の文書からユーザーの質問に関連する情報を取得するための重要な選択肢となっています。

ただし、RAGにベクトルデータベースが必須というわけではありません。キーワード検索や全文検索、SQL、ハイブリッド検索などを組み合わせることもできます。

「Embeddingがデータをベクトルへ変換し、ベクトルデータベースがそのベクトルを保存・検索する」と整理すると、生成AIにおけるベクトルデータベースの役割を理解しやすくなります。

B!
← 一覧へ戻る