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/pytorch/multiple_choice.ipynb
Views: 2555
객관식 문제[[multiple-choice]]
객관식 과제는 문맥과 함께 여러 개의 후보 답변이 제공되고 모델이 정답을 선택하도록 학습된다는 점을 제외하면 질의응답과 유사합니다.
진행하는 방법은 아래와 같습니다:
SWAG 데이터 세트의 'regular' 구성으로 BERT를 미세 조정하여 여러 옵션과 일부 컨텍스트가 주어졌을 때 가장 적합한 답을 선택합니다.
추론에 미세 조정된 모델을 사용합니다.
ALBERT, BERT, BigBird, CamemBERT, CANINE, ConvBERT, Data2VecText, DeBERTa-v2, DistilBERT, ELECTRA, ERNIE, ErnieM, FlauBERT, FNet, Funnel Transformer, I-BERT, Longformer, LUKE, MEGA, Megatron-BERT, MobileBERT, MPNet, Nezha, Nyströmformer, QDQBert, RemBERT, RoBERTa, RoBERTa-PreLayerNorm, RoCBert, RoFormer, SqueezeBERT, XLM, XLM-RoBERTa, XLM-RoBERTa-XL, XLNet, X-MOD, YOSO
시작하기 전에 필요한 라이브러리가 모두 설치되어 있는지 확인하세요:
모델을 업로드하고 커뮤니티와 공유할 수 있도록 허깅페이스 계정에 로그인하는 것이 좋습니다. 메시지가 표시되면 토큰을 입력하여 로그인합니다:
SWAG 데이터 세트 가져오기[[load-swag-dataset]]
먼저 🤗 Datasets 라이브러리에서 SWAG 데이터셋의 '일반' 구성을 가져옵니다:
이제 데이터를 살펴봅니다:
여기에는 많은 필드가 있는 것처럼 보이지만 실제로는 매우 간단합니다:
sent1
및sent2
: 이 필드는 문장이 어떻게 시작되는지 보여주며, 이 두 필드를 합치면시작 구절(startphrase)
필드가 됩니다.종료 구절(ending)
: 문장이 어떻게 끝날 수 있는지에 대한 가능한 종료 구절를 제시하지만 그 중 하나만 정답입니다.레이블(label)
: 올바른 문장 종료 구절을 식별합니다.
전처리[[preprocess]]
다음 단계는 문장의 시작과 네 가지 가능한 구절을 처리하기 위해 BERT 토크나이저를 불러옵니다:
생성하려는 전처리 함수는 다음과 같아야 합니다:
sent1
필드를 네 개 복사한 다음 각각을sent2
와 결합하여 문장이 시작되는 방식을 재현합니다.sent2
를 네 가지 가능한 문장 구절 각각과 결합합니다.이 두 목록을 토큰화할 수 있도록 평탄화(flatten)하고, 각 예제에 해당하는
input_ids
,attention_mask
및labels
필드를 갖도록 다차원화(unflatten) 합니다.
전체 데이터 집합에 전처리 기능을 적용하려면 🤗 Datasets map
메소드를 사용합니다. batched=True
를 설정하여 데이터 집합의 여러 요소를 한 번에 처리하면 map
함수의 속도를 높일 수 있습니다:
🤗 Transformers에는 객관식용 데이터 콜레이터가 없으므로 예제 배치를 만들려면 DataCollatorWithPadding
을 조정해야 합니다. 데이터 정렬 중에 전체 데이터 집합을 최대 길이로 패딩하는 대신 배치 중 가장 긴 길이로 문장을 동적 패딩하는 것이 더 효율적입니다.
DataCollatorForMultipleChoice
는 모든 모델 입력을 평탄화하고 패딩을 적용하며 그 결과를 결과를 다차원화합니다:
평가 하기[[evaluate]]
그리고 예측과 레이블을 compute
에 전달하여 정확도를 계산하는 함수를 만듭니다:
이제 compute_metrics
함수를 사용할 준비가 되었으며, 훈련을 설정할 때 이 함수로 돌아가게 됩니다.
훈련 하기[[train]]
Trainer
로 모델을 미세 조정하는 데 익숙하지 않다면 기본 튜토리얼 여기를 살펴보세요!
이제 모델 훈련을 시작할 준비가 되었습니다! AutoModelForMultipleChoice
로 BERT를 로드합니다:
이제 세 단계만 남았습니다:
훈련 하이퍼파라미터를
TrainingArguments
에 정의합니다. 유일한 필수 매개변수는 모델을 저장할 위치를 지정하는output_dir
입니다.push_to_hub=True
를 설정하여 이 모델을 허브에 푸시합니다(모델을 업로드하려면 허깅 페이스에 로그인해야 합니다). 각 에폭이 끝날 때마다Trainer
가 정확도를 평가하고 훈련 체크포인트를 저장합니다.모델, 데이터 세트, 토크나이저, 데이터 콜레이터,
compute_metrics
함수와 함께 훈련 인자를Trainer
에 전달합니다.train()
을 사용하여 모델을 미세 조정합니다.
훈련이 완료되면 모든 사람이 모델을 사용할 수 있도록 push_to_hub()
메소드를 사용하여 모델을 허브에 공유하세요:
추론 하기[[inference]]
이제 모델을 미세 조정했으니 추론에 사용할 수 있습니다!
텍스트와 두 개의 후보 답안을 작성합니다:
각 프롬프트와 후보 답변 쌍을 토큰화하여 PyTorch 텐서를 반환합니다. 또한 labels
을 생성해야 합니다:
입력과 레이블을 모델에 전달하고 logits
을 반환합니다:
가장 높은 확률을 가진 클래스를 가져옵니다: