【院生が徹底解説】ChatGPTのベクトルデータベースとは?

この記事はベクトルデータベースの概要について、従来のデータベースと比較しながら説明しています。
AIについて研究している大学院生の方と協力して書きました。
最後まで読んでいただくと、ベクトルデータベースとは何かわかります。
ぜひ最後までご覧ください!
なお弊社では、自社データをChatGPTに学習させる方法についての1時間無料相談を承っています。こちらからお気軽にご相談ください。
→無料相談で話を聞いてみる
ベクトルデータベースとは?
ベクトルデータベースの概要
ベクトルデータベースとは、その名の通り、ベクトルという数学的概念を用いてデータを管理するデータベースシステムのことを指します。
ベクトルとは、高校数学でも習うように、大きさと向きを持つ量を表すためのものです。多次元空間内での位置関係や特徴を表現することができ、その性質を利用してデータ間の類似性などを計算します。
具体的には、機械学習やデータ分析の領域でよく用いられています。例えば、商品やユーザーの特徴を多次元のベクトルで表現し、それぞれのベクトル間の角度や距離を計算することで、類似度を測定します。これにより、高度な検索や推薦などのタスクが可能となります。
身近な応用例だと、AmazonやYouTubeのレコメンドシステムにも使われています。
YouTubeの場合、1つ動画を見たら、その動画の関連動画が出てくると思います。これは、動画1つ1つをベクトルに見立てて、システムが「似ているか否か」を判定し、「似ている」と判定された動画たちが表示されているのです。
ベクトルデータベースは、こうしたベクトルの特性を活かし、YouTubeの動画のような高次元データや非構造化データも、効率よく格納し、処理することが可能になります。

従来のデータベースとの違い
現代の情報社会において、データは様々な形で存在します。
これまでは主にリレーショナルデータベースという古典的なシステムを用いてデータを管理してきました。しかしながら、その性質上、リレーショナルデータベースとベクトルデータベースの間にはいくつかの重要な違いが存在します。
以下の表は、それらの主な違いを簡潔に示しています。
ベクトルデータベース | リレーショナルデータベース | |
データ表現 | ベクトル | 表 |
データの処理速度 | 高次元データにおいても処理速度が速い | データの規模が大きくなるにつれて処理速度が落ちる |
対応するデータの種類 | 非構造化データも可能 | 構造化データ |
クエリ処理 | ベクトル間の類似度や距離に基づくクエリ処理 | テーブル間の関係や条件に基づくクエリ処理 |
リレーショナルデータベースは、データをベクトルではなく、「表形式」で保存します。また、リレーショナルモデルを使って構造化データを保存し取得することを目的として設計されています。
そのため、データの列と行に基づくクエリに最適化されています。
リレーショナルデータベースでは、画像ファイルや音声ファイルに含まれる膨大なデータポイントを効率的に扱うことができません。
これらの従来のデータベースが持つ課題に対して、ベクトルデータベースはどのようなアプローチで解決したのでしょうか?
なお、ベクトルデータベースとSQLの比較について詳しく知りたい方は、下記の記事を合わせてご確認ください。
→【院生が徹底解説】ChatGPTのベクトルデータベースとSQLの比較
ベクトルデータベースで解決できる問題
従来のデータベースと異なり、ベクトルデータベースはベクトル間の類似度や距離に基づくクエリ処理が可能で、非構造化データや高次元データも効率的に処理することができます。
これにより、画像や音声といったメディアデータの検索や分析といった課題に対応することが可能です。そうすると、先程例に上げたAmazonやYouTubeのリコメンドなどを、高速に処理できるようになります。一方で、従来のデータベースしかない時代は、どのようなアプローチをしていたのでしょうか?
従来型のデータベースしかない時代の検索へのアプローチ
「検索」は、データベースにおいて重要な処理の一つです。データベースに蓄積された情報の中から、特定の条件に合致するデータを効率的に見つけ出す必要があります。
例えば、Amazonなどのレコメンドシステムでは、ユーザーが購入した商品のデータと、類似するDB内のデータを検索し、それらのデータをユーザーに表示します。
従来のデータベースで、構造化データを扱う前提で類似データの検索を行う場合、
- パターンマッチング
- 全文検索
などの手法を用いてましたが、データベース内の全データに対して検索をかけるため、データ数が増えるにつれて効率性は低下します。
Amazonの商品データはDB内に大量にあるので、上記の方法で検索を行うと、かなりの計算時間を必要とするでしょう。これでは、レコメンドシステムの際に、ユーザーにおすすめ商品がなかなか表示されない、という問題が起こります。
この問題を解決するために、
- インデックス
- クラスタリング
- カーネル法
などがあります。これらの手法はデータの特性を利用し、検索効率を向上させることを目指しています。
ただし、リレーショナルデータベースは主に構造化データを扱う設計となっているため、非構造化データを扱う際には限界があります。例えば、画像や音声などの非構造化データをリレーショナルデータベースで直接的に管理しようとするのは難しいです。
そこで、データベース内の特定のカラムに、非構造化データをバイナリ形式で格納するためのBLOBデータ型を使用することがありますが、データの検索や処理は制限される場合があります。
ベクトルデータベースにおける検索の原理
データベースが持つデータに対する要求(データの検索や更新など)をクエリといいます。
今回は、ベクトルデータベースのクエリ処理の「検索」について話します。
ベクトルデータベースでの検索では、以下の大きな流れをたどります。
- 検索時の類似度指標を決める
- 生データをベクトル化
- ベクトルデータをDBに格納
- ベクトルデータを抽出し, 近似最近傍探索
- クエリに対する最近傍の検出(検索)
それでは順番に見ていきましょう!
1. 検索時の類似度指標を決める
最初に行うことは、ベクトルの類似性を測るための、類似度指標を決めることです。
類似度指標によって用途が異なるため、必要に応じて使い分ける必要があります。
ベクトルの類似性を測るには、主に以下の3つが使われます。
- ユークリッド距離
- コサイン類似度
- 内積
どれもベクトル間の類似度を測るための指標として、よく使われます。
例えば、ユークリッド距離はベクトルの大きさも考慮したい場合などに使います。
また、コサイン類似度や内積は、ベクトルの大きさは考慮せず、ベクトルの向きだけに着目したい場合に用います。
分かりやすくするために、「ベクトルの大きさを考慮したい場合」や「ベクトルの向きだけに着目したい場合」の具体例を以下に示します。
まず、下にあるレコメンドシステムの図をご覧ください。
この図は、各カテゴリの購入点数でベクトル表現したものから、各ユーザー間の好みの類似度を可視化するための図です。
各ユーザー(A, B, C)が何に関心があるかを、各カテゴリの購入点数でベクトル表現しています。

上記の画像を見ると、ユークリッド距離の観点で最も似ているベクトルのペアはBとCです。(ユークリッド距離が一番近いため。)
しかし、コサイン類似度の観点で見ると、角度が一番小さい、つまり最も似ているベクトルのペアはAとBになります。
このように、ベクトルの類似度指標によって結果が異なります。
ベクトルの大きさは「ユーザーの利用頻度」を表しているので、ユーザーの利用頻度を考慮したい場合は、ユークリッド距離を使うのが望ましいです。
一方、それらの利用頻度は考慮せず、単純に商品の購入傾向だけからユーザー間の好みの類似度を計算したい場合は、コサイン類似度や内積を用います。
これらの指標の決め方は、「インデックス」の作成時に引数に渡すだけです。
インデックスというのは、 ベクトルデータを管理する単位のことで、リレーショナルデータベースでいう「テーブル」と同じ位置付けです。
2. 生データをベクトル化
次に、深層学習などの技術を用いて、「生データ」からベクトルを生成します。
生データとは、文書データや音声データなどのことです。
機械が理解できるのは数値のみなので、生データからベクトルを作る必要があります。その中でも、ベクトルは表現力が高く、機械が理解しやすい形です。
ベクトル化のもう一つの重要な利点は、データ間の類似度を測定しやすいことです。具体的には、データ間の類似度を測るためには、ベクトル間の類似度を計算するだけです。これにより、検索時にデータがどれだけ似ているかを簡単に判断できます。
ベクトル化の一例として、文章データを考えてみましょう!以下は、文章がベクトル化された例です。
文章例 | ベクトル |
猫は可愛い | [0.234, -0.567, 0.890, 0.123, -0.456, 0.789] |
今日は晴れた日だった | [0.567, -0.123, 0.456, -0.789, 0.234, -0.567] |
人工知能の発展が進んでいる | [0.890, 0.123, -0.456, 0.789, -0.234, 0.567] |
最新のディープラーニング技術について学びたい | [0.123, -0.456, 0.789, -0.234, 0.567, -0.890] |
自然言語処理の応用は幅広い | [-0.456, 0.789, -0.234, 0.567, -0.890, 0.123] |
このように、Transformerなどのライブラリを用いることで、文章をベクトルに変換することができます。
また、他の深層学習ライブラリを用いることで、「画像→ベクトル」や「音声→ベクトル」のような変換も可能です。
3. ベクトルデータをDBに格納
生データをベクトル化した後は、次にこれらのベクトルをデータベースに格納します。
これは、大量のデータの高速な検索や類似性の比較を可能とするためです。
以下の図は、データの格納時の違いです。ベクトルデータベースでは、ベクトル化したデータをDBに格納しています。

ベクトルデータベースでは、ベクトル化したデータをDBに格納していることがわかりますが、
従来のデータベースでは、生データをそのままDBに入れています。
4. ベクトルデータを抽出し、 近似最近傍探索を行う
データの格納ができたら、近似最近傍探索というベクトル量子化手法を実行します。
この処理は、検索効率を上げるために必要な処理です。
もし、この手法を施していない場合どうなるでしょうか。
以下の図ようにベクトルがあるとします。
この場合、全てのデータ(ベクトル)から似たものを探すことになり非効率的です。
仮に、ベクトル数が1,000,000で、それぞれの次元数が1,000だとしたら、1,000,000×1,000個の値全てを確認して検索しなくてはなりません。
そこで、以下のように似た者同士を集め、1つのベクトル(代表点)とみなす処理が考えられました。
こうすることで、似たものだけを検索すれば良いので検索効率がアップしました。
ただし、正確性と速度はトレードオフの関係にあるため、検索精度をある程度犠牲にしなければなりません。
代表点からの距離が近ければ、より細かく検索することになるので、正確性は上がります。
反対に、距離を大きくとって、「ある程度近ければ1つのベクトルでいいよ」というふうにすれば、処理速度は上がります。
距離を大きくとるということは、おおざっぱに探索するイメージです。
5. クエリに対する最近傍の検出(検索)
最後に、クエリに対して似たデータの検索です。
先ほどは、似たベクトルたちを1つの「グループ」にまとめました。ここの検索では、クエリと似ている「グループ」を検出します。グループを検出するために、「代表点」を見つけています。
つまり、「クエリのベクトル」と「DB内の代表点のベクトル」との類似度を計算しているのです。
ここまでが、ベクトルデータベースにおける検索の仕組みです。
では一体、全く同じ検索処理をリレーショナルデータベースで行うと、どのくらいコストがかかるのでしょうか?

【無料】2023年11月版|生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIの業務活用コンサルティング
・システム間API連携

生成系AIの業務活用なら!
・生成系AIを活用したPoC開発
・生成系AIのコンサルティング
・システム間API連携
リレーショナルデータベースで検索処理を行うコスト
リレーショナルデータベースで検索を行う場合、ベクトルデータベースと比較すると計算時間がかかります。そう考えられる理由としては、以下の2つです。
- 「データをわざわざDBから出してからベクトル演算」という工程が必要
- 近似最近傍探索のために、外部ツールとのやり取りが必要
詳しく説明していきます!
まず1つ目。
検索処理の中に、ベクトル演算という工程を必要とします。
ベクトルデータベースでは、対象となるデータを直接ベクトル形式で操作でき、一部のデータに対して高度な数値演算(ベクトル演算)を直接適用できるため、短時間で処理が可能です。
これに対して、リレーショナルデータベースでは、必要なデータを一度DBから取り出し、外部の計算環境(例えばPythonなどのプログラミング環境)でベクトル演算を行う必要があります。
この工程は、データの取り出しやデータの変換、そしてベクトル演算自体に時間がかかる可能性があります。
2つ目。
検索スピードをアップさせるために、近似最近傍探索という処理が必要です。
ベクトルデータベースでは、この処理が可能ですが、リレーショナルデータベースでは外部ツールが必要となります。
加えて、これらの要素がプログラムの複雑さを増すため、メンテナンスもより時間を要することになります。
そうすると、データベースと外部ツールとの間で、データのやり取りが増えるため、ベクトルデータベースに比べ遅くなってしまいます。
※DB内には、生データをベクトルデータに変換したものが格納されているとします。
以上2つのようなことがあると、処理を実行するプログラムが複雑になってしまいます。
そうなると、処理時間だけではなく、プログラムの修理や管理にも時間がかかるようになります。
適材適所を見極めて、利用することが重要そうですね。
ベクトルデータベースの代表的なサービス3選
ここでは、ベクトルデータベースの代表的なサービスを、3つほどご紹介します。ここでご紹介するサービスは以下の通り。
- Pinecone
- Weaviate
- Chroma
これらのサービスの特徴を、以下の表にまとめました。
サービス | 開発元 | 特徴 |
Pinecone | Pinecone社 | 数十億のベクトルを10msで検索可能なほどの、処理精度の高さ |
Weaviate | Weaviate社 | オープンソースの検索エンジンで、自分でホストすることが可能 |
Chroma | Chroma社 | angChainやLlamaIndexとの連携が可能。オンラインメモリでも可能 |
ちなみに、他の記事ではElasticsearchやgensim、Faiss、Annoyがベクトルデータベースだと紹介している記事がありますが、これは間違っています。
- Elasticsearchは、オープンソースの全文検索エンジン
- gensimは、自然言語処理のためのオープンソースライブラリ
- Faissは、近似最近傍探索ライブラリ
- Annoyは、近似最近傍探索ライブラリ
ベクトルデータベースは、高次元データをベクトルとして扱う「データベース」なので、上記のサービスは該当しません。
まとめ
ベクトルデータベースは、高次元データをベクトルとして扱うデータベースのことです。
従来のデータベースで類似データの検索を行う場合は、
- インデックス
- クラスタリング
- カーネル法
などの手法によって、実現していました。
これらは、データの検索や処理が制限される場合がありましたが、
ベクトルデータベースにより、高速に処理することが可能になりました。
ベクトルデータベースの代表的なサービスは、以下の通りです。
サービス | 開発元 | 特徴 |
Pinecone | Pinecone社 | 数十億のベクトルを10msで検索可能なほどの、処理精度の高さ |
Weaviate | Weaviate社 | オープンソースの検索エンジンで、自分でホストすることが可能 |
Chroma | Chroma社 | LangChainやLlamaIndexとの連携が可能。オンラインメモリでも可能 |
以下の記事では、ベクトルデータベースとSQLの比較をしております。
気になる方は、以下の記事をご覧ください。

最後に
いかがだったでしょうか?
弊社では
・マーケティングやエンジニアリングなどの専門知識を学習させたAI社員の開発
・要件定義・業務フロー作成を80%自動化できる自律型AIエージェントの開発
・生成AIとRPAを組み合わせた業務自動化ツールの開発
・社内人事業務を99%自動化できるAIツールの開発
・ハルシネーション対策AIツールの開発
・自社専用のAIチャットボットの開発
などの開発実績がございます。
まずは、「1時間の無料相談」にてご相談を承っておりますので、ご興味がある方はぜひご連絡ください。
➡︎生成AIを使った業務効率化、生成AIツールの開発について相談をしてみる。

「生成AIを社内で活用したい」「生成AIの事業をやっていきたい」という方に向けて、生成AI社内セミナー・勉強会をさせていただいております。
セミナー内容や料金については、ご相談ください。
また、弊社紹介資料もご用意しておりますので、併せてご確認ください。