本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
開始使用網域資料集群組 (SDK適用於 JavaScript v3)
本教學課程說明如何使用 AWS SDK for JavaScript v3 建立 VIDEO _ON_ DEMAND 網域的網域資料集群組。在本教學課程中,您會為您的使用案例建立「熱門選取」的建議程式。
若要檢視本教學中使用的程式碼 GitHub,請參閱程式碼範例儲存庫中適用SDK於 JavaScript v3 的 Amazon Personalize
完成入門練習後,若要避免產生不必要的費用,請刪除您建立的資源。如需詳細資訊,請參閱刪除 Amazon Personalize 化資源的要求。
必要條件
以下是完成此教學課程的先決條件步驟:
-
完成入門先決條件以設定所需權限並建立訓練資料。如果您也完成了開始使用網域資料集群組 (主控台),則可以重複使用相同的來源資料。如果您使用自己的來源資料,請確定資料的格式如先決條件一樣。
-
依照AWS SDK for JavaScript 開發人員指南中的 [設定] JavaScript 程序中所指定的方式設定SDK用於 JavaScript 和 AWS 認證。SDK
教學課程
在下列步驟中,您會安裝必要的相依性。然後,您可以建立資料集群組、匯入資料、為您的使用案例建立「熱門精選」的建議程式,以及取得建議。
如果您使用 Node.js,您可以透過將範例儲存為 JavaScript 檔案,然後執行,來執行每個程式碼範例node <fileName.js>
。
完成先決條件之後,請安裝下列 Amazon 個人化相依性:
-
@aws-SDK/客戶端個性化
-
@aws-SDK/ client-personalize-runtime
-
@aws-sdk/ client-personalize-events (此教學課程為選用項目,但如果您想在建立推薦人之後記錄事件,則需要此選項)
以下是您可以使用的package.json
檔案範例。若要使用 Node.js 安裝相依性,請瀏覽至儲存package.json
檔案的位置並執行npm install
。
{ "name": "personalize-js-project", "version": "1.0.0", "description": "personalize operations", "type": "module", "author": "Author Name <email@address.com>", "license": "ISC", "dependencies": { "@aws-sdk/client-personalize": "^3.350.0", "@aws-sdk/client-personalize-events": "^3.350.0", "@aws-sdk/client-personalize-runtime": "^3.350.0", "fs": "^0.0.1-security" }, "compilerOptions": { "resolveJsonModule": true, "esModuleInterop": true } }
安裝依賴項後,創建您的 Amazon Personalize 化客戶端。在本教學課程中,程式碼範例假設您在personalizeClients.js
儲存在名為的目錄中的檔案中建立用戶端libs
。
以下是 personalizeClient.js
檔案的範例。
import { PersonalizeClient } from "@aws-sdk/client-personalize"; import { PersonalizeRuntimeClient } from "@aws-sdk/client-personalize-runtime"; import { PersonalizeEventsClient } from "@aws-sdk/client-personalize-events"; // Set your AWS region. const REGION = "
region
"; //e.g. "us-east-1" const personalizeClient = new PersonalizeClient({ region: REGION}); const personalizeEventsClient = new PersonalizeEventsClient({ region: REGION}); const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: REGION}); export { personalizeClient, personalizeEventsClient, personalizeRuntimeClient };
建立 Amazon 個人化用戶端之後,請匯入您在完成入門先決條件. 若要將歷史資料匯入 Amazon Personalize,請執行下列操作:
-
將下列 Avro 結構描述儲存為工作目錄中的JSON檔案。此結構描述與您在完成時建立的CSV檔案中的欄相符建立訓練資料 (網域資料集群組)。
{ "type": "record", "name": "Interactions", "namespace": "com.amazonaws.personalize.schema", "fields": [ { "name": "USER_ID", "type": "string" }, { "name": "ITEM_ID", "type": "string" }, { "name": "EVENT_TYPE", "type": "string" }, { "name": "TIMESTAMP", "type": "long" } ], "version": "1.0" }
-
使用以下
createDomainSchema.js
代碼在 Amazon Personalize 化中創建域架構。請SCHEMA_PATH
以您剛建立的結構描述 .json 檔案的路徑取代。更新createSchemaParam
以指定結構描述的名稱,並用於domain
指定VIDEO_ON_DEMAND
。// Get service clients module and commands using ES6 syntax. import { CreateSchemaCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); import fs from 'fs'; let schemaFilePath = "SCHEMA_PATH"; let mySchema = ""; try { mySchema = fs.readFileSync(schemaFilePath).toString(); } catch (err) { mySchema = 'TEST' // for unit tests. } // Set the domain schema parameters. export const createDomainSchemaParam = { name: 'NAME', /* required */ schema: mySchema, /* required */ domain: 'DOMAIN' /* required for a domain dataset group, specify ECOMMERCE or VIDEO_ON_DEMAND */ }; export const run = async () => { try { const response = await personalizeClient.send(new CreateSchemaCommand(createDomainSchemaParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
-
使用下列
createDomainDatasetGroup.js
程式碼在 Amazon Personalize 中建立網域資料集群組。更新domainDatasetGroupParams
以指定資料集群組的名稱,並用於domain
指定VIDEO_ON_DEMAND
。// Get service clients module and commands using ES6 syntax. import { CreateDatasetGroupCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the domain dataset group parameters. export const domainDatasetGroupParams = { name: 'NAME', /* required */ domain: 'DOMAIN' /* required for a domain dsg, specify ECOMMERCE or VIDEO_ON_DEMAND */ } export const run = async () => { try { const response = await personalizeClient.send(new CreateDatasetGroupCommand(domainDatasetGroupParams)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
-
使用以下
createDataset.js
代碼在 Amazon Personalize 化中創建項目交互數據集。更新createDatasetParam
以指定您剛建立的資料集群組和結構描述的 Amazon 資源名稱 (ARN)、為該資料集命名,然後指定Interactions
。datasetType
// Get service clients module and commands using ES6 syntax. import { CreateDatasetCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the dataset's parameters. export const createDatasetParam = { datasetGroupArn: 'DATASET_GROUP_ARN', /* required */ datasetType: 'DATASET_TYPE', /* required */ name: 'NAME', /* required */ schemaArn: 'SCHEMA_ARN' /* required */ } export const run = async () => { try { const response = await personalizeClient.send(new CreateDatasetCommand(createDatasetParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
-
使用以下
createDatasetImportJob.js
代碼導入數據。更新以指datasetImportJobParam
定下列項目:-
指定工作的名稱,並指定互動資料集的名稱ARN。
-
對於
dataLocation
,指定您存放訓練資料的 Amazon S3 儲存貯體路徑 (s3://
)。https://amzn-s3-demo-bucket.s3.region-code.amazonaws.com
/folder name
/ratings.csv -
為您的 Amazon 個性化服務角色
roleArn
指定亞馬遜資源名稱。您已建立此角色,做為中的一部分入門先決條件。
// Get service clients module and commands using ES6 syntax. import {CreateDatasetImportJobCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the dataset import job parameters. export const datasetImportJobParam = { datasetArn: 'DATASET_ARN', /* required */ dataSource: { /* required */ dataLocation: 'S3_PATH' }, jobName: 'NAME',/* required */ roleArn: 'ROLE_ARN' /* required */ } export const run = async () => { try { const response = await personalizeClient.send(new CreateDatasetImportJobCommand(datasetImportJobParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
-
資料集匯入工作完成後,您就可以建立推薦人了。若要建立推薦人,請使用下列createRecommender.js
程式碼。createRecommenderParam
使用下列項目更新:指定推薦人的名稱、指定資料集群組的名稱ARN,以及recipeArn
指arn:aws:personalize:::recipe/aws-vod-top-picks
定。
// Get service clients module and commands using ES6 syntax. import { CreateRecommenderCommand } from "@aws-sdk/client-personalize"; import { personalizeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeClient = new PersonalizeClient({ region: "REGION"}); // Set the recommender's parameters. export const createRecommenderParam = { name: 'NAME', /* required */ recipeArn: 'RECIPE_ARN', /* required */ datasetGroupArn: 'DATASET_GROUP_ARN' /* required */ } export const run = async () => { try { const response = await personalizeClient.send(new CreateRecommenderCommand(createRecommenderParam)); console.log("Success", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();
建立推薦人之後,您可以使用它來取得建議。使用下列getRecommendations.js
程式碼取得使用者的建議。更新getRecommendationsParam
以指定您在上一個步驟中建立ARN的推薦人,並指定使用者 ID (例如123
)。
// Get service clients module and commands using ES6 syntax. import { GetRecommendationsCommand } from "@aws-sdk/client-personalize-runtime"; import { personalizeRuntimeClient } from "./libs/personalizeClients.js"; // Or, create the client here. // const personalizeRuntimeClient = new PersonalizeRuntimeClient({ region: "REGION"}); // Set the recommendation request parameters. export const getRecommendationsParam = { recommenderArn: 'RECOMMENDER_ARN', /* required */ userId: 'USER_ID', /* required */ numResults: 15 /* optional */ } export const run = async () => { try { const response = await personalizeRuntimeClient.send(new GetRecommendationsCommand(getRecommendationsParam)); console.log("Success!", response); return response; // For unit tests. } catch (err) { console.log("Error", err); } }; run();