0 / 0
영어 버전 문서로 돌아가기
사용자 정의 분류 모델을 사용하여 텍스트 분류
마지막 업데이트 날짜: 2024년 11월 28일
사용자 정의 분류 모델을 사용하여 텍스트 분류

세 개의 다른 제품군에서 강력한 분류 알고리즘을 사용하여 텍스트 분류에 대한 고유 모델을 훈련할 수 있습니다.

  • SVM을 사용한 고전적인 기계 학습(지원 벡터 머신)
  • CNN(Convolutional Neural Networks)을 사용한 심층 학습
  • 사전 훈련된 변환기 모델을 사용하는 변환기 기반 알고리즘: Slate IBM Foundation 모델

Watson 자연어 처리 라이브러리는 또한 다른 분류 알고리즘과 다수의 투표를 결합하는 사용하기 쉬운 앙상블 분류기를 제공합니다.

알고리즘은 문서가 하나의 클래스 전용(단일 레이블 태스크) 또는 2진 분류 태스크에 속하는 경우와 같이 다중 레이블 및 다중 클래스 태스크 및 특수 케이스를 지원합니다.

참고:

훈련 분류 모델은 CPU및 메모리 집약적입니다. 훈련 데이터의 크기에 따라 환경이 훈련을 완료하기에 충분히 크지 않을 수 있습니다. 훈련 중에 노트북 커널과 관련된 문제를 실행하는 경우, 더 많은 양의 CPU와 메모리를 사용하여 사용자 정의 노트북 환경을 작성하고 이를 사용하여 노트북을 실행합니다. 특히 변환기 기반 알고리즘의 경우 GPU 기반 환경을 사용해야 합니다 (사용 가능한 경우). 사용자 고유의 환경 템플리트 작성을 참조하십시오.

주제 섹션:

훈련을 위한 입력 데이터 형식

분류 블록은 CSV 및 JSON 형식의 훈련 데이터를 허용합니다.

  • CSV 형식

    CSV 파일에 헤더가 없어야 합니다. CSV 파일의 각 행은 예제 레코드를 나타냅니다. 각 레코드에는 하나 이상의 열이 있으며, 여기서 첫 번째 열은 텍스트를 나타내고 후속 열은 해당 텍스트와 연관된 레이블을 나타냅니다.

    참고:

    • SVM 및 CNN 알고리즘은 인스턴스에 레이블이 없는 훈련 데이터를 지원하지 않습니다. 따라서, SVM 알고리즘 또는 CNN 알고리즘을 사용하거나 이러한 알고리즘 중 하나를 포함하는 앙상블을 사용하는 경우, 각 CSV행에는 하나 이상의 레이블, 즉 2개의 열이 있어야 합니다.
    • BERT 기반 및 Slate 기반 Transformer 알고리즘은 각 인스턴스에 0, 1또는 둘 이상의 레이블이 있는 훈련 데이터를 지원합니다.
    Example 1,label 1
    Example 2,label 1,label 2
    
  • JSON 형식

    훈련 데이터는 여러 JSON 오브젝트가 있는 배열로 표시됩니다. 각 JSON 오브젝트는 하나의 훈련 인스턴스를 나타내며 텍스트 및 레이블 필드가 있어야 합니다. 텍스트는 훈련 예제를 나타내며 레이블은 예(0, 1 또는 둘 이상의 레이블)와 연관된 레이블을 저장합니다.

    [
        {
        "text": "Example 1",
        "labels": ["label 1"]
        },
        {
        "text": "Example 2",
        "labels": ["label 1", "label 2"]
        },
        {
        "text": "Example 3",
        "labels": []
        }
    ]
    

    참고:

    • "labels": []은(는) 레이블이 없는 예를 나타냅니다. SVM 및 CNN 알고리즘은 인스턴스에 레이블이 없는 훈련 데이터를 지원하지 않습니다. 따라서, SVM 알고리즘 또는 CNN 알고리즘을 사용하거나 이러한 알고리즘 중 하나를 포함하는 앙상블을 사용하는 경우, 각 JSON 오브젝트에는 하나 이상의 레이블이 있어야 합니다.
    • BERT 기반 및 Slate 기반 Transformer 알고리즘은 각 인스턴스에 0, 1또는 둘 이상의 레이블이 있는 훈련 데이터를 지원합니다.

입력 데이터 요구사항

SVM 및 CNN 알고리즘의 경우:

  • 필요한 최소 고유 레이블 수: 2
  • 레이블에 필요한 최소 텍스트 예 수: 5

BERT 기반 및 Slate 기반 Transformer 알고리즘의 경우:

  • 필요한 최소 고유 레이블 수: 1
  • 레이블에 필요한 최소 텍스트 예 수: 5

CSV 또는 JSON 형식의 트레이닝 데이터는 트레이닝 전에 DataStream 변환됩니다. 데이터 파일을 훈련하는 대신 데이터 스트림을 분류 블록의 훈련 함수로 직접 전달할 수도 있습니다.

정지 단어

사전 처리 중에 제거되는 자체 정지 단어를 제공할 수 있습니다. 정지 단어 파일 입력은 표준 형식(행당 하나의 문구가 있는 단일 텍스트 파일)으로 예상됩니다. 정지 단어는 표준 형식의 파일로 또는 목록으로 제공될 수 있습니다.

정지 단어는 앙상블 분류기에서만 사용할 수 있습니다.

훈련 SVM 알고리즘

SVM은 예를 들어, USE(Universal Sentence Encoder) 임베드 및 TF-IDFvectorizers에 의해 임베드 또는 vectorization 블록에서 제공하는 모든 종류의 입력에 대한 예측을 사용하여 훈련할 수 있는 지원 벡터 시스템 분류기입니다. 다중 클래스 및 다중 레이블 텍스트 분류를 지원하고 Platt Scaling을 사용하여 신뢰도 점수를 생성합니다.

SVM 훈련을 구성하는 데 사용할 수 있는 모든 옵션에 대해 다음을 입력하십시오.

help(watson_nlp.blocks.classification.svm.SVM.train)

SVM 알고리즘을 훈련시키려면:

  1. 다음과 같은 사전 처리 단계부터 시작하십시오.

    import watson_nlp
    from watson_nlp.toolkit.classification_utils.train_util import prepare_data_from_json
    from watson_nlp.blocks.classification.svm import SVM
    
    training_data_file = "train_data.json"
    
    # Load a Syntax model
    syntax_model = watson_nlp.load('syntax_izumo_en_stock')
    
    # Create datastream from training data
    train_stream = prepare_data_from_json(training_data_file, syntax_model)
    syntax_stream, labels_stream = train_stream[0], train_stream[1]
    
  2. USE 임베드를 사용하여 분류 모델을 훈련하십시오. 사용 가능한 사전 학습된 블록 목록은 포함된 사전 학습된 사용 임베딩을 참조하세요.

    # download embedding
    use_embedding_model = watson_nlp.load('embedding_use_en_stock')
    
    use_train_stream = use_embedding_model.stream(syntax_stream, doc_embed_style='raw_text')
    # NOTE: doc_embed_style can be changed to `avg_sent` as well. For more information check the documentation for Embeddings
    # Or the USE run function API docs
    use_svm_train_stream = watson_nlp.data_model.DataStream.zip(use_train_stream, labels_stream)
    
    # Train SVM using Universal Sentence Encoder (USE) training stream
    classification_model = SVM.train(use_svm_train_stream)
    

CNN 알고리즘 훈련

CNN은 간단한 컨볼루션 네트워크 아키텍처로, 짧은 텍스트에서 다중 클래스 및 다중 레이블 텍스트 분류를 위해 빌드됩니다. 이는 GloVe 임베딩을 이용합니다. GloVe 임베딩은 단어-레벨 시멘틱을 벡터 공간에 인코드합니다. 각 언어에 대한 GloVe 임베딩은 Wikipedia 코퍼스에서 해당 언어로 교육됩니다. 이용에 관한 정보는 GloVe 임베딩, 참조 GloVe 임베딩.

CNN 훈련을 구성하는 데 사용할 수 있는 모든 옵션에 대해 다음을 입력하십시오.

help(watson_nlp.blocks.classification.cnn.CNN.train)

CNN 알고리즘을 훈련시키려면 다음을 수행하십시오

import watson_nlp
from watson_nlp.toolkit.classification_utils.train_util import prepare_data_from_json
from watson_nlp.blocks.classification.cnn import CNN

training_data_file = "train_data.json"

# Load a Syntax model
syntax_model = watson_nlp.load('syntax_izumo_en_stock')

# Create datastream from training data
train_stream = prepare_data_from_json(training_data_file, syntax_model)
syntax_stream, labels_stream = train_stream[0], train_stream[1]

# Download GloVe embeddings
glove_embedding_model = watson_nlp.load('embedding_glove_en_stock')

# Train CNN
classification_model = CNN.train(watson_nlp.data_model.DataStream.zip(syntax_stream, labels_stream), embedding=glove_embedding_model.embedding)

IBM Slate 모델을 사용하여 변환기 알고리즘 훈련

사전 훈련된 슬레이트를 사용하는 변환기 알고리즘 IBM 짧은 텍스트에 대한 다중 클래스 및 다중 레이블 텍스트 분류에 기초 모델을 사용할 수 있습니다.

Transformer 훈련을 구성하는 데 사용할 수 있는 모든 옵션에 대해 다음을 입력하십시오.

help(watson_nlp.blocks.classification.transformer.Transformer.train)

사용 가능한 Slate 모델 목록은 다음 표를 참조하세요.

사용 가능한 Slate 모델 목록 및 설명
모델 설명
pretrained-model_slate.153m.distilled_many_transformer_multilingual_uncased 일반, 다목적 모델
pretrained-model_slate.125m.finance_many_transformer_en_cased 금융 콘텐츠에 대해 사전 학습된 모델
pretrained-model_slate.110m.cybersecurity_many_transformer_en_uncased 사이버 보안 콘텐츠에 대해 사전 훈련된 모델
pretrained-model_slate.125m.biomedical_many_transformer_en_cased 생물 의학 콘텐츠에 대해 사전 훈련된 모델

Transformer 알고리즘을 훈련하려면 다음을 수행하십시오

import watson_nlp
from watson_nlp.blocks.classification.transformer import Transformer
from watson_nlp.toolkit.classification_utils.train_util import prepare_stream_of_train_records
from watson_nlp import data_model as dm

training_data_file = "train_data.json"

# Create datastream from training data
train_data_stream = dm.DataStream.from_file(training_data_file)
train_record_data_stream = prepare_stream_of_train_records(train_data_stream)

# Load pre-trained slate model
pretrained_model_resource = watson_nlp.load('<pretrained Slate model>')

# Train model - note that Transformer uses Slatea by default
classification_model = Transformer.train(train_data_stream=train_record_data_stream,
                                         pretrained_model_resource=pretrained_model_resource)

Hugging Face 제공하는 모델을 사용하여 사용자 지정 트랜스포머 모델 훈련하기

Hugging Face 사전 학습된 모델을 사용하여 사용자 지정 트랜스포머 기반 모델을 학습시킬 수 있습니다.

Hugging Face 모델을 사용하려면 ' watson_nlp.blocks.classification.transformer.Transformer'의 ' train ' 메서드에서 모델 이름을 ' pretrained_model_resource ' 파라미터로 지정합니다. https://huggingface.co/models 으로 이동하여 모델 이름을 복사합니다.

변환기 훈련을 구성하는 데 사용 가능한 모든 옵션 목록을 가져오려면 다음 코드를 입력하십시오.

help(watson_nlp.blocks.classification.transformer.Transformer.train)

변환기 알고리즘을 훈련시키는 방법에 대한 정보는 다음 코드 예제를 참조하십시오.

import watson_nlp
from watson_nlp.blocks.classification.transformer import Transformer
from watson_nlp.toolkit.classification_utils.train_util import prepare_stream_of_train_records
from watson_nlp import data_model as dm

training_data_file = "train_data.json"

# Create datastream from training data
train_data_stream = dm.DataStream.from_file(training_data_file)
train_record_data_stream = prepare_stream_of_train_records(train_data_stream)

# Specify the name of the Hugging Face model
huggingface_model_name = 'xml-roberta-base'

# Train model
classification_model = Transformer.train(train_data_stream=train_record_data_stream,
                                         pretrained_model_resource=huggingface_model_name)

앙상블 모델 훈련

앙상블 모델은 CNN, TF-IDF를 사용하는 SVM및 USE를 사용하는 SVM의 세 가지 알고리즘에 대한 가중치가 있는 앙상블입니다. 신뢰도 점수를 사용하여 분류 예측 세트의 가중 평균을 계산합니다. 앙상블 모델은 사용하기 매우 쉽습니다.

GenericEnsemble 분류자는 사용자가 세 개의 기본 분류자 TFIDF-SVM, USE-SVM및 CNN에서 선택할 수 있도록 더 많은 유연성을 허용합니다. 50-1000자범위의 텍스트의 경우 TFIDF-SVM및 USE-SVM 분류자 조합을 사용하면 품질과 성능의 균형을 잘 유지할 수 있습니다. 일부 중간 또는 긴 문서 (500-1000+문자) 에서, 앙상블에 CNN을 추가하면 품질을 향상시키는 데 도움이 될 수 있지만 일반적으로 상당한 런타임 성능 영향 (낮은 처리량 및 증가된 모델 로드 시간) 과 함께 제공됩니다.

앙상블 훈련을 구성하는 데 사용 가능한 모든 옵션에 대해 다음을 입력하십시오.

help(watson_nlp.workflows.classification.GenericEnsemble)

앙상블 알고리즘을 훈련하려면 다음을 수행하십시오.

import watson_nlp
from watson_nlp.workflows.classification.generic_ensemble import GenericEnsemble
from watson_nlp.workflows.classification.base_classifier import GloveCNN
from watson_nlp.workflows.classification.base_classifier import TFidfSvm

training_data_file = "train_data.json"

# Syntax model
syntax_model = watson_nlp.load('syntax_izumo_en_stock')

# GloVE Embedding model
glove_embedding_model = watson_nlp.load('embedding_glove_en_stock')

# Train classifier using the manually defined base classifier and manually defined weights¶
classification_model = GenericEnsemble.train(training_data_file,
                                             syntax_model,
                                             base_classifiers_params=[
                                                TFidfSvm.TrainParams(syntax_model=syntax_model),
                                                GloveCNN.TrainParams(syntax_model=syntax_model,
                                                                     glove_embedding_model=glove_embedding_model,
                                                                    )],
                                             weights=[2,1])

즉시 사용 가능한 사전 훈련된 제외어 모델

정지 단어를 식별하기 위한 텍스트 모델은 문서 분류 앙상블 모델을 훈련하는 데 사용됩니다.

다음 표에는 사전 훈련된 검색 엔진에서 제외되는 단어 모델 및 지원되는 언어 코드가 나열되어 있습니다 (xx 는 언어 코드를 나타냄). 언어 코드 및 해당 언어 목록은 언어 코드를 참조하십시오.

지원되는 언어가 있는 사전 훈련된 제외어 모델 목록
자원 클래스 모델 이름 지원되는 언어
text text_stopwords_classification_ensemble_xx_stock ar, de, es, en, fr, it, ja, ko

우수 사례 훈련

분류 모델 훈련이 적절한 시간 내에 완료될 수 있고 다양한 성능 기준을 충족하는지 확인하기 위해 데이터의 품질 및 수량에 대한 특정 제한조건이 있습니다. 이는 아래에 나열되어 있습니다. 하드 제한사항은 없습니다. 그러나 이러한 지침을 벗어나면 모델이 훈련에 실패하거나 모델이 만족스럽지 못하게 되는 경우가 더 많습니다.

  • 데이터 양

    • 클래스 분류 모델의 가장 높은 수는 ~1200입니다.
    • 분류를 위해 데이터를 훈련하고 테스트하기에 가장 적합한 텍스트 크기는 약 3000개의 코드 포인트입니다. 그러나 더 큰 텍스트도 처리할 수 있지만 런타임 성능은 느려질 수 있습니다.
    • 예제 수와 레이블 수에 따라 훈련 시간이 증가합니다.
    • 추론 시간은 레이블의 수에 기초하여 증가할 것입니다.
  • 데이터 품질

    • 각 샘플의 크기(예: 각 훈련 샘플의 구 수)는 품질에 영향을 미칠 수 있습니다.
    • 클래스 분리는 중요합니다. 즉, 훈련(및 테스트) 데이터 간의 클래스는 오분류를 방지하기 위해 서로 시맨틱적으로 구별되어야 합니다. Watson 자연어 처리의 분류기 알고리즘은 단어 임베딩에 의존하기 때문에 너무 많은 의미 중복이 있는 텍스트 예제를 포함하는 훈련 클래스는 고품질 분류를 계산하기 쉽게 만들 수 있습니다. 클래스 간의 의미론적 유사성을 평가하기 위해 더 정교한 휴리스틱스가 존재할 수 있지만, 각 클래스의 몇 가지 예제 중 간단한 "eye test"로 시작하여 그들이 적절하게 분리되어 있는 것처럼 보이는지 여부를 구분해야 합니다.
    • 훈련에 균형 잡힌 데이터를 사용하는 것이 좋습니다. 이상적으로는 훈련 데이터의 각각의 클래스로부터 대략적으로 동일한 수의 예들이 있어야 하며, 그렇지 않으면, 분류기는 훈련 데이터에서 더 큰 표현을 갖는 클래스들로 편향될 수 있습니다.
    • 다른 클래스와 비교하여 훈련 데이터의 일부 클래스가 고도로 표시되는 상황을 방지하는 것이 가장 좋습니다.

제한사항 및 주의사항:

  • CNN 분류 블록에는 1000개의 코드 포인트의 사전 정의된 시퀀스 길이가 있습니다. 이 한계는 max_phrase_len 매개변수를 변경하여 훈련 시간에 구성할 수 있습니다. 이 매개변수의 최대 한계는 없지만 최대 구 길이를 늘리면 CPU 및 메모리 소비에 영향을 줍니다.
  • SVM 블록들은 시퀀스 길이에 이러한 제한을 갖지 않으며, 더 긴 텍스트들과 함께 사용될 수 있습니다.

새 데이터에 모델 적용

데이터 세트에서 모델을 훈련한 후 기존의 선행 학습된 블록에서 사용하는 것처럼 run() 메소드를 사용하여 새 데이터에 모델을 적용하십시오.

샘플 코드

  • 앙상블 모델의 경우:

    # run Ensemble model on new text
    ensemble_prediction = ensemble_classification_model.run("new input text")
    
  • SVM 및 CNN 모델의 경우, CNN의 경우 다음과 같습니다.

    # run Syntax model first
    syntax_result = syntax_model.run("new input text")
    # run CNN model on top of syntax result
    cnn_prediction = cnn_classification_model.run(syntax_result)
    

유스 케이스에 맞는 올바른 알고리즘 선택

유스 케이스에 가장 적합한 모델 알고리즘을 선택해야 합니다.

SVM, CNN및 Transformers중에서 선택할 때 다음을 고려하십시오.

  • Transformer 기반 Slate

    • 높은 품질이 필요하고 더 높은 컴퓨팅 자원을 사용할 수 있는 시기를 선택하십시오.
  • CNN

    • 적당한 크기의 데이터를 사용할 수 있는 경우 선택
    • 필수 언어에 대해 GloVe 임베딩을 사용할 수 있는지 여부를 선택합니다.
    • 단일 레이블과 다중 레이블 사이에 옵션이 있는 경우 선택
    • CNN의 미세 조정은 임베딩되어 있으므로 알 수 없는 용어 또는 새 도메인에 더 나은 성능을 제공할 수 있습니다.
  • SVM

    • 보다 쉽고 단순한 모델이 필요한 경우 선택
    • SVM은 가장 빠른 훈련 및 추론 시간을 가지고 있습니다.
    • 데이터 세트 크기가 작은 경우 선택

SVM을 선택하는 경우, SVM의 다양한 구현 중에서 선택할 때 다음을 고려해야 합니다.

  • SVM은 다중 레이블 분류기를 훈련합니다.
  • 클래스 수가 클수록 훈련 시간이 길어질 수 있습니다.
  • TF-IDF:
    • 데이터 세트가 작은 경우 SVM을 사용하여 TF-IDF 벡터화를 선택하십시오. 예를 들어, 적은 수의 예와 짧은 텍스트 크기(예: 더 적은 구문을 포함하는 문장)가 있습니다.
    • SVM을 갖는 TF-IDF는 분류 블록의 다른 알고리즘보다 더 빠를 수 있습니다.
    • 필수 언어의 임베딩을 사용할 수 없는 경우 TF-IDF를 선택합니다.
  • 위의 내용 대신 다음을 사용하십시오.
    • 데이터 세트에 입력 텍스트에 하나 이상의 문장이 있는 경우 SVM을 사용하여 범용 문장 인코더(USE)를 선택하십시오.
    • USE는 단어 또는 문장의 컨텍스트를 이해하는 것이 중요한 데이터 세트에서 더 잘 수행될 수 있습니다.

앙상블 모델은 여러 개의 개별(다양한) 모델을 결합하여 우수한 예측 능력을 제공합니다. 이 모델 유형에 대해 다음 키 데이터를 고려하십시오.

  • 앙상블 모델은 CNN, SVM과 TF-IDF 및 SVM과 USE를 결합합니다.
  • 가장 쉽게 사용할 수 있는 모델입니다.
  • 개별 알고리즘보다 더 나은 성능을 제공할 수 있습니다.
  • 이는 모든 종류의 데이터 세트에 대해 작동합니다. 그러나 대형 데이터 세트에 대한 훈련 시간(20000개 이상의 예)이 높을 수 있습니다.
  • 앙상블 모델을 사용하여 가중치를 설정할 수 있습니다. 이러한 가중치는 앙상블 모델이 개별 분류기의 결과를 결합하는 방법을 결정합니다. 현재 가중치 선택은 경험적 방법이며 시도 및 오류로 설정해야 합니다. 함수 자체에 제공되는 기본 가중치는 탐색의 좋은 시작점입니다.

상위 주제: 자신의 모델 만들기