ベクターデータベースがAIアプリケーションの非構造化データ検索にどのような革命をもたらすか
ベクトル・データベースは、AIアプリケーションにおける非構造化データ検索に革命を起こすのに役立っている。ベクターデータベースの役割として広く認識されているのは、関連文書とLLMを結びつける検索支援生成(RAG)である。しかし、その用途と能力はRAGをはるかに超えており、さまざまな異なるタイプの非構造化データ、すなわちテキスト、画像、音声、分子、グラフなど、事前に定義されたデータモデルに準拠しないあらゆるタイプのデータに対して、より広範に適用可能である。
先日のBrazil Unstructured Data Meetupでは、Zillizの人工知能と機械学習の責任者であるFrank Liuが、ベクトルデータベースがAIアプリケーションにおける非構造化データ検索の状況をどのように変えているかについて語った。彼の洞察は、これらのデータベースの広範でインパクトのある能力に光を当てた。
ベクターとは何か?
AIアプリケーションにおけるベクトルデータベースとその役割について説明する前に、ベクトルデータベースの構成要素であるベクトルとは何かを理解することが重要です。ベクトルとは、コンピュータが処理できるように情報を符号化した数値のリストのことである。下図のような画像があるとしよう:
図1-ベクトル形式で表現された画像](https://assets.zilliz.com/Fig_1_An_image_represented_in_vector_format_4cd966af15.png)
あなたにとっては美しい花ですが、コンピュータにとっては、この画像を理解できる形式に変換する必要があります。ここで、ベクトル埋め込みが登場します。
上の花の画像は、ベクトル埋め込み-構造化された数値の配列-に変換される。ベクトル内の各数値は、色、テクスチャ、形状など、画像の特定の特徴を表します。これらの数値の組み合わせは、コンピュータが類似画像の検索、オブジェクトの分類、あるいは新しい画像の生成など、さまざまなタスクに使用できる画像のコンパクトで効率的な表現を提供します。以下は、ベクトル埋め込みがどのように生成され、Milvusのようなベクトルデータベースに格納されるかを視覚化したものです。
図2- ベクトル埋め込み生成・保存プロセス](https://assets.zilliz.com/Fig_2_Vector_embedding_generations_and_storage_process_7c0cffa5b8.png)
このプロセスは、様々な種類のデータを含む知識ベースから始まります。そのデータは、埋め込みモデルによって処理され、ベクトルに変換される。最後に、ベクトルはMilvusのようなベクトルデータベースに格納され、検索に備える。
データの埋め込みは画像に限りません。テキストや音声、さらには分子やグラフのような複雑なデータ型も、ベクトル埋め込みに変換することができます。データをベクトルとして表現することで、ベクトルデータベースの力を活用し、効率的で正確な検索を行うことができる。
ベクトル・データベースが様々な分野でどのように活用されているか見てみよう。
ベクターデータベースを活用したさまざまなユースケース
ベクターデータベースは、様々なアプリケーションにおいて、非構造化データの扱い方や検索方法を変革しています。AIシステムの機能強化から、より効果的なレコメンデーションまで、その可能性は広大でインパクトがあります。ベクターデータベースを活用した具体的なユースケースを紹介しよう。
検索拡張世代(RAG)
ベクトルデータベースは、より効率的で意味深い関連情報の検索を可能にすることで、RAGを変革している。従来のキーワードベースの検索手法では、複雑なクエリや微妙な文脈を扱う際に不足することが多い。ベクターデータベースは、完全一致ではなく、意味的な類似性に基づいてデータを保存し検索することで、この制限に対処します。
RAGでは、文書はその意味的な意味を捉える高次元ベクトルに変換される。クエリを受信すると、それもベクトルに変換され、ベクトルデータベースは最も意味的に類似した文書を素早く見つける。このアプローチは、正確で関連性の高い応答を生成するために重要な、よりニュアンスがあり文脈を考慮した情報検索を可能にする。
ハイテク企業のカスタマーサポート・チャットボットを考えてみよう。ユーザーが「電源が入らないデバイスのトラブルシューティング方法を教えてください」と質問すると、ベクター・データベースは、たとえその言葉が正確に含まれていなくても、関連するドキュメントを検索することができる。電源の問題、バッテリーの問題、一般的なトラブルシューティングの手順に関する情報を引き出すかもしれない。LLMは、この検索された情報を使用して、包括的で文脈に関連した応答を生成し、カスタマーサポートの質を大幅に向上させます。
レコメンダー・システム
ベクトルデータベースは、より洗練された効率的な類似性計算を可能にすることで、レコメンダーシステムに革命をもたらしている。従来のレコメンダーシステムは、しばしば「コールドスタート」問題に悩まされ、大規模なデータセットを扱う場合には計算コストが高くつく。ベクトルデータベースは、高次元空間での高速な近似最近傍探索を可能にすることで、これらの問題に対処している。
ベクトルデータベースを利用した推薦システムでは、ユーザーとアイテムの両方が、共有された埋め込み空間におけるベクトルとして表現される。これらの埋め込みは複雑な特徴や嗜好を捉え、より微妙なレコメンデーションを可能にする。ベクトルデータベースは、類似したユーザーやアイテムを素早く見つけることができるため、膨大なデータセットでもリアルタイムのパーソナライゼーションが可能になる。
例えば、Spotifyのような音楽ストリーミングサービスは、ベクトルデータベースを推薦エンジンに利用している。各楽曲はベクトルとして表現され、ジャンル、テンポ、ムード、リスニングパターンなどの様々な属性をキャプチャする。ユーザーの好みもベクトルとしてエンコードされる。ユーザーが新しい曲を聴くと、システムはベクトル空間から似たような曲を素早く見つけることができ、たとえそれが知らないアーティストやジャンルの曲であっても、ユーザーの好みに合った新しい音楽を発見することができる。
分子類似検索
ベクターデータベースは、より効率的で正確な類似化合物の同定を可能にすることで、創薬における分子類似性検索に変革をもたらしつつある。従来の手法では2次元構造の類似性に頼ることが多く、重要な3次元構造の類似性や官能基の関係を見逃すことがありました。
ベクターデータベースでは、分子の画像が高次元のベクターとして表現され、複雑な構造や化学的特性を捉えている。これにより研究者は、たとえ2次元構造が異なっていても、類似した特性や潜在的な生物活性を持つ分子を検索することができる。また、ベクターデータベースのスピードは、膨大な化学ライブラリーの迅速なスクリーニングを可能にする。
新しい抗生物質候補を探している製薬会社の例を見てみよう。よく効くが副作用がひどい既知の抗生物質分子がある。ベクター・データベースを使えば、何百万もの化合物を素早く検索し、抗菌特性は似ているが副作用プロファイルが異なる可能性のある分子を見つけることができる。ベクトル表現は、電荷分布、潜在的結合部位、3次元形状などの特徴を捉え、従来の2次元類似性検索では見逃してしまうような、構造的には多様だが機能的には類似した分子の発見を可能にするかもしれない。
マルチモーダル類似性検索
ベクターデータベースは、異なるタイプのデータ(テキスト、画像、音声など)を横断的に表現・検索する統一的な方法を提供することで、マルチモーダル検索に革命をもたらしています。従来の検索システムは、クロスモーダルクエリや異なるデータタイプ間の関係を見つけることに苦労することが多かった。
ベクトルデータベースを使用したマルチモーダルシステムでは、すべてのデータタイプが共有された高次元空間に投影され、元のデータタイプに関係なく類似性を計算することができます。これにより、より柔軟で強力な検索機能が可能になり、異なるモダリティ間で関連するコンテンツを見つけることができる。
例えば、あるeコマース・プラットフォームは、ベクトル・データベースを使ったマルチモーダル検索システムを実装している。ユーザーは、気に入った家具の画像をアップロードし、希望の色や素材についてテキストで説明することができる。システムは画像とテキストを共有空間のベクトルに変換する。そして、ベクター・データベースを検索し、画像から得たビジュアル・スタイルと、テキストの説明から得た具体的な属性の両方にマッチする商品を探し出す。これによってユーザーは、言葉だけではうまく表現できなくても、探しているものを正確に見つけることができ、ショッピング体験が大幅に向上する。
これらは、ベクトル・データベースが革命をもたらしつつあるユースケースのほんの一部に過ぎない。フランクはさらに多くのユースケースを次のスライドで紹介している。
図3-ベクトルデータベースのユースケース](https://assets.zilliz.com/Fig_3_Vector_databases_use_cases_844c77fd20.png)
上記のリストは網羅的なものではない。ベクトル・データベースを通じてAIアプリケーションのデータ検索を強化する場合に何が可能かを示したに過ぎない。
ベクトル・データベースが様々な分野で重要であることはご理解いただけただろう。ユースケースのひとつを実装して、実際に使ってみましょう。ここでは、GitHubで最もよく使われているベクターデータベースであるMilvusを利用する。
Milvus, Radient, ImageBind, Meta-Chameleon-7bを使ったマルチモーダル類似検索システムの実装
上記のツールを使ってマルチモーダル類似検索システムを実装する。これらのツールをあなたの環境にインストールし、インポートする必要があります。
環境の構築
必要なライブラリをインストールし、必要なモデルをダウンロードすることから始めます。
pip install -U radient
!pip install -U yt-dlp
pip install pymilvus
!pip install -U git+https://github.com/facebookresearch/chameleon.git@main
git clone https://huggingface.co/eastwind/meta-chameleon-7b
!yt-dlp "https://www.youtube.com/watch?v=wwk1QIDswcQ" -o ~/google_io_preshow.mp4
!pip install git+https://github.com/fzliu/ImageBind@main
上記の各ライブラリが何をするかは以下の通りです:
Radient:様々なデータ処理ステップを統合し、マルチモーダルデータを処理・分析するワークフローを作成・実行します。
yt-dlp**:YouTubeから動画をダウンロードするためのコマンドラインツール。この記事では、このGoogleのプレショーの動画を使用する。
PyMilvus**:MilvusベクトルデータベースとMilvus liteを操作するためのPython SDKで、大規模データの効率的な類似検索と取得を可能にします。
カメレオンMeta AIによって開発された視覚言語モデルで、視覚入力を基にテキストを理解・生成することができ、マルチモーダルなデータ入力を統合するのに便利です。
メタ・カメレオン-7b**:高度な視覚言語タスクのために設計され、視覚データとテキストデータを統合することで文脈を考慮した応答を提供する、カメレオンシリーズの特定モデル。
ImageBind**:マルチモーダル埋め込みモデル。
ライブラリをインストールした後、それらの機能を使えるようにするために、あなたのコードにライブラリをインポートする必要があります。
from pathlib import Path
from radient import make_operator
from radient import ワークフロー
radientのみをインポートしていることに注目してほしい。これはRadientがワークフロー内で埋め込みモデルとPyMilvus` の統合と利用を行うためである。そのため、手動でインポートする必要はない。
make_operator関数を使うと、ワークフローの構成要素となる様々な演算子を作成することができる。Workflow クラスはこれらの演算子を論理的な順序で連結する。
インポートが完了したら、マルチモーダル類似検索システムを実装する準備が整った。
演算子の作成
ワークフローが実行する特定のタスクを指定することから始める。
path = Path('/content/google.mp4') // ここにyoutubeでダウンロードした動画のパスを渡す。
read = make_operator(optype="source", method="local", task_params={"path": str(path)})
demux = make_operator(optype="transform", method="video-demux", task_params={"interval": 5.8})
vectorize = make_operator (optype="vectorizer", method="imagebind", modality="multimodal", task_params={})
store = make_operator (optype="sink", method="milvus", task_params={"operation": "insert"})
各オペレーターを詳しく分解してみよう:
1.read:ローカルの動画ファイルを読み込むsource` 演算子です。ファイルパスをパラメータとして受け取り、動画データをワークフローに読み込みます。
2.demux:5.8秒間隔でビデオをフレームにデマックス(分離)するtransform` オペレータです。このステップは、連続的なビデオストリームを個別に処理できる個別の画像に分解するために重要である。
3.ベクトル化:このオペレータはImageBind` モデルを使用して、マルチモーダルデータのベクトル埋め込みを作成する。ImageBindは異なるモダリティ(画像、テキスト、音声など)に対して統一された埋め込みを作成できる強力なモデルで、高次元のベクトル空間でビデオフレームを表現することができます。
4.store`:これはベクトル化されたデータをMilvus liteに挿入するシンクオペレータである。Milvusの軽量版
演算子を作成したら、次はそれを使ったワークフローを作成します。
挿入ワークフローの構築
次に、処理したビデオデータをMilvusデータベースに挿入するワークフローを構築する:
insert_wf = (ワークフロー())
.add(read, name="read")
.add(demux, name="demux")
.add(vectorize, name="vectorize")
.add(store, name="store")
)
insert_wf()
このワークフローでは、まずビデオファイルを読み込み、それを個々のフレームにデマックスする。その後、各フレームはImageBindモデルを使ってベクトル化される。出来上がったベクトルはMilvusデータベースに保存される。
すべてがスムーズに進めば、以下のような出力が表示されるはずです:
図4- 挿入操作の結果](https://assets.zilliz.com/Fig_4_Results_of_the_insertion_operation_b4cf66c082.png)
この出力は、あなたのビデオが処理され、Milvusに挿入されたことを確認するものです。挿入操作の結果、挿入されたレコード数、ID、計算コストが表示されます。
検索ワークフローの設定
データを挿入した後、検索のためのワークフローをセットアップする必要がある。このワークフローでは、テキストクエリに基づいて関連するビデオフレームを検索します:
vectorize = make_operator("vectorizer", "imagebind", modality="text")
search = make_operator("sink", "milvus", task_params={"operation":"search", "output_fields":なし})
search_wf = (ワークフロー())
.add(vectorize, name="vectorize")
.add(search, name="search")
)
この検索ワークフローは主に2つのステップからなる:
1.vectorize`演算子はテキスト入力を受け取り、ImageBindを使ってベクトル埋め込みに変換する。これにより、ビデオフレームと同じベクトル空間でテキストクエリを表現することができる。
2.search`オペレータはこのベクトルを使ってMilvusデータベースの類似検索を行い、クエリに最も類似したビデオフレームを見つける。
検索ワークフローができたので、検索を実行してみよう。
マルチモーダル検索の実行
テキストを使ってビデオを検索するので、これはマルチモーダル検索です。正確には、ビデオフレームを検索しています。
prompt = "コーヒーカップについて変わったことは?"
search_wf(data=prompt)
search_vars = {検索文字列
"limit":1, # トップk制限
"output_fields":["*"] # 出力フィールド
}
結果 = search_wf(
extra_vars={"search": search_vars}、
データ=プロンプト
)
results[0][0][0]["entity"]["data"]
ここでは、珍しいコーヒーカップについて尋ねる検索プロンプトを定義する。search_vars`辞書では、上位1件とすべての出力フィールドを指定している。
次に、これらの入力を使って検索ワークフローを実行する。ワークフローはテキストプロンプトをベクトル化し、Milvusで類似のベクトルを検索し、結果を返す。ネストされたインデックス [0][0][0] は最初の(そしてこのケースでは唯一の)検索結果にアクセスし、["entity"]["data"] はこの結果に関連付けられた実際のデータを取得する。
上記のコードは、クエリに最も適合するフレームのパスを返します。
出力
/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png
この返されたフレームを視覚化して、マグカップのどこが異常なのかを見てみよう。
from PIL import Image
image_path = "/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png"
image = Image.open(image_path)
インポート matplotlib.pyplot as plt
plt.imshow(image)
plt.show()
このコードは `PIL` (Python Imaging Library) を使って検索結果に対応する画像ファイルを開き、 `matplotlib` を使って表示しています。この視覚的な表示は、珍しいコーヒーマグカップに関するクエリに対してシステムが何を見つけたかを理解するのに役立ちます。
これがその出力である:
図5-マグカップから出てくる人](https://assets.zilliz.com/Fig_5_A_person_coming_out_of_a_Mug_7ff945d854.png)
見ての通り、このフレームは普通のマグカップには人が入らないので、変わったマグカップを示しています。珍しいのは、マグカップから人が出ていることです。
### 画像説明のためのメタ・カメレオン-7bの活用
マルチモーダル検索システムをさらに強化するために、画像の説明を生成するためにMeta-Chameleon-7bモデルを使うことができる:
from chameleon.inference.chameleon import ChameleonInferenceModel
インポート os
ファイルのパスと存在を確認する
image_path = '/root/.radient/data/video_demux/6bc783e9-c789-4340-b45c-204621145f2b/frame_0001.png'
print(f "画像パス: {image_path}")
print(f "ファイルが存在します:ファイルが存在します: {os.path.exists(image_path)}")
print(f "ファイルサイズ: {os.path.getsize(image_path)} bytes")
モデルの初期化
model = ChameleonInferenceModel(
"./meta-chameleon-7b/models/7b/"、
"./meta-chameleon-7b/tokenizer/text_tokenizer.json"、
"./meta-chameleon-7b/tokenizer/vqgan.yaml"、
"./meta-chameleon-7b/tokenizer/vqgan.ckpt"、
)
を試す:
トークン = model.generate(
prompt_ui=[
{"type":"image", "value": f "file:{image_path}"}, # 'file:'の後のスペースを削除する。
{"type":"text", "value": prompt}、
{"type":"sentinel", "value":"<end-of-turn>"}、
]
)
result = model.decode_text(トークン)[0].
print("生成された説明文:")
print(result)
except Exception as e:
print(f "エラー: {e}")
インポートトレースバック
traceback.print_exc()
このコードはMeta-Chameleon-7bモデルを初期化します。Meta-Chameleon-7bは画像を文脈に沿って理解し、説明することができる視覚言語モデルです。画像と元のテキストプロンプトの両方を提供し、クエリに関連する説明を生成できるようにします。
generate`メソッドは画像ファイルのパス、テキストプロンプト、入力の終わりを示すセンチネルトークンなどの入力リストを受け取る。そしてモデルは一連のトークンを生成し、それを人間が読めるテキストにデコードします。以下は、出力がどのように見えるかのサンプルです:
図6- 視覚言語モデルを使った説明と画像の出力](https://assets.zilliz.com/Fig_6_Output_of_describing_and_image_using_a_vision_language_model_687ad9f912.png)
この実装は、Milvusのようなベクトル・データベースがいかに大規模なAIシステムに統合され、異なるモダリティにわたる効率的な類似検索を可能にするかを示している。
## 結論
Frankは、ベクトル・データベースがAIや機械学習の分野で、特に非構造化データを扱うための革新的な技術としていかに登場したかを、よく示してくれた。実証されたように、その応用は単純な検索支援システム(RAG)をはるかに超え、顧客サポート、推薦システム、創薬、マルチモーダル検索など様々な領域に革命をもたらしている。さらに洗練されたベクターデータベースを利用したAIアプリケーションを実装してみよう。以下は参考資料です。
エンベッディングの歴史など、より詳細な理解については、[_watch the replay of the meetup talk._](https://www.youtube.com/watch?v=qUCrVakydS4&list=PLPg7_faNDlT7SC3HxWShxKT-t-u7uKr--)をご覧ください。
## その他のリソース
- [Multimodal-search-using-milvus.ipynb - Colab (google.com)](https://colab.research.google.com/drive/1yOnU6BTIjeER4UMGMw29IgnmzlYJlvGg)
- <https://github.com/fzliu/radient/blob/main/examples/multimodal_rag.md>
- Milvusベクトルデータベースドキュメント](https://milvus.io/docs)
- [fzliu/ImageBind:ImageBind 1つの埋め込みスペースですべてをバインドする (github.com)](https://github.com/fzliu/ImageBind)
- [chameleon/chameleon at main - facebookresearch/chameleon (github.com)](https://github.com/facebookresearch/chameleon/tree/main/chameleon)
読み続けて

Zilliz Cloud Just Landed in Claude Code
Zilliz Cloud Just Landed in Claude Code - Build AI Apps without Leaving Your Terminal

Announcing the General Availability of Single Sign-On (SSO) on Zilliz Cloud
SSO is GA on Zilliz Cloud, delivering the enterprise-grade identity management capabilities your teams need to deploy vectorDB with confidence.

Demystifying the Milvus Sizing Tool
Explore how to use the Sizing Tool to select the optimal configuration for your Milvus deployment.
