本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Amazon Personalize 個人化產生個人化和重新排名的建議
由梅森·卡希爾(AWS),馬修·沙塞(AWS)和塔約奧拉吉德(AWS)創建
環境:PoC 或試點 | 技術:機器學習和 AI;雲端原生;基礎架構 DevOps;無伺服器 | |
工作負載:開源 | AWS 服務:AWS CloudFormation;Amazon Kinesis Data Firehose;AWS Lambda;Amazon Personalize;AWS Step Functions 數 |
Summary
此模式說明如何使用 Amazon Personalize 根據從這些使用者擷取的即時使用者互動資料,為您的使用者產生個人化的建議 (包括重新排名的建議)。此模式中使用的示例場景基於寵物收養網站,該網站根據用戶的互動(例如,用戶訪問的寵物)為其用戶生成建議。透過遵循範例案例,您將學習如何使用 Amazon Kinesis Data Streams 擷取互動資料,AWS Lambda 產生建議並重新排名建議,以及使用 Amazon 資料 Firehose 將資料存放在 Amazon Simple Storage Service (Amazon S3) 儲存貯體中。您也會學習如何使用 AWS Step Functions 建立可管理解決方案版本 (也就是訓練有素的模型) 的狀態機器,以產生您的建議。
先決條件和限制
先決條件
具有已設定登入資料的 AWS Command Line Interface (AWS CLI) (AWS CLI)
產品版本
Python 3.9
AWS CDK 2.23.0 或更新版本
AWS CLI 2.7.27 或更新版本
架構
技術堆疊
Amazon 數據 Firehose
Amazon Kinesis Data Streams
Amazon Personalize
Amazon Simple Storage Service (Amazon S3)
AWS Cloud Development Kit (AWS CDK)
AWS 命令列界面 (AWS CLI)
AWS Lambda
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 工具
AWS Cloud Development Kit (AWS CDK) 是一種軟體開發架構,可協助您在程式碼中定義和佈建 AWS 雲端基礎設施。
AWS Command Line Interface (AWS CLI) (AWS CLI) 是一種開放原始碼工具,可協助您透過命令列殼層中的命令與 AWS 服務互動。
Amazon 資料 Firehose 可協助您將即時串流資料
交付到其他 AWS 服務、自訂 HTTP 端點和受支援的第三方服務供應商擁有的 HTTP 端點。 Amazon Kinesis Data Streams 可協助您即時收集和處理大型資料串流。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動調整規模,因此您只需為使用的運算時間付費。
Amazon Personalize 是全受管的機器學習 (ML) 服務,可協助您根據資料為使用者產生項目建議。
AWS Step Functions 是一種無伺服器協調服務,可協助您結合 Lambda 函數和其他 AWS 服務,以建立關鍵業務應用程式。
其他工具
Code
此模式的代碼可在 GitHub 動物推薦
注意:Amazon Personalize 解決方案版本、事件追蹤器和行銷活動由可擴充原生 CloudFormation 資源的自訂資源 (在基礎設施內) 提供支援。
史诗
任務 | 描述 | 所需技能 |
---|---|---|
創建一個獨立的 Python 環境。 | Mac 電腦設定
視窗設定 若要手動建立虛擬環境,請從終端機執行 | DevOps 工程師 |
合成 CloudFormation 模板。 |
注意:在步驟 2 中, | DevOps 工程師 |
部署資源並建立基礎結構。 | 若要部署解決方案資源,請從終端機執行 這個命令會安裝所需的 Python 相依性。Python 指令碼會建立 S3 儲存貯體和 AWS Key Management Service (AWS KMS) 金鑰,然後新增初始模型建立的種子資料。最後,指令碼會執行 注意:初始模型訓練會在堆疊建立期間進行。堆疊最多可能需要兩個小時才能完成建立。 | 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 函數提交請求。裝載包含要重新排名userId
的所有項目 ID 及其中繼資料。下面的示例數據使用牛津寵物類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 函數會重新排列這些項目,然後傳回包含項目 ID 和 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
欄位。