セマンティック検索をスピード構築
セマンティック検索は、顧客や従業員が適切な商品や情報を見つけるのに役立つ優れたツールです。また、インデックスされにくい情報であっても、より良い検索結果を得ることができます。とはいえ、セマンティックの手法が迅速に導入されなければ、何の役にも立ちません。顧客や従業員は、システムが時間をかけてクエリに応答している間、ただ座っているわけではありません。
セマンティック検索を高速化するには?遅いセマンティック検索ではだめなのだ。
幸いなことに、Lucidworksはこのような問題を解決するのが大好きだ。私たちは最近、中規模のクラスタをテストした。詳細はこちらをご覧いただきたいが、100万件以上のドキュメントに対して1500RPS(リクエスト・パー・セカンド)を達成し、平均レスポンスタイムは約40ミリ秒であった。これはかなりのスピードだ。
セマンティック検索の実装
光速の機械学習マジックを実現するため、ルシッドワークスはセマンティックベクター検索アプローチを使ってセマンティック検索を実装した。2つの重要な部分がある。
パート1:機械学習モデル
まず、テキストを数値ベクトルにエンコードする方法が必要です。テキストは商品の説明、ユーザーの検索クエリ、質問、あるいは質問に対する答えなどである。セマンティック検索モデルは、他のテキストと意味的に似ているテキストが、数値的に「近い」ベクトルにエンコードされるように、テキストをエンコードするように学習される。このエンコーディングステップは、毎秒1,000以上の可能性のある顧客検索やユーザークエリをサポートするために高速である必要があります。
パート2:ベクトル検索エンジン
次に、顧客検索やユーザークエリに最適なものを素早く見つける方法が必要です。モデルはテキストを数値ベクトルにエンコードします。そこから、カタログや質問と回答のリストにあるすべての数値ベクトルと比較し、ベストマッチ、つまりクエリのベクトルに「最も近い」ベクトルを見つける必要があります。そのためには、すべての情報を効率的かつ高速に処理できるベクトルエンジンが必要です。エンジンには何百万ものベクトルが含まれている可能性がありますが、本当に必要なのはクエリにベストマッチする20個ほどのベクトルだけです。そしてもちろん、そのようなクエリーを毎秒1000ほど処理する必要があります。
このような課題に取り組むため、私たちはFusion 5.3リリースにベクター検索エンジンMilvusを追加しました。Milvusはオープンソースのソフトウェアで、高速です。MilvusはFAISS(Facebook AI Similarity Search)を使用しており、これはフェイスブックが自社の機械学習イニシアチブに実運用で使用しているのと同じ技術です。必要であれば、GPU上でさらに高速に実行できる。Fusion 5.3(またはそれ以降)に機械学習コンポーネントがインストールされている場合、Milvusはそのコンポーネントの一部として自動的にインストールされるため、これらの機能を簡単にオンにすることができます。
コレクション作成時に指定されたコレクション内のベクトルのサイズは、そのベクトルを生成するモデルによって異なります。たとえば、あるコレクションは、商品カタログのすべての商品説明を(モデルを介して)エンコードして作成されたベクトルを格納することができます。Milvusのようなベクトル検索エンジンがなければ、ベクトル空間全体で類似検索を行うことは不可能である。そのため、類似検索はベクトル空間からあらかじめ選択された候補(例えば500)に限定されることになり、パフォーマンスが低下し、結果の品質も低下する。Milvusは、複数のベクトルコレクションにまたがる数千億のベクトルを保存することができ、検索が高速で結果が適切であることを保証します。
セマンティック検索の使用
Milvusがなぜ重要なのかが少し分かったところで、セマンティック検索のワークフローに戻ろう。セマンティック検索には3つの段階がある。最初の段階では、機械学習モデルがロードされ、トレーニングされる。その後、データはMilvusとSolrにインデックスされる。最後の段階はクエリーの段階であり、実際の検索が行われる。以下、最後の2つのステージに焦点を当てる。
Milvusへのインデックス作成
ルシッドワークス-1.png
上の図に示すように、クエリーステージはインデックス作成ステージと同様に始まります。それぞれのクエリに対して
- クエリはSmart Answersのインデックスパイプラインに送られる。
- その後、クエリはMLモデルに送られます。
- MLモデルは(クエリから暗号化された)数値ベクトルを返します。ここでもモデルの種類によってベクトルのサイズが決まります。
- このベクトルはMilvusに送られ、Milvusは指定されたMilvusコレクションの中で、提供されたベクトルに最もマッチするベクトルを決定します。
- Milvusはステップ4で決定されたベクトルに対応する一意のIDと距離のリストを返す。
- これらのIDと距離を含むクエリがSolrに送られる。
- SolrはそれらのIDに関連するドキュメントの順序付きリストを返す。
スケールテスト
我々のセマンティック検索フローが、我々が顧客に要求する効率で実行されていることを証明するため、Google Cloud Platform上で、MLモデルのレプリカ8個、クエリーサービスのレプリカ8個、Milvusのインスタンス1個を持つFusionクラスタを使って、Gatlingスクリプトを使ったスケールテストを実行した。テストはMilvusのFLATインデックスとHNSWインデックスを用いて実行された。FLATインデックスは100%の再現率を持つが、データセットが小さい場合を除き、効率は低い。HNSW (Hierarchical Small World Graph)インデックスは依然として高品質な結果を示し、より大きなデータセットではパフォーマンスが向上している。
それでは、私たちが最近実行した例の数字をいくつか見てみよう:
ルシッドワークス-2.png
ルシードワークス-3.png
ルシッドワークス-4.png
はじめに
Smart Answersのパイプラインは使いやすく設計されています。Lucidworksには、導入が簡単で一般的に良好な結果をもたらす事前トレーニング済みモデルがあります。このような取り組みを検索ツールに導入することで、より効果的で楽しい検索結果を実現する方法については、今すぐお問い合わせください。
このブログは https://lucidworks.com/post/how-to-build-fast-semantic-search/?utm_campaign=Oktopost-Blog+Posts&utm_medium=organic_social&utm_source=linkedin から転載しました。
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word