이 가이드에서는 AutoML Natural Language를 사용하여 콘텐츠 분류를 위한 커스텀 모델을 생성하는 방법을 보여줍니다. 이 애플리케이션은 Kaggle 오픈소스 데이터 세트 HappyDB에서 'happy moments'로 크라우드 소싱된 코퍼스를 사용하여 커스텀 모델을 학습합니다. 결과 모델은 행복한 순간을 행복의 이유를 나타내는 카테고리로 분류합니다.
이 데이터는 크리에이티브 커먼즈 CCO: 퍼블릭 도메인 라이선스를 통해 제공됩니다.
이 튜토리얼에서는 커스텀 모델 학습, 커스텀 모델 성과 평가, 새 콘텐츠 분류에 관해 다룹니다.
기본 요건
프로젝트 환경 구성
- Google Cloud 계정에 로그인합니다. Google Cloud를 처음 사용하는 경우 계정을 만들고 Google 제품의 실제 성능을 평가해 보세요. 신규 고객에게는 워크로드를 실행, 테스트, 배포하는 데 사용할 수 있는 $300의 무료 크레딧이 제공됩니다.
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
-
API AutoML Natural Language 사용 설정
-
Google Cloud Console의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
-
Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.
-
API AutoML Natural Language 사용 설정
- Google Cloud CLI를 설치합니다.
- 안내를 따라 서비스 계정을 만들고 키 파일을 다운로드합니다.
- 서비스 계정을 만들 때 다운로드한 서비스 계정 키 파일 경로로
GOOGLE_APPLICATION_CREDENTIALS
환경 변수를 설정합니다. 예를 들면 다음과 같습니다.export GOOGLE_APPLICATION_CREDENTIALS=key-file
- 다음 명령을 사용하여 AutoML 편집자 IAM 역할에 새 서비스 계정을 추가합니다. project-id를 Google Cloud 프로젝트 이름으로 바꾸고 service-account-name을 새 서비스 계정의 이름(예:
service-account1@myproject.iam.gserviceaccount.com
)으로 바꿉니다.gcloud auth login gcloud config set project project-id gcloud projects add-iam-policy-binding project-id
--member=serviceAccount:service-account-name
--role='roles/automl.editor' - AutoML Natural Language 서비스 계정으로 Google Cloud 프로젝트 리소스에 액세스하도록 허용합니다.
gcloud projects add-iam-policy-binding project-id
--member="serviceAccount:custom-vision@appspot.gserviceaccount.com"
--role="roles/storage.admin" - 클라이언트 라이브러리를 설치합니다.
- PROJECT_ID 및 REGION_NAME 환경 변수를 설정합니다.
project-id를 Google Cloud Platform 프로젝트의 프로젝트 ID로 바꿉니다. AutoML Natural Language는 현재us-central1
위치가 필요합니다.export PROJECT_ID="project-id" export REGION_NAME="us-central1"
- Google Cloud Storage 버킷을 만들고 커스텀 모델 학습에 사용할 문서를 저장합니다.
버킷 이름은$PROJECT_ID-lcm
형식이어야 합니다. 다음 명령어는$PROJECT_ID-lcm
이라는us-central1
리전에 스토리지 버킷을 만듭니다.gsutil mb -p $PROJECT_ID -c regional -l $REGION_NAME gs://$PROJECT_ID-lcm/
happiness.csv
파일을 공개 버킷에서 Google Cloud Storage 버킷으로 복사합니다.
happiness.csv
파일은 공개 버킷 cloud-ml-data의 NL-classification 폴더에 있습니다.
소스 코드 파일 위치
소스 코드가 필요하면 여기에서 확인할 수 있습니다. 원할 경우 언제든지 소스 코드 파일을 Google Cloud Platform 프로젝트 폴더에 복사하세요. 또는 각 단계에 도달할 때마다 이 페이지에서 코드를 직접 복사하는 것이 좋습니다.
Python
이 튜토리얼은 다음 Python 프로그램으로 구성됩니다.
language_text_classification_create_dataset.py
– 데이터 세트를 만드는 기능을 포함합니다.import_dataset.py
– 데이터 세트를 가져오는 기능을 포함합니다.language_text_classification_create_model.py
– 모델을 만드는 기능을 포함합니다.list_model_evaluations.py
– 모델 평가를 나열하는 기능을 포함합니다.language_text_classification_predict.py
- 예측과 관련된 기능을 포함합니다.delete_model.py
- 모델을 삭제하는 기능을 포함합니다.
자바
이 튜토리얼은 다음 자바 파일로 구성됩니다.
LanguageTextClassificationCreateDataset.java
– 데이터 세트를 만드는 기능을 포함합니다.ImportDataset.java
– 데이터 세트를 가져오는 기능을 포함합니다.LanguageTextClassificationCreateModel.java
– 모델을 만드는 기능을 포함합니다.ListModelEvaluations.java
– 모델 평가를 나열하는 기능을 포함합니다.LanguageTextClassificationPredict.java
- 예측과 관련된 기능을 포함합니다.DeleteModel.java
– 모델을 삭제하는 기능을 포함합니다.
Node.js
이 튜토리얼은 다음 Node.js 프로그램으로 구성됩니다.
language_text_classification_create_dataset.js
– 데이터 세트를 만드는 기능을 포함합니다.import_dataset.js
– 데이터 세트를 가져오는 기능을 포함합니다.language_text_classification_create_model.js
– 모델을 만드는 기능을 포함합니다.list_model_evaluations.js
– 모델 평가를 나열하는 기능을 포함합니다.language_text_classification_predict.js
- 예측과 관련된 기능을 포함합니다.delete_model.js
- 모델을 삭제하는 기능을 포함합니다.
애플리케이션 실행
1단계: 데이터 세트 생성
커스텀 모델을 생성하는 첫 단계는 모델 학습용 데이터를 저장할 비어 있는 데이터 세트를 만드는 것입니다. 데이터 세트를 생성할 때 커스텀 모델이 수행할 다음 분류 유형을 지정합니다.
- MULTICLASS는 각 분류된 문서에 단일 라벨을 부여합니다.
- MULTILABEL은 문서에 다중 라벨을 부여합니다.
이 튜토리얼에서는 이름이 'happydb'로 지정된 데이터 세트를 생성하고 MULTICLASS를 사용합니다.
코드 복사
Python
Java
Node.js
요청
create_dataset
함수를 실행하고 비어 있는 데이터 세트를 만듭니다. 다음 코드 줄을 수정해야 합니다.
project_id
를 PROJECT_ID로 설정합니다.데이터 세트의
display_name
을 설정합니다(happydb
).
Python
python language_text_classification_create_dataset.py
자바
mvn compile exec:java -Dexec.mainClass="com.example.automl.LanguageTextClassificationCreateDataset"
Node.js
node language_text_classification_create_dataset.js
응답
응답에는 향후 요청에 참조할 데이터 세트 ID와 같이 새로 생성된 데이터 세트의 세부정보가 포함됩니다. 반환된 데이터 세트 ID 값에 환경 변수 DATASET_ID
를 설정하는 것이 좋습니다.
Dataset name: projects/216065747626/locations/us-central1/datasets/TCN7372141011130533778 Dataset id: TCN7372141011130533778 Dataset display name: happydb Text classification dataset specification: classification_type: MULTICLASS Dataset example count: 0 Dataset create time: seconds: 1530251987 nanos: 216586000
2단계: 학습 항목을 데이터 세트로 가져오기
다음 단계는 타겟 카테고리를 사용해 라벨이 지정된 학습 항목 목록을 데이터 세트에 입력하는 것입니다.
import_dataset
함수 인터페이스는 모든 학습 문서의 위치와 각 학습 문서에 적절한 라벨을 나열하는 .csv 파일을 입력으로 사용합니다.
(필수 형식에 대한 자세한 내용은 학습 데이터 준비하기를 참조하세요.) 이 튜토리얼에서는 위에서 Google Cloud Storage에 업로드한 happiness.csv
를 사용합니다.
코드 복사
Python
Java
Node.js
요청
import_data
함수를 실행하여 학습 콘텐츠를 가져옵니다. 변경할 첫 번째 코드는 이전 단계의 데이터 세트 ID이며 두 번째 코드는 happiness.csv
의 URI입니다. 다음 코드 줄을 수정해야 합니다.
project_id
를 PROJECT_ID로 설정합니다.- 이전 단계의 출력에서 데이터 세트의
dataset_id
를 설정합니다. URI인
path
를 설정합니다(gs://YOUR_PROJECT_ID-lcm/csv/happiness.csv
).
Python
python import_dataset.py
자바
mvn compile exec:java -Dexec.mainClass="com.example.automl.ImportDataset"
Node.js
node import_dataset.js
응답
Processing import... Dataset imported.
3단계: 모델 만들기(학습)
라벨이 지정된 학습 문서 데이터 세트를 만들었으므로 이제 새로운 모델을 학습할 수 있습니다.
코드 복사
Python
Java
Node.js
요청
create_model
함수를 호출하여 모델을 만듭니다. 데이터 세트 ID는 이전 단계의 데이터 세트 ID입니다. 다음 코드 줄을 수정해야 합니다.
project_id
를 PROJECT_ID로 설정합니다.- 이전 단계의 출력에서 데이터 세트의
dataset_id
를 설정합니다. 모델(happydb_model)의
display_name
을 설정합니다.
Python
python language_text_classification_create_model.py
자바
mvn compile exec:java -Dexec.mainClass="com.example.automl.LanguageTextClassificationCreateModel"
Node.js
node language_text_classification_create_model.js
응답
create_model
함수는 학습 작업을 시작하고 작업명을 출력합니다. 학습은 비동기식으로 진행되고 완료하는 데 시간이 걸릴 수 있으므로 작업 ID를 사용하여 학습 상태를 확인할 수 있습니다.
학습이 끝나면 create_model
이 모델 ID를 반환합니다. 데이터 세트 ID와 마찬가지로 MODEL_ID
환경 변수를 반환된 모델 ID 값으로 설정할 수 있습니다.
Training operation name: projects/216065747626/locations/us-central1/operations/TCN3007727620979824033 Training started... Model name: projects/216065747626/locations/us-central1/models/TCN7683346839371803263 Model id: TCN7683346839371803263 Model display name: happydb_model Model create time: seconds: 1529649600 nanos: 966000000 Model deployment state: deployed
4단계: 모델 평가하기
학습이 끝난 후 정밀도, 재현율, F1 점수를 검토하고 모델의 준비 상태를 평가할 수 있습니다.
display_evaluation
함수는 모델 ID를 매개변수로 사용합니다.
코드 복사
Python
Java
Node.js
요청
다음 요청을 실행하여 모델의 전체 평가 성능을 표시하도록 요청합니다. 다음 코드 줄을 수정해야 합니다.
project_id
를 PROJECT_ID로 설정합니다.model_id
를 모델의 ID로 설정합니다.
Python
python list_model_evaluations.py
자바
mvn compile exec:java -Dexec.mainClass="com.example.automl.ListModelEvaluations"
Node.js
node list_model_evaluations.js
응답
정밀도와 재현율 점수가 너무 낮으면 학습 데이터 세트를 강화하고 모델을 재학습할 수 있습니다. 자세한 내용은 모델 평가를 참조하세요.
Precision and recall are based on a score threshold of 0.5 Model Precision: 96.3% Model Recall: 95.7% Model F1 score: 96.0% Model Precision@1: 96.33% Model Recall@1: 95.74% Model F1 score@1: 96.04%
5단계: 모델 배포
커스텀 모델이 품질 기준을 충족하면 모델을 배포한 후 예측을 요청할 수 있습니다.
코드 복사
Python
Java
Node.js
요청
deploy_model
함수의 경우 다음 코드 줄을 수정해야 합니다.
project_id
를 PROJECT_ID로 설정합니다.model_id
를 모델의 ID로 설정합니다.
Python
python deploy_model.py
자바
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeployModel.java"
Node.js
node deploy_model.js
응답
Model deployment finished.
6단계: 모델을 활용한 예측
모델을 배포한 후에는 모델을 사용하여 새로운 콘텐츠를 분류할 수 있습니다.
코드 복사
Python
Java
Node.js
요청
predict
함수의 경우 다음 코드 줄을 수정해야 합니다.
project_id
를 PROJECT_ID로 설정합니다.model_id
를 모델의 ID로 설정합니다.예측할
content
를 설정합니다.
Python
python language_text_classification_predict.py
자바
mvn compile exec:java -Dexec.mainClass="com.example.automl.LanguageTextClassificationPredict"
Node.js
node language_text_classification_predict.js
응답
이 기능은 콘텐츠가 각 카테고리에 일치하는 정도에 따라 분류 점수를 반환합니다.
Prediction results: Predicted class name: affection Predicted class score: 0.9702693223953247
7단계: 모델 삭제
샘플 모델 사용을 마치면 영구 삭제할 수 있습니다. 더 이상 예측에 모델을 사용할 수 없습니다.
코드 복사
Python
Java
Node.js
요청
delete_model
작업 유형으로 요청하여 생성한 모델을 삭제합니다. 다음 코드 줄을 수정해야 합니다.
project_id
를 PROJECT_ID로 설정합니다.model_id
를 모델의 ID로 설정합니다.
Python
python delete_model.py
자바
mvn compile exec:java -Dexec.mainClass="com.example.automl.DeleteModel"
Node.js
node delete_model.js
응답
Model deleted.