スキーマ構造(Classes、Properties、Vectorization設定)

ベクトルデータベースWeaviateにおける「スキーマ構造」は、データの構造や意味を定義し、検索や格納時の挙動を制御する重要な要素です。以下に、ClassesPropertiesVectorization設定の3つの観点から詳しく説明します。


1. Classes(クラス)

Weaviateでは、すべてのデータは「クラス」によってグループ化されます。クラスは、RDBMSにおけるテーブルに類似しており、1つのクラスが1種類のエンティティ(例:Article, Product, Personなど)を表します。

  • クラスの定義には以下が含まれます:

    • class: クラス名(例:Article

    • description: クラスの説明(省略可能)

    • properties: このクラスに含まれるプロパティのリスト

    • vectorizer: このクラスに使うベクトル化の手法(後述)

    • moduleConfig: 使用するモジュールの詳細設定(例:OpenAI、Cohereなど)


2. Properties(プロパティ)

クラス内には複数のプロパティ(属性)を定義できます。各プロパティは、エンティティが持つ情報(テキスト、数値、日付など)を表します。

  • 主な要素:

    • name: プロパティ名(例:title, content, publishedDate

    • dataType: データ型。Weaviateがサポートする型は以下の通り:

      • text, string

      • int, number

      • boolean

      • date

      • 他のクラスへの参照(オブジェクト関係)

    • description: プロパティの説明

    • tokenization: テキストデータの場合、トークン分割方式(word, field, whitespaceなど)


3. Vectorization設定

Weaviateの特長の一つが、データをベクトル化(embedding)してインデックス・検索できる点です。そのため、どのプロパティをベクトル化に使うか、どのモジュールを使うかを設定する必要があります。

ベクトル化の設定には、2つのレベルがあります

3.1 クラスレベルの設定(vectorizer

  • 指定例:

    json
    "vectorizer": "text2vec-openai"

    使用するベクトル化モジュール(例:text2vec-openai, text2vec-cohere, none)を指定します。

  • none を指定した場合、ユーザーが手動でベクトルを提供する必要があります。

3.2 プロパティレベルの除外(skip フラグ)

  • moduleConfigで、特定のプロパティをベクトル化対象から除外可能です。

    json
    "moduleConfig": { "text2vec-openai": { "skip": true } }

例:特定のプロパティだけをベクトル化対象にしたい場合

json
{ "class": "Article", "vectorizer": "text2vec-openai", "properties": [ { "name": "title", "dataType": ["text"], "moduleConfig": { "text2vec-openai": { "skip": false } } }, { "name": "author", "dataType": ["string"], "moduleConfig": { "text2vec-openai": { "skip": true } } } ] }

補足:スキーマの柔軟性

  • スキーマは動的に追加・更新できます。

  • クラスやプロパティはAPIやWeaviate Consoleから操作可能。

  • オブジェクト間のリンク(参照)もスキーマ内で定義でき、Graph構造の検索も可能。


まとめ

Weaviateのスキーマ構造は、以下の3層で構成されます:

要素 役割
Classes エンティティの種類を定義する単位
Properties 各エンティティの属性情報
Vectorization設定 ベクトル化処理の対象と方法を制御

このスキーマにより、Weaviateは意味的に構造化されたベクトル検索を柔軟に実現しています。

ChatGPT4o 生成日:2025/06/20