カスタムベクトルのアップロードと利用

ベクトルデータベースWeaviateにおける「カスタムベクトルのアップロードと利用」とは、外部で計算したベクトル(例えば、独自の埋め込みモデルや特定用途に最適化されたベクトル表現)をWeaviateに直接アップロードし、それを使って検索や分析を行う方法です。以下に詳しく解説します。


1. 背景:なぜカスタムベクトルを使うのか

Weaviateは通常、text2vec-* モジュールを使ってテキストから自動的にベクトルを生成します。しかし、以下のような状況では「自前で計算したカスタムベクトル」を使用するのが有効です。

  • 独自のドメイン固有埋め込みを使用したい場合(例:医療、法務など)

  • Hugging Face TransformersやOpenAI以外の埋め込みモデルを使用している場合

  • ベクトルを事前に一括処理しておきたい場合(バッチ処理など)


2. カスタムベクトルのアップロード方法

スキーマの設定

Weaviateのスキーマ定義において、vectorizer"none" に設定することで、ベクトルの自動生成を無効化し、カスタムベクトルを受け入れる設定にします。

json
{ "class": "MyDocument", "vectorizer": "none", "properties": [ { "name": "text", "dataType": ["text"] } ] }

オブジェクトの追加時にベクトルを指定

ベクトルはオブジェクト投入時に "vector" フィールドとして明示的に指定します。

json
{ "class": "MyDocument", "properties": { "text": "カスタムベクトルによる検索テスト" }, "vector": [0.12, 0.34, -0.56, ...] }

このベクトルは、ユーザーが外部で計算した512次元や768次元などの数値ベクトルであり、Weaviateはそのまま格納します。


3. 利用方法:検索時のベクトル指定

格納されたカスタムベクトルは、以下のような方法で検索に使用されます。

GraphQLでのベクトル検索

graphql
{ Get { MyDocument( nearVector: { vector: [0.12, 0.34, -0.56, ...], certainty: 0.8 } ) { text _additional { distance } } } }

このクエリでは、指定されたベクトルと類似度の高いデータが返されます。


4. カスタムベクトル利用時の注意点

  • 次元の整合性:クラスに保存される全てのベクトルは同じ次元である必要があります。異なる次元のベクトルを送信するとエラーになります。

  • vectorizer: noneの設定:誤ってtext2vec-openaiなどが有効になっていると、アップロードしたベクトルは無視され自動で再ベクトル化されます。

  • アップデート時の明示:ベクトルの更新も可能ですが、同様に "vector" フィールドを指定する必要があります。


5. 応用例

  • 独自トークナイザーと埋め込みモデルを使った多言語対応検索

  • ドキュメント分類器の中間層ベクトルを使った意味的クラスタリング

  • 外部の画像モデルから得たベクトルを使っての類似画像検索


まとめ

Weaviateでは、vectorizer: none を設定し、vector フィールドに外部で生成した数値ベクトルを与えることで、柔軟かつ高精度なカスタム検索環境を構築することが可能です。これにより、Weaviateをよりドメイン固有な知識ベースや独自モデルの活用に適した形で運用できます。

ChatGPT4o 生成日:2025/06/20