ベクトルデータベース　備忘録

RAGを用いたチャットボットアプリを作るにあたり、ベクトルDBというデータベースを調べることとなったので備忘録としてまとめておきたいと思います。

## ベクトルデータベースとは
生成系AI/自然言語処理において、主に単語や文章、画像、音声などの複雑なデータを、AI/機械学種/自然言語モデルが処理しやすいように数値ベクトル表現として保存するデータベース（以下DBとする）のこと。
身近な応用例だとAmazonやYoutubeのレコメンドシステムにも使われています。

例えば、Aさんが筋トレの動画が好きだとしましょう。Aさんが見ている動画1つ1つをベクトルに見立てて、それに似たベクトルを持つ動画（フィジークの動画や、筋トレyoutuberの動画など）を表示する。

## そもそもベクトルとは？
「**大きさ**」と「**向き**」を持つ量を表すためのもの
多次元区間内での**位置関係**や**特徴**を表現することができ、その性質を利用してデータ間の類似度を測る。
（k-NN（K近傍法）、コサイン類似度などを用いてベクトル間の距離を測定し類似度を測る。詳しい説明は別途資料をご覧下さい）
参考資料：[【高2数学】ベクトルとは？意味・性質・内積について解説
](https://std-ie.jp/tips/tips222.html)


## ベクトルの埋め込みについて
ベクトルの埋め込み（Vector Embedding）は、特に自然言語処理や画像認識などの分野で非常に重要な役割を果たしています。
ベクトル埋め込みとは、**高次元のデータセットを、より低次元のベクトル空間に変換するプロセスを指します。**
  - 高次元データの圧縮: 多くのデータ（例えば、文章や画像）は高次元で非常に複雑です。ベクトル埋め込みを使用することで、これらの高次元データを低次元(2次元等)の空間に効果的にマッピングできるため、計算リソースを節約しやすくなります。
  - 類似度の計算: 埋め込みベクトルは、データ間の類似度を計算するのに非常に適しています。例えば、単語の埋め込みでは、意味が似ている単語が近接したベクトルとして表現されます。このため、情報検索や推奨システムなどで非常に重宝されます。
  - 機械学習モデル: 多くの機械学習モデル（特に深層学習）は、ベクトルとしてデータを入力とする方が適しています。ベクトル埋め込みを使用することで、モデルがデータのパターンや特徴をより効果的に学習できるようになります。
  - 多様なデータの統合: ベクトル埋め込みを使用すると、異なる種類のデータ（例えば、テキストと画像）を同じ空間にマッピングできます。これにより、異種データの統合や統一的な処理が容易になります。

まとめると、ベクトルの埋め込みは、
**高次元データの効率的な処理
類似性の評価
機械学習モデルの向上
多様なデータの統合**
など、さまざまな理由で重要です。

## 昨今話題の大規模言語（LLM）におけるベクトルデータベースとは？
 大規模言語モデル（LLM）は、自然言語処理（NLP）技術を使用して大量のテキストデータから学習する機械学習モデルです。テキストの生成、翻訳、要約など、さまざまな言語タスクを実行できます。
ベクトルデータベースは、データをベクトル（数値の配列）として保存し、検索します。この特性は、LLMが生成する大量のテキストデータや言語データを効率的に処理するのに特に有用です。例えば、ユーザーが入力した質問に対して関連性の高い回答を検索する際、LLMはテキストをベクトルに変換し、ベクトルデータベース内で類似性の高いベクトルを検索します。これにより、関連する情報を迅速かつ正確に見つけることができますLLMにおけるベクトルデータベースは、膨大な言語データを効率的に処理し、高度な自然言語処理タスクを可能にするための強力なツールです。


## 従来のデータベースとの違いについて
### データ
- 定義：　データは情報の基本的な単位。数字、テキスト、画像など様々な形で存在する。
- ベクトルデータベースにおける役割：　データはベクトル形式に置き換わる。非構造化データ（テキストや画像、音声など）を数値ベクトルに変換し、データベースに効率的に処理します。
### データベース
- 定義：DBはデータを整理・保存し、アクセスするためのシステムです。これはデータの集合を管理し、クエリに基づいて情報を抽出・提供します。
- ベクトルデータベースにおける役割：従来のものとは異なり、ベクトル形式のデータを効率的にあつかうように設計されている。これには、類似度に基づく検索（例えば最も近いベクトルを見つけるなど）や高次元データの高速処理などの機能が含まれています

|   項目    |       ベクトルデータベース |    リレーショナルデータベース    |
|:-----------------|:------------------|:------------------|
| データ表現             |             ベクトル | 表|
|処理速度           |            高次元データに対して強みがある |データの規模が大きくなるにつれて処理速度が落ちる       |
| 対応するデータ             | 非構造化データ |構造化データ        |
|クエリ処理               |                ベクトル間の類似度や処理に基づくクエリ処理 | テーブル間の関係や条件に基づくクエリ処理      |
| 用途             |画像、音声、テキストなどの非構造化データ |在庫管理システム、会計システム、勤怠システム等の構造改データの管理       |

### ベクトルデータベースの重要性
AIにおける「データの特性」、「処理の要求」に非常に適しているため、昨今話題になっています。
- **高速な類似性探索**：AIアプリでは類似性に基づく探索が行われており、類似度、関連性の高いデータを探索する能力を必要としている。そのニーズに十分に対応できる能力がある。
- **機械学習との親和性**：機械学習モデルではデータをベクトル空間内で解釈します。ベクトルデータベースはこれらの
- **スケーラビリティ**：AI社会では膨大なデータを扱う必要があります。ベクトルデータベースは大量のデータセットに対しても高速でスケーラブルは検索を提供します。
- **リアルタイム分析**：　Aiアプリケーションはリアルタイムのデータ分析を行うことが多いです。ベクトルデータベースは、リアルタイムでのデータとクエリに分析に適しており即座に反映させることができる。

## ベクトルデータベースのサービス例

- **pipecpde**
    - 一番人気
    - クラウド前提でローカル環境を用意する術はないらしい。インフラストラクチャのメンテナンス、サービスの監視、アルゴリズムの問題の修正といった面倒な作業を行う必要がなく、AIソリューションを開始、管理、強化することが可能
    - オープンソースではない
    - 月額$30から
    - Rustで書かれている
        - 主な特徴
        - 1、重複エントリーの識別
        - 2、ランキングを追う
        - 3、データ検索を行う
        - 4、データを分類する
        - 5、重複エントリー削除
- **choroma DB**
    - LLM(大規模言語モデル)アプリケーションの開発を簡素化するために設計されたオープンソースの埋め込みDB
    - C/C++で書かれている
    - 組み込みモード（デフォルト）、クライアント-サーバーアーキテクチャに従ったマネージドのクラウドネイティブサーバー、クラウド上でサーバーレス・コンピューティングを可能にするクラウド型分散システムを備えた、オールインワンのサービスを構築しようとしている。
    - python/javascriptインターフェースを提供しており、開発者はベクトルストアを迅速に立ち上げることができる。データベースとアプリケーションのレイヤーが密接に結合された組み込みモードを市場で初めて提供した。これにより迅速なビルド、プロトタイプの作成、そしてプロジェクトを世界に公開することができる。
    - 最近傍探索（セマンティック検索）などもサポート
    - ChromaDBは複数のサーバーにレプリケーションでき、高い可用性や障害体制を持っている

        - 主な特徴
        - 1、クエリ、フィルタリング、密度推定など様々な機能を搭載
        - 2、LangChain(python, javascript)とLlamaIndexをサポート
        - 3、pythonノートブックで動作するのと同じAPIを利用し、本番クラスタに効率的にスケールアップをする
- **Azure AI Search**
    - クラウド（Azure）のサービスの一つ
    - ハイブリット検索（キーワード検索とベクトル検索を組み合わせた検索ができる）やセマンティックハイブリット検索（MicrosoftのTurningモデルを利用したRe-rankerで結果を並び替えることで更に精度が高まります）といった高機能な検索が可能
    - クラウドサービスなどのインフラなどの準備も合わせて行え、スケーラビリティや可用性などプロジェクトの様々な日機能要件に対応できる。（しかし費用は少しかかりそう）


参考資料：　https://weel.co.jp/media/vector-database
https://atmarkit.itmedia.co.jp/ait/articles/2402/29/news042.html
https://zenn.dev/kun432/articles/20230921-vector-databases-jp-part-1