Amazon Personalize – 실시간 개인화 및 추천 서비스 미리보기 출시
기계 학습이 제공하는 다양한 작업 주제 중에서 가장 흥미로운 주제는 개인화와 추천일 것입니다.
언뜻 보기에는 사용자가 좋아할 것 같은 항목을 연결하는 간단한 문제처럼 느껴집니다. 그러나 효율적인 추천 시스템을 개발하는 작업은 그리 쉽지 않습니다. 심지어 Netflix에서는 몇 년 전에 영화 추천 대회를 열면서 백만달러(한화 11억3천만원)에 달하는 상금을 걸었습니다! 실제로 실시간 개인화를 구축하고 최적화하고 배포하려면 분석, 응용 기계 학습, 소프트웨어 엔지니어링 및 시스템 운영에서 전문화된 지식이 필요합니다. 이러한 당면 과제를 극복하는 데 필요한 지식, 기술 및 경험을 가지고 있는 조직은 거의 없기 때문에 추천 사용의 아이디어를 포기하거나 성능이 좋지 않은 모델을 구축합니다.
20년 넘게 Amazon.com은 제품 검색부터 결제에 이르는 구매 환경 전체에 개인화된 추천을 통합하여 대규모 추천 시스템을 구축해 왔습니다.
오늘 발표되는 Amazon Personalize를 사용하는 모든 AWS 고객은 AWS와 똑같은 작업을 수행할 수 있습니다. 이 서비스는 기계 학습 경험이 없는 개발자도 개인화 및 추천 기능을 활용할 수 있게 해 주는 완전관리형 서비스입니다.
Amazon Personalize 소개
Amazon Personalize는 개인화 및 추천을 어떤 방식으로 간소화할까요? 이전 블로그 게시물에서 설명한 대로 Amazon SageMaker에서 Factorization Machines 같은 알고리즘을 사용하여 이미 추천 모델을 구축한 분도 계실 것입니다. 그러나 이 방법을 사용하는 경우 광범위한 데이터 준비와 전문적인 튜닝 작업을 수행해야 좋은 결과를 얻을 수 있습니다.
Amazon Personalize를 사용하면 훨씬 더 간단하게 추천 모델을 생성할 수 있습니다. Personalize는 복잡한 기계 학습 작업을 자동화하는 새로운 프로세스인 AutoML을 사용하여 기계 학습 모델의 설계, 훈련 및 배포에 필요한 어려운 작업을 신속하게 수행합니다.
Amazon Personalize는 Amazon S3에 저장된 데이터 세트와 스트리밍 데이터 세트(예: JavaScript 트래커 또는 서버 측에서 실시간으로 전송되는 이벤트)를 모두 지원합니다. 개괄적인 프로세스는 다음과 같습니다.
- 사용자 ID, 항목 ID 등에 대한 Personalize 예약 키워드를 사용하여 데이터 세트를 정의하는 스키마를 생성합니다.
- 모델 구축 및 예측에 사용되는 데이터 세트를 포함하는 데이터 세트 그룹을 생성합니다. 여기에는 사용자-항목 상호 작용(“누가 무엇을 좋아하는지”), 사용자 및 항목 데이터 세트가 포함될 수 있습니다. 아래의 예제에 나와 있듯이 마지막 2개는 선택 사항입니다.
- Personalize로 데이터를 보냅니다.
- 솔루션을 생성합니다. 즉, 추천 레시피를 선택하고 데이터 세트 그룹에서 훈련합니다.
- 새로운 샘플을 예측하는 캠페인을 생성합니다.
Amazon S3에 저장된 데이터를 사용하여 Personalize로 데이터를 보내면 데이터 파일이 데이터 세트 그룹에 추가됩니다. 수집은 자동으로 트리거됩니다.
스트리밍 데이터로 작업하는 경우는 다릅니다. 이벤트를 보낼 때는 Personalize의 이벤트 추적 서비스와 통합되는 AWS Amplify JavaScript 라이브러리를 사용할 수 있습니다. 또한 AWS SDK를 통해 선호하는 언어로 서버 측으로 보낼 수도 있습니다. 수집은 AWS 내부(예: Amazon EC2 또는 AWS Lambda) 또는 외부에서 호스팅되는 코드를 사용하여 모든 소스에서 수행될 수 있습니다.
이제 예제를 살펴보도록 하겠습니다. MovieLens 데이터 세트를 기반으로 솔루션을 구축하겠습니다!
MovieLens 데이터 세트 활용 사례
MovieLens는 영화 추천을 저장하는 잘 알려진 데이터 세트입니다. 이 데이터 세트는 다양한 크기와 형식으로 제공됩니다. 이 예제에서 사용할 ml-20m에는 138,000명의 사용자가 27,000개의 영화에 적용한 2천만 개의 평점이 포함되어 있습니다.
이 데이터 세트에는 사용자-항목 상호 작용을 저장하는 ‘ratings.csv’ 파일이 있습니다. 첫 번째 행은 다음과 같습니다.
userId,movieId,rating,timestamp
1,2,3.5,1112486027
1,29,3.5,1112484676
1,32,3.5,1112484819
1,47,3.5,1112484727
1,50,3.5,1112484580
해석하면 사용자 1이 영화 2에 평점 3.5를 주었다는 뜻입니다. 영화 29, 32, 47, 50도 마차가지로 해석 할 수 있습니다. 추천 모델을 구축하는데 정확히 필요한 데이터 세트입니다. 이제 작업을 시작합니다.
데이터 세트에 대한 스키마 생성
첫 번째 단계는 이 데이터 세트에 대한 Avro 스키마를 생성하는 것입니다. 이 작업은 아주 간단합니다. Amazon Personalize에 정의된 일부 키워드를 사용하기만 하면 됩니다.
{"type": "record",
"name": "Interactions",
"namespace": "com.amazonaws.personalize.schema",
"fields":[
{"name": "ITEM_ID", "type": "string"},
{"name": "USER_ID", "type": "string"},
{"name": "TIMESTAMP", "type": "long"}
],
"version": "1.0"}
데이터 세트 준비
데이터 세트를 다운로드하고 압축을 해제한 후 ‘ratings.csv’ 파일을 로드하고 다음 처리를 적용합니다.
- 리뷰 순서를 섞습니다.
- 평점이 4 이상인 영화만 유지하고 평점 열을 삭제합니다. 목표는 사용자가 정말 좋아할 만한 영화를 추천하는 모델을 만드는 것입니다.
- 열 이름을 스키마에 사용된 이름으로 바꿉니다.
- 데모를 위해 100,000개의 상호 작용만 유지하여 훈련 시간을 최소화합니다.
이 모든 작업은 열 형식 데이터 처리의 맥가이버 칼이라고 할 수 있는 Pandas Python 라이브러리를 통해 손쉽게 완료할 수 있습니다. 이 작업을 수행하는 동안 처리된 파일을 Amazon S3 버킷에 업로드할 수도 있습니다.
import pandas, boto3 from sklearn.utils import shuffle ratings = pandas.read_csv('ratings.csv') ratings = shuffle(ratings) ratings = ratings[ratings['rating']>3.6] ratings = ratings.drop(columns='rating') ratings.columns = ['USER_ID','ITEM_ID','TIMESTAMP'] ratings = ratings[:100000] ratings.to_csv('ratings.processed.csv',index=False) s3 = boto3.client('s3') s3.upload_file('ratings.processed.csv','jsimon-ml20m','ratings.processed.csv')
데이터 세트 그룹 생성
먼저, 사용자-항목 데이터 세트와 해당 스키마를 포함하는 데이터 세트 그룹을 생성해야 합니다. 이 작업은 AWS CLI에서 수행하겠습니다. 보시다시피 이러한 CLI 작업의 다수에는 이전 호출에서 얻은 ARN(Amazon 리소스 이름) 출력이 필요합니다. 그러므로 실험 중에는 모든 정보를 기록해 두어야 합니다.
$ aws personalize create-dataset-group --name jsimon-ml20m-dataset-group
$ aws personalize create-schema --name jsimon-ml20m-schema
--schema file://jsimon-ml20m-schema.json
$ aws personalize create-dataset --schema-arn $SCHEMA_ARN
--dataset-group-arn $DATASET_GROUP_ARN
--dataset-type INTERACTIONS
데이터 세트 가져오기
이 단순한 예제에서는 데이터를 온디맨드로 가져옵니다. 가져오기 작업을 예약하여 새로운 데이터를 정기적으로 로드할 수도 있습니다. Amazon S3 버킷의 데이터를 읽으려면 역할을 전달해야 합니다.
$ aws personalize create-dataset-import-job --job-name jsimon-ml20m-job
--role-arn $ROLE_ARN
--dataset-arn $DATASET_ARN
--data-source dataLocation=s3://jsimon-ml20m/ratings.processed.csv
이 작업에는 시간이 조금 걸리며 describe-dataset-import-job API를 사용하여 완료를 확인할 수 있습니다. 다량의 정보가 반환되므로 여기서는 가져오기 상태만 쿼리하겠습니다.
$ aws personalize describe-dataset-import-job
--dataset-import-job-arn $DATASET_IMPORT_JOB_ARN
--query "datasetImportJob.latestDatasetImportJobRun.status"
"CREATE IN_PROGRESS"
통합 후 솔루션 생성하기
데이터 세트를 가져온 후에는 추천 모델을 요리할 때 사용할 레시피를 선택해야 합니다. 레시피는 알고리즘보다 훨씬 더 유용합니다. 미리 정의된 기능 변환, 알고리즘에 대한 초기 파라미터 및 자동 모델 튜닝 기능도 포함되어 있습니다. 따라서 레시피를 사용하면 개인화에 대한 전문 지식이 필요하지 않습니다.
Amazon Personalize에는 다양한 사용 사례에 적합한 다수의 레시피가 포함되며 고급 사용자의 경우 자체 레시피를 추가할 수도 있습니다.
다음은 사용 가능한 레시피 목록입니다.
arn:aws:personalize:::recipe/awspersonalizehrnnmodel
arn:aws:personalize:::recipe/awspersonalizehrnnmodel-for-coldstart
arn:aws:personalize:::recipe/awspersonalizehrnnmodel-for-metadata
arn:aws:personalize:::recipe/awspersonalizeffnnmodel
arn:aws:personalize:::recipe/awspersonalizedeepfmmodel
arn:aws:personalize:::recipe/awspersonalizesimsmodel
arn:aws:personalize:::recipe/search-personalization
arn:aws:personalize:::recipe/popularity-baseline
추천 전문가라면 유연하게 레시피를 활용할 수 있겠지만 주제를 처음 사용하는 개발자에게는 쉽지 않을 수 있습니다.
앞서 언급한 바와 같이 Amazon Personalize는 최적의 레시피를 자동으로 검색하는 새로운 기술인 AutoML을 지원합니다. 이 기술을 활성화하겠습니다. 하이퍼 파라미터 최적화는 기본적으로 활성화됩니다. Amazon Personalize 솔루션은 수신 트래픽에 따라 자동으로 조정될 수 있습니다. 지원하려는 TPS(초당 트랜잭션 수)의 최소 수만 정의하면 됩니다.
그러면 다음과 같은 솔루션을 생성할 수 있습니다.
$ aws personalize create-solution --name jsimon-ml20m-solution
--minTPS 10 --perform-auto-ml
--dataset-group-arn $DATASET_GROUP_ARN
--query 'solution.status'
"CREATE IN_PROGRESS"
최적의 레시피를 선택하고 훈련하고 조정하는 데 시간이 조금 걸립니다. 이 모든 작업이 완료되면 솔루션 지표를 살펴볼 수 있습니다.
$ aws personalize get-metrics --solution-arn $SOLUTION_ARN
새 항목 실시간으로 추천 받기
모델에 만족하면 캠페인을 생성하고 모델을 배포할 수 있습니다. 모델은 솔루션이 배포될 때마다 자동으로 업데이트됩니다.
$ aws personalize create-campaign --name jsimon-ml20m-solution
--solution-arn $SOLUTION_ARN --update-mode AUTO
이제 영화 몇 개를 추천해 보겠습니다.
$ aws personalize-rec get-recommendations --campaign-arn $CAMPAIGN_ARN
--user-id $USER_ID --query "itemList[*].itemId"
["1210", "260", "2571", "110", "296", "1193", ...]
이게 다입니다! 보시다시피 몇 번의 API 호출로 추천 모델을 성공적으로 구축했습니다. 필요한 작업은 스키마를 정의하고 데이터 세트를 업로드하는 게 다였습니다. 최선의 레시피를 선택하고 레시피의 하이퍼 파라미터를 최적화하는 작업은 Amazon Personalize에서 AutoML을 통해 완료되었습니다. 완전관리형 인프라에서 솔루션이 훈련되고 배포되었기 때문에 애플리케이션 구축에 더 많이 집중할 수 있었습니다.
미리 보기 신청하기
이 글 안에서 유용한 정보를 얻으셨나요? 여기서 설명한 내용은 Amazon Personalize의 기능 중 극히 일부에 불과합니다. 이 서비스는 미국 동부(버지니아 북부) 및 미국 서부(오레곤)에서 미리 보기로 제공됩니다.
미리 보기 중에는 서비스 요금이 없습니다. 미리 보기가 완료된 후 이 서비스는 AWS 프리 티어에 포함됩니다. 등록 후 첫 2개월 동안은 다음과 같은 혜택이 제공됩니다.
1. 데이터 처리 및 저장: 매월 최대 20GB
2. 훈련: 매월 최대 100시간
3. 추론: 매월 최대 50TPS 시간의 실시간 추천
사용해 보시려면 aws.amazon.com/personalize/에 방문한 다음 미리보기를 신청해 주세요. 직접 사용해 보시고 의견을 보내 주시기 바랍니다.
— Julien;
이 글은 AWS News Blog의 Amazon Personalize – Real-Time Personalization and Recommendation for Everyone의 한국어 번역으로 정도현 AWS 테크니컬 트레이너가 감수하였습니다.