CLOVER🍀

That was when it all began.

ベクトルデータベースってどういうものがある?

これは、なにをしたくて書いたもの?

最近llama-cpp-pythonを使っていろいろ遊んでいるわけですが、埋め込みAPIを使ってテキストをベクトル化してみました。

llama-cpp-pythonで立てたOpenAI API互換のサーバーで、テキストをベクトル化してみる - CLOVER🍀

ベクトル化したデータを保存するには、データベースを使うようなのですが、その一例がOpenAI APIのドキュメントに記載されて
いました。

Embeddings / Limitations & risks / How can I retrieve K nearest embedding vectors quickly?

試しにベクトルデータベースのどれかを試してみたいと思うのですが、そもそもベクトルデータベース自体に馴染みがないので
どういったものがあるのか少し調べてみることにしました。

ベクトルデータベース?

まず、そもそもベクトルデータベースとは?ということで。

そもそも呼び名もよくわかっていません。ベクトルデータベースでいいんでしょうか?ベクターデータベースでしょうか?
ベクトルストア、ベクターストアなどでしょうか?

いくつかサイトを見てみましょう。

ベクトルデータベースとは?ビッグデータ時代に欠かせない技術 | Octoparse

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

ベクトルデータベースとは何ですか?|包括的なベクトルデータベースのガイド | Elastic

サイトによって書かれている内容や範囲はちょっと違いますが、およそこんな感じではないでしょうか?

  • ベクトル
    • 浮動小数点の配列
    • 数値や方向性を持ち、空間内での位置関係や特徴を表現できる
    • テキスト、画像などのデータを変換して作成する(ベクトル化)
  • ベクトルデータベース
    • データをベクトル形式で保存、管理できるデータベースのこと
    • 大量のデータを効率的に処理、検索することができ、画像認識や自然言語処理などで活用される

少し挙げましたが、ベクトルデータベースのユースケースや活用場所は以下が多いようです。

今回自分が興味を持ったのは、大規模言語モデル(LLM)や生成系AIの文脈ですが、利用用途的には検索になりそうな気がしますね。

ベクトルデータベースの種類

ベクトルデータベースの概要は少しわかった気になりましたが、どういうものがあるのかはまったくわかりません。

まずはOpenAI APIのドキュメントに記載されているものがありますね。

Embeddings / Limitations & risks / How can I retrieve K nearest embedding vectors quickly?

DB-Engines Rankingを見ても、ベクターデータベースに特化したものはそう多くなさそうです。ランキング的にもまだ目立って
いませんし。

DB-Engines Ranking - popularity ranking of database management systems

というわけで、いくつか記事をあたってみましょう。

Top 10 best vector databases and libraries

(日本語訳) Vector databases (Part 1): What makes each one different?

(日本語訳) Vector databases (Part 4): Analyzing the trade-offs

ベクトルデータベースってどれだけ世の中にあるのか?|鈴木いっぺい (Ippei Suzuki)

Top 5 Vector Database Solutions for Your AI Project - The New Stack

個人的に気になるものと観点で、ベクトルデータベースを挙げてみます。

名前 OSS クライアント/サーバー 組み込み セルフホスティング可能 SaaS/マネージドサービス
LanceDB ○ × ○ ○ ○
Pinecone × ○ × × ○
Weaviate ○ ○ ○(実験的) ○ ○
Qdrant ○ ○ × ○ ○
Chroma ○ ×(実装中) ○ ○ ×
Milvus ○ ○ × ○ ○
Typesense ○ ○ × ○ ○
Vespa ○ ○ × ○ ○
Elasticsearch × ○ × ○ ○
OpenSearch ○ ○ × ○ ○
Meilisearch ○ ○ × ○ ○
Redis Stack × ○ × ○ ○
PostgreSQL(pgvector) ○ ○ × ○ ○
MySQL HeatWave × ○ × × ○
MongoDB Atlas × ○ × × ○
Faiss ○ × ○ ○(ライブラリー) ×

特性などは全然わかっていないのですが、とりあえずなにか使ってみないとベクトルデータベースというものがわからないので、
このあたりからひとつ選んで試していってみようかなと思います。