本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Personalize 個人化產生個人化和重新排名的建議
創建者梅森·卡希爾 (AWS)、馬修·沙塞 (AWS) 和大約奧拉吉德 () AWS
環境:PoC 或試點 | 技術:機器學習和 AI; CloudNative; 基礎架構 DevOps; 無服務器 | |
工作負載:開源 | AWS服務:AWS CloudFormation; Amazon 數據 Firehose 件; AWS Lambda; Amazon Personalize 化; AWS Step Functions |
Summary
此模式說明如何使用 Amazon Personalize 根據從這些使用者擷取的即時使用者互動資料,為您的使用者產生個人化的建議 (包括重新排名的建議)。此模式中使用的示例場景基於寵物收養網站,該網站根據用戶的互動(例如,用戶訪問的寵物)為其用戶生成建議。透過遵循範例案例,您將學習如何使用 Amazon Kinesis Data Streams 擷取互動資料,AWSLambda 產生建議並重新排列建議,以及使用 Amazon 資料 Firehose 將資料存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中。您也會學習如何使用 AWS Step Functions 來建置狀態機器,以管理解決方案版本 (也就是訓練有素的模型),以產生您的建議。
先決條件和限制
先決條件
AWS具有已設定認證的命令列介面 (AWSCLI)
產品版本
Python 3.9
AWSCDK2.23.0 或更高版本
AWSCLI2.7.27 或更新版本
架構
技術, 堆
Amazon 數據 Firehose
Amazon Kinesis Data Streams
Amazon Personalize
Amazon Simple Storage Service (Amazon S3)
AWSCloud Development Kit (AWSCDK)
AWS指令行介面 (AWSCLI)
AWSLambda
AWS Step Functions
目標架構
下圖說明將即時資料導入 Amazon Personalize 的管道。然後,管道會使用該資料為使用者產生個人化和重新排名的建議。
![Amazon Personalize 的資料擷取架構](images/pattern-img/42eb193b-2347-408a-8b25-46beeb3b29ca/images/786dbd56-7d7f-41bb-90f6-d4485d73fe15.png)
該圖顯示以下工作流程:
Kinesis Data Streams 會擷取即時使用者資料 (例如,造訪過的寵物等事件),以供 Lambda 和 Firehose 處理。
Lambda 函數會處理 Kinesis Data Streams 中的記錄,並API撥打電話,將記錄中的使用者互動新增至 Amazon Personalize 中的事件追蹤器。
以時間為基礎的規則會叫用 Step Functions 狀態機器,並使用 Amazon Personalize 中事件追蹤器中的事件,為建議和重新排名模型產生新的解決方案版本。
Lambda 透過呼叫 Amazon Personalize 重新排名行銷活動,重新排名推薦項目清單。
Lambda 會呼叫 Amazon Personalize 建議行銷活動,擷取建議項目的清單。
Firehose 會將事件儲存到 S3 儲存貯體,在該儲存貯體中可做為歷史資料存取。
工具
AWS工具
AWSCloud Development Kit (AWSCDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建AWS雲端基礎架構。
AWS命令列介面 (AWSCLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與AWS服務互動。
Amazon Data Firehose 可協助您將即時串流資料
交付到受支援的第三方AWS服務供應商所擁有的其他服務、自訂HTTPHTTP端點和端點。 Amazon Kinesis Data Streams 可協助您即時收集和處理大量資料記錄串流。
AWSLambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。
Amazon Personalize 是全受管的機器學習 (ML) 服務,可協助您根據資料為使用者產生項目建議。
AWSStep Functions 是一種無伺服器協調服務,可協助您結合 Lambda 函數和其他服務,以建置關鍵業AWS務應用程式。
其他工具
Code
此模式的代碼可在 GitHub 動物推薦
注意:Amazon Personalize 解決方案版本、事件追蹤器和行銷活動由可擴充原生 CloudFormation 資源的自訂資源 (在基礎設施內) 提供支援。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
創建一個獨立的 Python 環境。 | Mac 電腦設定
視窗設定 若要手動建立虛擬環境,請從終端機執行 | DevOps 工程師 |
合成 CloudFormation 模板。 |
注意:在步驟 2 中, | DevOps 工程師 |
部署資源並建立基礎結構。 | 若要部署解決方案資源,請從終端機執行 這個命令會安裝所需的 Python 相依性。Python 指令碼會建立 S3 儲存貯體和AWS金鑰管理服務 (AWSKMS) 金鑰,然後新增初始模型建立的種子資料。最後,指令碼會執行 注意:初始模型訓練會在堆疊建立期間進行。堆疊最多可能需要兩個小時才能完成建立。 | DevOps 工程師 |
相關資源
其他資訊
有效載荷和回應範例
推薦 Lambda 函數
若要擷取建議,請使用下列格式的承載向建議 Lambda 函數提交請求:
{ "userId": "3578196281679609099", "limit": 6 }
下列範例回應包含動物群組清單:
[{"id": "1-domestic short hair-1-1"}, {"id": "1-domestic short hair-3-3"}, {"id": "1-domestic short hair-3-2"}, {"id": "1-domestic short hair-1-2"}, {"id": "1-domestic short hair-3-1"}, {"id": "2-beagle-3-3"},
如果您省略userId
欄位,函式會傳回一般建議。
重新排名 Lambda 函數
若要使用重新排名,請向重新排名的 Lambda 函數提交請求。裝載包含IDs要重新排名userId
的所有項目及其中繼資料。下面的示例數據使用牛津寵物類animal_species_id
(1 = 貓,2 = 狗)和整數 1-5 用於和:animal_age_id
animal_size_id
{ "userId":"12345", "itemMetadataList":[ { "itemId":"1", "animalMetadata":{ "animal_species_id":"2", "animal_primary_breed_id":"Saint_Bernard", "animal_size_id":"3", "animal_age_id":"2" } }, { "itemId":"2", "animalMetadata":{ "animal_species_id":"1", "animal_primary_breed_id":"Egyptian_Mau", "animal_size_id":"1", "animal_age_id":"1" } }, { "itemId":"3", "animalMetadata":{ "animal_species_id":"2", "animal_primary_breed_id":"Saint_Bernard", "animal_size_id":"3", "animal_age_id":"2" } } ] }
Lambda 函數重新排列這些項目,然後返回一個有序的列表,其中包括該項目IDs和 Amazon Personalize 化的直接響應。這是物品所在的動物群體和分數的排名列表。Amazon Personalize 使用使用者個人化和個人化排名配方,在建議中包含每個項目的分數。這些分數代表 Amazon Personalize 對使用者接下來要選擇哪個項目的相對確定性。分數越高代表確定性越高。
{ "ranking":[ "1", "3", "2" ], "personalizeResponse":{ "ResponseMetadata":{ "RequestId":"a2ec0417-9dcd-4986-8341-a3b3d26cd694", "HTTPStatusCode":200, "HTTPHeaders":{ "date":"Thu, 16 Jun 2022 22:23:33 GMT", "content-type":"application/json", "content-length":"243", "connection":"keep-alive", "x-amzn-requestid":"a2ec0417-9dcd-4986-8341-a3b3d26cd694" }, "RetryAttempts":0 }, "personalizedRanking":[ { "itemId":"2-Saint_Bernard-3-2", "score":0.8947961 }, { "itemId":"1-Siamese-1-1", "score":0.105204 } ], "recommendationId":"RID-d97c7a87-bd4e-47b5-a89b-ac1d19386aec" } }
Amazon Kinesis
傳送至 Amazon Kinesis 的承載具有下列格式:
{ "Partitionkey": "randomstring", "Data": { "userId": "12345", "sessionId": "sessionId4545454", "eventType": "DetailView", "animalMetadata": { "animal_species_id": "1", "animal_primary_breed_id": "Russian_Blue", "animal_size_id": "1", "animal_age_id": "2" }, "animal_id": "98765" } }
附註:系統會針對未驗證的使用者移除此userId
欄位。