該儲存庫旨在建立一個機器學習 (ML) 支援的搜尋引擎原型,以根據文字或圖像查詢檢索和推薦產品。這是關於如何使用對比語言圖像預訓練 (CLIP) 創建 SageMaker 模型、使用模型將圖像和文本編碼到嵌入中、將嵌入提取到 Amazon OpenSearch Service 索引中以及查詢索引的分步指南使用OpenSearch 服務k 最近鄰(KNN) 功能。
基於嵌入的檢索(EBR)廣泛應用於搜尋和推薦系統。它使用最近(近似)鄰居搜尋演算法從嵌入儲存(也稱為向量資料庫)中尋找相似或密切相關的項目。經典的搜尋機制很大程度上依賴關鍵字匹配,而忽略詞彙意義或查詢的上下文。 EBR 的目標是讓使用者能夠使用自由文字尋找最相關的產品。它之所以受歡迎,是因為與關鍵字匹配相比,它在檢索過程中利用了語義概念。
在此儲存庫中,我們專注於建立機器學習 (ML) 支援的搜尋引擎原型,以基於文字或圖像查詢檢索和推薦產品。這使用了 Amazon OpenSearch Service 及其 k 近鄰 (KNN) 功能,以及 Amazon SageMaker 及其無伺服器推理功能。 Amazon SageMaker 是一項完全託管的服務,讓每個開發人員和資料科學家都能夠透過完全託管的基礎設施、工具和工作流程為任何用例建立、訓練和部署 ML 模型。 Amazon OpenSearch Service 是一項完全託管的服務,可輕鬆執行互動式日誌分析、即時應用程式監控、網站搜尋等。
對比語言-圖像預訓練 (CLIP) 是一種在各種圖像和文字對上訓練的神經網路。 CLIP 神經網路能夠將圖像和文字投影到同一潛在空間中,這意味著可以使用相似性度量(例如餘弦相似性)對它們進行比較。您可以使用 CLIP 將產品的圖像或描述編碼為嵌入,然後將它們儲存到向量資料庫中。然後您的客戶可以在資料庫中執行查詢以檢索他們可能感興趣的產品。要查詢資料庫,您的客戶需要提供輸入圖像或文本,然後輸入將使用 CLIP 進行編碼,然後發送到向量資料庫進行 KNN 搜尋。
這裡的向量資料庫起到了搜尋引擎的作用。此向量資料庫支援統一圖像和基於文字的搜索,這在電子商務和零售業特別有用。基於圖像的搜尋的一個範例是,您的客戶可以透過拍照來搜尋產品,然後使用該圖片查詢資料庫。對於基於文字的搜索,您的客戶可以使用自由格式文字描述產品,然後使用該文字作為查詢。搜尋結果將按相似度分數(餘弦相似度)排序,如果您庫存中的某個項目與查詢(輸入圖像或文字)更相似,則分數將更接近 1,否則分數將更接近0. 搜尋結果中前K 個產品是您庫存中最相關的產品。
OpenSearch 服務提供文字匹配和嵌入基於 KNN 的搜尋。我們將在此解決方案中使用基於 KNN 的嵌入搜尋。您可以使用圖像和文字作為查詢來搜尋庫存中的商品。實現這個統一圖像並測試基於 KNN 的搜尋應用程式包括兩個階段:
此解決方案使用以下 AWS 服務和功能:
在範本opensearch.yml
中,它將建立一個 OpenSearch 網域並授予您的 SageMaker Studio 執行角色以使用該網域。
在模板sagemaker-studio-opensearch.yml
中,它將建立一個新的 SageMaker 網域、網域中的使用者設定檔和 OpenSearch 網域。因此,您可以使用 StageMaker 使用者設定檔來建置此 POC。
您可以按照下面列出的步驟選擇要執行的範本之一。
步驟 1:前往 AWS 控制台中的 CloudFormation Service。
步驟 2:上傳範本以建立 CloudFormation 堆疊clip-poc-stack
。
如果您已經執行 SageMaker Studio,則可以使用範本opensearch.yml
。
如果您目前沒有 SageMaker Studio,您可以使用範本sagemaker-studio-opensearch.yml
。它將為您建立 Studio 網域和使用者設定檔。
步驟 3:檢查 CloudFormation 堆疊的狀態。大約需要20分鐘才能完成創建。
建立堆疊後,您可以前往 SageMaker 控制台並點擊Open Studio
進入 Jupyter 環境。
如果在執行過程中,CloudFormation 顯示找不到 OpenSearch 服務連結角色的錯誤。您需要透過在 AWS 帳戶中執行aws iam create-service-linked-role --aws-service-name es.amazonaws.com
來建立服務相關角色。
請使用 SageMaker Studio 開啟檔案blog_clip.ipynb
並使用Data Science Python 3
核心。您可以從頭開始執行儲存格。
實作中使用了 Amazon Berkeley 物件資料集。該資料集包含 147,702 個產品清單以及多語言元資料和 398,212 個獨特的目錄影像。我們只會使用美式英語的商品圖像和商品名稱。出於演示目的,我們將使用約 1,600 種產品。
本節概述了運行此演示的成本注意事項。完成 POC 將部署 OpenSearch 叢集和 SageMaker Studio,每小時成本不到 2 美元。注意:下面列出的價格是使用 us-east-1 區域計算的。費用因地區而異。而且成本也可能會隨著時間的推移而變化(這裡的價格是2022年11月22日記錄的)。
進一步的成本細項如下。
OpenSearch 服務– 價格會根據實例類型使用情況和儲存成本而有所不同。有關更多信息,請參閱 Amazon OpenSearch Service 定價。
t3.small.search
實例運行約 1 小時,每小時 0.036 美元。SageMaker – 價格根據 Studio 應用程式、批次轉換作業和無伺服器推理端點的 EC2 執行個體使用情況而有所不同。有關更多信息,請參閱 Amazon SageMaker 定價。
ml.t3.medium
實例運行時間約為 1 小時,每小時 0.05 美元。ml.c5.xlarge
實例運行時間約為 6 分鐘,每小時 0.204 美元。S3 – 成本低,價格會根據儲存的模型/工件的大小而變化。每月前 50 TB 儲存空間每 GB 僅花費 0.023 美元。有關更多信息,請參閱 Amazon S3 定價。
請參閱貢獻以獲取更多資訊。
該庫根據 MIT-0 許可證獲得許可。請參閱許可證文件。