자연어 처리 모델을 학습하도록 AutoML 설정
적용 대상:Azure CLI ml 확장 v2(현재)Python SDK azure-ai-ml v2(현재)
이 문서에서는 Azure Machine Learning에서 자동화된 ML을 사용하여 NLP(자연어 처리) 모델을 학습시키는 방법을 알아봅니다. Azure Machine Learning Python SDK v2 또는 Azure Machine Learning CLI v2를 통해 자동화된 ML로 NLP 모델을 만들 수 있습니다.
자동화된 ML은 ML 전문가와 데이터 과학자가 자신의 텍스트 데이터를 가져와 NLP 작업을 위한 사용자 지정 모델을 빌드할 수 있도록 NLP를 지원합니다. NLP 작업에는 다중 클래스 텍스트 분류, 다중 레이블 텍스트 분류 및 NER(명명된 엔터티 인식)이 포함됩니다.
Azure Machine Learning 데이터 레이블 지정 기능과 원활하게 통합하여 텍스트 데이터에 레이블을 지정하거나 기존의 레이블이 지정된 데이터를 가져올 수 있습니다. 자동화된 ML은 더 빠른 모델 학습을 위해 다중 GPU 컴퓨팅 클러스터에서 분산 학습을 사용하는 옵션을 제공합니다. 결과 모델은 Azure Machine Learning의 MLOps 기능을 사용하여 대규모로 운영될 수 있습니다.
필수 조건
적용 대상: Azure CLI ml 확장 v2(현재)
Azure 구독. Azure 구독이 없는 경우 지금 바로 Azure Machine Learning의 평가판 또는 유료 버전에 가입하여 사용해 보세요.
GPU 학습 컴퓨팅을 사용하는 Azure Machine Learning 작업 영역. 작업 영역을 만들려면 작업 영역 리소스 만들기를 참조하세요. Azure에서 제공하는 GPU 인스턴스에 대한 자세한 내용은 GPU 최적화 가상 머신 크기를 참조하세요.
Warning
영어가 아닌 데이터 세트 및 더 긴 범위 문서와 같은 여러 NLP 사용 사례에서는 다국어 모델 및 최대 시퀀스 길이가 긴 모델의 사용이 지원되어야 합니다. 따라서 이러한 시나리오에서 모델 학습이 성공하려면 NC_v3 시리즈 또는 ND 시리즈와 같은 더 높은 GPU 메모리가 필요할 수 있습니다.
Azure Machine Learning CLI v2가 설치되었습니다. 최신 버전 업데이트 및 설치에 대한 지침은 CLI(v2) 설치 및 설정을 참조하세요.
이 문서에서는 자동화된 Machine Learning 실험 설정에 어느 정도 익숙한 것으로 가정합니다. 방법에 따라 기본적인 자동화된 Machine Learning 실험 디자인 패턴을 확인합니다.
NLP 작업 선택
수행할 NLP 작업을 결정합니다. 현재 자동화된 ML은 다음과 같은 심층 신경망 NLP 작업을 지원합니다.
작업 | AutoML 작업 구문 | 설명 |
---|---|---|
다중 클래스 텍스트 분류 | CLI v2: text_classification SDK v2: text_classification() |
가능한 클래스가 여러 개 있으며 각 샘플은 정확히 하나의 클래스로 분류할 수 있습니다. 이 작업은 각 샘플에 대해 올바른 클래스를 예측하는 것입니다. 예를 들어 영화 스크립트를 "코미디" 또는 "로맨틱"으로 분류합니다. |
다중 레이블 텍스트 분류 | CLI v2: text_classification_multilabel SDK v2: text_classification_multilabel() |
가능한 클래스가 여러 개 있으며 각 샘플에 여러 클래스를 할당할 수 있습니다. 이 작업은 각 샘플에 대한 모든 클래스를 예측하는 것입니다. 예를 들어 영화 스크립트를 "코미디" 또는 "로맨틱" 또는 "로맨틱 코미디"로 분류합니다. |
NER(명명된 엔터티 인식) | CLI v2:text_ner SDK v2: text_ner() |
시퀀스의 토큰에 대한 여러 가능한 태그가 있습니다. 작업은 각 시퀀스의 모든 토큰에 대한 태그를 예측하는 것입니다. 예를 들어 계약 또는 재무 문서와 같은 비정형 텍스트에서 도메인별 엔터티를 추출합니다. |
임계값 지정
임계값 지정은 사용자가 예측된 확률이 양수 레이블로 이어질 임계값을 선택할 수 있도록 하는 다중 레이블 기능입니다. 값이 낮을수록 더 많은 레이블이 허용되므로 사용자가 회수에 더 신경을 쓸 때 더 좋지만 이 옵션을 사용하면 가양성으로 이어질 수 있습니다. 값이 높을수록 더 적은 레이블이 허용되므로 정밀도에 더 신경을 쓰는 사용자에게 더 좋지만 이 옵션을 사용하면 가양성으로 이어질 수 있습니다.
데이터 준비 중
자동화된 ML의 NLP의 경우 다중 클래스 및 다중 레이블 분류 작업을 위해 데이터를 .csv
형식으로 가져올 수 있습니다. NER 작업의 경우 공백을 구분 기호로 사용하고 CoNLL 형식을 준수하는 2열 .txt
파일이 지원됩니다. 다음 섹션에서는 각 작업에 허용되는 데이터 서식에 대한 세부 정보를 제공합니다.
다중 클래스
다중 클래스 분류의 경우 데이터 세트에 여러 텍스트 열과 정확히 하나의 레이블 열이 포함될 수 있습니다. 다음 예제에는 텍스트 열이 하나만 있습니다.
text,labels
"I love watching Chicago Bulls games.","NBA"
"Tom Brady is a great player.","NFL"
"There is a game between Yankees and Orioles tonight","MLB"
"Stephen Curry made the most number of 3-Pointers","NBA"
다중 레이블
다중 레이블 분류의 경우 데이터 세트 열은 다중 클래스와 동일하나 레이블 열에는 데이터에 대한 특별한 형식 요구 사항이 있습니다. 허용되는 두 가지 형식과 예제는 다음 표에 있습니다.
레이블 열 형식 옵션 | 여러 레이블 | 하나의 레이블 | 레이블 없음 |
---|---|---|---|
일반 텍스트 | "label1, label2, label3" |
"label1" |
"" |
따옴표가 있는 Python 목록 | "['label1','label2','label3']" |
"['label1']" |
"[]" |
Important
이러한 형식에 대한 레이블을 읽을 때는 서로 다른 파서가 사용됩니다. 일반 텍스트 형식을 사용하는 경우 레이블에 알파벳, 숫자 및 '_'
만 사용합니다. 다른 모든 문자는 레이블의 구분 기호로 인식됩니다.
예를 들어 레이블이 "cs.AI"
인 경우 "cs"
및 "AI"
로 읽힙니다. 반면 Python 목록 형식의 레이블이 "['cs.AI']"
이면 "cs.AI"
로 읽힙니다.
일반 텍스트 형식의 다중 레이블에 대한 예제 데이터입니다.
text,labels
"I love watching Chicago Bulls games.","basketball"
"The four most popular leagues are NFL, MLB, NBA and NHL","football,baseball,basketball,hockey"
"I like drinking beer.",""
따옴표 형식이 있는 Python 목록의 다중 레이블에 대한 예제 데이터입니다.
text,labels
"I love watching Chicago Bulls games.","['basketball']"
"The four most popular leagues are NFL, MLB, NBA and NHL","['football','baseball','basketball','hockey']"
"I like drinking beer.","[]"
NER(명명된 엔터티 인식)
.csv
형식 데이터 세트를 사용하는 다중 클래스 또는 다중 레이블과 달리 명명된 엔터티 인식에는 CoNLL 형식이 필요합니다. 파일에는 정확히 두 개의 열이 포함되어야 하며 각 행에서 토큰과 레이블은 단일 공백으로 구분됩니다.
예를 들면 다음과 같습니다.
Hudson B-loc
Square I-loc
is O
a O
famous O
place O
in O
New B-loc
York I-loc
City I-loc
Stephen B-per
Curry I-per
got O
three O
championship O
rings O
데이터 유효성 검사
모델이 학습되기 전에 자동화된 ML은 입력 데이터에 데이터 유효성 검사 검사를 적용하여 데이터가 올바르게 전처리될 수 있는지 유효성을 검사합니다. 이러한 검사가 실패하면 관련 오류 메시지와 함께 실행이 실패합니다. 다음은 각 작업에 대한 데이터 유효성 검사 검사를 통과하기 위한 요구 사항입니다.
참고 항목
일부 데이터 유효성 검사 검사는 학습 및 유효성 검사 집합 모두에 적용할 수 있는 반면 다른 검사는 학습 집합에만 적용할 수 있습니다. 테스트 데이터 세트가 데이터 유효성 검사를 통과하지 못하면 자동화된 ML이 이를 캡처할 수 없으며 모델 유추 실패 또는 모델 성능 저하가 발생할 수 있습니다.
작업 | 데이터 유효성 검사 |
---|---|
모든 작업 | 50개 이상의 학습 샘플이 필요합니다. |
다중 클래스 및 다중 레이블 | 학습 데이터 및 유효성 검사 데이터는 다음을 포함해야 합니다. - 동일한 열 집합 - 동일한 열 순서(왼쪽에서 오른쪽으로) - 이름이 같은 열에 대한 동일한 데이터 형식 - 두 개 이상의 고유한 레이블 - 각 데이터 세트 내의 고유한 열 이름(예: 학습 집합에 Age라는 열이 여러 개 있을 수 없음) |
다중 클래스만 | 없음 |
다중 레이블만 | - 레이블 열 형식은 허용된 형식이어야 합니다. - 하나 이상의 샘플에 0개 또는 2개 이상의 레이블이 있어야 합니다. 그렇지 않으면 multiclass 작업이어야 합니다. - 모든 레이블은 겹치지 않고 str 형식 또는 int 형식이어야 합니다. 1 레이블과 '1' 레이블이 모두 있어서는 안 됩니다. |
NER만 | - 파일은 빈 줄로 시작하면 안 됩니다. - 각 줄은 빈 줄이거나 토큰과 레이블 사이에 정확히 하나의 공백이 있고 레이블 뒤에는 공백이 없는 {token} {label} 형식을 따라야 합니다. - 모든 레이블은 I- , B- 로 시작하거나 정확히 O 이어야 합니다. 대/소문자 구분 - 두 샘플 사이에 정확히 하나의 빈 줄 - 파일 끝에 정확히 하나의 빈 줄 |
실험 구성
자동화된 ML의 NLP 기능은 분류, 회귀 및 예측 작업을 위해 자동화된 ML 실험을 제출하는 데 사용되는 것과 동일한 워크플로인 작업별 automl
유형 작업을 통해 트리거됩니다. experiment_name
, compute_name
및 데이터 입력과 같이 이러한 실험에 사용되는 대로 매개 변수를 설정합니다.
하지만 다음과 같은 중요한 차이점이 있습니다.
- 보고 목적으로만 사용되므로
primary_metric
를 무시할 수 있습니다. 현재 자동화된 ML은 NLP에 대해 실행당 하나의 모델만 학습시키며 모델 선택은 없습니다. label_column_name
매개 변수는 다중 클래스 및 다중 레이블 텍스트 분류 작업에만 필요합니다.- 데이터 세트의 샘플 중 10% 초과가 128개 이상의 토큰을 포함하는 경우 장거리로 간주됩니다.
적용 대상: Azure CLI ml 확장 v2(현재)
CLI v2 자동화된 ML 작업의 경우 다음과 같이 YAML 파일에서 실험을 구성합니다.
언어 설정
자동화된 ML은 NLP 기능의 일부로 BERT 모델 제품군과 같이 언어별 및 다국어 사전 학습 텍스트 DNN 모델을 활용하는 104개 언어를 지원합니다. 현재 언어 선택은 기본적으로 영어로 설정됩니다.
다음 표에는 작업 유형 및 언어에 따라 적용되는 모델이 요약되어 있습니다. 지원되는 언어 및 해당 코드의 전체 목록을 참조하세요.
작업 유형 | dataset_language 구문 |
텍스트 모델 알고리즘 |
---|---|---|
다중 레이블 텍스트 분류 | "eng" "deu" "mul" |
영어 BERT uncased 독일어 BERT 다국어 BERT 다른 모든 언어의 경우 자동화된 ML이 다국어 BERT를 적용합니다. |
다중 클래스 텍스트 분류 | "eng" "deu" "mul" |
영어 BERT cased 다국어 BERT 다른 모든 언어의 경우 자동화된 ML이 다국어 BERT를 적용합니다. |
NER(명명된 엔터티 인식) | "eng" "deu" "mul" |
영어 BERT cased 독일어 BERT 다국어 BERT 다른 모든 언어의 경우 자동화된 ML이 다국어 BERT를 적용합니다. |
적용 대상: Azure CLI ml 확장 v2(현재)
구성 YAML 파일의 기능화 섹션에서 데이터 세트 언어를 지정할 수 있습니다. BERT는 자동화된 ML 실험 학습의 기능화 프로세스에도 사용됩니다. 자동화된 ML의 BERT 통합 및 기능화(SDK v1)에 대해 자세히 알아보세요.
featurization:
dataset_language: "eng"
분산 학습
Azure Machine Learning 컴퓨팅 클러스터에서 분산 학습을 사용하여 NLP 실험을 실행할 수도 있습니다.
AutoML 작업 제출
적용 대상: Azure CLI ml 확장 v2(현재)
AutoML 작업을 제출하려면 .yml 파일 경로, 작업 영역 이름, 리소스 그룹 및 구독 ID와 함께 다음 CLI v2 명령을 실행할 수 있습니다.
az ml job create --file ./hello-automl-job-basic.yml --workspace-name [YOUR_AZURE_WORKSPACE] --resource-group [YOUR_AZURE_RESOURCE_GROUP] --subscription [YOUR_AZURE_SUBSCRIPTION]
코드 예제
적용 대상: Azure CLI ml 확장 v2(현재)
각 NLP 작업은 다음 샘플 YAML 파일을 참조하세요.
모델 스위핑 및 하이퍼 매개 변수 튜닝(미리 보기)
Important
이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다.
자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
AutoML NLP를 사용하면 구성의 하이퍼 매개 변수 검색 공간을 통해 하이퍼 매개 변수의 모델 및 조합 목록을 제공할 수 있습니다. Hyperdrive는 여러 자식 실행을 생성하며, 각 실행은 지정된 NLP 모델에 대한 미세 조정 실행이며 제공된 검색 공간에 따라 선택되고 스윕된 하이퍼 매개 변수 값의 집합입니다.
지원되는 모델 알고리즘
미세 조정을 위해 현재 AutoML NLP에서 사용할 수 있는 미리 학습된 모든 텍스트 DNN 모델은 다음과 같습니다.
- bert-base-cased
- bert-large-uncased
- bert-base-multilingual-cased
- bert-base-german-cased
- bert-large-cased
- distilbert-base-cased
- distilbert-base-uncased
- roberta-base
- roberta-large
- distilroberta-base
- xlm-roberta-base
- xlm-roberta-large
- xlnet-base-cased
- xlnet-large-cased
대형 모델은 기본 모델보다 크기가 더 큽니다. 일반적으로 더 성능이 좋지만, 학습을 위해 더 많은 GPU 메모리와 시간을 사용합니다. 따라서 SKU 요구 사항은 더 엄격합니다. 최상의 결과를 위해 ND 시리즈 VM에서 실행하는 것이 좋습니다.
지원되는 모델 알고리즘 - HuggingFace(미리 보기)
Azure Machine Learning 파이프라인에서 실행되는 새로운 백 엔드를 사용하면 HuggingFace Hub의 모든 텍스트/토큰 분류 모델을 추가로 사용하여 텍스트 분류, 토큰 분류를 수행할 수 있습니다. 이는 변환기 라이브러리(예: microsoft/deberta-large-mnli)의 일부입니다. 파이프라인 구성 요소로 유효성 검사된 Azure Machine Learning 모델 레지스트리에서 큐레이팅된 모델 목록을 찾을 수도 있습니다.
HuggingFace 모델을 사용하면 파이프라인 구성 요소를 사용하여 실행이 트리거됩니다. 레거시 모델과 HuggingFace 모델을 모두 사용하는 경우 모든 실행/시도는 구성 요소를 사용하여 트리거됩니다.
지원되는 하이퍼 매개 변수
다음 표에서는 AutoML NLP가 지원하는 하이퍼 매개 변수에 대해 설명합니다.
매개 변수 이름 | 설명 | 구문 |
---|---|---|
gradient_accumulation_steps | 최적화 프로그램의 단계 함수를 호출하여 그라데이션 하강의 한 단계를 수행하기 전에 그라데이션을 합산해야 하는 역방향 작업 수입니다. 이는 GPU에 맞는 최대 크기보다 gradient_accumulation_steps배 더 큰 유효 일괄 처리 크기를 사용하기 위한 것입니다. |
양의 정수여야 합니다. |
learning_rate | 초기 학습률입니다. | (0, 1) 범위의 부동 소수점이어야 합니다. |
learning_rate_scheduler | 학습률 스케줄러의 유형입니다. | linear, cosine, cosine_with_restarts, polynomial, constant, constant_with_warmup 중에서 선택해야 합니다. |
model_name | 지원되는 모델 중 하나의 이름입니다. | bert_base_cased, bert_base_uncased, bert_base_multilingual_cased, bert_base_german_cased, bert_large_cased, bert_large_uncased, distilbert_base_cased, distilbert_base_uncased, roberta_base, roberta_large, distilroberta_base, xlm_roberta_base, xlm_roberta_large, xlnet_base_cased, xlnet_large_cased 중에서 선택해야 합니다. |
number_of_epochs | 학습 Epoch의 수입니다. | 양의 정수여야 합니다. |
training_batch_size | 학습 일괄 처리 크기입니다. | 양의 정수여야 합니다. |
validation_batch_size | 유효성 검사 일괄 처리 크기입니다. | 양의 정수여야 합니다. |
warmup_ratio | 선형 준비에 사용되는 총 학습 단계의 비율은 0에서 learning_rate까지입니다. | [0, 1] 범위의 부동 소수점이어야 합니다. |
weight_decay | 최적화 프로그램이 sgd, adam 또는 adamw일 때 가중치 감소 값입니다. | [0, 1] 범위의 부동 소수점이어야 합니다. |
모든 불연속 하이퍼 매개 변수는 정수 형식 training_batch_size
및 문자열 형식 model_name
하이퍼 매개 변수와 같은 선택 분포만 허용합니다. learning_rate
와 같은 모든 연속 하이퍼 매개 변수는 모든 배포를 지원합니다.
스윕 설정 구성
모든 스윕 관련 매개 변수를 구성할 수 있습니다. 각 하이퍼 매개 변수 튜닝 예에서 볼 수 있듯이, 각 모델에 대한 조건부 하이퍼 매개 변수를 사용하여 여러 모델 하위 공간을 구성할 수 있습니다.
일반 HyperDrive 작업에 사용할 수 있는 동일한 불연속 및 연속 배포 옵션은 여기에서 지원됩니다. 모델 하이퍼 매개 변수 튜닝에서 전체 9가지 옵션을 참조하세요.
적용 대상: Azure CLI ml 확장 v2(현재)
limits:
timeout_minutes: 120
max_trials: 4
max_concurrent_trials: 2
sweep:
sampling_algorithm: grid
early_termination:
type: bandit
evaluation_interval: 10
slack_factor: 0.2
search_space:
- model_name:
type: choice
values: [bert_base_cased, roberta_base]
number_of_epochs:
type: choice
values: [3, 4]
- model_name:
type: choice
values: [distilbert_base_cased]
learning_rate:
type: uniform
min_value: 0.000005
max_value: 0.00005
스윕을 위한 샘플링 방법
하이퍼 매개 변수를 스윕할 때 정의된 매개 변수 공간을 비우는 데 사용할 샘플링 방법을 지정해야 합니다. 현재 다음 샘플링 방법이 sampling_algorithm
매개 변수와 함께 지원됩니다.
샘플링 유형 | AutoML 작업 구문 |
---|---|
무작위 샘플링 | random |
그리드 샘플링 | grid |
Bayesian 샘플링 | bayesian |
실험 예산
limits
에서 timeout_minutes
매개 변수를 사용하여 AutoML NLP 학습 작업의 실험 예산을 선택적으로 지정할 수 있습니다. 이는 실험이 종료되기까지의 시간(분)입니다. 지정되지 않은 경우 기본 실험 시간 제한은 7일(최대 60일)입니다.
또한 AutoML NLP는 개별 평가판이 종료되기 전에 실행할 수 있는 최대 시간(분)인 trial_timeout_minutes
및 작업에 사용할 백업 컴퓨팅 클러스터의 최대 노드 수인 max_nodes
를 지원합니다. 이러한 매개 변수도 limits
섹션에 속합니다.
적용 대상: Azure CLI ml 확장 v2(현재)
limits:
timeout_minutes: 60
trial_timeout_minutes: 20
max_nodes: 2
조기 종료 정책
조기 종료 정책을 사용하여 성능이 좋지 않은 실행을 자동으로 종료할 수 있습니다. 조기 종료는 컴퓨팅 효율성을 개선시켜 덜 유망한 구성에 소비되었을 컴퓨팅 리소스를 절약합니다. AutoML NLP는 early_termination
매개 변수를 사용하여 조기 종료 정책을 지원합니다. 종료 정책을 지정하지 않으면 모든 구성이 완료될 때까지 실행됩니다.
하이퍼 매개 변수 스윕에 대한 조기 종료 정책을 구성하는 방법에 대해 자세히 알아봅니다.
스윕을 위한 리소스
스윕에 대해 max_trials
및 max_concurrent_trials
를 지정하여 하이퍼 매개 변수 스윕에 사용된 리소스를 제어할 수 있습니다.
매개 변수 | 세부 정보 |
---|---|
max_trials |
스윕할 최대 구성 수에 대한 매개 변수입니다. 1~1000 사이의 정수여야 합니다. 주어진 모델 알고리즘에 대한 기본 하이퍼 매개 변수만 탐색할 때 이 매개 변수를 1로 설정합니다. 기본값은 1입니다. |
max_concurrent_trials |
동시에 실행할 수 있는 최대 실행 수입니다. 지정한 경우 1~100 사이의 정수여야 합니다. 기본값은 1입니다. 참고: max_concurrent_trials 는 max_trials 에서 내부적으로 제한됩니다. 예를 들어 사용자가 max_concurrent_trials=4 , max_trials=2 를 설정하는 경우 값은 내부적으로 max_concurrent_trials=2 , max_trials=2 로 업데이트됩니다. |
이 예에 표시된 대로 모든 스윕 관련 매개 변수를 구성할 수 있습니다.
적용 대상: Azure CLI ml 확장 v2(현재)
sweep:
limits:
max_trials: 10
max_concurrent_trials: 2
sampling_algorithm: random
early_termination:
type: bandit
evaluation_interval: 2
slack_factor: 0.2
delay_evaluation: 6
알려진 문제
낮은 점수 또는 높은 손실 값 처리:
특정 데이터 세트의 경우 NLP 작업에 관계없이 생성된 점수가 매우 낮고 때로는 0일 수도 있습니다. 이 점수에는 신경망이 수렴하지 못했음을 의미하는 더 높은 손실 값이 수반됩니다. 이러한 점수는 특정 GPU SKU에서 더 자주 발생할 수 있습니다.
이러한 경우는 드물지만 가능하며 이를 처리하는 가장 좋은 방법은 하이퍼 매개 변수 튜닝을 활용하고 특히 학습 속도와 같은 하이퍼 매개 변수의 경우 더 넓은 범위의 값을 제공하는 것입니다. 프로덕션 환경에서 하이퍼 매개 변수 튜닝 기능을 사용할 수 있을 때까지 이러한 문제가 발생하는 사용자에게는 NC6 또는 ND6 컴퓨팅 클러스터를 사용하는 것이 좋습니다. 이러한 클러스터는 일반적으로 상당히 안정적인 학습 결과를 갖습니다.