これは、なにをしたくて書いたもの?
最近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
ベクトルデータベースとは何ですか?|包括的なベクトルデータベースのガイド | 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 | ○ | × | ○ | ○(ライブラリー) | × |
特性などは全然わかっていないのですが、とりあえずなにか使ってみないとベクトルデータベースというものがわからないので、
このあたりからひとつ選んで試していってみようかなと思います。