Swivel을 사용하여 임베딩 생성

본 가이드에서는 Vertex Pipelines를 사용하여 서브행렬 벡터 임베딩 학습자(Swivel) 알고리즘으로 임베딩 모델을 학습시키는 방법을 설명합니다.

Swivel은 항목 동시 발생 행렬에서 항목 임베딩을 생성하는 방식입니다. 구매주문서와 같은 구조화된 데이터의 경우 임베딩을 생성하려는 모든 제품에 대해 제품 A와 제품 B가 모두 포함된 구매주문서 수를 집계하여 항목의 동시 발생 행렬을 계산할 수 있습니다.

본 튜토리얼에서는 이 템플릿을 사용하여 자체 텍스트 또는 구조화된 데이터에서 임베딩을 생성하는 방법을 단계별로 설명합니다. 수행 단계는 다음과 같습니다.

  1. 설정: API 사용 설정, 권한 부여, 입력 데이터 준비
  2. 매개변수 구성: Swivel 작업에 적합한 매개변수 값 설정
  3. Vertex Pipelines에서 학습: Swivel 파이프라인 템플릿을 사용하여 Vertex Pipelines에서 Swivel 작업 생성

시작하기 전에

  1. Vertex Pipelines용 Google Cloud 프로젝트를 설정합니다.

  2. Dataflow API 서비스를 사용 설정합니다.

  3. 세분화된 권한으로 서비스 계정을 구성합니다.

    • 서비스 계정을 지정하지 않으면 파이프라인 실행에서 기본적으로 프로젝트 편집자 역할을 가진 Compute Engine 기본 서비스 계정을 사용합니다.
    • 자체 서비스 계정을 만들려면 본 가이드에 따라 서비스 계정에 roles/aiplatform.user, roles/iam.serviceAccountUser, roles/dataflow.developer, roles/compute.viewer, roles/storage.objectAdmin 역할을 부여합니다.

입력 데이터

Swivel을 사용하여 텍스트 코퍼스의 단어 또는 구조화된 데이터 세트의 항목에 대한 임베딩을 생성할 수 있습니다. 입력 데이터 파일은 다음 형식이어야 합니다.

  • 각 행은 동시 발생 컨텍스트를 나타냅니다. 예를 들어 문장 내 단어, 장바구니에 포함된 제품 집합, 재생목록 내의 노래 집합, 사용자 세션에서 방문한 URL 집합이 있습니다.

  • 각 행의 항목은 공백으로 구분됩니다. 따라서 항목 이름에는 공백이 없어야 합니다.

입력 데이터 유형

입력에는 텍스트항목의 두 가지 유형이 있습니다. 사용 사례에 적합한 유형을 올바르게 지정하는 것은 입력 데이터 처리 방식에 영향을 주므로 중요합니다.

  1. 텍스트 입력에는 대문자와 구두점이 필요하므로 Swivel은 텍스트를 소문자로 변환하고 구두점을 삭제합니다. 이렇게 하면 'apple', 'Apple', 'APPLE!'과 같은 토큰이 동일한 토큰으로 취급되므로 임베딩이 동일합니다. 예를 들어 위의 텍스트 입력은 다음과 같이 처리됩니다.

    an old silent pond

    a frog jumps into the pond splash

    silence again

  2. 항목 입력은 단순히 공백으로 구분되며 각 토큰은 항목 ID가 됩니다. 또한 장바구니 등에 포함된 항목 그룹은 기본적으로 순서가 지정되지 않으므로 항목 입력에는 순서가 중요하지 않습니다. 즉, 항목 입력의 각 행은 배열이 아닌 집합으로 취급됩니다. 따라서 Swivel은 행의 각 항목을 서로 동등하게 취급합니다.

샘플 데이터

다음 샘플 데이터를 테스트용으로 Cloud Storage 버킷에 복사할 수 있습니다.

  • wikipedia: Wikipedia 덤프에서 단어 임베딩을 학습하는 데 사용할 수 있는 텍스트 코퍼스 데이터 세트입니다. 여기에서는 text 입력 유형이 사용됩니다.

이 데이터를 복사하려면 다음 명령어를 실행합니다.

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/wikipedia/* BUCKET_NAME/wikipedia

BUCKET_NAME을 관리하는 Cloud Storage 버킷의 이름으로 바꿉니다.

  • movielens_25m: 영화의 임베딩을 만드는 데 사용할 수 있는 영화 평점 데이터 세트입니다. 이는 항목 입력 유형을 사용합니다. 이 데이터 세트는 각 행에 동일한 사용자의 평가가 동일한 영화가 포함되도록 처리됩니다. 디렉터리에는 영화 ID를 이름에 매핑하는 movies.csv도 포함됩니다.

이 데이터를 복사하려면 다음 명령어를 실행합니다.

gsutil cp -r gs://cloud-samples-data/vertex-ai/matching-engine/swivel/movielens_25m/data* BUCKET_NAME/movielesn_25m

BUCKET_NAME을 관리하는 Cloud Storage 버킷의 이름으로 바꿉니다.

Vertex Pipelines를 사용하여 Swivel 작업 생성

Google Cloud Console을 사용하여 파이프라인을 실행할 수 있습니다. 이 작업은 3단계로 진행됩니다.

  1. 다음 링크에서, 사전 컴파일된 파이프라인 템플릿과 구성 스크립트를 로컬로 다운로드합니다.

  2. 스크립트(swivel_template_configuration.sh)를 사용하여 템플릿을 구성합니다. 다음은 매개변수 목록입니다.

    • pipeline_suffix: 파이프라인 이름의 서픽스(소문자 및 하이픈이 허용됨)입니다.
    • machine_type: 예를 들면 n1-standard-16과 같습니다. 머신 유형 자세히 알아보기
    • accelerator_count: 각 머신의 GPU 수입니다.
    • accelerator_type: 예를 들면 NVIDIA_TESLA_P100, NVIDIA_TESLA_V100과 같습니다. GPU 자세히 알아보기
    • pipeline_root: Cloud Storage 버킷 이름입니다. gs:// 프리픽스를 포함하지 마세요.

    다음 스크립트를 실행합니다.

    ./swivel_template_configuration.sh -pipeline_suffix {your-pipeline-suffix} -project_id {your-project-id} -machine_type n1-standard-16 -accelerator_count 2 -accelerator_type NVIDIA_TESLA_V100 -pipeline_root {BUCKET_NAME}
    

    구성을 사용하여 사전 컴파일된 파이프라인 템플릿 swivel_pipeline.json이 생성됩니다.

  3. Cloud Console에서 swivel_pipeline.json을 사용하여 실행되는 파이프라인을 생성합니다.

    다음 표에는 Swivel 작업에서 사용하는 Cloud Console에 입력해야 하는 런타임 매개변수가 나와 있습니다.

    매개변수 데이터 유형 설명 필수
    embedding_dim 정수 학습시킬 임베딩의 차원입니다. 아니요 - 기본값은 100입니다.
    input_base 문자열 입력 데이터가 저장되는 Cloud Storage 경로입니다.
    input_type 문자열 입력 데이터의 유형입니다. 'text'(wikipedia 샘플의 경우) 또는 'items'(movielens 샘플의 경우)일 수 있습니다.
    max_vocab_size 정수 임베딩을 생성할 최대 어휘 크기입니다. 아니요 - 기본값은 409600입니다.
    num_epochs 정수 학습의 에포크 수입니다. 아니요 - 기본값은 20입니다.

즉, items 입력 유형은 입력 데이터의 각 행이 공백으로 구분된 항목 ID여야 함을 의미합니다. 각 행은 공백으로 구분되어 토큰화됩니다. text 입력 유형은 입력 데이터의 각 행이 문장과 동일한 것으로 간주됨을 의미합니다. 각 행은 소문자로 바뀌고 공백으로 구분되어 토큰화됩니다.

Wikipedia 샘플의 경우 input_type = textinput_base = {SOURCE_DATA}/wikipedia를 사용합니다. MovieLens 샘플에는 input_type = itemsinput_base = {SOURCE_DATA}/movielens_25m을 사용합니다.

학습된 임베딩 모델 사용

파이프라인 실행이 성공적으로 완료되면 학습된 TensorFlow SavedModel이 Cloud Storage 디렉터리({BUCKET_NAME}/pipeline_root/{PROJECT_NUMBER}/swivel-{TIMESTAMP}/EmbTrainerComponent_-{SOME_NUMBER}/model/model/)로 내보내집니다. Cloud Console의 Vertex ML Metadata 섹션에서 이 경로를 찾을 수 있습니다.

가이드

Vertex AI에서 Swivel을 학습시키고, 학습된 임베딩을 살펴보고, 온라인 제공을 위한 임베딩 모델을 배포하는 방법을 자세히 알아보려면 Colab에서 노트북 예시를 실행하세요.

다음 단계