この記事では、ベクター データベースについて包括的に理解します。

近年、ベクター データベースは業界で広く注目を集めており、これに関連する事実として、多くのベクター データベースのスタートアップ企業が短期間で数百万ドルの資金を調達しています。

おそらくベクトル データベースについて聞いたことはあるでしょうが、これまであまり気にしたことがなかったかもしれません。少なくとも、それが今この記事を読んでいる理由だと思います...

上記の質問に簡単に答えるためだけにこの記事を読んでいるのであれば、すぐに本題に入りましょう。

1. 定義: ベクトル データベースとは何ですか?

ベクトル データベースは、非構造化データ (テキスト、画像、音声など) をベクトル埋め込み (高次元ベクトル) として保存および管理し、類似したオブジェクトの迅速な検索と検索を容易にするデータベースです。

この定義がさらに混乱を招くだけであれば、順を追って説明しましょう。WIRED の 5 レベルのビデオ シリーズ (https://www.wired.com/video/series/5-levels) からインスピレーションを得たこの記事では、次の 3 つの難易度でベクトル データベースの内容を明らかにします。

  • 最も簡単な説明
  • デジタル ネイティブやテクノロジー愛好家にベクトル データベースを説明する
  • エンジニアやデータ専門家にベクトル データベースを説明する

2. ベクトルデータベース: 最も浅い説明

少し話が逸れましたが、私が理解できないことはわかりますか?本棚を色ごとに並べると、なんと!表紙の色が分からなかったのに、どうやってその本を見つけたのでしょうか?

写真

1) ベクトルデータベースの背後にある直感

特定の本をすぐに見つけたい場合は、色ごとに棚を配置するよりも、ジャンルと著者ごとに棚を配置する方が合理的です。探しているものをすぐに見つけられるように、ほとんどのライブラリがこのように編成されているのはそのためです。

しかし、ジャンルや著者ではなく、クエリに基づいて読む本を見つけるにはどうすればよいでしょうか? たとえば、「はらぺこあおむし」のような本や、自分と同じくらい食べ物が大好きな主人公についての本を読みたい場合はどうすればよいでしょうか?

本棚を閲覧する時間がない場合は、図書館員におすすめの本を尋ねるのが最も簡単な方法です。図書館員は多くの本を読んでおり、どの本があなたの質問に最も適しているかを正確に知っているからです。

本を整理する例では、ベクトル データベースはオブジェクト (本など) に関する複雑な情報 (本のあらすじなど) を保存するように設計されているため、図書館員をベクトル データベースと考えることができます。したがって、ベクトル データベースは、図書館員のように、事前に定義された属性 (著者など) ではなく、特定のクエリ (... についての本など) に基づいてオブジェクトを検索するのに役立ちます。

3. デジタル ネイティブやテクノロジー愛好家にベクトル データベースについて説明する

さて、図書館の例を続けて、もう少し技術的な話をしてみましょう。 もちろん、今日では、図書館で本を検索する技術は、単にジャンルや著者で検索するよりも少し進歩しています。

図書館に行くと、通常、隅にコンピューターがあり、タイトル、ISBN、出版年、キーワードなど、より具体的な属性で本を見つけるのに役立ちます。入力された値に基づいて、入手可能な書籍情報を保存しているデータベースにクエリを実行できます。ただし、このデータベースは通常、従来のリレーショナル データベースです。

写真

1) リレーショナル データベースとベクトル データベースの違いは何ですか?

リレーショナル データベースとベクター データベースの主な違いは、格納されるデータの種類です。リレーショナル データベースはテーブルに適合する構造化データ用に設計されているのに対し、ベクター データベースはテキストや画像などの非構造化データ用に設計されています。

保存されているデータの種類は、データの取得方法にも影響します。リレーショナル データベースでは、クエリの結果は特定のキーワードの一致に基づいています。ベクトル データベースでは、クエリ結果は類似性に基づいています。

従来のリレーショナル データベースはスプレッドシートと考えることができます。この種の情報は列に保存できるため、書籍に関する基本情報 (タイトル、著者、ISBN など) などの構造化データの保存に最適であり、フィルタリングや並べ替えに最適です。

リレーショナル データベースを使用すると、児童書など、タイトルに「Caterpillar」が含まれるすべての書籍を迅速に検索できます。

しかし、「はらぺこあおむし」が食べ物に関するものであることが気に入ったらどうしますか? 「食べ物」というキーワードを検索してみることもできますが、本の要約に「食べ物」というキーワードが記載されていない限り、『はらぺこあおむし』さえ見つかりません。むしろ、料理本が山積みになってがっかりすることになるかもしれません。

これはリレーショナル データベースの制限です。特定のアイテムを見つけるために必要と思われる情報をすべて追加する必要があります。しかし、どのような情報をどれだけ追加するべきかをどうやって知るのでしょうか? これらすべての情報を追加するには時間がかかることが多く、完全性は保証されません。

ただし、ここでベクター データベースが活躍します。

ただし、最初にベクトル埋め込みと呼ばれる概念を理解する必要があります。

今日の機械学習 (ML) アルゴリズムは、特定のオブジェクト (単語やテキストなど) を、そのオブジェクトに関する情報を保持するデジタル表現に変換できます。ML モデルに単語 (例: 「食べ物」) を与えると、ML モデルが魔法を発揮して長い数値リストを返すと想像してください。この長い数値リストは単語の数値表現であり、ベクトル埋め込みと呼ばれます。

これらの埋め込みは長い数値シーケンスであるため、これらを高次元と呼びます。以下のように視覚化するために、これらの埋め込みが 3 次元のみであると仮定します。

写真

「お腹が空いた」、「喉が渇いた」、「食べ物」、「飲み物」などの類似した単語が同様のコーナーにグループ化されているのに対し、「自転車」や「車」などの他の単語はこのベクトル内で近くに集まっていることがわかります。スペースはありますが、別のコーナーにあります。

数値表現を使用すると、単語など、通常は計算に適さないオブジェクトに数学的計算を適用できます。たとえば、次の計算は、単語をその埋め込みで置き換えない限り機能しません。

飲み物 - 食べ物 + お腹が空いている = 喉が渇いている

計算に埋め込みを使用できるため、埋め込まれたオブジェクトのペア間の距離も計算できます。2 つの埋め込まれたオブジェクト間の距離が近いほど、それらはより類似します。

ご覧のとおり、ベクトル埋め込みは非常に優れています。

前の例に戻り、各本の内容をライブラリに埋め込み、これらの埋め込みをベクトル データベースに保存すると仮定します。「食べ物が大好きな主人公が登場する児童書」を検索したい場合、クエリも埋め込まれ、「はらぺこあおむし」や「ゴルディロックスのクマ」など、クエリに最も類似した書籍が返されます。

2) ベクトルデータベースの使用例は何ですか?

実際、ベクトル データベースは、大規模言語モデル (LLM) に関する誇大宣伝が始まる前から存在していました。当初、これらは、特定のクエリに対して類似のオブジェクトをすばやく見つけることができるため、レコメンダー システムに適用されました。ただし、大規模な言語モデルに長期記憶を提供できるため、最近では質問応答アプリケーションでも使用されています。

4. エンジニアやデータ専門家にベクトル データベースについて説明する

この記事を読む前に、ベクトル データベースがベクトル埋め込みを保存する方法である可能性があると推測し、ベクトル埋め込みの背後にあるものを知りたいだけであれば、ここで関連するアルゴリズムについて掘り下げて説明しましょう。

1) ベクトルデータベースはどのように機能しますか?

ベクトル データベースでは、事前に計算されているため、クエリ内の類似オブジェクトを高速に取得できます。基本的な概念は近似最近傍 (ANN) 検索と呼ばれ、さまざまなアルゴリズムを使用してインデックスを作成し、類似性を計算します。

ご想像のとおり、埋め込みが数百万ある場合、単純な k 最近傍 (kNN) アルゴリズムを使用してクエリと各埋め込みオブジェクト間の類似性を計算するのは非常に時間がかかる可能性があります。一方、ANN 検索アルゴリズムでは、ある程度の精度を犠牲にして速度を確保し、クエリにほぼ最も類似したオブジェクトを取得できます。

インデックス付け: この目的のために、ベクトル埋め込みはベクトル データベースによってインデックス付けされます。このステップにより、ベクトルがデータ構造にマッピングされ、より高速な検索が可能になります。

インデックスは、ライブラリ内の書籍を著者やジャンルなどのカテゴリに分類するものと考えることができます。ただし、埋め込みにはより複雑な情報が含まれる可能性があるため、さらに「主人公の性別」または「プロットの主な場所」を分類することもできます。したがって、インデックスを使用すると、利用可能なすべてのベクトルのより小さい部分を取得できるため、検索が高速化されます。

インデックス作成アルゴリズムの技術的な詳細については説明しませんが、さらに詳しく知りたい場合は、Hierarchical Navigable Small World (HNSW) を調べることから始めてもよいでしょう。

類似性測定: インデックス付きベクトルからクエリの最近傍を見つけるために、ベクトル データベースは類似性測定を適用します。一般的な類似度の尺度には、コサイン類似度、ドット積、ユークリッド距離、マンハッタン距離、ハミング距離などがあります。

2) NumPy 配列にベクトル埋め込みを保存する場合と比べて、ベクトル データベースにはどのような利点がありますか?

私がよく遭遇する質問は、「NumPy 配列を使用して埋め込みを保存することはできないのですか?」というものです。-- もちろん、埋め込みがあまりない場合、または楽しい趣味のプロジェクトを行っているだけの場合は、これを行うことができます。しかし、ご想像のとおり、多くの埋め込みがある場合、ベクトル データベースは大幅に高速になり、すべてをメモリ内に保持する必要はありません。

おすすめ

転載: blog.csdn.net/pantouyuchiyu/article/details/132583675