쉽게 설명한 AWS Personalize
2020년 06월 19일 작성TL;DR
퍼스널라이즈를 잘(!) 쓰면 인턴도 1주일만에 전문가급의 추천엔진 만들 수 있다.
시작하며
퍼스널라이즈는 일반 추천 및 개인화된 추천을 위한 AI/ML 서비스이다.
나도 처음 공식 예제1 을 따라서 진행했는데, 한시간 만에 영화추천용 퍼스널라이즈 모델을 만들어 볼 수 있었다.
예제 코드1가 사용법에 대한 모든 부분을 커버하고 있기 때문에, 이 글에서는 퍼스널라이즈 공식 문서를 보기전에 미리 보면 좋은 내용들만 간략히 살펴본다.
모델 생성순서
퍼스널라이즈를 통해 아이템목록
을 얻으려면 최종적으로 캠페인
을 생성해야한다.
캠페인을 생성하려면 다음의 단계를 거치게된다. (콘솔에서 해보면 아래의 단계로 생성하게 된다.)
- 데이터셋 그룹(dataset group) 을 생성한다.
- 데이터셋(dataset)을 데이터셋 그룹안에 생성한다. 2.1. 스키마(schema)를 만든다. 2.2. s3 에 있는 데이터를 데이터셋으로 임포팅(import)한다.
- 솔루션(solution)을 생성한다.
- 레시피를 이용하여 솔루션 버전(solution version)을 생성한다. (즉, 솔루션버전 == 학습된 모델)
- 솔루션 버전을 이용하여 캠페인을 만든다. (캠페인 == 엔드포인트)
데이터셋은 Interaction, User, Item, Events 4종류가 있고, Interaction 데이터셋은 레시피와 무관하게 반드시 필요하다.
퍼스널라이즈에서 스키마 지정에 사용하는 데이터 포맷은 Apache Avro 이며, 위에서 생성한 스키마가 Avro 스키마이다.
데이터 임포팅 하는 과정은 Avro 포맷을 이용하여 데이터를 밸리데이션하고 저장하는 과정이라고 보면 된다.
데이터를 임포팅하면 기존 데이터와 합쳐지는 것이 아니라 전체 데이터가 새로 임포팅 된 데이터로 refresh
된다. (PutEvents 데이터는 예외)
솔루션 버전을 생성하는 것은 레시피로 모델을 학습하는 것이라고 보면 된다. 또한 해당 모델을 엔드유저에게 서빙할 수 있게끔 노출하는 것이 캠페인이다.
레시피 종류와 사용
레시피는 모델 또는 알고리즘 이라고 이해하면 편하다.
현재 퍼스널라이즈에는 총 6개의 레시피가 있는데 4 종류로 구분해볼 수 있다.
또 metadata 를 사용하는 모델은 hrnn-metadata, hrnn-coldstart 뿐이다. (즉, 데이터셋 그룹에 메타데이터가 있더라도 personalize-ranking 레시피로 학습하면 메타데이터를 사용하지 않는다.)
HRNN
hrnn 은 퍼스널라이즈에서 사용하고 있는 딥러닝 모델명으로 hrnn 이 들어간 3개는 같은 카테고리로 묶을 수 있다.
- aws-hrnn: hrnn 모델을 이용하여
사용자
를 입력받아서아이템목록
을 반환한다. - aws-hrnn-metadata: aws-hrnn 과 비슷한데 user 또는 item 데이터셋(metadata) 을 학습에 추가적으로 사용한다. 입력과 출력은 aws-hrnn 과 동일하다.
- aws-hrnn-coldstart: aws-hrrnn-metadata 와 비슷하지만 coldstart에 대해서만 추천해준다. 즉, 입력과 출력은 aws-hrnn 과 동일하지만 출력의
아이템목록
은사용자
와 인터액션이 없었던 아이템만 반환된다.
aws-hrnn 로 생성한 모델은 결국 사용자
를 입력으로 받아서 아이템목록
을 반환한다.
이 때 아이템목록에는 확률점수가 함께 제공되는데 이 점수를 모두 합하면 1이 된다. (즉, 소프트맥스 값이라고 보면 된다.) 따라서 해당 아이템목록을 필터링할 때, 0.001 이하는 버린다 같이 절대수치를 사용하면 사용자 화면에서 추천되는 아이템 개수를 보장하기 힘들다.
Popularity Count
데이터셋 가장 많이(Count) 사용자-아이템 인터액션이 일어난 상품(Popularity) 을 가장 위에 추천해준다. 가장 단순한 알고리즘으로, 각 모델의 성능을 테스트할 때 베이스라인으로 사용한다. (즉, 이 모델보다 성능이 잘 나오는지 아닌지를 확인하는 식으로 테스트한다.)
모델은 사용자
를 입력으로 받아서 아이템 목록
을 반환한다.
Sims - Item-to-item similarities
sims 는 CF(collaborative filtering) 기반의 알고리즘이다. CF 자체가 추천에 범용적으로 쓰는 알고리즘 이므로, 가장 무난한 성능을 보여준다.
sims 는 아이템 아이디
를 입력받아서 아이템 목록
을 반환한다. 이때 hrnn 과 다르게 아이템에 대한 확률값을 제공하지 않는다.
Personalized-Ranking
sims 는 아이템 아이디
를 입력으로 받기 때문에 개인의 선호도와 관계없이 아이템목록을 반환한다. 따라서 개인화 된 추천아이템 목록을 제공하려고 하는 경우에는, 해당 레시피를 이용하여 sims 의 반환된 아이템목록을 재정렬(re-rank) 해줄 필요가 있다.
개인화 랭킹은 사용자 아이디
와 아이템목록
을 입력받아 개인화된 순서로 정렬된 아이템목록
을 반환한다.
실시간 이벤트 저장
PutEvents 라는 API 를 통해서 인터액션 데이터를 저장하고 실시간으로 추천결과에 반영할 수 있다. Personalize 에서 제공하는 predefined recipe 에서 사용가능하다.
필터
최근 추가된 기능이다. 학습데이터에 A-사용자
가 a-아이템
을 구매
한 내역이 있다면, 추천시에 A-사용자에게는 a-아이템이 보여지면 안된다.(이미 구매를 했기 때문에)
이렇게 구매
, 클릭
과 같은 EVENT_TYPE 을 학습데이터 기반으로 필터링 할 수 있게 해주는 기능이 필터기능이다.
마치며
퍼스널라이즈 공식문서를 처음 읽기 전에 보면 도움이 될만한 내용만 간추려보았다.