GitHub概要

vespa-engine/vespa

AI + Data, online. https://vespa.ai

スター6,261
ウォッチ159
フォーク653
作成日:2016年6月3日
言語:Java
ライセンス:Apache License 2.0

トピックス

aibig-datacppjavamachine-learningsearch-engineserverservingserving-recommendationtensorflowvector-searchvespa

スター履歴

vespa-engine/vespa Star History
データ取得日時: 2025/7/30 03:04

Vespaとは

Vespaは、Yahoo!が開発した世界最高水準のオープンソーステキスト検索エンジンであり、同時に世界で最も能力の高いベクトルデータベースでもあります。データベース、検索エンジン、機械学習フレームワークの機能を単一プラットフォームに統合し、スケーラブルなアプリケーションの構築を可能にします。

主な特徴

AI + データの統合プラットフォーム

  • マルチデータタイプ対応: ベクトル、テンソル、テキスト、構造化データを統合的に処理
  • リアルタイムデータ処理: 100ミリ秒未満のクエリでデータコーパスを継続的に更新
  • 機械学習モデル統合: サービング時に選択されたデータでMLモデルを評価
  • ハイブリッド検索: ベクトル類似性、レリバンスモデル、マルチベクトル表現を組み合わせ

分散アーキテクチャ

  • 水平スケーラビリティ: 数十億のドキュメントと秒間数十万クエリを処理
  • 自動シャーディング: データを複数ノードに自動分散し負荷分散を実現
  • 障害耐性: 自動データレプリケーションとフェイルオーバー機能
  • パラレル処理: 大規模データセットを複数ノードで並列評価

高性能ベクトル検索

  • HNSWアルゴリズム: 近似ベクトル検索のためのHNSWアルゴリズム実装
  • マルチスレッド検索: クエリあたり複数スレッドで遅延を減少
  • 高スループット: HNSW無しでは80,000ベクトル/秒の書き込みスループットを達成
  • スケールアウト: コンテントクラスタのノード数を増やしてスループットを水平方向に拡張

MLフレームワーク統合

  • 主要フレームワーク対応: TensorFlow、PyTorch、XGBoost、LightGBMと統合
  • ONNX Runtime: 大規模ディープニューラルネットワークモデルの加速推論
  • データからベクトルへの変換: 強力なデータ変換モデルを加速

アーキテクチャ

Vespaは3つの主要サブシステムで構成されています。

1. ステートレスコンテナ(Java)

  • jDiscコア: アプリケーション実行モデルとプロトコル非依存リクエストレスポンス処理
  • 検索ミドルウェア: クエリ/結果APIとクエリ実行ロジック
  • ドキュメント操作: ドキュメントモデルと非同期メッセージパッシングのAPI

2. コンテントノード(C++)

  • searchcore: インデックス、マッチング、データストレージ、コンテントノードサーバーのコア機能
  • searchlib: ランキング、インデックス実装、属性(前方インデックス)のライブラリ
  • storage: クラスタ間での弾力性と自動回復データストレージ
  • eval: ランキング式とテンソルAPIの効率的評価ライブラリ

3. 設定と管理(Java)

  • configserver: アプリケーションデプロイと設定リクエストのサーバー
  • config-model: デプロイされたアプリケーションに基づいたシステムモデル
  • config: 設定の購読と読み取りのためのクライアント側ライブラリ

メリット・デメリット

メリット

  • 検索、ベクトル検索、リアルタイムML推論を単一プラットフォームで統合
  • 企業級の実績と信頼性(Yahoo! Mail、News等で使用)
  • 高度なスケーラビリティと障害耐性
  • リアルタイムデータ更新とダウンタイムなしのMLモデル更新
  • SQLライクなクエリ言語で構造化データと非構造化データを統合

デメリット

  • 学習曲線が急峻で複雑な設定が必要
  • 小規模なプロジェクトには過剰な機能
  • リソース消費が大きく、インフラコストが高い
  • 日本語ドキュメントが少ない

主要リンク

デプロイメントオプション

Vespaクラウド(推奨)

# Vespa CLIのインストール
brew install vespa-cli

# アプリケーションのデプロイ
vespa auth login
vespa deploy --wait 300

セルフホスト(Docker)

# Vespaコンテナの起動
docker run --detach --name vespa --hostname vespa-container \
  --publish 8080:8080 --publish 19071:19071 \
  vespaai/vespa

# アプリケーションのデプロイ
vespa deploy --target local

使用例

基本的なベクトル検索

<!-- schema/document.sd -->
schema document {
    document document {
        field title type string {
            indexing: summary | index
        }
        field embedding type tensor<float>(x[512]) {
            indexing: summary | attribute
            attribute {
                distance-metric: euclidean
            }
        }
    }
    
    fieldset default {
        fields: title
    }
    
    rank-profile default {
        inputs {
            query(q) tensor<float>(x[512])
        }
        first-phase {
            expression: closeness(field, embedding)
        }
    }
}

Pythonクライアントでのデータ操作

import requests
import json

# ドキュメントの追加
document = {
    "fields": {
        "title": "Vespaの使い方",
        "embedding": [0.1] * 512  # 512次元のベクトル
    }
}

response = requests.post(
    "http://localhost:8080/document/v1/mynamespace/document/docid/1",
    json=document
)

# ベクトル検索の実行
query = {
    "yql": "select * from sources * where true",
    "ranking.features.query(q)": [0.2] * 512,
    "ranking.profile": "default"
}

search_response = requests.post(
    "http://localhost:8080/search/",
    json=query
)

results = search_response.json()
for hit in results["root"]["children"]:
    print(f"Title: {hit['fields']['title']}")
    print(f"Relevance: {hit['relevance']}")

ハイブリッド検索の例

# テキストとベクトルを組み合わせた検索
hybrid_query = {
    "yql": "select * from sources * where userQuery() or ({targetHits:100}nearestNeighbor(embedding,q))",
    "query": "Vespaベクトル検索",
    "ranking.features.query(q)": [0.15] * 512,
    "ranking.profile": "hybrid"
}

response = requests.post(
    "http://localhost:8080/search/",
    json=hybrid_query
)

機械学習モデルの統合

<!-- ランキングプロファイルでMLモデルを使用 -->
rank-profile ml_ranking {
    inputs {
        query(user_embedding) tensor<float>(x[128])
    }
    
    first-phase {
        expression: onnx(recommendation_model).score
    }
    
    onnx-model recommendation_model {
        file: models/recommendation.onnx
        input "user_features": query(user_embedding)
        input "item_features": attribute(item_embedding)
        output "score": score
    }
}

主要ユースケース

  • 検索アプリケーション: Yahoo! Mail、Newsなどの大規模サービス
  • 推薦システム: Spotifyなどのパーソナライゼーション
  • Eコマース検索: 商品検索と推薦システム
  • コンテンツモデレーション: 大規模コンテンツフィルタリング
  • リアルタイム分析: 大量データの継続的分析と集約

まとめ

Vespaは、Yahoo!の長年の経験と実績に裏打ちされた、世界最高水準の検索プラットフォームです。単なるベクトルデータベースを超えて、AI、データ、検索を統合した包括的ソリューションを提供します。大規模エンタープライズでの利用を考えている組織にとっては、その実績と信頼性は非常に魅力的な選択肢です。