はじめに
こんにちは。メディアカンパニープラットフォーム開発本部サーチテクノロジー部の朴と申します。
2017年9月にOath(Verizon社で、Yahoo, AOL等50以上のテクノロジーとメディアを運営する子会社)からVESPAがOSSとして公開されました。VESPAは検索エンジンを代表とした大規模なデータをハイトラフィック状況下で高速に配信できるビッグデータサービングエンジンです。実はYahoo! JAPANでもメディア、コマース、広告を中心とした多くの検索システムでVESPAを長年採用しており、この度Apache License 2.0のOSSとして公開されました。
Yahoo! JAPANでの利用事例
VESPAを利用する事で大規模な検索エンジン、レコメンデーションエンジンを構築することができ、弊社においても下記サービスで現在利用されています。
主な機能
VESPAには数多くの機能があり、その中の主要な機能をここで紹介させていただきます。詳しくは本家ドキュメントをご覧ください。
スケーラブル
データはシャーディングすることができ、ノードを追加、削除するたびに自動的に再配置のリバランスが行われます。またサービスを稼働しながらでもこのオペレーションが可能です。
ロバスト
Adminを含む全てのコンポーネントは冗長化可能で、単一障害点は発生しません。ノードに障害が発生した場合は自動的に設定した冗長化レベルまで復元を行います。
リアルタイム
大規模なハイトラフィックデータをリアルタイムに更新しながら、数msで検索する事ができます。UGCやトランザクションデータ、デバイスデータなどをリアルタイムに検索、分析することができます。
ランキング
多様なマッチングロジックを元にしたデフォルトの素性とカスタム素性を組み合わせて柔軟なランキング式の表現ができます。さらにこのフレームワークで機械学習ランキングを実装することもできます。multi phase rankingの機能により計算量のバランスを考慮した多段階のランキングを構築する事ができます。
SQLライクな操作
構造化インデックスに対して、キーワード検索だけでなくYQLを用いたデータ取得ができます。この機能によりグルーピングやアグリゲートされた検索結果を取得できます。
Predicateフィールド
Predicateフィールドは、クエリが、条件式に適合するかを判定する機能です。この機能は例えば、広告などの分野で、20代、女性をターゲットとしたい広告と、対象のユーザーをマッチングしたいようなケースで有用となります。より詳しい使い方については、本家のドキュメントを参照してください。
WAND検索
WAND(Weak ANDまたはWeighted AND)検索の機能により重み付きのBag-of-wordsを用いたテキストマッチベースのレコメンデーションや類似文検索などが高速に行えます。
テンソルフレームワーク
ベクトル、行列演算さらにN階のテンソルによる演算の枠組みが用意されています。疎、密両方のテンソルに対応していて、それぞれ計算の最適化が内部でなされているようです。例えば協調フィルタリングによるレコメンド、word2vecなどによる分散表現の近傍探索、DNN(Deep Neural Net)などへの応用が可能です。
おわりに
このようにVESPAは同一のインデックスを用いてキーワードや絞り込み検索、グルーピングからレコメンデーションまでを幅広くカバーできる強みを持っています(ビッグデータサービングエンジンたる所以だと思います)。
下記ブログデータを用いた検索アプリケーションをレコメンデーションシステムに、さらにそれをDNNモデル化させるチュートリアルが参考になります。
VESPAは今後も爆発的に増えていくデータを価値ある形で扱うためのソリューションの1つとして、とても有効なものだと思います。データやトラフィックが大きい要件ほどその真価を発揮してくれると思うので、みなさまも是非試していただけるとうれしいです!
最後にこの素晴らしいプロダクトをOSSにしてくれたVESPAチーム、Oathに心から感謝の意を表したいと思います。
こちらの記事のご感想を聞かせください。
- 学びがある
- わかりやすい
- 新しい視点
ご感想ありがとうございました