ベクトルDB
概要
データをベクトル形式で、保存・管理するデータベース
テキストデータを数値のベクトルに変換することを「ベクトル化」と言う。
ベクトル化は主に自然言語処理で使われるテキスト前処理手法の一つ。
使い道
Amazonのように、ユーザーの好みを基に類似した商品を勧めるといったレコメンドシステム
商品やユーザーの特徴を多次元のベクトルで表現し、それぞれのベクトル間の角度や距離を計算することで、類似度を測定し、高度な検索や推薦などのタスクが可能となる。
Youtubeのように、動画を入力として、最も似ている動画を検索するといった類似性検索など
全体の流れ
https://scrapbox.io/files/657fe0410134af00258f5313.png
データ取り込みとストレージレイヤー
データは、埋め込みモデルに渡され、ベクトル形式に変換され、APIゲートウェイを介してベクトルDBのストレージレイヤーに取り込まれる。その後、データはインデックス化され、その過程でスケーラビリティと高速な検索のためにパーティション化/シャーディングされる。クエリエンジンはストレージレイヤーと緊密に統合されており、データベースのANN実装を介して最近傍を素早く検索できる。
アプリケーションレイヤー
ユーザーは、アプリケーションのUIを介して埋め込みモデルにクエリを送信する。埋め込みモデルは、入力されたクエリを、データと同じ埋め込み空間にあるベクトルに変換する。ベクトル化されたクエリは、APIゲートウェイ経由でクエリエンジンに送られる。複数のクエリが非同期で処理され、top-kの結果がユーザに返される。
RDB(リレーショナルデータベース)との違い
柔軟なデータ構造を持つため、様々なデータタイプに対応できる
画像や音声などの非構造化データもいける
検索処理に総当たりをせず範囲を絞り込む(近似最近傍検索: ANN)ため、高速に検索できる
https://scrapbox.io/files/657fec28f419fb00242044c4.png
https://scrapbox.io/files/657fee9c7ae7180024941878.png
セマンティック検索とは?
セマンティック検索とはRDBのような単に検索キーワードの一致による検索ではなく、そのキーワードが持つ意味を考慮した検索を行うということです。
これは文章データをベクトルデータに変換(意味空間にマッピングする)ことにより実現する機構.
https://scrapbox.io/files/657fee098bc5c200231eb5ff.png
なぜRDBでは、ダメなのか?
スケーラビリティの問題があるため。
データ量が増えると、すべてのベクトルを取得してから類似性を計算する、というアプローチでは大量のリソース(CPU、メモリ、ディスクI/Oなど)が必要になるため。
アルゴリズムについて
ANN(近似最近傍法)など
https://scrapbox.io/files/657fee2e6d8afb00241e1f7f.png
以下の記事参照