SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
Vespa機能紹介
2018/03/13
Yahoo! JAPAN MEETUP # 22(Vespa 特別編)
ヤフー株式会社 矢野 友貴
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
• 氏名
• 矢野 友貴 (やの ゆうき)
• 所属
• ヤフー株式会社 D&S統括本部
• サイエンス的ななにか
• 業務
• むかーしVespaのサービス運用してた
• 検索モデリングとかチョットデキル
• 最近はSolrに浮気中
自己紹介
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
1
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
• Vespaの日本語向けのチュートリアル資料を以下に公開してます
• 詳しい使い方はそちらを参照してください
• この発表ではVespaの特徴的な機能をSolr/Elasticsearchと比較しながら
紹介していきます (赤字と青字で区別)
はじめに
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
2
https://yahoojapan.github.io/vespa-tutorial/
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
3
• 構成
• スキーマ・更新
• 検索・集約
• ランキング
• クラスタリング
• まとめ
アジェンダ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
4
• 構成
• スキーマ・更新
• 検索・集約
• ランキング
• クラスタリング
• まとめ
アジェンダ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
5
• Vespaはrpmパッケージ or Dockerイメージとして提供
• 他と同じように全ノードに同じものをインストールすればよい
• Solrだけ別途ZooKeeperが必要 (bundle版もあるけど非推奨)
インストール方法
Vespa Solr Elasticsearch
提供方法 rpm, docker tgz, docker tgz, rpm, deb,
msi, docker
必要な
パッケージ
vespa solr
zookeeper
elasticsearch
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
6
• Solr/Elasticsearchは全ノードで同じプロセスが起動
• インデックスに差があるだけで各プロセスの役割は同じ
ノードとプロセス
Solrクラスタ Elasticsearchクラスタ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Vespaクラスタ Vespaクラスタ
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
7
• Vespaでは各ノードに対して設定で役割を割り当て
• 大きく分けて admin, container, content の3つのグループ
• 設定に応じて起動するプロセスが変化
ノードとプロセス (cont’d)
config
admin
container
content
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
8
Vespaの構成
admin
Admin
Server
Config
Server
container
Query/Rewrite
Server
Document
Processor
content
Distributor Search Node
インデックス
設定ファイル
プラグイン
モデル
管理者
ユーザ
設定の更新
管理コマンドの実行 クラスタの
状態管理
検索・更新
インデックス管理
検索・ランキング
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
9
• Vespaはコンポーネント毎に実装が大きく違います
• フロントエンド側はJava、バックエンド側はC++
• コード量が非常に多いのもこの辺が起因してそう
• コア実装を拡張するのは至難の業 (Javaプラグインは楽)
Vespaの構成 (cont’d)
グループ コンポーネント 実装 役割
admin
Config Server Java 設定ファイルの管理 (ZooKeeperもどき)
Admin Server Java クラスタの状態管理、ログの収集
container
Query/Rewrite Server Java 検索リクエスト・レスポンスの加工
Document Processor Java 更新ドキュメントの加工
content
Distributor C++ ドキュメント分散のメタ情報管理、分散制御
Search Node C++ インデックス管理、検索・ランキングの実行
※実際はもっと細かいプロセスに分かれます
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
10
• 構成
• スキーマ・更新
• 検索・集約
• ランキング
• クラスタリング
• まとめ
アジェンダ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
11
• Vespaも基本型はSolr/Elasticsearchとほぼ同じ
• Vespaでは多次元を扱う型が強い
フィールド定義
フィールド型 中身
string 文字列型 (トークナイズの有無は別途指定)
integer 32-bit 整数の数値型
long 64-bit 整数の数値型
byte 8-bit 整数の数値型
float 単精度浮動小数点型
double 倍精度浮動小数点型
raw バイナリ型
array<element-type> 配列型、element-typeで要素の型を指定
weightedset<element-type> 辞書型、element-typeでキーの型を指定、値はinteger
tensor(dimention-1, ...) テンソル型、dimention-1, ...で次元を指定
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
12
• weightedset型とtensor型は多次元データを扱う型
• weightedset : keyとそれに対する重みをmapとして定義
• tensor : 多次元配列 (疎 or 密) としてテンソルを定義
weightedset型とtensor型
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
13
• これら2つの型があると嬉しいこと => ベクトル・行列演算
• ex1) 検索クエリでユーザベクトルを与えてレコメンド
• ex2) ニューラルネットなモデルを用いたランキング
weightedset型とtensor型 (cont’d)
R
users
documents
U V
k
k
users
documents
input hidden output
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
14
• フィールド名や値の型から新規フィールドを動的に作成する機能
• Vespaは動的フィールドは未サポート
• フィールド追加には明示的な定義が必要
• Solr/Elasticsearchではサポート
• データ形式が緩い用途 (ログ解析とか) だとVespaは不向きかも
動的フィールド
Solr (dynamic field) Elasticsearch (dynamic template)
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
15
• 更新した内容が検索可能になるまでの時間はVespaの方が速い
• Vespa : 更新リクエストが完了した時点
• Solr/Elasticsearch : soft commitの間隔に依存
• soft commitの間隔と検索性能がトレードオフの関係
リアルタイム性
tlog…
segments
memory
index
disk
index
tlog
soft commit実行時に
更新差分がvisibleになる
更新リクエストが完了
した時点でvisibleになる
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
16
• 構成
• スキーマ・更新
• 検索・集約
• ランキング
• クラスタリング
アジェンダ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
17
• よくある検索はVespaも網羅
• Solr/Elasticsearchと大差なし
検索
検索内容 クエリ
defaultフィールドに対して “foo” を検索 query=foo
titleフィールドに対して “foo” を検索 (フィールド指定検索) query=title:foo
“foo” かつ “bar” を含むものを検索 (AND検索) query=foo bar
“foo” もしくは “bar” を含むものを検索 (OR検索) query=(foo bar)
“foo” を含むが “bar” を含まないものを検索 (NOT検索) query=foo -bar
“foo bar” というフレーズを検索 (フレーズ検索) query="foo bar"
1000<=price<=10000 なものを検索 (範囲検索) query=price:[1000;10000]
“foo” に150%の重みを付与して検索 (重み付き検索) query=foo!150 bar
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
18
• 代表的な集約処理 => groupingとfaceting
• grouping
• 各グループの部分検索結果を出力 (検索寄り)
• Vespaの方が強いイメージ
• 後述のランキングと連携できるため
• faceting
• 各グループの統計値を出力 (解析寄り)
• Solr/Elasticsearchの方が強いイメージ
• Stream ExpressionやScriptingなど手広いため
集約
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
19
• Vespaでは集約はDSLを用いて表現
• ex) 各ジャンルから1件ずつドキュメントを取得
Vespaと集約
select=
all(
group(genres)
each(
max(1)
each(
output(summary())
)
)
)
...
“children”: [
{“id”: “grouplist:genres”,
“children”: [
{“id”: group:string:Elasticsearch,
”children”: [ document ]},
{“id”: group:string:Java,
”children”: [ document ]},
{“id”: group:string:Python,
”children”: [ document ]},
...
]
]
...
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
20
• DSLではどのグループになにをするかを再帰的に定義
• ネストしていくことで多段の集約が実行可能
Vespaと集約 (cont’d)
…
Elasticsearch Java Python
…
…
…
select=
all(
group(genres)
each(
max(1)
each(
output(summary())
)
)
)
検索結果全体を
genresでグループ分け
各グループの中から
最大1件を取得
グループ内の各ドキュメント
について内容を出力
後述のランキング
で各グループをソート
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
21
• VespaではSolr/Elasticsearchにない高度な検索機能があります
• WAND検索
• Predicateフィールド
高度な検索
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
22
• WAND = Weak AND or Weighted AND の略
• AND検索とOR検索の中間のような検索
• 10個の検索条件のうち6個を満たす、みたいな
• 実際は各検索条件 (ex. 単語) に重みが付いた内積演算
• スコアの上限値を元に検索候補を枝刈りしながら高速に検索
• ex) レコメンドのような多数の条件で検索するケースとか
WAND検索
インデックス
ユーザベクトル
文書ベクトル
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
23
• フィールド自体に条件式を埋め込む検索
• クエリの属性情報を元に対象文書をフィルタリング
• 各ドキュメントが個別に条件式を持つところがポイント
• ex) 広告配信での対象ユーザ指定とか
Predicateフィールド
gender=male
age=31
docid gender age
1 female 20 <= age < 40
2 male OR female 30 <= age <= 39
3 male 25 <= age < 35
…
文書側に埋め込まれた
条件式を元に絞り込む
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
24
• 構成
• スキーマ・更新
• 検索・集約
• ランキング
• クラスタリング
• まとめ
アジェンダ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
25
• 一般的にランキングは多段で実施 (ここでは2段を想定)
• 候補文書を段階的に絞り込むことで計算コストを軽減
• 後段ほど複雑なモデルを配置
検索とランキング
second-phase
first-phase
重量モデルによる候補文書の並び替え
軽量モデルによる候補文書の絞り込み
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
26
• Solr/ElasticsearchではLTR pluginの追加が必要
• それぞれのフェーズを異なるコンポーネントが管理
• 設定がバラけて管理が煩雑
検索とランキング (cont’d)
second-phase
first-phase
LTR plugin LTR plugin
Function Query
Similarity
Function Score Query
Similarity
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
27
• Vespaではランキング全体を一つの設定ファイルで管理
• 計算式は専用のDSLを用いて記述
• 検索時に対応するプロファイルを指定することで実行
検索とランキング (cont’d)
second-phase
first-phase
Rank Profile
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
28
• DSLでは四則演算、数学関数、IF文といった記述が可能
• 様々なモデルがDSLを用いて表現できます
DSLによるモデル記述
スコア計算に関連するプロパティの定義
外部モデルファイルの参照
スコア計算式の記述
second-phaseのランキングの定義
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
29
• Vespaではモデル計算で役立つ組み込み素性を多数定義
• フィールド情報のアクセス、クエリとの適合度、etc...
• ただし独自素性を追加するのはちょっと大変かも... (C++実装)
DSLによるモデル記述 (cont’d)
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
30
• Vespaでは前述のtensor型を用いた行列演算を提供
• ニューラルネットや分散表現といった先端的なモデルも表現可能
テンソルを用いたスコア計算
input hidden output
1
…
…
1
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
31
• 構成
• スキーマ・更新
• 検索・集約
• ランキング
• クラスタリング
• まとめ
アジェンダ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
32
• Solr/Elasticsearchでのインデックス分散 => shard/replica
• 基本的にreplicaを増やすことでスケールアウト
• shardの数は一度決めると変更することが困難
インデックスの分散
node1
node3
node2
node4
node1
node3
node2
node4
replica数に
偏りが生じる
リバランス
ノード
追加
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
33
• Vespaではbucketというより小さい粒度で分散配置を管理
• bucketはデータ規模に応じて動的に統合・分離
• ユーザは冗長数だけを気にすればいい
インデックスの分散 (cont’d)
node1
node3
node2
node4
node1
node3
node2
node4
リバランス
ノード
追加
より均等に
データを分散
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
34
• Vespaでは所属ホストを設定ファイルで管理
• 設定ファイルを修正・デプロイするだけでノードの増減が可能
• 必要なデータ分散なども自動で実行されます
クラスタの管理
Vespaクラスタ
admin
container
content
設定ファイル
プラグイン
モデル
最新設定のアップロードと反映
# vespa-deploy prepare CONFIG
# vespa-deploy activate
新しいcontentノード群
の中でリバランシング
最新の設定の基づき
クラスタ構成を更新
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
35
• 構成
• スキーマ・更新
• 検索・集約
• ランキング
• クラスタリング
• まとめ
アジェンダ
チュートリアル資料
https://yahoojapan.github.io/vespa-tutorial/
Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止
36
• Vespaのいいところ
• 全文検索に強い (リアルタイム性とか検索機能とか)
• ランキング機能がすごく先進的
• スケーラビリティがとても高い
• Vespaのイマイチなところ
• データ解析用途ならElastic Stackとか使った方が楽
• C++部分の拡張が辛い (Javaの方はフレームワークが優秀)
• OSS化が最近で公式以外にプラグインとか資料がほぼない
まとめ

Contenu connexe

Tendances

Tendances (20)

ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)ナレッジグラフ/LOD利用技術の入門(後編)
ナレッジグラフ/LOD利用技術の入門(後編)
 
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
Hive on Spark を活用した高速データ分析 - Hadoop / Spark Conference Japan 2016
 
自己紹介LT(公開版)
自己紹介LT(公開版)自己紹介LT(公開版)
自己紹介LT(公開版)
 
ナレッジグラフ入門
ナレッジグラフ入門ナレッジグラフ入門
ナレッジグラフ入門
 
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
モノタロウの1900万商品を検索する Elasticsearch構築運用事例(2022-10-26 第50回Elasticsearch 勉強会発表資料)
 
Java でつくる 低レイテンシ実装の技巧
Java でつくる低レイテンシ実装の技巧Java でつくる低レイテンシ実装の技巧
Java でつくる 低レイテンシ実装の技巧
 
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
OpenAPI 3.0でmicroserviceのAPI定義を試みてハマった話
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
 
各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較各種データベースの特徴とパフォーマンス比較
各種データベースの特徴とパフォーマンス比較
 
tf,tf2完全理解
tf,tf2完全理解tf,tf2完全理解
tf,tf2完全理解
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPCマイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
 
Web API入門
Web API入門Web API入門
Web API入門
 
画像キャプションの自動生成
画像キャプションの自動生成画像キャプションの自動生成
画像キャプションの自動生成
 
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
OpenTelemetryでWebシステムの処理を追跡しよう - DjangoCongress JP 2022
 
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
PyData.Tokyo Meetup #21 講演資料「Optuna ハイパーパラメータ最適化フレームワーク」太田 健
 
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
リクルートテクノロジーズ における EMR の活用とコスト圧縮方法
 
マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021マイクロサービスに至る歴史とこれから - XP祭り2021
マイクロサービスに至る歴史とこれから - XP祭り2021
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 

Similaire à Vespa 機能紹介 #yjmu

20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudy20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudy
Takahiro Iwase
 
20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会
Takahiro Iwase
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
Takahito Tejima
 

Similaire à Vespa 機能紹介 #yjmu (20)

ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライターgenuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
genuine-highlighter: マクロを認識するClojure向けのシンタックスハイライター
 
osc_tokyo20100226
osc_tokyo20100226osc_tokyo20100226
osc_tokyo20100226
 
Deep learning Libs @twm
Deep learning Libs @twmDeep learning Libs @twm
Deep learning Libs @twm
 
PHPでのSWF編集とその応用
PHPでのSWF編集とその応用PHPでのSWF編集とその応用
PHPでのSWF編集とその応用
 
Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014Laravel_オープンソースカンファレンスhokkaido_JP_2014
Laravel_オープンソースカンファレンスhokkaido_JP_2014
 
Xtend の紹介
Xtend の紹介Xtend の紹介
Xtend の紹介
 
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
Twitterのフォロワの増減がわたし…、 気になります! (OSC 2012 広島, Hiroshima.rb)
 
おとなのテキストマイニング
おとなのテキストマイニングおとなのテキストマイニング
おとなのテキストマイニング
 
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
 
PHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較するPHPとJavaScriptにおけるオブジェクト指向を比較する
PHPとJavaScriptにおけるオブジェクト指向を比較する
 
pi-6. 繰り返し
pi-6. 繰り返しpi-6. 繰り返し
pi-6. 繰り返し
 
Deep dive into instanceof
Deep dive into instanceofDeep dive into instanceof
Deep dive into instanceof
 
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjpElasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
Elasticsearch 5.2とJava Clientで戯れる #elasticsearchjp
 
20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudy20110519 okuyama tokyo_linuxstudy
20110519 okuyama tokyo_linuxstudy
 
Boost Fusion Library
Boost Fusion LibraryBoost Fusion Library
Boost Fusion Library
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16sparksql-hive-bench-by-nec-hwx-at-hcj16
sparksql-hive-bench-by-nec-hwx-at-hcj16
 
20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 

Plus de Yahoo!デベロッパーネットワーク

Plus de Yahoo!デベロッパーネットワーク (20)

ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator継続的なモデルモニタリングを実現するKubernetes Operator
継続的なモデルモニタリングを実現するKubernetes Operator
 
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるかヤフーでは開発迅速性と品質のバランスをどう取ってるか
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
 
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッションオンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
 
LakeTahoe
LakeTahoeLakeTahoe
LakeTahoe
 
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
 
Persistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability FeaturePersistent-memory-native Database High-availability Feature
Persistent-memory-native Database High-availability Feature
 
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
 
eコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtceコマースと実店舗の相互利益を目指したデザイン #yjtc
eコマースと実店舗の相互利益を目指したデザイン #yjtc
 
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtcヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
 
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtcYahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
 
ビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtcビッグデータから人々のムードを捉える #yjtc
ビッグデータから人々のムードを捉える #yjtc
 
サイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtcサイエンス領域におけるMLOpsの取り組み #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
 
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtcヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
 
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtcYahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
 
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
 
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtcPC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
 
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtcモブデザインによる多職種チームのコミュニケーション改善 #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
 
「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc「新しいおうち探し」のためのAIアシスト検索 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
 
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtcユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
 

Dernier

Dernier (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 

Vespa 機能紹介 #yjmu

  • 1. Vespa機能紹介 2018/03/13 Yahoo! JAPAN MEETUP # 22(Vespa 特別編) ヤフー株式会社 矢野 友貴
  • 2. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ • 氏名 • 矢野 友貴 (やの ゆうき) • 所属 • ヤフー株式会社 D&S統括本部 • サイエンス的ななにか • 業務 • むかーしVespaのサービス運用してた • 検索モデリングとかチョットデキル • 最近はSolrに浮気中 自己紹介 Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 1
  • 3. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ • Vespaの日本語向けのチュートリアル資料を以下に公開してます • 詳しい使い方はそちらを参照してください • この発表ではVespaの特徴的な機能をSolr/Elasticsearchと比較しながら 紹介していきます (赤字と青字で区別) はじめに Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 2 https://yahoojapan.github.io/vespa-tutorial/
  • 4. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 3 • 構成 • スキーマ・更新 • 検索・集約 • ランキング • クラスタリング • まとめ アジェンダ
  • 5. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 4 • 構成 • スキーマ・更新 • 検索・集約 • ランキング • クラスタリング • まとめ アジェンダ
  • 6. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 5 • Vespaはrpmパッケージ or Dockerイメージとして提供 • 他と同じように全ノードに同じものをインストールすればよい • Solrだけ別途ZooKeeperが必要 (bundle版もあるけど非推奨) インストール方法 Vespa Solr Elasticsearch 提供方法 rpm, docker tgz, docker tgz, rpm, deb, msi, docker 必要な パッケージ vespa solr zookeeper elasticsearch
  • 7. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 6 • Solr/Elasticsearchは全ノードで同じプロセスが起動 • インデックスに差があるだけで各プロセスの役割は同じ ノードとプロセス Solrクラスタ Elasticsearchクラスタ
  • 8. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Vespaクラスタ Vespaクラスタ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 7 • Vespaでは各ノードに対して設定で役割を割り当て • 大きく分けて admin, container, content の3つのグループ • 設定に応じて起動するプロセスが変化 ノードとプロセス (cont’d) config admin container content
  • 9. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 8 Vespaの構成 admin Admin Server Config Server container Query/Rewrite Server Document Processor content Distributor Search Node インデックス 設定ファイル プラグイン モデル 管理者 ユーザ 設定の更新 管理コマンドの実行 クラスタの 状態管理 検索・更新 インデックス管理 検索・ランキング
  • 10. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 9 • Vespaはコンポーネント毎に実装が大きく違います • フロントエンド側はJava、バックエンド側はC++ • コード量が非常に多いのもこの辺が起因してそう • コア実装を拡張するのは至難の業 (Javaプラグインは楽) Vespaの構成 (cont’d) グループ コンポーネント 実装 役割 admin Config Server Java 設定ファイルの管理 (ZooKeeperもどき) Admin Server Java クラスタの状態管理、ログの収集 container Query/Rewrite Server Java 検索リクエスト・レスポンスの加工 Document Processor Java 更新ドキュメントの加工 content Distributor C++ ドキュメント分散のメタ情報管理、分散制御 Search Node C++ インデックス管理、検索・ランキングの実行 ※実際はもっと細かいプロセスに分かれます
  • 11. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 10 • 構成 • スキーマ・更新 • 検索・集約 • ランキング • クラスタリング • まとめ アジェンダ
  • 12. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 11 • Vespaも基本型はSolr/Elasticsearchとほぼ同じ • Vespaでは多次元を扱う型が強い フィールド定義 フィールド型 中身 string 文字列型 (トークナイズの有無は別途指定) integer 32-bit 整数の数値型 long 64-bit 整数の数値型 byte 8-bit 整数の数値型 float 単精度浮動小数点型 double 倍精度浮動小数点型 raw バイナリ型 array<element-type> 配列型、element-typeで要素の型を指定 weightedset<element-type> 辞書型、element-typeでキーの型を指定、値はinteger tensor(dimention-1, ...) テンソル型、dimention-1, ...で次元を指定
  • 13. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 12 • weightedset型とtensor型は多次元データを扱う型 • weightedset : keyとそれに対する重みをmapとして定義 • tensor : 多次元配列 (疎 or 密) としてテンソルを定義 weightedset型とtensor型
  • 14. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 13 • これら2つの型があると嬉しいこと => ベクトル・行列演算 • ex1) 検索クエリでユーザベクトルを与えてレコメンド • ex2) ニューラルネットなモデルを用いたランキング weightedset型とtensor型 (cont’d) R users documents U V k k users documents input hidden output
  • 15. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 14 • フィールド名や値の型から新規フィールドを動的に作成する機能 • Vespaは動的フィールドは未サポート • フィールド追加には明示的な定義が必要 • Solr/Elasticsearchではサポート • データ形式が緩い用途 (ログ解析とか) だとVespaは不向きかも 動的フィールド Solr (dynamic field) Elasticsearch (dynamic template)
  • 16. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 15 • 更新した内容が検索可能になるまでの時間はVespaの方が速い • Vespa : 更新リクエストが完了した時点 • Solr/Elasticsearch : soft commitの間隔に依存 • soft commitの間隔と検索性能がトレードオフの関係 リアルタイム性 tlog… segments memory index disk index tlog soft commit実行時に 更新差分がvisibleになる 更新リクエストが完了 した時点でvisibleになる
  • 17. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 16 • 構成 • スキーマ・更新 • 検索・集約 • ランキング • クラスタリング アジェンダ
  • 18. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 17 • よくある検索はVespaも網羅 • Solr/Elasticsearchと大差なし 検索 検索内容 クエリ defaultフィールドに対して “foo” を検索 query=foo titleフィールドに対して “foo” を検索 (フィールド指定検索) query=title:foo “foo” かつ “bar” を含むものを検索 (AND検索) query=foo bar “foo” もしくは “bar” を含むものを検索 (OR検索) query=(foo bar) “foo” を含むが “bar” を含まないものを検索 (NOT検索) query=foo -bar “foo bar” というフレーズを検索 (フレーズ検索) query="foo bar" 1000<=price<=10000 なものを検索 (範囲検索) query=price:[1000;10000] “foo” に150%の重みを付与して検索 (重み付き検索) query=foo!150 bar
  • 19. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 18 • 代表的な集約処理 => groupingとfaceting • grouping • 各グループの部分検索結果を出力 (検索寄り) • Vespaの方が強いイメージ • 後述のランキングと連携できるため • faceting • 各グループの統計値を出力 (解析寄り) • Solr/Elasticsearchの方が強いイメージ • Stream ExpressionやScriptingなど手広いため 集約
  • 20. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 19 • Vespaでは集約はDSLを用いて表現 • ex) 各ジャンルから1件ずつドキュメントを取得 Vespaと集約 select= all( group(genres) each( max(1) each( output(summary()) ) ) ) ... “children”: [ {“id”: “grouplist:genres”, “children”: [ {“id”: group:string:Elasticsearch, ”children”: [ document ]}, {“id”: group:string:Java, ”children”: [ document ]}, {“id”: group:string:Python, ”children”: [ document ]}, ... ] ] ...
  • 21. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 20 • DSLではどのグループになにをするかを再帰的に定義 • ネストしていくことで多段の集約が実行可能 Vespaと集約 (cont’d) … Elasticsearch Java Python … … … select= all( group(genres) each( max(1) each( output(summary()) ) ) ) 検索結果全体を genresでグループ分け 各グループの中から 最大1件を取得 グループ内の各ドキュメント について内容を出力 後述のランキング で各グループをソート
  • 22. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 21 • VespaではSolr/Elasticsearchにない高度な検索機能があります • WAND検索 • Predicateフィールド 高度な検索
  • 23. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 22 • WAND = Weak AND or Weighted AND の略 • AND検索とOR検索の中間のような検索 • 10個の検索条件のうち6個を満たす、みたいな • 実際は各検索条件 (ex. 単語) に重みが付いた内積演算 • スコアの上限値を元に検索候補を枝刈りしながら高速に検索 • ex) レコメンドのような多数の条件で検索するケースとか WAND検索 インデックス ユーザベクトル 文書ベクトル
  • 24. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 23 • フィールド自体に条件式を埋め込む検索 • クエリの属性情報を元に対象文書をフィルタリング • 各ドキュメントが個別に条件式を持つところがポイント • ex) 広告配信での対象ユーザ指定とか Predicateフィールド gender=male age=31 docid gender age 1 female 20 <= age < 40 2 male OR female 30 <= age <= 39 3 male 25 <= age < 35 … 文書側に埋め込まれた 条件式を元に絞り込む
  • 25. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 24 • 構成 • スキーマ・更新 • 検索・集約 • ランキング • クラスタリング • まとめ アジェンダ
  • 26. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 25 • 一般的にランキングは多段で実施 (ここでは2段を想定) • 候補文書を段階的に絞り込むことで計算コストを軽減 • 後段ほど複雑なモデルを配置 検索とランキング second-phase first-phase 重量モデルによる候補文書の並び替え 軽量モデルによる候補文書の絞り込み
  • 27. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 26 • Solr/ElasticsearchではLTR pluginの追加が必要 • それぞれのフェーズを異なるコンポーネントが管理 • 設定がバラけて管理が煩雑 検索とランキング (cont’d) second-phase first-phase LTR plugin LTR plugin Function Query Similarity Function Score Query Similarity
  • 28. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 27 • Vespaではランキング全体を一つの設定ファイルで管理 • 計算式は専用のDSLを用いて記述 • 検索時に対応するプロファイルを指定することで実行 検索とランキング (cont’d) second-phase first-phase Rank Profile
  • 29. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 28 • DSLでは四則演算、数学関数、IF文といった記述が可能 • 様々なモデルがDSLを用いて表現できます DSLによるモデル記述 スコア計算に関連するプロパティの定義 外部モデルファイルの参照 スコア計算式の記述 second-phaseのランキングの定義
  • 30. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 29 • Vespaではモデル計算で役立つ組み込み素性を多数定義 • フィールド情報のアクセス、クエリとの適合度、etc... • ただし独自素性を追加するのはちょっと大変かも... (C++実装) DSLによるモデル記述 (cont’d)
  • 31. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 30 • Vespaでは前述のtensor型を用いた行列演算を提供 • ニューラルネットや分散表現といった先端的なモデルも表現可能 テンソルを用いたスコア計算 input hidden output 1 … … 1
  • 32. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 31 • 構成 • スキーマ・更新 • 検索・集約 • ランキング • クラスタリング • まとめ アジェンダ
  • 33. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 32 • Solr/Elasticsearchでのインデックス分散 => shard/replica • 基本的にreplicaを増やすことでスケールアウト • shardの数は一度決めると変更することが困難 インデックスの分散 node1 node3 node2 node4 node1 node3 node2 node4 replica数に 偏りが生じる リバランス ノード 追加
  • 34. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 33 • Vespaではbucketというより小さい粒度で分散配置を管理 • bucketはデータ規模に応じて動的に統合・分離 • ユーザは冗長数だけを気にすればいい インデックスの分散 (cont’d) node1 node3 node2 node4 node1 node3 node2 node4 リバランス ノード 追加 より均等に データを分散
  • 35. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 34 • Vespaでは所属ホストを設定ファイルで管理 • 設定ファイルを修正・デプロイするだけでノードの増減が可能 • 必要なデータ分散なども自動で実行されます クラスタの管理 Vespaクラスタ admin container content 設定ファイル プラグイン モデル 最新設定のアップロードと反映 # vespa-deploy prepare CONFIG # vespa-deploy activate 新しいcontentノード群 の中でリバランシング 最新の設定の基づき クラスタ構成を更新
  • 36. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 35 • 構成 • スキーマ・更新 • 検索・集約 • ランキング • クラスタリング • まとめ アジェンダ
  • 37. チュートリアル資料 https://yahoojapan.github.io/vespa-tutorial/ Copyright (C) 2018 Yahoo Japan Corporation. All Rights Reserved. 無断引用・転載禁止 36 • Vespaのいいところ • 全文検索に強い (リアルタイム性とか検索機能とか) • ランキング機能がすごく先進的 • スケーラビリティがとても高い • Vespaのイマイチなところ • データ解析用途ならElastic Stackとか使った方が楽 • C++部分の拡張が辛い (Javaの方はフレームワークが優秀) • OSS化が最近で公式以外にプラグインとか資料がほぼない まとめ