このリポジトリは、テキストまたは画像のクエリに基づいて製品を取得および推奨する、機械学習 (ML) を利用した検索エンジン プロトタイプを構築することを目的としています。これは、Contrastive Language-Image Pre-Training (CLIP) を使用して SageMaker モデルを作成し、モデルを使用して画像とテキストをエンコードしてエンベディングにし、エンベディングを Amazon OpenSearch Service インデックスに取り込み、インデックスをクエリする方法に関するステップバイステップのガイドです。 OpenSearch サービスの k 最近傍 (KNN) 機能を使用します。
埋め込みベースの検索 (EBR) は、検索および推奨システムでよく使用されます。最近傍 (近似) 近傍検索アルゴリズムを使用して、埋め込みストア (ベクトル データベースとも呼ばれる) から類似または密接に関連したアイテムを見つけます。従来の検索メカニズムはキーワードの一致に大きく依存しており、語彙の意味やクエリのコンテキストは無視されます。 EBR の目標は、フリー テキストを使用して最も関連性の高い製品を見つけられる機能をユーザーに提供することです。キーワード一致と比較して、検索プロセスで意味概念を活用するため、人気があります。
このリポジトリでは、テキストまたは画像のクエリに基づいて製品を取得および推奨する、機械学習 (ML) を利用した検索エンジン プロトタイプの構築に焦点を当てています。これには、Amazon OpenSearch Service とその k 最近傍 (KNN) 機能、および Amazon SageMaker とそのサーバーレス推論機能が使用されます。 Amazon SageMaker は、すべての開発者やデータサイエンティストに、フルマネージド型のインフラストラクチャ、ツール、ワークフローを使用して、あらゆるユースケースに対応した ML モデルを構築、トレーニング、デプロイする機能を提供するフルマネージド型のサービスです。 Amazon OpenSearch Service は、インタラクティブなログ分析、リアルタイムのアプリケーション監視、ウェブサイト検索などを簡単に実行できるフルマネージド サービスです。
Contrastive Language-Image Pre-Training (CLIP) は、さまざまな画像とテキストのペアでトレーニングされたニューラル ネットワークです。 CLIP ニューラル ネットワークは、画像とテキストの両方を同じ潜在空間に投影できます。これは、コサイン類似度などの類似性尺度を使用してそれらを比較できることを意味します。 CLIP を使用して、製品の画像や説明を埋め込みにエンコードし、ベクトル データベースに保存できます。その後、顧客はデータベース内でクエリを実行して、興味のある製品を取得できます。データベースにクエリを実行するには、顧客は入力画像またはテキストを提供する必要があります。入力は、KNN 検索のためにベクトル データベースに送信される前に CLIP でエンコードされます。
ここでのベクトルデータベースは検索エンジンの役割を果たします。このベクトル データベースは、画像とテキストベースの検索の統合をサポートしており、電子商取引や小売業界で特に役立ちます。画像ベースの検索の一例として、顧客は写真を撮って製品を検索し、その写真を使用してデータベースにクエリを実行できます。テキストベースの検索に関しては、顧客は自由形式のテキストで製品を説明し、そのテキストをクエリとして使用できます。検索結果は類似性スコア (コサイン類似度) によって並べ替えられます。インベントリのアイテムがクエリ (入力画像またはテキスト) により類似している場合、スコアは 1 に近くなり、そうでない場合、スコアは 1 に近づきます。 0. 検索結果の上位 K 製品が、在庫内で最も関連性の高い製品です。
OpenSearch サービスは、テキスト マッチングおよび埋め込み KNN ベースの検索を提供します。このソリューションでは、埋め込み KNN ベースの検索を使用します。画像とテキストの両方をクエリとして使用して、インベントリからアイテムを検索できます。この統合された画像とテスト KNN ベースの検索アプリケーションの実装は、次の 2 つのフェーズで構成されます。
このソリューションでは、次の AWS のサービスと機能を使用します。
テンプレートopensearch.yml
では、OpenSearch ドメインを作成し、そのドメインを使用するための SageMaker Studio 実行ロールを付与します。
テンプレートsagemaker-studio-opensearch.yml
では、新しい SageMaker ドメイン、ドメイン内のユーザー プロファイル、および OpenSearch ドメインが作成されます。そのため、StageMaker ユーザー プロファイルを使用してこの POC を構築できます。
以下にリストされている手順に従って、実行するテンプレートの 1 つを選択できます。
ステップ 1: AWS コンソールで CloudFormation サービスに移動します。
ステップ 2: テンプレートをアップロードして、CloudFormation スタックclip-poc-stack
を作成します。
すでに SageMaker Studio を実行している場合は、テンプレートopensearch.yml
使用できます。
現時点で SageMaker Studio をお持ちでない場合は、テンプレートsagemaker-studio-opensearch.yml
使用できます。 Studio ドメインとユーザー プロファイルが作成されます。
ステップ 3: CloudFormation スタックのステータスを確認します。作成が完了するまでに 20 分ほどかかります。
スタックが作成されたら、SageMaker コンソールに移動し、 Open Studio
クリックして Jupyter 環境に入ることができます。
実行中に、OpenSearch サービスにリンクされたロールが見つからないというエラーが CloudFormation に表示される場合。 AWS アカウントでaws iam create-service-linked-role --aws-service-name es.amazonaws.com
実行して、サービスにリンクされたロールを作成する必要があります。
SageMaker Studio でファイルblog_clip.ipynb
を開き、 Data Science Python 3
カーネルを使用してください。セルを最初から実行できます。
実装には Amazon Berkeley Objects Dataset が使用されます。このデータセットは、多言語メタデータを含む 147,702 件の製品リストと 398,212 件の固有のカタログ画像のコレクションです。米国英語の商品画像と商品名のみを使用します。デモの目的で、約 1,600 個の製品を使用する予定です。
このセクションでは、このデモを実行するためのコストに関する考慮事項について概説します。 POC を完了すると、OpenSearch Cluster と SageMaker Studio がデプロイされ、費用は 1 時間あたり 2 ドル未満になります。注: 以下にリストされている価格は、us-east-1 リージョンを使用して計算されています。費用は地域によって異なります。また、コストも時間の経過とともに変化する可能性があります (ここでの価格は 2022 年 11 月 22 日に記録されています)。
さらなる費用の内訳は以下の通りです。
OpenSearch サービス– 料金はインスタンス タイプの使用量とストレージのコストによって異なります。詳細については、「Amazon OpenSearch Service の料金」を参照してください。
t3.small.search
インスタンスは、1 時間あたり 0.036 ドルで約 1 時間実行されます。SageMaker – 価格は、Studio アプリ、バッチ変換ジョブ、およびサーバーレス推論エンドポイントの EC2 インスタンスの使用状況によって異なります。詳細については、「Amazon SageMaker の料金」を参照してください。
ml.t3.medium
インスタンスは、1 時間あたり 0.05 ドルで約 1 時間実行されます。ml.c5.xlarge
インスタンスは、1 時間あたり 0.204 ドルで約 6 分間実行されます。S3 – 低コスト。価格は保存されるモデル/アーティファクトのサイズによって異なります。毎月最初の 50 TB の料金は、保存される 1 GB あたりわずか 0.023 ドルです。詳細については、「Amazon S3 の料金」を参照してください。
詳細については、「貢献」を参照してください。
このライブラリは、MIT-0 ライセンスに基づいてライセンスされています。 LICENSE ファイルを参照してください。