Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place. Commercial Alternative to JupyterHub.
Path: blob/main/transformers_doc/ko/sequence_classification.ipynb
Views: 2542
텍스트 분류[[text-classification]]
텍스트 분류는 자연어 처리의 일종으로, 텍스트에 레이블 또는 클래스를 지정하는 작업입니다. 많은 대기업이 다양한 실용적인 응용 분야에서 텍스트 분류를 운영하고 있습니다. 가장 인기 있는 텍스트 분류 형태 중 하나는 감성 분석으로, 텍스트 시퀀스에 🙂 긍정, 🙁 부정 또는 😐 중립과 같은 레이블을 지정합니다.
이 가이드에서 학습할 내용은:
IMDb 데이터셋에서 DistilBERT를 파인 튜닝하여 영화 리뷰가 긍정적인지 부정적인지 판단합니다.
추론을 위해 파인 튜닝 모델을 사용합니다.
ALBERT, BART, BERT, BigBird, BigBird-Pegasus, BLOOM, CamemBERT, CANINE, ConvBERT, CTRL, Data2VecText, DeBERTa, DeBERTa-v2, DistilBERT, ELECTRA, ERNIE, ErnieM, ESM, FlauBERT, FNet, Funnel Transformer, GPT-Sw3, OpenAI GPT-2, GPT Neo, GPT-J, I-BERT, LayoutLM, LayoutLMv2, LayoutLMv3, LED, LiLT, LLaMA, Longformer, LUKE, MarkupLM, mBART, MEGA, Megatron-BERT, MobileBERT, MPNet, MVP, Nezha, Nyströmformer, OpenAI GPT, OPT, Perceiver, PLBart, QDQBert, Reformer, RemBERT, RoBERTa, RoBERTa-PreLayerNorm, RoCBert, RoFormer, SqueezeBERT, TAPAS, Transformer-XL, XLM, XLM-RoBERTa, XLM-RoBERTa-XL, XLNet, X-MOD, YOSO
시작하기 전에, 필요한 모든 라이브러리가 설치되어 있는지 확인하세요:
Hugging Face 계정에 로그인하여 모델을 업로드하고 커뮤니티에 공유하는 것을 권장합니다. 메시지가 표시되면, 토큰을 입력하여 로그인하세요:
IMDb 데이터셋 가져오기[[load-imdb-dataset]]
먼저 🤗 Datasets 라이브러리에서 IMDb 데이터셋을 가져옵니다:
그런 다음 예시를 살펴봅시다:
이 데이터셋에는 두 가지 필드가 있습니다:
text
: 영화 리뷰 텍스트label
:0
은 부정적인 리뷰,1
은 긍정적인 리뷰를 나타냅니다.
전처리[[preprocess]]
다음 단계는 DistilBERT 토크나이저를 가져와서 text
필드를 전처리하는 것입니다:
text
를 토큰화하고 시퀀스가 DistilBERT의 최대 입력 길이보다 길지 않도록 자르기 위한 전처리 함수를 생성하세요:
전체 데이터셋에 전처리 함수를 적용하려면, 🤗 Datasets map
함수를 사용하세요. 데이터셋의 여러 요소를 한 번에 처리하기 위해 batched=True
로 설정함으로써 데이터셋 map
를 더 빠르게 처리할 수 있습니다:
이제 DataCollatorWithPadding
를 사용하여 예제 배치를 만들어봅시다. 데이터셋 전체를 최대 길이로 패딩하는 대신, 동적 패딩을 사용하여 배치에서 가장 긴 길이에 맞게 문장을 패딩하는 것이 효율적입니다.
평가하기[[evaluate]]
훈련 중 모델의 성능을 평가하기 위해 메트릭을 포함하는 것이 유용합니다. 🤗 Evaluate 라이브러리를 사용하여 빠르게 평가 방법을 로드할 수 있습니다. 이 작업에서는 accuracy 메트릭을 가져옵니다. (메트릭을 가져오고 계산하는 방법에 대해서는 🤗 Evaluate quick tour를 참조하세요):
그런 다음 compute_metrics
함수를 만들어서 예측과 레이블을 계산하여 정확도를 계산하도록 compute
를 호출합니다:
이제 compute_metrics
함수는 준비되었고, 훈련 과정을 설정할 때 다시 살펴볼 예정입니다.
훈련[[train]]
모델을 훈련하기 전에, id2label
와 label2id
를 사용하여 예상되는 id와 레이블의 맵을 생성하세요:
Trainer
를 사용하여 모델을 파인 튜닝하는 방법에 익숙하지 않은 경우, 여기의 기본 튜토리얼을 확인하세요!
이제 모델을 훈련시킬 준비가 되었습니다! AutoModelForSequenceClassification
로 DistilBERT를 가쳐오고 예상되는 레이블 수와 레이블 매핑을 지정하세요:
이제 세 단계만 거치면 끝입니다:
TrainingArguments
에서 하이퍼파라미터를 정의하세요.output_dir
는 모델을 저장할 위치를 지정하는 유일한 파라미터입니다. 이 모델을 Hub에 업로드하기 위해push_to_hub=True
를 설정합니다. (모델을 업로드하기 위해 Hugging Face에 로그인해야합니다.) 각 에폭이 끝날 때마다,Trainer
는 정확도를 평가하고 훈련 체크포인트를 저장합니다.Trainer
에 훈련 인수와 모델, 데이터셋, 토크나이저, 데이터 수집기 및compute_metrics
함수를 전달하세요.train()
를 호출하여 모델은 파인 튜닝하세요.
Trainer
는 tokenizer
를 전달하면 기본적으로 동적 매핑을 적용합니다. 이 경우, 명시적으로 데이터 수집기를 지정할 필요가 없습니다.
훈련이 완료되면, push_to_hub()
메소드를 사용하여 모델을 Hub에 공유할 수 있습니다.
Keras를 사용하여 모델을 파인 튜닝하는 방법에 익숙하지 않은 경우, 여기의 기본 튜토리얼을 확인하세요!
그런 다음 TFAutoModelForSequenceClassification
을 사용하여 DistilBERT를 로드하고, 예상되는 레이블 수와 레이블 매핑을 로드할 수 있습니다:
prepare_tf_dataset()
을 사용하여 데이터셋을 tf.data.Dataset
형식으로 변환합니다:
compile
를 사용하여 훈련할 모델을 구성합니다:
훈련을 시작하기 전에 설정해야할 마지막 두 가지는 예측에서 정확도를 계산하고, 모델을 Hub에 업로드할 방법을 제공하는 것입니다. 모두 Keras callbacks를 사용하여 수행됩니다.
KerasMetricCallback
에 compute_metrics
를 전달하여 정확도를 높입니다.
PushToHubCallback
에서 모델과 토크나이저를 업로드할 위치를 지정합니다:
그런 다음 콜백을 함께 묶습니다:
드디어, 모델 훈련을 시작할 준비가 되었습니다! fit
에 훈련 데이터셋, 검증 데이터셋, 에폭의 수 및 콜백을 전달하여 파인 튜닝합니다:
훈련이 완료되면, 모델이 자동으로 Hub에 업로드되어 모든 사람이 사용할 수 있습니다!
텍스트 분류를 위한 모델을 파인 튜닝하는 자세한 예제는 다음 PyTorch notebook 또는 TensorFlow notebook를 참조하세요.
추론[[inference]]
좋아요, 이제 모델을 파인 튜닝했으니 추론에 사용할 수 있습니다!
추론을 수행하고자 하는 텍스트를 가져와봅시다:
파인 튜닝된 모델로 추론을 시도하는 가장 간단한 방법은 pipeline()
를 사용하는 것입니다. 모델로 감정 분석을 위한 pipeline
을 인스턴스화하고, 텍스트를 전달해보세요:
원한다면, pipeline
의 결과를 수동으로 복제할 수도 있습니다.
텍스트를 토큰화하고 PyTorch 텐서를 반환합니다.
입력을 모델에 전달하고 logits
을 반환합니다:
가장 높은 확률을 가진 클래스를 모델의 id2label
매핑을 사용하여 텍스트 레이블로 변환합니다:
텍스트를 토큰화하고 TensorFlow 텐서를 반환합니다:
입력값을 모델에 전달하고 logits
을 반환합니다:
가장 높은 확률을 가진 클래스를 모델의 id2label
매핑을 사용하여 텍스트 레이블로 변환합니다: