다음을 통해 공유


Python을 사용하여 자연어 처리 모델을 학습하도록 AutoML 설정(미리 보기)

적용 대상: Python SDK azureml v1

Important

이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다.

자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

이 문서에서는 Azure Machine Learning Python SDK에서 자동화된 ML을 사용하여 NLP(자연어 처리) 모델을 학습시키는 방법을 알아봅니다.

자동화된 ML은 ML 전문가 및 데이터 과학자가 자체 텍스트 데이터를 가져와서 다중 클래스 텍스트 분류, 다중 레이블 텍스트 분류 및 NER(명명된 엔터티 인식)과 같은 작업을 위한 사용자 지정 모델을 빌드할 수 있도록 하는 NLP를 지원합니다.

Azure Machine Learning 데이터 레이블 지정 기능과 원활하게 통합하여 텍스트 데이터에 레이블을 지정하거나 기존의 레이블이 지정된 데이터를 가져올 수 있습니다. 자동화된 ML은 더 빠른 모델 학습을 위해 다중 GPU 컴퓨팅 클러스터에서 분산 학습을 사용하는 옵션을 제공합니다. 결과 모델은 Azure Machine Learning의 MLOps 기능을 활용하여 대규모로 운영할 수 있습니다.

필수 조건

  • Azure 구독. Azure 구독이 없는 경우 지금 바로 Azure Machine Learning의 평가판 또는 유료 버전에 가입하여 사용해 보세요.

  • GPU 학습 컴퓨팅을 사용하는 Azure Machine Learning 작업 영역. 작업 영역을 만들려면 작업 영역 리소스 만들기를 참조하세요. Azure에서 제공하는 GPU 인스턴스에 대한 자세한 내용은 GPU 최적화 가상 머신 크기를 참조하세요.

    Warning

    영어가 아닌 데이터 세트 및 더 긴 범위 문서와 같은 여러 NLP 사용 사례에서는 다국어 모델 및 최대 시퀀스 길이가 긴 모델의 사용이 지원되어야 합니다. 따라서 이러한 시나리오에서 모델 학습이 성공하려면 NC_v3 시리즈 또는 ND 시리즈와 같은 더 높은 GPU 메모리가 필요할 수 있습니다.

  • 설치된 Azure Machine Learning Python SDK.

    SDK를 설치하려면 다음 중 하나를 수행할 수 있습니다.

    Important

    이 문서의 Python 명령을 실행하려면 최신 azureml-train-automl 패키지 버전이 필요합니다.

  • 이 문서에서는 자동화된 Machine Learning 실험 설정에 어느 정도 익숙한 것으로 가정합니다. 자습서 또는 방법에 따라 기본적인 자동화된 Machine Learning 실험 디자인 패턴을 확인합니다.

NLP 작업 선택

수행할 NLP 작업을 결정합니다. 현재 자동화된 ML은 다음과 같은 심층 신경망 NLP 작업을 지원합니다.

작업 AutoMLConfig 구문 설명
다중 클래스 텍스트 분류 task = 'text-classification' 가능한 클래스가 여러 개 있으며 각 샘플은 정확히 하나의 클래스로 분류할 수 있습니다. 이 작업은 각 샘플에 대해 올바른 클래스를 예측하는 것입니다.

예를 들어 영화 스크립트를 "코미디" 또는 "로맨틱"으로 분류합니다.
다중 레이블 텍스트 분류 task = 'text-classification-multilabel' 가능한 클래스가 여러 개 있으며 각 샘플에 여러 클래스를 할당할 수 있습니다. 이 작업은 각 샘플에 대한 모든 클래스를 예측하는 것입니다.

예를 들어 영화 스크립트를 "코미디" 또는 "로맨틱" 또는 "로맨틱 코미디"로 분류합니다.
NER(명명된 엔터티 인식) task = 'text-ner' 시퀀스의 토큰에 대한 여러 가능한 태그가 있습니다. 작업은 각 시퀀스의 모든 토큰에 대한 태그를 예측하는 것입니다.

예를 들어 계약 또는 재무 문서와 같은 비정형 텍스트에서 도메인별 엔터티를 추출합니다.

데이터 준비 중

자동화된 ML의 NLP 실험의 경우 다중 클래스 및 다중 레이블 분류 작업을 위해 .csv 형식의 Azure Machine Learning 데이터 세트를 가져올 수 있습니다. 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 실험을 제출하는 데 사용되는 것과 동일한 워크플로인 AutoMLConfig를 통해 트리거됩니다. 이러한 실험에 사용되는 대부분의 매개 변수(예: taskcompute_target) 및 데이터 입력 매개 변수를 설정합니다.

하지만 다음과 같은 중요한 차이점이 있습니다.

  • primary_metric은 보고 목적으로만 사용되므로 무시할 수 있습니다. 현재 자동화된 ML은 NLP에 대해 실행당 하나의 모델만 학습시키며 모델 선택은 없습니다.
  • label_column_name 매개 변수는 다중 클래스 및 다중 레이블 텍스트 분류 작업에만 필요합니다.
  • 데이터 세트에 있는 대부분의 샘플에 128개가 넘는 단어가 포함된 경우 긴 범위로 간주됩니다. 이 시나리오에서는 AutoMLConfigenable_long_range_text=True 매개 변수를 사용하여 긴 범위 텍스트 옵션을 사용하도록 설정할 수 있습니다. 이렇게 하면 모델 성능을 개선하는 데 도움이 되지만 학습 시간이 더 길어질 수 있습니다.
    • 긴 범위 텍스트를 사용하도록 설정하면 NCv3 시리즈 또는 ND 시리즈와 같이 상위 메모리를 가진 GPU가 필요합니다.
    • enable_long_range_text 매개 변수는 다중 클래스 분류 작업에만 사용할 수 있습니다.
automl_settings = {
    "verbosity": logging.INFO,
    "enable_long_range_text": True, # # You only need to set this parameter if you want to enable the long-range text setting
}

automl_config = AutoMLConfig(
    task="text-classification",
    debug_log="automl_errors.log",
    compute_target=compute_target,
    training_data=train_dataset,
    validation_data=val_dataset,
    label_column_name=target_column_name,
    **automl_settings
)

언어 설정

자동화된 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를 적용합니다.

FeaturizationConfig에서 데이터 세트 언어를 지정할 수 있습니다. BERT는 자동화된 ML 실험 학습의 기능화 프로세스에도 사용됩니다. 자동화된 ML의 BERT 통합 및 기능화에 대해 자세히 알아보세요.

from azureml.automl.core.featurization import FeaturizationConfig

featurization_config = FeaturizationConfig(dataset_language='{your language code}')
automl_config = AutomlConfig("featurization": featurization_config)

분산 학습

Azure Machine Learning 컴퓨팅 클러스터에서 분산 학습을 사용하여 NLP 실험을 실행할 수도 있습니다. 이 작업은 실험 설정 중에 AutoMLConfig에서 max_concurrent_iterations = number_of_vmsenable_distributed_dnn_training = True 매개 변수를 제공하면 자동화된 ML에 의해 자동으로 처리됩니다.

max_concurrent_iterations = number_of_vms
enable_distributed_dnn_training = True

이렇게 하면 NLP 모델의 분산 학습이 예약되고 가상 머신 또는 가상 머신 클러스터의 모든 GPU로 자동으로 스케일링됩니다. 허용되는 가상 머신의 최대 수는 32개입니다. 학습은 2의 거듭제곱 단위인 가상 머신 수로 예약됩니다.

예제 Notebook

각 NLP 작업에 대한 자세한 코드 예제는 샘플 Notebook을 참조하세요.

다음 단계