기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
Amazon Personalize를 사용하여 개인화되고 순위가 다시 매겨진 추천 생성
작성자: Mason Cahill(AWS), Matthew Chasse(AWS), Tayo Olajide(AWS)
코드 리포지토리: personalize-pet-recommendations | 환경: PoC 또는 파일럿 | 기술: 머신 러닝 및 AI, 클라우드 네이티브, 인프라 DevOps, 서버리스 |
워크로드: 오픈 소스 | AWS 서비스: AWS CloudFormation, 아마존 키네시스 데이터 파이어호스, AWS Lambda, 아마존 Personalize, AWS Step Functions |
요약
이 패턴은 Amazon Personalize를 사용하여 해당 사용자의 실시간 사용자 상호 작용 데이터 수집을 기반으로 재순위 추천을 비롯한 개인화된 권장 사항을 생성하는 방법을 보여줍니다. 이 패턴에 사용된 예제 시나리오는 사용자의 상호 작용(예: 사용자가 방문하는 애완동물)을 기반으로 사용자를 위한 추천을 생성하는 애완동물 입양 웹사이트를 기반으로 합니다. 예제 시나리오를 따르면 Amazon Kinesis Data Streams를 사용하여 상호 작용 데이터를 수집하고, AWS Lambda를 사용하여 권장 사항을 생성하고 권장 사항의 순위를 조정하며, Amazon Data Firehose를 사용하여 Amazon Simple Storage Service (Amazon S3) 버킷에 데이터를 저장하는 방법을 배웁니다. 또한 AWS Step Functions를 사용하여 권장 사항을 생성하는 솔루션 버전(즉, 학습된 모델)을 관리하는 상태 머신을 구축하는 방법도 배웁니다.
사전 조건 및 제한 사항
사전 조건
구성된 보안 인증 정보가 포함된 AWS Command Line Interface(AWS CLI)
제품 버전
Python 3.9
AWS CDK 2.23.0 이상
AWS CLI 2.7.27 이상
아키텍처
기술 스택
아마존 데이터 파이어호스
Amazon Kinesis Data Streams
Amazon Personalize
Amazon Simple Storage Service(S3)
AWS Cloud Development Kit(AWS CDK)
AWS Command Line Interface(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 서비스와 상호 작용할 수 있는 오픈 소스 도구입니다.
Amazon Data Firehose를 사용하면 지원되는 타사 서비스 공급자가 소유한 다른 AWS 서비스, 사용자 지정 HTTP 엔드포인트 및 HTTP 엔드포인트에 실시간 스트리밍 데이터를
전송할 수 있습니다. Amazon Kinesis Data Streams를 사용하여 대규모 데이터 레코드 스트림을 실시간으로 수집하고 처리할 수 있습니다.
AWS Lambda는 서버를 프로비저닝하거나 관리할 필요 없이 코드를 실행하는 데 도움이 되는 컴퓨팅 서비스입니다. 필요할 때만 코드를 실행하며 자동으로 확장이 가능하므로 사용한 컴퓨팅 시간만큼만 비용을 지불합니다.
Amazon Personalize는 데이터를 기반으로 사용자를 위한 품목 추천을 생성하는 데 도움이 되는 완전 관리형 기계 학습(ML) 서비스입니다.
AWS Step Functions는 Lambda 함수와 기타 AWS 서비스를 결합하여 비즈니스 크리티컬 애플리케이션을 구축할 수 있게 지원하는 서버리스 오케스트레이션 서비스입니다.
기타 도구
코드
이 패턴의 코드는 GitHub Animal
참고: Amazon Personalize 솔루션 버전, 이벤트 추적기 및 캠페인은 기본 CloudFormation 리소스를 확장하는 사용자 지정 리소스 (인프라 내) 로 뒷받침됩니다.
에픽
작업 | 설명 | 필요한 기술 |
---|---|---|
격리된 Python 환경을 생성합니다. | Mac 및 Linux 설치
Windows 설정 가상 환경을 수동으로 만들려면 터미널에서 | DevOps 엔지니어 |
CloudFormation 템플릿을 합성하세요. |
참고: 2단계에서는 | DevOps 엔지니어 |
리소스를 배포하고 인프라를 생성합니다. | 솔루션 리소스를 배포하려면 이 명령은 필수 Python 종속성을 설치합니다. Python 스크립트는 S3 버킷과 AWS Key Management Service(AWS KMS) 키를 생성한 다음, 초기 모델 생성을 위한 시드 데이터를 추가합니다. 마지막으로 스크립트가 참고: 초기 모델 학습은 스택 생성 중에 이루어집니다. 스택 생성 완료까지 최대 2시간이 걸릴 수 있습니다. | DevOps 엔지니어 |
관련 리소스
동물 추천자
() GitHub Amazon Personalize를 사용하여 선택한 비즈니스 지표에 대한 맞춤형 추천 최적화
(AWS 기계계 학습 블로그)
추가 정보
페이로드 및 응답 예시
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=cat, 2=dog)에는 Oxford Pets 클래스를 사용하고 animal_age_id
및 animal_size_id
에는 정수 1~5를 사용합니다.
{ "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 함수는 이러한 항목의 순위를 다시 지정한 다음 Amazon Personalize의 직접 응답과 항목 ID가 포함된 정렬된 목록을 반환합니다. 이 목록은 항목이 속한 동물 그룹과 점수의 순위 목록입니다. 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
필드가 제거됩니다.