私たちが話をした多くの組織は、AI を活用したパーソナライゼーション、推奨、セマンティック検索、異常検出にベクトル検索を使用する検討段階にあります。BERT や OpenAI などの大規模言語モデル (LLM) の精度とアクセシビリティが最近飛躍的に向上したため、企業は適切な検索と分析エクスペリエンスを構築する方法を再考するようになりました。
このブログでは、アプリケーションに AI を統合したベクトル検索の早期導入企業 5 社 (Pinterest、Spotify、eBay、Airbnb、Doordash) のエンジニアリング ストーリーを紹介します。これらのストーリーが、埋め込みの生成から実稼働環境への展開まで、ベクトル検索のライフサイクル全体を考えているエンジニアリング チームに役立つことを願っています。
ベクトル検索は、高次元空間でのデータの表現に基づいて、大規模なデータセットから類似のアイテムを効率的に検索して取得する方法です。このコンテキストでは、アイテムはドキュメント、画像、サウンドなど何でもかまいません。これらはベクトル埋め込みとして表現されます。アイテム間の類似性は、2 つのベクトル埋め込みの近さを定量化するコサイン類似度やユークリッド距離などの距離メトリックを使用して計算されます。
ベクトル検索プロセスには通常、次の内容が含まれます。
ベクトル検索をよりわかりやすく視覚化するには、各軸が特徴に対応する 3D 空間を想像します。空間内の点の時間と位置は、これらの特徴の値によって決まります。この空間では、類似するアイテムは近くに配置され、類似しないアイテムは遠くに配置されます。
^ | x Item 1 | / | / | /x Item 2 | / | / | /x Item 3 | / | / | / +------------------->
クエリが与えられると、データセット内で最も類似したアイテムを見つけることができます。クエリはアイテム埋め込みと同じ空間内のベクトル埋め込みとして表され、クエリ埋め込みと各アイテム埋め込み間の距離が計算されます。クエリ埋め込みとの距離が最も短いアイテム埋め込みが最も類似していると見なされます。
Query item: x | ^ | | x Item 1| | / | | / | | /x Item 2 | | / | | / | | /x Item 3 | | / | | / | | / | +------------------->
ベクトル検索は高次元空間で実行されるため、これは明らかに単純化された視覚化です。
次のセクションでは、ベクトル検索に関する 5 つのエンジニアリング ブログを要約し、実装に関する重要な考慮事項について説明します。エンジニアリング ブログの全文は以下からご覧いただけます。
Pinterest は、ホームフィード上の推奨コンテンツ、関連ピン、マルチタスク学習モデルを使用した検索など、プラットフォームの複数の領域にわたる画像の検索と検出にベクター検索を使用しています。
マルチタスク モデルは、複数のタスクを同時に実行するようにトレーニングされ、多くの場合、基礎となる表現や機能を共有することで、関連タスク全体の一般化と効率性を向上させることができます。Pinterest の場合、チームは同じモデルをトレーニングして使用し、ホームフィード、関連ピン、検索での推奨コンテンツを駆動しました。
Pinterest は、ユーザーの検索クエリ (q) と、ユーザーがクリックしたコンテンツまたは保存したピン (p) を組み合わせてモデルをトレーニングします。Pinterest が各タスクの (q,p) ペアを作成する方法は次のとおりです。
関連ピン: 単語の埋め込みは、選択された主題 (q) とユーザーがクリックまたは保存したピン (p) から派生します。
検索: 検索クエリ テキスト (q) とユーザーがクリックまたは保存したピン (p) から単語の埋め込みが作成されます。
ホームフィード: ユーザーの興味 (q) とユーザーがクリックまたは保存したピン (p) に基づいて単語の埋め込みが生成されます。
全体的なエンティティの埋め込みを取得するために、Pinterest は関連ピン、検索、ホームフィードの関連する単語の埋め込みを平均化します。
Pinterest は独自の教師あり Pintext-MTL (マルチタスク学習) を作成し、GloVe、word2vec などの教師なし学習モデルや、シングルタスク学習モデル PinText-SR と比較して精度を評価しました。PinText-MTL は他の埋め込みモデルよりも精度が高く、すべての正の予測の中で真の正の予測の割合が高かったことを意味します。
Pinterest はまた、マルチタスク学習モデルの方が再現率が高く、つまりモデルによって正しく識別された関連インスタンスの割合が高いため、検索や発見に適していることも発見しました。
Pinterest では、これらすべてを本番環境で実行するために、ホームフィード、検索、関連ピンからのストリーミング データでトレーニングされたマルチタスク モデルを用意しています。このモデルがトレーニングされると、Kubernetes+Docker またはマップ削減システムを使用して、大規模なバッチ ジョブでベクトル埋め込みが作成されます。プラットフォームはベクトル埋め込みの検索インデックスを構築し、K 近傍法 (KNN) 検索を実行して、ユーザーにとって最も関連性の高いコンテンツを見つけます。結果は、Pinterest プラットフォームのパフォーマンス要件を満たすためにキャッシュされます。
Spotify は、キーワード検索とセマンティック検索を組み合わせて、ユーザーに関連するポッドキャスト エピソードの結果を取得します。例として、チームは「電気自動車の気候への影響」というクエリに対するキーワード検索の限界を強調しました。このクエリでは、Spotify ライブラリに関連ポッドキャスト エピソードが存在するにもかかわらず、結果が 0 件返されました。リコールを向上させるために、Spotify チームは approximate Nearest Neighbor (ANN) を使用して、関連性の高いポッドキャストを高速に検索しました。
チームは、多言語対応でポッドキャストのグローバル ライブラリをサポートし、高品質のベクトル埋め込みを生成するUniversal Sentence Encoder CMLM モデルを使用してベクトル埋め込みを生成しました。大規模なテキスト データのコーパスでトレーニングされたモデルであるBERTを含む他のモデルも評価されましたが、BERT は文埋め込みよりも単語埋め込みに適しており、英語でのみ事前トレーニングされていることがわかりました。
Spotify は、クエリ テキストを入力埋め込み、ポッドキャスト エピソード埋め込みのタイトルや説明などのテキスト メタデータ フィールドを連結して、ベクトル埋め込みを構築します。類似性を判断するために、Spotify はクエリとエピソード埋め込み間のコサイン距離を測定しました。
Spotify は、ベースとなる Universal Sentence Encoder CMLM モデルをトレーニングするために、成功したポッドキャスト検索とエピソードの正のペアを使用しました。彼らは、ランダムな負のペアを生成するために、 Dense Passage Retrieval for Open-Domain Question Answering (DPR)やQue2Search: Fast and Accurate Query and Document Understanding for Search at Facebook などの論文で強調されている手法であるバッチ内負を組み込みました。合成クエリと手動で作成されたクエリを使用したテストも実施されました。
制作現場でのポッドキャストの推奨提供にベクトル検索を組み込むために、Spotify は次の手順とテクノロジーを使用しました。
エピソード ベクトルのインデックス作成: Spotify は、ANN をネイティブにサポートする検索エンジンであるVespaを使用して、エピソード ベクトルをオフラインで一括インデックス作成します。Vespa が選ばれた理由の 1 つは、エピソードの人気度などの機能に基づいて検索後にメタデータ フィルタリングを組み込むこともできることです。
オンライン推論: Spotify はGoogle Cloud Vertex AIを使用してクエリ ベクトルを生成します。Vertex AI が選ばれたのは、大規模なトランスフォーマー モデルを使用して埋め込みを生成する場合にコスト効率が高い GPU 推論のサポートと、クエリ キャッシュを備えているためです。クエリ ベクトル埋め込みが生成されると、それを使用して Vespa から上位 30 件のポッドキャスト エピソードが取得されます。
セマンティック検索は、適切なポッドキャスト エピソードの特定に役立ちますが、キーワード検索を完全に置き換えることはできません。これは、ユーザーが正確なエピソードまたはポッドキャスト名を検索したときに、セマンティック検索では正確な用語の一致が実現できないためです。Spotify は、Vespa のセマンティック検索とElasticsearchのキーワード検索を統合したハイブリッド検索アプローチを採用し、その後、最終的な再ランク付け段階を経て、ユーザーに表示されるエピソードを確立します。
従来、検索エンジンは、検索クエリ テキストをアイテムまたはドキュメントのテキスト説明と並べて結果を表示してきました。この方法は、好みを推測するために言語に大きく依存しており、スタイルや美的感覚の要素を捉えるのにはあまり効果的ではありません。eBay は、ユーザーが探しているスタイルに合う関連性の高い類似アイテムを見つけられるように、 画像検索を導入しています。
eBay は、テキスト、画像、音声、動画など、複数のモダリティまたは入力タイプからのデータを処理および統合して、予測を行ったりタスクを実行したりするように設計されたマルチモーダル モデルを使用します。eBay はテキストと画像の両方をモデルに組み込み、畳み込みニューラル ネットワーク (CNN) モデル、具体的にはResnet-50を使用して画像の埋め込みを生成し、 BERTなどのテキストベースのモデルを使用してタイトルの埋め込みを生成します。すべてのリストは、画像とタイトルの埋め込みの両方を組み合わせたベクトル埋め込みによって表されます。
画像とタイトルのリストのペアと最近売れたリストの大規模なデータセットを使用してマルチモーダル モデルをトレーニングしたら、サイト検索エクスペリエンスでそれを実稼働させるときです。eBay のリストの数が多いため、データは eBay のデータ ウェアハウスである HDFS にバッチでロードされます。eBay は Apache Spark を使用して、リストの埋め込みの生成など、リストのさらなる処理に必要な画像と関連フィールドを取得して保存します。リストの埋め込みは、大規模なデータの集約に優れた HBase などの列指向ストアに公開されます。HBase から、リストの埋め込みはインデックス化され、eBay で作成された検索エンジンである Cassini で提供されます。
パイプラインは Apache Airflow を使用して管理されており、タスクの量が多く複雑であってもスケーリングが可能です。また、Spark、Hadoop、Python もサポートしているため、機械学習チームが導入して活用するのに便利です。
ビジュアル検索により、ユーザーは家具や室内装飾のカテゴリーで類似のスタイルや好みを見つけることができます。これらのカテゴリーでは、スタイルと美観が購入の決定の鍵となります。今後、eBay はすべてのカテゴリーにビジュアル検索を拡張し、ユーザーが関連アイテムを見つけて、家全体で同じ外観と雰囲気を確立できるようにする予定です。
検索機能と類似リスティング機能は、AirBnb サイトでの予約の 99% を占めています。AirBnb は、類似リスティングの推奨を改善し、検索ランキングでリアルタイムのパーソナライゼーションを提供するために、リスティング埋め込み技術を構築しました。
AirBnb は早い段階で、埋め込みの適用範囲を単なる単語表現にとどまらず、クリックや予約などのユーザー行動にも拡張できることに気付きました。
埋め込みモデルをトレーニングするために、AirBnb は 450 万件以上のアクティブなリスティングと 8 億回の検索セッションを組み込み、ユーザーがセッション中にクリックおよびスキップしたリスティングに基づいて類似性を判断しました。セッション中に同じユーザーがクリックしたリスティングは近くに配置され、ユーザーがスキップしたリスティングは遠くに配置されます。チームは、オフライン パフォーマンスとオンライン サービスに必要なメモリのトレードオフを考慮して、リスティング埋め込みの次元を d=32 に決定しました。
AirBnb は、価格などの特定のリスティング特性はメタデータから直接取得できるため、学習する必要がないことを発見しました。ただし、建築、スタイル、雰囲気などの属性をメタデータから導き出すのはかなり困難です。
AirBnb は、本番環境に移行する前に、モデルが実際にユーザーが予約したリスティングをどの程度推奨するかをテストして、モデルを検証しました。チームはまた、既存のリスティング アルゴリズムとベクトル埋め込みベースのアルゴリズムを比較する A/B テストも実行しました。その結果、ベクトル埋め込みを使用したアルゴリズムでは、CTR が 21% 上昇し、ユーザーが予約したリスティングを発見する割合が 4.9% 増加することが分かりました。
チームはまた、ベクトル埋め込みが検索におけるリアルタイムパーソナライゼーションのモデルの一部として使用できることに気付きました。各ユーザーについて、Kafka を使用して、過去 2 週間のユーザーのクリックとスキップの短期履歴をリアルタイムで収集して維持しました。ユーザーが実行した検索ごとに、2 つの類似性検索を実行しました。
最近検索された地理的市場に基づいて、
候補リストとユーザーがクリック/スキップしたリストの類似性
埋め込みはオフラインおよびオンラインの実験で評価され、リアルタイムのパーソナライゼーション機能の一部となりました。
Doordash には、ユーザーが注文できるさまざまな店舗があり、パーソナライズされた設定を使用して最も関連性の高い店舗を表示できるため、検索と発見が向上します。
Doordash は、ベクトル埋め込みを使用して 、潜在情報を店舗フィード アルゴリズムに適用したいと考えていました。これにより、店舗に甘い商品があるか、流行っているか、ベジタリアン向けのオプションがあるかなど、十分に文書化されていない店舗間の類似点を Doordash が発見できるようになります。
Doordash は、自然言語処理で使用される埋め込みモデルである word2vec の派生モデルである store2vec を、既存のデータに基づいて適応させました。チームは各店舗を単語として扱い、1 回のユーザー セッション中に閲覧された店舗のリストを使用して文を作成しました。文あたり最大 5 店舗に制限されました。ユーザー ベクトル埋め込みを作成するために、Doordash は、ユーザーが過去 6 か月間に注文した店舗のベクトル、または最大 100 件の注文を合計しました。
たとえば、Doordash はベクトル検索を使用して、サンフランシスコの人気で流行りの店 4505 Burgers と New Nagano Sushi での最近の購入に基づいて、ユーザーに類似するレストランを検索しました。Doordash は、ユーザーの埋め込みからその地域の店舗の埋め込みまでのコサイン距離を測定し、類似するレストランのリストを生成しました。コサイン距離が最も近い店舗には、Kezar Pub と Wooden Charcoal Korean Village BBQ が含まれていることがわかります。
Doordash は、store2vec 距離機能を、より大規模な推奨およびパーソナライゼーション モデルの機能の 1 つとして組み込みました。Doordash は、ベクトル検索により、クリックスルー率が 5% 増加しました。チームは、 seq2seqなどの新しいモデル、モデルの最適化、ユーザーからのリアルタイムのオンサイト アクティビティ データの組み込みも実験しています。
Pinterest、Spotify、eBay、Airbnb、Doordash は、ベクター検索を使用して、より優れた検索と発見のエクスペリエンスを実現しています。これらのチームの多くは、最初はテキスト検索を使用していましたが、あいまい検索や特定のスタイルや美的感覚の検索に限界があることに気付きました。これらのシナリオでは、ベクター検索をエクスペリエンスに追加することで、関連性が高く、多くの場合パーソナライズされたポッドキャスト、枕、レンタル、ピン、飲食店を簡単に見つけられるようになりました。
ベクトル検索を実装する際に、これらの企業が行った決定の中には、注目に値するものがいくつかあります。
リアルタイム検索および分析データベースである Rockset は、最近、ベクター検索のサポートを追加しました。今すぐ 300 ドルのクレジットで無料トライアルを開始し、Rockset のベクター検索でリアルタイムのパーソナライゼーション、推奨事項、異常検出などをお試しください。