VIPSHOP、Milvusを使用して10倍高速なパーソナライズド・レコメンダー・システムを構築

10倍速いクエリー速度
以前のElasticsearchソリューションよりも
<30ms 応答時間
何百万ものベクター検索
最適化されたユーザー・エクスペリエンス
ユーザーの購買行動に基づいた、より正確なレコメンデーション
Milvus-powered vector search has been running steadily in our recommendation systems, providing high performance and allowing us more flexibility in selecting models and algorithms.
VIPSHOP Search Service Team
#VIPSHOPについて
VIPSHOPは、中国に本社を置く有名なニューヨーク証券取引所上場のオンライン小売業者で、消費者に人気のブランド商品を大幅な割引価格で提供することに特化している。その多様な製品範囲は、ファッション、アパレル、アクセサリー、美容製品、家庭用品、電子機器を含む。5,200万人以上の驚異的な顧客数を誇り、年間約2億7,000万件の注文をこなすVIPSHOPは、フォーチュン誌の権威あるチャイナ500の115位にランクインしている。
課題Elasticsearchを使った高レイテンシーと急増するメンテナンスコスト
VIPSHOPはビジネスの急成長に伴い、共通のジレンマに直面していました。製品ポートフォリオが拡大するにつれ、ユーザーが探しているものを発見するための支援も複雑化していました。この問題に対処するため、VIPSHOPはユーザーのクエリーキーワードとユーザーの購買行動に基づいてパーソナライズされたレコメンデーションシステムを構築しました。
以前、VIPSHOPチームはElasticsearchのCosine Similarity(7.x)機能を利用して推薦システムを構築していました。しかし、このアプローチは2つの理由から非効率的であった:
ベクトル検索における高レイテンシ:**数百万のベクトルからTop-Kの結果を取得するのに平均300ミリ秒程度かかり、システム全体の応答時間が数秒になる。
商品、消費者の購買行動、その他全てのデータから派生したベクトルが同じインデックスセットを共有していたため、インデックスの構築、運用、メンテナンスが非常に複雑になっていた。
VIPSHOPは、局所性を考慮したハッシュプラグインを開発することで、Elasticsearchのパフォーマンス向上を試みました。しかし、スループットを向上させただけで、ベクトル検索時間を100ミリ秒以下に短縮することはできませんでした。そのため、チームはシステムのパフォーマンスを向上させるために新しいベクトル検索スタックを緊急に必要としていました。
ミルバスのソリューション
広範な調査の後、VIPSHOPチームはMilvusを選択しました。Milvusはオープンソースのベクトルデータベースであり、数十億のベクトル埋め込みを処理し、電光石火の速さでレスポンスを提供することができます。Milvusはまた、分散デプロイ、多言語SDK、読み書き分離などの豊富な機能を提供し、ElasticsearchやFAISSのような他の多くのベクトル検索ソリューションよりも優れた選択肢となっています。
Milvusを用いたVIPSHOPレコメンデーションシステムのアーキテクチャ
上の図は、Milvusを用いたVIPSHOPのレコメンデーションシステムのアーキテクチャを示している。このシステムは2つのコア部分から構成されている:
書き込みプロセス:** VIPSHOPチームは、ディープラーニングモデルを使って各商品の特徴をベクトル埋め込みに変換し、MySQLとETLツールを使ってMilvusにインポートした。
読み取りプロセス:***チームは、ディープラーニングモデルを使用して、消費者のクエリと購買行動をベクトルに変換し、Milvusで類似した結果を取得した。Milvusは類似検索を実行し、消費者に最も関連性の高いTop-Kの結果を返した。
Milvusの実装の詳細:データの更新とリコール
データの更新と呼び出しはMilvusを利用した推薦システムにとって最も重要なプロセスである。
データ更新手順は、ベクトルデータの書き込み、ベクトルデータ量の検出、インデックス構築、インデックスプリロード、エイリアス管理などのタスクを含み、データの同期を保証する。まず、コモディティデータのチェックから始まり、MySQLのデータ量が既存のデータと一致していることを確認する。Redisでのエイリアス初期化、新しいコレクションの作成、バッチでのベクトル書き込み、Milvusでのインデックスのプリロードなど、データ構築プロセス全体が続く。新しいコレクションのデータを確認した後、システムは複数のデータコレクション間でエイリアスをシームレスに切り替える。
商品を推薦するために重要な想起プロセスでは、消費者のクエリや購買行動に関連するベクトルを取得し、それらの距離を計算し、結果をマージする。Milvusを活用することで、システムは異なるMilvusパーティションのデータを同時かつ非同期に取得し、ベクトルの類似度を計算し、類似距離に基づいて上位の結果をランク付けする。そして、Milvusパーティションのデータを複数回呼び出した後、最終的な推薦結果をユーザーに提示する。全体的なワークフローは以下の通りである:
以下の表は3つの主要なMilvusサービスのパフォーマンスを示している。表に示すように、Top-Kの結果を呼び出す平均待ち時間は約10msである。
| サービス|役割|入力パラメータ|出力パラメータ|応答待ち時間 | ------------------------ | -------------------------------------------------------- | ------------------------------------------------------------ | ----------------- | ---------------- | | ユーザーベクトル取得|ユーザーベクトル取得|ユーザー情報+クエリ|ユーザーベクトル|10ms | Milvus Search|ベクトルの類似度を計算し、Top-Kの結果を返す|ユーザーベクトル|アイテムベクトル|10ms|。 | スケジューリングロジック|結果の同時呼び出しとマージ|多チャンネルで呼び出されたアイテムベクトルと類似度スコア|Top-Kアイテム|10ms||。
結果より良いシステムパフォーマンスと最適なユーザーエクスペリエンス
VIPSHOPのレコメンダーシステムにMilvusを採用することで、以下のようなシステム全体のパフォーマンスが大幅に向上しました:
10倍速いクエリー速度
Milvusを使用することで、システムのクエリとレスポンスタイムは30ms以下に短縮され、以前のElasticsearchソリューションと比較して10倍高速になりました。
システムのスケーラビリティの向上
Milvusの分散デプロイメントと水平スケーリングのサポートにより、レコメンデーションシステムは、パフォーマンスを損なうことなく、急速に増加するデータ量とユーザクエリを難なく処理できるようになりました。
ユーザーエクスペリエンスの向上
Milvusは、レコメンデーションプロセスを最適化し、ユーザーの嗜好や検索意図に基づいたオーダーメイドの商品提案を提供することで、ユーザーの満足度とエンゲージメントを向上させます。
メンテナンスコストの削減
Milvusはベクトルデータを効率的に処理し、クエリメカニズムを合理化することで、レコメンデーションシステム全体のメンテナンスコストを削減します。
教訓と推奨事例
VIPSHOPチームはMilvusを導入する中で、いくつかの教訓を学び、最適なシステムパフォーマンスとユーザーエクスペリエンスを実現するためのいくつかの重要な洞察を得た:
読み取り操作が優先される状況では、読み取りと書き込みの分離展開戦略を採用することで、システム全体のパフォーマンスを向上させることができます。
MilvusのJavaクライアントには、リコールサービスのインメモリに常駐するため、ビルトインの再接続メカニズムがない。VIPSHOPチームは独自の接続プールを構築し、ハートビートテストを通じてJavaクライアントとサーバー間の一貫した接続性を確保した。
Milvusでは新しいコレクションのウォームアップが不十分なため、遅いクエリが発生することがある。この問題に対処するため、VIPSHOPチームは新しいコレクションに対するクエリをシミュレートした。
検索性能と精度の適切なバランスを取るために、VIPSHOPチームはお客様の特定のビジネスシナリオに合わせた厳密なプレッシャーテスト実験を実施し、これらのパラメータを最適化するために合理的な閾値を設定することを推奨します。
静的なデータを含むシナリオでは、最初にすべてのデータをコレクションにインポートし、後でインデックスを構築する方が効率的である。