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
スター履歴
データ取得日時: 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、データ、検索を統合した包括的ソリューションを提供します。大規模エンタープライズでの利用を考えている組織にとっては、その実績と信頼性は非常に魅力的な選択肢です。