분류 프로젝트의 유형 이해
사용자 지정 텍스트 분류는 Azure AI 언어 서비스에서 개발자가 정의하는 클래스인 레이블을 텍스트 파일에 할당합니다. 예를 들어 비디오 게임 요약은 “어드벤처”, “전략”, “액션” 또는 “스포츠”로 분류될 수 있습니다.
사용자 지정 텍스트 분류는 두 가지 유형의 프로젝트를 지원합니다.
- 단일 레이블 분류 - 각 파일에 하나의 클래스만 할당할 수 있습니다. 위의 예제에 따라 비디오 게임 요약은 “어드벤처” 또는 “전략” 중 하나로만 분류할 수 있습니다.
- 다중 레이블 분류 - 각 파일에 대해 여러 클래스를 할당할 수 있습니다. 이 유형의 프로젝트를 사용하면 비디오 게임 요약을 “어드벤처” 또는 “어드벤처 및 전략”으로 분류할 수 있습니다.
사용자 지정 텍스트 분류 프로젝트를 만들 때 빌드할 프로젝트를 지정할 수 있습니다.
단일 vs. 다중 레이블 프로젝트
여러 분류에 파일을 배치하는 기능 외에도 다중 레이블 분류 프로젝트의 주요 차이점은 레이블 지정, 모델 개선을 위한 고려 사항 및 분류 작업에 대한 API 페이로드입니다.
데이터 레이블 지정
단일 레이블 프로젝트에서는 레이블을 지정하는 동안 각 파일에 하나의 클래스가 할당됩니다. Azure AI 언어의 클래스 할당을 사용하면 하나의 클래스만 선택할 수 있습니다.
다중 레이블 프로젝트에서는 레이블을 지정할 때 파일당 원하는 만큼 클래스를 할당할 수 있습니다. 복잡성이 더해지는 효과는 데이터가 명확성을 유지하고 모델에서 학습할 수 있는 입력의 적절한 분포를 제공하게 된다는 것입니다.
특히 다중 레이블 프로젝트의 경우 데이터에 올바르게 레이블을 지정하는 것은 모델의 성능과 직접적으로 관련이 있습니다. 데이터 세트의 품질, 명확성 및 편차가 높을수록 모델이 더 정확해집니다.
모델 평가 및 개선
모델의 예측 성능의 측정은 올바른 예측의 개수를 세는 것을 넘어서는 일입니다. 올바른 분류는 실제 레이블이 x이고 모델이 레이블 x를 예측하는 경우입니다. 실제 환경에서 분류가 올바르지 않을 때 문서에는 다양한 종류의 오류가 발생합니다.
- 가양성 - 모델은 x을(를) 예측하지만 파일에 x 레이블이 지정되지 않은 경우입니다.
- 가음성 - 모델은 레이블 x을(를) 예측하지 않지만 실제로는 파일에 x 레이블이 지정된 경우입니다.
이러한 메트릭은 Azure AI 언어에서 제공하는 세 가지 측정값으로 변환됩니다.
- 재현율 - 모든 실제 레이블 중에서 식별된 레벨 수입니다. 레이블이 지정된 모든 항목에 대한 진양성의 비율입니다.
- 정밀도 - 정확하게 예측된 레이블의 개수입니다. 모든 식별된 긍정에 대한 진양성의 비율입니다.
- F1 점수 - 각 구성 요소의 균형을 최대화하기 위해 단일 점수를 제공하는 재현율 및 정밀도 함수입니다.
팁
메트릭이 계산되는 정확한 방법을 비롯하여 Azure AI 언어 평가 메트릭에 대해 자세히 알아보기
단일 레이블 프로젝트를 사용하면 분류되지 않은 클래스와 기타 클래스를 식별하고 모델 학습에 사용할 고품질의 데이터를 더 많이 찾을 수 있습니다. 다중 레이블 프로젝트의 경우 결합된 레이블의 가능한 순열 행렬로 인해 고품질 데이터를 알아내는 것이 더 복잡해집니다.
예를 들어 모델이 “액션” 게임과 일부 “액션 및 전략” 게임을 올바르게 분류하지만 “전략” 게임에서 실패하도록 합시다. 모델을 개선하기 위해 “액션 및 전략” 게임뿐만 아니라 “전략” 게임에 대해 더 많은 고품질의 다양한 요약을 찾아 모델에 두 가지 차별화 방법을 가르치려고 합니다. 이 어려움은 모델이 분류할 수 있는 클래스가 많을수록 기하급수적으로 증가합니다.
API 페이로드
Azure AI 언어는 JSON 본문을 사용해 요청을 지정하여 모델을 빌드하고 상호 작용할 수 있는 REST API를 제공합니다. 이 API는 여러 언어별 SDK로 추상화되지만 이 모듈의 경우 기본 REST API에 대한 예제에 집중하겠습니다.
분류 작업을 제출하려면 API에서 실행할 작업을 지정하기 위해 JSON 본문이 필요합니다. 다음 단원에서 REST API에 대해 자세히 알아보겠지만 필요한 본문의 일부를 숙지해 놓으면 좋습니다.
단일 레이블 분류 모델은 customSingleLabelClassification
프로젝트 형식 지정:
{
"projectFileVersion": "<API-VERSION>",
"stringIndexType": "Utf16CodeUnit",
"metadata": {
"projectName": "<PROJECT-NAME>",
"storageInputContainerName": "<CONTAINER-NAME>",
"projectKind": "customSingleLabelClassification",
"description": "Trying out custom multi label text classification",
"language": "<LANGUAGE-CODE>",
"multilingual": true,
"settings": {}
},
"assets": {
"projectKind": "customSingleLabelClassification",
"classes": [
{
"category": "Class1"
},
{
"category": "Class2"
}
],
"documents": [
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"class": {
"category": "Class2"
}
},
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"class": {
"category": "Class1"
}
}
]
}
}
다중 레이블 분류 모델은 CustomMultiLabelClassification
프로젝트 형식 지정
{
"projectFileVersion": "<API-VERSION>",
"stringIndexType": "Utf16CodeUnit",
"metadata": {
"projectName": "<PROJECT-NAME>",
"storageInputContainerName": "<CONTAINER-NAME>",
"projectKind": "customMultiLabelClassification",
"description": "Trying out custom multi label text classification",
"language": "<LANGUAGE-CODE>",
"multilingual": true,
"settings": {}
},
"assets": {
"projectKind": "customMultiLabelClassification",
"classes": [
{
"category": "Class1"
},
{
"category": "Class2"
}
],
"documents": [
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"classes": [
{
"category": "Class1"
},
{
"category": "Class2"
}
]
},
{
"location": "<DOCUMENT-NAME>",
"language": "<LANGUAGE-CODE>",
"dataset": "<DATASET>",
"classes": [
{
"category": "Class2"
}
]
}
]
}
}