기본 제공 NCF 알고리즘 시작하기

이 튜토리얼에서는 MovieLens 데이터 세트에 대한 신경망 공동작업 필터링(NCF) 모델을 학습시키는 방법을 안내합니다. 데이터 사전 처리, 기본 제공되는 NCF 알고리즘을 사용한 학습, AI Platform에 모델 배포, 배포된 모델에서 예측 요청을 설명합니다.

데이터 세트

이 가이드에서는 모델 학습 및 평가를 위해 다음과 같은 MovieLens 데이터 세트를 사용합니다.

  • ml-1m(MovieLens 1백만 개)
  • ml-20m(MovieLens 2천만 개)

ml-1m

ml-1m 데이터 세트에는 2000년에 MovieLens에 조인한 6,040명의 사용자가 약 3,706개의 영화에 대해 작성한 1,000,209개의 익명 평가가 포함되어 있습니다. 모든 평점은 헤더 행 없이 'ratings.dat' 파일에 포함되며 다음 형식으로 표시됩니다.

UserID::MovieID::Rating::Timestamp

  • UserID의 범위는 1에서 6040 사이입니다.
  • MovieID의 범위는 1에서 3952 사이입니다.
  • 평점은 별 5개 등급(꽉 찬 별표만 사용)으로 평가됩니다.
  • 타임스탬프는 1970년 1월 1일 자정 협정 세계시(UTC) 이후 초 단위로 표시됩니다.

ml-20m

ml-20m 데이터 세트에는 138493명의 사용자가 26,744편의 영화에 대해 작성한 20,000,263개의 평점이 포함되어 있습니다. 모든 평점은 'ratings.csv' 파일에 포함되어 있습니다. 헤더 행 다음에 있는 이 파일의 각 줄은 사용자 한 명이 한 편의 영화에 대해 작성한 평점 한 개를 나타내며 다음과 같은 형식으로 표시됩니다.

userId,movieId,rating,timestamp

이 파일 내의 줄은 먼저 userId로 정렬됩니다. userId가 동일한 행은 movieId로 정렬됩니다. 평점은 별표 반 개씩 증가하는 별 5개 등급(별표 0.5개 - 별표 5.0개)으로 평가됩니다. 타임스탬프는 1970년 1월 1일 자정 협정 세계시(UTC) 이후 초 단위로 표시됩니다. 각 사용자당 20개 이상의 평가가 있습니다.

목표

  • MovieLens 데이터 세트 준비
  • 학습 및 평가를 실행합니다.

시작하기 전에

  1. Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  4. AI Platform Training & Prediction API 사용 설정

    API 사용 설정

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  6. Google Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다.

  7. AI Platform Training & Prediction API 사용 설정

    API 사용 설정

  8. Google Cloud 콘솔에서 Cloud Shell을 활성화합니다.

    Cloud Shell 활성화

    Google Cloud 콘솔 하단에서 Cloud Shell 세션이 시작되고 명령줄 프롬프트가 표시됩니다. Cloud Shell은 Google Cloud CLI가 사전 설치된 셸 환경으로, 현재 프로젝트의 값이 이미 설정되어 있습니다. 세션이 초기화되는 데 몇 초 정도 걸릴 수 있습니다.

데이터 준비

  1. Cloud Shell에서 Python 가상 환경을 만들고 활성화합니다.

    (vm)$  virtualenv ncf-env
    
    (vm)$  source ncf-env/bin/activate
    
  2. TensorFlow 모델 Garden 코드 설치:

    (vm)$  pip install tf-models-official==2.3.0
    
  3. URI의 환경 변수를 Google Cloud 프로젝트의 Cloud Storage 버킷 및 디렉터리에 추가하여 이 버킷 내에 데이터를 저장합니다. 여기에서 BUCKET_NAME을 내 버킷 이름으로 바꿉니다.

    (vm)$ export STORAGE_BUCKET=gs://BUCKET_NAME
    (vm)$ export DATA_DIR=${STORAGE_BUCKET}/ncf_data
    
  4. DATA_DIR의 ml-20m 데이터 세트에 대한 학습 및 평가 데이터를 생성합니다.

    (vm)$ python -m official.recommendation.create_ncf_data \
        --dataset ml-20m \
        --num_train_epochs 4 \
        --meta_data_file_path ${DATA_DIR}/metadata \
        --eval_prebatch_size 160000 \
        --data_dir ${DATA_DIR}
    

이 스크립트는 Cloud Shell에서 데이터 세트를 생성하고 사전 처리합니다. 사전 처리는 데이터를 모델에 필요한 TFRecord 형식으로 변환합니다. 다운로드 및 사전 처리에는 약 25분이 걸리며 다음과 비슷한 출력이 생성됩니다.

I0804 23:03:02.370002 139664166737728 movielens.py:124] Successfully downloaded /tmp/tmpicajrlfc/ml-20m.zip 198702078 bytes
I0804 23:04:42.665195 139664166737728 data_preprocessing.py:223] Beginning data preprocessing.
I0804 23:04:59.084554 139664166737728 data_preprocessing.py:84] Generating user_map and item_map...
I0804 23:05:20.934210 139664166737728 data_preprocessing.py:103] Sorting by user, timestamp...
I0804 23:06:39.859857 139664166737728 data_preprocessing.py:194] Writing raw data cache.
I0804 23:06:42.375952 139664166737728 data_preprocessing.py:262] Data preprocessing complete. Time: 119.7 sec.
%lt;BisectionDataConstructor(Thread-1, initial daemon)>
General:
  Num users: 138493
  Num items: 26744

Training:
  Positive count:          19861770
  Batch size:              99000
  Batch count per epoch:   1004

Eval:
  Positive count:          138493
  Batch size:              160000
  Batch count per epoch:   866

I0804 23:07:14.137242 139664166737728 data_pipeline.py:887] Negative total vector built. Time: 31.8 seconds
I0804 23:11:25.013135 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 250.9 seconds
I0804 23:15:46.391308 139664166737728 data_pipeline.py:674] Eval construction complete. Time: 261.4 seconds
I0804 23:19:54.345858 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 248.0 seconds
I0804 23:24:09.182484 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 254.8 seconds
I0804 23:28:26.224653 139664166737728 data_pipeline.py:588] Epoch construction complete. Time: 257.0 seconds

학습 작업 제출

작업을 제출하려면 몇 가지 기본 학습 인수 및 NCF 알고리즘과 관련된 몇 가지 기본 인수를 지정해야 합니다.

학습 작업의 일반 인수:

학습 작업 인수
인수 설명
job-id 학습 작업의 고유 ID입니다. 학습 작업을 제출한 후 이 인수를 사용하여 학습 작업의 상태 로그를 찾을 수 있습니다.
job-dir 학습 작업이 성공적으로 완료된 후 AI Platform Training이 학습 파일을 저장하는 Cloud Storage 경로입니다.
scale-tier 학습용 머신 유형을 지정합니다. 머신이 한 개만 있는 구성을 선택하려면 BASIC을 사용합니다.
master-image-uri 학습 작업에 사용할 Docker 컨테이너를 지정하는 데 사용되는 Container Registry URI입니다. 앞에서 IMAGE_URI로 정의된 기본 제공 NCF 알고리즘에 이 컨테이너를 사용합니다.
region 학습 작업을 실행할 사용 가능한 리전을 지정합니다. 이 가이드에서는 us-central1 리전을 사용할 수 있습니다.

MovieLens의 기본 제공 NCF 알고리즘 학습과 관련된 인수

알고리즘 인수
인수 이 가이드에 사용할 값 설명
train_dataset_path ${DATA_DIR}/training_cycle_*/* 학습 데이터가 저장되는 Cloud Storage 경로입니다.
eval_dataset_path ${DATA_DIR}/eval_data/* 평가 데이터가 저장되는 Cloud Storage 경로입니다.
input_meta_data_path ${DATA_DIR}/metadata 입력 스키마가 저장되는 Cloud Storage 경로입니다.
train_epochs 3 실행할 학습 세대 수입니다.
batch_size 99000 학습의 배치 크기입니다.
eval_batch_size 160000 평가의 배치 크기입니다.
learning_rate 0.00382059 Adam 옵티마이저에 사용되는 학습률입니다.
beta1 0.783529 Adam 옵티마이저의 베타 1 초매개변수입니다.
beta2 0.909003 Adam 옵티마이저의 베타 2 초매개변수입니다.
epsilon 1.45439e-07 Adam 옵티마이저의 Epsilon 초매개변수입니다.
num_factors 64 MF 모델의 임베딩 크기입니다.
hr_threshold 0.635 학습을 중지해야 하는 HR 평가 측정항목의 값입니다.
layers 256,256,128,64 MLP의 숨겨진 레이어 크기입니다. 쉼표로 구분된 정수로 형식을 지정합니다.
keras_use_ctl 모델 학습에서 커스텀 Keras 학습 루프를 사용합니다.

다른 모든 NCF 알고리즘 플래그의 세부 목록은 기본 제공 NCF 참조를 참조하세요.

학습 작업 실행

  1. Google Cloud Console에서 AI Platform 페이지로 이동합니다.

    AI Platform으로 이동

  2. 모델 학습 섹션에서 기본 제공 알고리즘을 사용하여 학습을 선택합니다.

  3. 드롭다운 목록에서 NCF를 선택합니다. 다음을 클릭합니다.

  4. 찾아보기 버튼을 사용하여 Cloud Storage 버킷에서 학습 및 평가 데이터 세트를 선택하고 출력 디렉터리를 선택합니다. 다음을 클릭합니다.

  5. 알고리즘 인수 페이지에서 이전 섹션의 테이블에 있는 인수 값을 사용하여 학습 작업을 구성합니다.

  6. 학습 작업 이름을 지정하고 BASIC_TPU 또는 BASIC_GPU 머신 유형을 사용합니다.

  7. 제출을 클릭하여 작업을 시작합니다.

작업 디렉터리 이해

학습 작업이 성공적으로 완료되면 AI Platform Training이 다른 몇 가지 아티팩트와 함께 학습된 모델을 개발자의 Cloud Storage 버킷에 만듭니다. JOB_DIR 내의 디렉터리 구조는 다음과 같습니다.

  • model/(TensorFlow SavedModel 디렉터리)
    • saved_model.pb
    • assets/
    • variables/
  • summary/(학습 및 평가에서 로깅)
    • eval/
    • train/
  • 다양한 체크포인트 파일(학습 중에 생성 및 사용)
    • checkpoint
    • ctl_checkpoint-1.data-00000-of-00002
    • ...
    • ctl_checkpoint-1.index

JOB_DIR의 디렉터리 구조가 이전 목록에 설명된 구조와 일치하는지 확인합니다.

gsutil ls -a $JOB_DIR/*

학습된 모델 배포

AI Platform Prediction은 모델버전 리소스를 사용하여 학습된 모델을 구성합니다. AI Platform Prediction 모델은 머신러닝 모델 버전의 컨테이너입니다.

모델을 배포하려면 AI Platform Prediction에서 모델 리소스를 만들고 해당 모델의 버전을 만든 다음 모델과 버전을 사용하여 온라인 예측을 요청합니다.

AI Platform Prediction에 모델을 배포하는 방법에 대해 자세히 알아보세요.

Console

  1. 작업 페이지에 모든 학습 작업의 목록이 표시됩니다. 바로 전에 제출한 학습 작업의 이름을 클릭합니다.

  2. 작업 세부정보 페이지에서 작업의 일반 진행 상태를 확인하거나 로그 보기를 클릭하여 더 자세한 진행 상태를 확인할 수 있습니다.

  3. 작업이 성공하면 모델 배포 버튼이 맨 위에 나타납니다. 모델 배포를 클릭합니다.

  4. '새 모델로 배포'를 선택하고 모델 이름을 입력합니다. 그런 다음 확인을 클릭합니다.

  5. 버전 만들기 페이지에서 버전 이름(예: v1)을 입력하고 다른 모든 필드를 기본 설정으로 유지합니다. 저장을 클릭합니다.

  6. 모델 세부정보 페이지에 버전 이름이 표시됩니다. 버전을 만드는 데 몇 분 정도 걸립니다. 버전이 준비되면 버전 이름 옆에 체크표시 아이콘이 나타납니다.

  7. 버전 이름(v1)을 클릭하여 버전 세부정보 페이지로 이동합니다. 이 가이드의 다음 단계에서는 예측 요청을 전송합니다.

온라인 예측 수행

예측을 요청할 때 모델에 필요한 방식으로 입력 데이터를 JSON 형식으로 지정해야 합니다. 현재 NCF 모델은 입력을 자동으로 사전 처리하지 않습니다.

Console

  1. 방금 만든 버전인 'v1'의 버전 세부정보 페이지에서 샘플 예측 요청을 보낼 수 있습니다.

    테스트 및 사용 탭을 선택합니다.

  2. 다음 샘플을 입력란에 복사합니다.

     {
       "instances": [{
         "duplicate_mask": [0],
         "item_id": [1],
         "train_labels": [true],
         "user_id": [1],
         "valid_point_mask": [false]
       }]
      }
    
  3. 테스트를 클릭합니다.

    잠시 기다리면 예측 벡터가 반환됩니다.

다음 단계