파이토치 허브 번역 프로젝트에 앞서 번역을 희망하는 RoBERTa 모델을 사용해 보았습니다.
What is RoBERTa?
RoBERTa 모델은 2019년 Facebook에서 발표한 Robustly Optimized BERT Pretraining Approach 논문과 함께 공개되었다. 논문의 저자는 BERT가 undertrained 되었음을 찾아냈고, 개선하기 위한 방법으로 RoBERTa를 제안했다. RoBERTa에 적용한 것은 아래와 같다.
•
Training the model longer with bigger batch, over more data
•
NSP loss 제거 (Next sentence prediction)
이유, 효과 더 알아보기
•
Longer sequence 추가
•
Dynamic Masking 적용
적용 원리 알아보기
결과적으로 BERT 보다 우월한 성능을 보였으며, 이전에 간과 되었던 설계의 중요성을 드러냈다.
Text Classification Using RoBERTa
0. 실습 개요
주어진 문장의 부정(0)과 긍정(1) 두 가지 Sentiment Classification을 수행합니다.
Huggingface의 Text Classification Tutorial과 RoBERTa Documentations를 참고하여 작성하였습니다.
학습 데이터셋 : IMDb (nternet Movie Database, Large Movie Review Dataset.)
1. Load Dataset
!pip install transformers
!pip install datasets
from datasets import load_dataset
imdb = load_dataset("imdb")
Python
2. Preprocess
from transformers import RobertaTokenizer
tokenizer = RobertaTokenizer.from_pretrained("roberta-base")
Python
def preprocess_function(examples):
return tokenizer(examples["text"], truncation=True)
tokenized_imdb = imdb.map(preprocess_function, batched=True)
Python
from transformers import DataCollatorWithPadding
data_collator = DataCollatorWithPadding(tokenizer=tokenizer)
Python
from transformers import RobertaForSequenceClassification, TrainingArguments, Trainer
model = RobertaForSequenceClassification.from_pretrained("roberta-base", num_labels=2, ignore_mismatched_sizes=True)
Python
3. Train
training_args = TrainingArguments(
output_dir="./results",
learning_rate=2e-5,
per_device_train_batch_size=16,
per_device_eval_batch_size=16,
num_train_epochs=5,
weight_decay=0.01,
)
trainer = Trainer(
model=model,
args=training_args,
train_dataset=tokenized_imdb["train"],
eval_dataset=tokenized_imdb["test"],
tokenizer=tokenizer,
data_collator=data_collator,
)
trainer.train()
Python
4. Evaluate & Visualize
trainer.evaluate()
Python
!pip install transformers_interpret
from transformers_interpret import SequenceClassificationExplainer
cls_explainer = SequenceClassificationExplainer(
model,
tokenizer)
word_attributions = cls_explainer(imdb["test"][0]["text"])
cls_explainer.visualize()
Python
True Label과 Predicted가 일치한다.
Review
본래에는 파이토치 허브 RoBERTa 문서에 소개된 내용을 실습하려 했으나,
해결되지 않는 이슈로 실패했다. 때문에 파이토치 허브 사용을 한 차례 미루게 되어 아쉽다.
특히, RoBERTa가 긴 문장에 취약한 BERT의 단점을 보완한 모델인만큼
긴 문장을 처리하는 작업에서 두 모델의 성능을 비교 해보는 것도 좋겠다.
동일 조건에서 학습 시간이 BERT보다 오래 걸리는 듯? ⇒ 확인 필요
각 셀의 출력을 포함하면 글이 난잡해져서 뺐는데 함께 볼 수 있는 방법을 찾아봐야겠다.